diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/OracleFactory.png b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/OracleFactory.png new file mode 100644 index 00000000..e383aefb Binary files /dev/null and b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/OracleFactory.png differ diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/asset-manifest.json b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/asset-manifest.json new file mode 100644 index 00000000..46cb6576 --- /dev/null +++ b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/asset-manifest.json @@ -0,0 +1,25 @@ +{ + "files": { + "main.css": "/train-pronostics-ui/static/css/main.060aeaaf.chunk.css", + "main.js": "/train-pronostics-ui/static/js/main.5d0752e9.chunk.js", + "main.js.map": "/train-pronostics-ui/static/js/main.5d0752e9.chunk.js.map", + "runtime-main.js": "/train-pronostics-ui/static/js/runtime-main.3062e5ad.js", + "runtime-main.js.map": "/train-pronostics-ui/static/js/runtime-main.3062e5ad.js.map", + "static/css/2.cd26dbc7.chunk.css": "/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css", + "static/js/2.4b3225bc.chunk.js": "/train-pronostics-ui/static/js/2.4b3225bc.chunk.js", + "static/js/2.4b3225bc.chunk.js.map": "/train-pronostics-ui/static/js/2.4b3225bc.chunk.js.map", + "index.html": "/train-pronostics-ui/index.html", + "precache-manifest.2f0922962c27f6533c0f2ac894fd0542.js": "/train-pronostics-ui/precache-manifest.2f0922962c27f6533c0f2ac894fd0542.js", + "service-worker.js": "/train-pronostics-ui/service-worker.js", + "static/css/2.cd26dbc7.chunk.css.map": "/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css.map", + "static/css/main.060aeaaf.chunk.css.map": "/train-pronostics-ui/static/css/main.060aeaaf.chunk.css.map", + "static/js/2.4b3225bc.chunk.js.LICENSE.txt": "/train-pronostics-ui/static/js/2.4b3225bc.chunk.js.LICENSE.txt" + }, + "entrypoints": [ + "static/js/runtime-main.3062e5ad.js", + "static/css/2.cd26dbc7.chunk.css", + "static/js/2.4b3225bc.chunk.js", + "static/css/main.060aeaaf.chunk.css", + "static/js/main.5d0752e9.chunk.js" + ] +} \ No newline at end of file diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/dark-theme.css b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/dark-theme.css new file mode 100644 index 00000000..3933bf7f --- /dev/null +++ b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/dark-theme.css @@ -0,0 +1 @@ +@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}@keyframes antMoveDownIn{0%{transform:translateY(100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveDownOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveLeftIn{0%{transform:translateX(-100%);transform-origin:0 0;opacity:0}to{transform:translateX(0);transform-origin:0 0;opacity:1}}@keyframes antMoveLeftOut{0%{transform:translateX(0);transform-origin:0 0;opacity:1}to{transform:translateX(-100%);transform-origin:0 0;opacity:0}}@keyframes antMoveRightIn{0%{transform:translateX(100%);transform-origin:0 0;opacity:0}to{transform:translateX(0);transform-origin:0 0;opacity:1}}@keyframes antMoveRightOut{0%{transform:translateX(0);transform-origin:0 0;opacity:1}to{transform:translateX(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveUpIn{0%{transform:translateY(-100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveUpOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(-100%);transform-origin:0 0;opacity:0}}@keyframes loadingCircle{to{transform:rotate(360deg)}}@keyframes waveEffect{to{box-shadow:0 0 0 #ffd90f;box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes fadeEffect{to{opacity:0}}@keyframes antSlideUpIn{0%{transform:scaleY(.8);transform-origin:0 0;opacity:0}to{transform:scaleY(1);transform-origin:0 0;opacity:1}}@keyframes antSlideUpOut{0%{transform:scaleY(1);transform-origin:0 0;opacity:1}to{transform:scaleY(.8);transform-origin:0 0;opacity:0}}@keyframes antSlideDownIn{0%{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}to{transform:scaleY(1);transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownOut{0%{transform:scaleY(1);transform-origin:100% 100%;opacity:1}to{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}}@keyframes antSlideLeftIn{0%{transform:scaleX(.8);transform-origin:0 0;opacity:0}to{transform:scaleX(1);transform-origin:0 0;opacity:1}}@keyframes antSlideLeftOut{0%{transform:scaleX(1);transform-origin:0 0;opacity:1}to{transform:scaleX(.8);transform-origin:0 0;opacity:0}}@keyframes antSlideRightIn{0%{transform:scaleX(.8);transform-origin:100% 0;opacity:0}to{transform:scaleX(1);transform-origin:100% 0;opacity:1}}@keyframes antSlideRightOut{0%{transform:scaleX(1);transform-origin:100% 0;opacity:1}to{transform:scaleX(.8);transform-origin:100% 0;opacity:0}}@keyframes antZoomIn{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomOut{0%{transform:scale(1)}to{transform:scale(.2);opacity:0}}@keyframes antZoomBigIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomBigOut{0%{transform:scale(1)}to{transform:scale(.8);opacity:0}}@keyframes antZoomUpIn{0%{transform:scale(.8);transform-origin:50% 0;opacity:0}to{transform:scale(1);transform-origin:50% 0}}@keyframes antZoomUpOut{0%{transform:scale(1);transform-origin:50% 0}to{transform:scale(.8);transform-origin:50% 0;opacity:0}}@keyframes antZoomLeftIn{0%{transform:scale(.8);transform-origin:0 50%;opacity:0}to{transform:scale(1);transform-origin:0 50%}}@keyframes antZoomLeftOut{0%{transform:scale(1);transform-origin:0 50%}to{transform:scale(.8);transform-origin:0 50%;opacity:0}}@keyframes antZoomRightIn{0%{transform:scale(.8);transform-origin:100% 50%;opacity:0}to{transform:scale(1);transform-origin:100% 50%}}@keyframes antZoomRightOut{0%{transform:scale(1);transform-origin:100% 50%}to{transform:scale(.8);transform-origin:100% 50%;opacity:0}}@keyframes antZoomDownIn{0%{transform:scale(.8);transform-origin:50% 100%;opacity:0}to{transform:scale(1);transform-origin:50% 100%}}@keyframes antZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{transform:scale(.8);transform-origin:50% 100%;opacity:0}}@keyframes antStatusProcessing{0%{transform:scale(.8);opacity:.5}to{transform:scale(2.4);opacity:0}}@keyframes antZoomBadgeIn{0%{transform:scale(0) translate(50%,-50%);opacity:0}to{transform:scale(1) translate(50%,-50%)}}@keyframes antZoomBadgeOut{0%{transform:scale(1) translate(50%,-50%)}to{transform:scale(0) translate(50%,-50%);opacity:0}}@keyframes antZoomBadgeInRtl{0%{transform:scale(0) translate(-50%,-50%);opacity:0}to{transform:scale(1) translate(-50%,-50%)}}@keyframes antZoomBadgeOutRtl{0%{transform:scale(1) translate(-50%,-50%)}to{transform:scale(0) translate(-50%,-50%);opacity:0}}@keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}@keyframes antdDrawerFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antShowHelpIn{0%{transform:translateY(-5px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes antShowHelpOut{to{transform:translateY(-5px);opacity:0}}@keyframes diffZoomIn1{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes diffZoomIn2{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes diffZoomIn3{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}@keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;padding-top:16px;padding-bottom:16px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}@keyframes ant-progress-active{0%{width:0;opacity:.1}20%{width:0;opacity:.5}to{width:100%;opacity:0}}@keyframes antRadioEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}@keyframes ant-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes ant-skeleton-loading-rtl{0%{background-position:0 50%}to{background-position:100% 50%}}@keyframes antSpinMove{to{opacity:1}}@keyframes antRotate{to{transform:rotate(405deg)}}@keyframes antRotateRtl{to{transform:rotate(-405deg)}}@keyframes uploadAnimateIn{0%{height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateOut{to{height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateInlineIn{0%{width:0;height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateInlineOut{to{width:0;height:0;margin:0;padding:0;opacity:0}}.ant-image-preview,.ant-modal{pointer-events:none}.ant-image-preview.zoom-appear,.ant-image-preview.zoom-enter,.ant-modal.zoom-appear,.ant-modal.zoom-enter{transform:none;opacity:0;animation-duration:.3s;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-image-preview-mask,.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:rgba(0,0,0,.45);filter:alpha(opacity=50)}.ant-image-preview-mask-hidden,.ant-modal-mask-hidden,template{display:none}.ant-image-preview-wrap,.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}[class*=ant-] input::-ms-clear,[class*=ant-] input::-ms-reveal,[class*=ant-]::-ms-clear,[class^=ant-] input::-ms-clear,[class^=ant-] input::-ms-reveal,[class^=ant-]::-ms-clear,input::-ms-clear,input::-ms-reveal{display:none}*,::after,::before,[class*=ant-],[class*=ant-] *,[class*=ant-] ::after,[class*=ant-] ::before,[class^=ant-],[class^=ant-] *,[class^=ant-] ::after,[class^=ant-] ::before{box-sizing:border-box}body,html{width:100%;height:100%}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent;--antd-wave-shadow-color:#FFD90F;--scroll-bar:0}@-ms-viewport{width:device-width}body{margin:0;color:rgba(255,255,255,.85);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-variant:tabular-nums;line-height:1.5715;background-color:#0a0f19;font-feature-settings:'tnum'}[tabindex='-1']:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:rgba(255,255,255,.85);font-weight:500}dl,ol,p,ul{margin-top:0;margin-bottom:1em}abbr[data-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote,figure{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#ffd90f;text-decoration:none;background-color:transparent;outline:0;cursor:pointer;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#a99213}a:active{color:#e7d235}a:active,a:hover{text-decoration:none;outline:0}a:focus{text-decoration:none;outline:0}a[disabled]{color:rgba(255,255,255,.3);cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-size:1em;font-family:'SFMono-Regular',Consolas,'Liberation Mono',Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(255,255,255,.45);text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}.anticon svg,output{display:inline-block}summary{display:list-item}[hidden]{display:none!important}mark{padding:.2em;background-color:#222215}::selection{color:#fff;background:#ffd90f}.clearfix::after,.clearfix::before{display:table;content:''}.clearfix::after{clear:both}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon::before{display:none}.anticon .anticon-icon{display:block}.anticon[tabindex]{cursor:pointer}.anticon-spin,.anticon-spin::before{display:inline-block;animation:loadingCircle 1s infinite linear}.fade-appear,.fade-enter,.fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.fade-appear.fade-appear-active,.fade-enter.fade-enter-active{animation-name:antFadeIn;animation-play-state:running}.fade-leave.fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none}.fade-appear,.fade-enter{opacity:0}.fade-appear,.fade-enter,.fade-leave{animation-timing-function:linear}.move-up-appear,.move-up-enter,.move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-up-appear.move-up-appear-active,.move-up-enter.move-up-enter-active{animation-name:antMoveUpIn;animation-play-state:running}.move-up-leave.move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none}.move-up-appear,.move-up-enter{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-appear,.move-down-enter,.move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-down-appear.move-down-appear-active,.move-down-enter.move-down-enter-active{animation-name:antMoveDownIn;animation-play-state:running}.move-down-leave.move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none}.move-down-appear,.move-down-enter{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-appear,.move-left-enter,.move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-left-appear.move-left-appear-active,.move-left-enter.move-left-enter-active{animation-name:antMoveLeftIn;animation-play-state:running}.move-left-leave.move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running;pointer-events:none}.move-left-appear,.move-left-enter{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-appear,.move-right-enter,.move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-right-appear.move-right-appear-active,.move-right-enter.move-right-enter-active{animation-name:antMoveRightIn;animation-play-state:running}.move-right-leave.move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running;pointer-events:none}.move-right-appear,.move-right-enter{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}[ant-click-animating-without-extra-node=true],[ant-click-animating=true]{position:relative}.ant-click-animating-node,[ant-click-animating-without-extra-node=true]::after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;box-shadow:0 0 0 0 #ffd90f;box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation-fill-mode:forwards;content:'';pointer-events:none}.slide-up-appear,.slide-up-enter,.slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-up-appear.slide-up-appear-active,.slide-up-enter.slide-up-enter-active{animation-name:antSlideUpIn;animation-play-state:running}.slide-up-leave.slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none}.slide-up-appear,.slide-up-enter{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-appear,.slide-down-enter,.slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-down-appear.slide-down-appear-active,.slide-down-enter.slide-down-enter-active{animation-name:antSlideDownIn;animation-play-state:running}.slide-down-leave.slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none}.slide-down-appear,.slide-down-enter{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-appear,.slide-left-enter,.slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-left-appear.slide-left-appear-active,.slide-left-enter.slide-left-enter-active{animation-name:antSlideLeftIn;animation-play-state:running}.slide-left-leave.slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running;pointer-events:none}.slide-left-appear,.slide-left-enter{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-appear,.slide-right-enter,.slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-right-appear.slide-right-appear-active,.slide-right-enter.slide-right-enter-active{animation-name:antSlideRightIn;animation-play-state:running}.slide-right-leave.slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running;pointer-events:none}.slide-right-appear,.slide-right-enter{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.zoom-appear,.zoom-enter,.zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-appear.zoom-appear-active,.zoom-enter.zoom-enter-active{animation-name:antZoomIn;animation-play-state:running}.zoom-leave.zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none}.zoom-appear,.zoom-enter{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-appear-prepare,.zoom-enter-prepare{transform:none}.zoom-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-appear,.zoom-big-enter,.zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-appear.zoom-big-appear-active,.zoom-big-enter.zoom-big-enter-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.zoom-big-appear,.zoom-big-enter{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-appear-prepare,.zoom-big-enter-prepare{transform:none}.zoom-big-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-appear,.zoom-big-fast-enter,.zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-fast-appear.zoom-big-fast-appear-active,.zoom-big-fast-enter.zoom-big-fast-enter-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.zoom-big-fast-appear,.zoom-big-fast-enter{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-appear-prepare,.zoom-big-fast-enter-prepare{transform:none}.zoom-big-fast-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-appear,.zoom-up-enter,.zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-up-appear.zoom-up-appear-active,.zoom-up-enter.zoom-up-enter-active{animation-name:antZoomUpIn;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running;pointer-events:none}.zoom-up-appear,.zoom-up-enter{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-appear-prepare,.zoom-up-enter-prepare{transform:none}.zoom-up-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-appear,.zoom-down-enter,.zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-down-appear.zoom-down-appear-active,.zoom-down-enter.zoom-down-enter-active{animation-name:antZoomDownIn;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running;pointer-events:none}.zoom-down-appear,.zoom-down-enter{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-appear-prepare,.zoom-down-enter-prepare{transform:none}.zoom-down-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-appear,.zoom-left-enter,.zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-left-appear.zoom-left-appear-active,.zoom-left-enter.zoom-left-enter-active{animation-name:antZoomLeftIn;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running;pointer-events:none}.zoom-left-appear,.zoom-left-enter{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-appear-prepare,.zoom-left-enter-prepare{transform:none}.zoom-left-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-appear,.zoom-right-enter,.zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-right-appear.zoom-right-appear-active,.zoom-right-enter.zoom-right-enter-active{animation-name:antZoomRightIn;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running;pointer-events:none}.zoom-right-appear,.zoom-right-enter{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-appear-prepare,.zoom-right-enter-prepare{transform:none}.zoom-right-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse,.ant-motion-collapse-legacy-active{transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden}.ant-affix{position:fixed;z-index:10}.ant-alert{box-sizing:border-box;margin:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;padding:8px 15px 8px 37px;word-wrap:break-word;border-radius:4px}.ant-alert.ant-alert-no-icon{padding:8px 15px}.ant-alert.ant-alert-no-icon .ant-alert-close-icon{top:12.0005px}.ant-alert.ant-alert-closable{padding-right:30px}.ant-alert-icon{position:absolute;top:12.0005px;left:16px}.ant-alert-description{display:none;font-size:14px;line-height:22px}.ant-alert-success{background-color:#0e1f16;border:1px solid #204519}.ant-alert-success .ant-alert-icon{color:#47a91a}.ant-alert-info{background-color:#232215;border:1px solid #544c16}.ant-alert-info .ant-alert-icon{color:#ffd90f}.ant-alert-warning{background-color:#221c15;border:1px solid #523e18}.ant-alert-warning .ant-alert-icon{color:#d69515}.ant-alert-error{background-color:#220e19;border:1px solid #51151f}.ant-alert-error .ant-alert-icon{color:#a31b26}.ant-alert-error .ant-alert-description>pre{margin:0;padding:0}.ant-alert-close-icon{position:absolute;top:12.0005px;right:16px;padding:0;overflow:hidden;font-size:12px;line-height:12px;background-color:transparent;border:0;outline:0;cursor:pointer}.ant-alert-close-icon .anticon-close,.ant-alert-close-text{color:rgba(255,255,255,.45);transition:color .3s}.ant-alert-close-icon .anticon-close:hover,.ant-alert-close-text:hover{color:rgba(255,255,255,.75)}.ant-alert-with-description{position:relative;padding:15px 15px 15px 63px;color:rgba(255,255,255,.85);line-height:1.5715;border-radius:4px}.ant-alert-with-description.ant-alert-no-icon{padding:15px}.ant-alert-with-description .ant-alert-icon{position:absolute;top:15px;left:24px;font-size:24px}.ant-alert-with-description .ant-alert-close-icon{position:absolute;top:16px;right:16px;font-size:14px;cursor:pointer}.ant-alert-with-description .ant-alert-message{display:block;margin-bottom:4px;color:rgba(255,255,255,.85);font-size:16px}.ant-alert-message{color:rgba(255,255,255,.85)}.ant-alert-with-description .ant-alert-description,.ant-btn.ant-btn-loading::before,.ant-carousel .slick-slide img{display:block}.ant-alert.ant-alert-motion-leave{overflow:hidden;opacity:1;transition:max-height .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86),padding-top .3s cubic-bezier(.78,.14,.15,.86),padding-bottom .3s cubic-bezier(.78,.14,.15,.86),margin-bottom .3s cubic-bezier(.78,.14,.15,.86)}.ant-alert.ant-alert-motion-leave-active{max-height:0;margin-bottom:0!important;padding-top:0;padding-bottom:0;opacity:0}.ant-alert-banner{margin-bottom:0;border:0;border-radius:0}.ant-alert.ant-alert-rtl{padding:8px 37px 8px 15px;direction:rtl}.ant-alert-rtl.ant-alert.ant-alert-no-icon{padding:8px 15px}.ant-alert.ant-alert-rtl.ant-alert.ant-alert-closable{padding-right:37px;padding-left:30px}.ant-alert.ant-alert-rtl.ant-alert.ant-alert-no-icon.ant-alert-closable{padding-right:15px;padding-left:30px}.ant-alert-rtl .ant-alert-icon{right:16px;left:auto}.ant-alert-rtl .ant-alert-close-icon{right:auto;left:16px}.ant-alert.ant-alert-rtl.ant-alert-with-description,.ant-alert.ant-alert-rtl.ant-alert-with-description.ant-alert-closable{padding:15px 63px 15px 15px}.ant-alert.ant-alert-rtl.ant-alert-with-description.ant-alert-no-icon{padding:15px}.ant-alert-rtl.ant-alert-with-description .ant-alert-icon{right:24px;left:auto}.ant-alert-rtl.ant-alert-with-description .ant-alert-close-icon{right:auto;left:16px}.ant-anchor{box-sizing:border-box;margin:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;padding:0 0 0 2px}.ant-anchor-wrapper{margin-left:-4px;padding-left:4px;overflow:auto;background-color:#0a0f19}.ant-anchor-ink{position:absolute;top:0;left:0;height:100%}.ant-anchor-ink::before{position:relative;display:block;width:2px;height:100%;margin:0 auto;background-color:#424242;content:' '}.ant-anchor-ink-ball{position:absolute;left:50%;display:none;width:8px;height:8px;background-color:#0a0f19;border:2px solid #ffd90f;border-radius:8px;transform:translateX(-50%);transition:top .3s ease-in-out}.ant-anchor-ink-ball.visible{display:inline-block}.ant-anchor.fixed .ant-anchor-ink .ant-anchor-ink-ball{display:none}.ant-anchor-link{padding:7px 0 7px 16px;line-height:1.143}.ant-anchor-link-title{position:relative;display:block;margin-bottom:6px;overflow:hidden;color:rgba(255,255,255,.85);white-space:nowrap;text-overflow:ellipsis;transition:all .3s}.ant-anchor-link-title:only-child{margin-bottom:0}.ant-anchor-link-active>.ant-anchor-link-title{color:#ffd90f}.ant-anchor-link .ant-anchor-link{padding-top:5px;padding-bottom:5px}.ant-anchor-rtl{direction:rtl}.ant-anchor-rtl.ant-anchor-wrapper{margin-right:-4px;margin-left:0;padding-right:4px;padding-left:0}.ant-anchor-rtl .ant-anchor-ink{right:0;left:auto}.ant-anchor-rtl .ant-anchor-ink-ball{right:50%;left:0;transform:translateX(50%)}.ant-anchor-rtl .ant-anchor-link{padding:7px 16px 7px 0}.ant-avatar,.ant-select-auto-complete{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum'}.ant-select-auto-complete .ant-select-clear{right:13px}.ant-avatar{position:relative;display:inline-block;overflow:hidden;color:#fff;white-space:nowrap;text-align:center;vertical-align:middle;background:rgba(255,255,255,.3);width:32px;height:32px;line-height:32px;border-radius:50%}.ant-avatar-image{background:0 0}.ant-avatar-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar.ant-avatar-icon{font-size:18px}.ant-avatar-lg.ant-avatar-icon>.anticon,.ant-avatar-sm.ant-avatar-icon>.anticon,.ant-avatar.ant-avatar-icon>.anticon,.ant-card-loading-content p{margin:0}.ant-avatar-lg{width:40px;height:40px;line-height:40px;border-radius:50%}.ant-avatar-lg-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar-lg.ant-avatar-icon{font-size:24px}.ant-avatar-sm{width:24px;height:24px;line-height:24px;border-radius:50%}.ant-avatar-sm-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar-sm.ant-avatar-icon{font-size:14px}.ant-avatar-square{border-radius:4px}.ant-avatar>img{display:block;width:100%;height:100%;object-fit:cover}.ant-avatar-group{display:inline-flex}.ant-avatar-group .ant-avatar{border:1px solid #fff}.ant-avatar-group .ant-avatar:not(:first-child){margin-left:-8px}.ant-avatar-group-popover .ant-avatar+.ant-avatar{margin-left:3px}.ant-avatar-group-rtl .ant-avatar:not(:first-child){margin-right:-8px;margin-left:0}.ant-avatar-group-popover.ant-popover-rtl .ant-avatar+.ant-avatar{margin-right:3px;margin-left:0}.ant-back-top{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:fixed;right:100px;bottom:50px;z-index:10;width:40px;height:40px;cursor:pointer}.ant-back-top:empty{display:none}.ant-back-top-rtl{right:auto;left:100px;direction:rtl}.ant-back-top-content{width:40px;height:40px;overflow:hidden;color:#fff;text-align:center;background-color:rgba(255,255,255,.45);border-radius:20px;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-back-top-content:hover{background-color:rgba(255,255,255,.85);transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-back-top-icon{font-size:24px;line-height:40px}@media screen and (max-width:768px){.ant-back-top{right:60px}}@media screen and (max-width:480px){.ant-back-top{right:20px}}.ant-badge{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';position:relative;display:inline-block;color:unset;line-height:1}.ant-badge-count{z-index:auto;min-width:20px;height:20px;padding:0 6px;color:#fff;font-weight:400;font-size:12px;line-height:20px;white-space:nowrap;text-align:center;background:#a31b26;border-radius:10px;box-shadow:0 0 0 1px #0a0f19}.ant-badge-count a,.ant-badge-count a:hover{color:#fff}.ant-badge-count-sm{min-width:14px;height:14px;padding:0;font-size:12px;line-height:14px;border-radius:7px}.ant-badge-multiple-words{padding:0 8px}.ant-badge-dot{z-index:auto;width:6px;height:6px;background:#a31b26;border-radius:100%;box-shadow:0 0 0 1px #0a0f19}.ant-badge .ant-scroll-number-custom-component,.ant-badge-count,.ant-badge-dot{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0}.ant-badge-status{line-height:inherit;vertical-align:baseline}.ant-badge-status-dot{position:relative;top:-1px;display:inline-block;width:6px;height:6px;vertical-align:middle;border-radius:50%}.ant-badge-status-success{background-color:#47a91a}.ant-badge-status-processing{position:relative;background-color:#167ddd}.ant-badge-status-processing::after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #167ddd;border-radius:50%;animation:antStatusProcessing 1.2s infinite ease-in-out;content:''}.ant-badge-status-default{background-color:#d9d9d9}.ant-badge-status-error{background-color:#a31b26}.ant-badge-status-warning{background-color:#d69515}.ant-badge-status-magenta,.ant-badge-status-pink{background:#c92a83}.ant-badge-status-red{background:#d21f2a}.ant-badge-status-volcano{background:#d64a1c}.ant-badge-status-orange{background:#d67916}.ant-badge-status-yellow{background:#d6bc15}.ant-badge-status-gold{background:#d69515}.ant-badge-status-cyan{background:#12a7a9}.ant-badge-status-lime{background:#8abb12}.ant-badge-status-green{background:#47a91a}.ant-badge-status-blue{background:#167ddd}.ant-badge-status-geekblue{background:#294acc}.ant-badge-status-purple{background:#6229b5}.ant-badge-status-text{margin-left:8px;color:rgba(255,255,255,.85);font-size:14px}.ant-badge-zoom-appear,.ant-badge-zoom-enter,.ant-badge-zoom-leave{animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);animation-fill-mode:both}.ant-badge-zoom-leave{animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6)}.ant-badge-not-a-wrapper:not(.ant-badge-status){vertical-align:middle}.ant-badge-not-a-wrapper .ant-scroll-number{position:relative;top:auto;display:block}.ant-scroll-number{overflow:hidden}.ant-scroll-number-only{display:inline-block;height:20px;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-scroll-number-only>p.ant-scroll-number-only-unit{height:20px;margin:0}.ant-scroll-number-symbol{vertical-align:top}.ant-ribbon-wrapper{position:relative}.ant-ribbon{box-sizing:border-box;margin:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';position:absolute;top:8px;height:22px;padding:0 8px;color:#fff;line-height:22px;white-space:nowrap;background-color:#ffd90f;border-radius:4px}.ant-ribbon-corner{position:absolute;top:100%;width:8px;height:8px;color:#ffd90f;border:4px solid;transform:scaleY(.75);transform-origin:top}.ant-ribbon-corner::after{position:absolute;top:-4px;left:-4px;width:inherit;height:inherit;color:rgba(0,0,0,.25);border:inherit;content:''}.ant-ribbon-color-magenta,.ant-ribbon-color-pink{background-color:#c92a83}.ant-ribbon-color-magenta .ant-ribbon-corner,.ant-ribbon-color-pink .ant-ribbon-corner{color:#c92a83}.ant-ribbon-color-red{background-color:#d21f2a}.ant-ribbon-color-red .ant-ribbon-corner{color:#d21f2a}.ant-ribbon-color-volcano{background-color:#d64a1c}.ant-ribbon-color-volcano .ant-ribbon-corner{color:#d64a1c}.ant-ribbon-color-orange{background-color:#d67916}.ant-ribbon-color-orange .ant-ribbon-corner{color:#d67916}.ant-ribbon-color-yellow{background-color:#d6bc15}.ant-ribbon-color-yellow .ant-ribbon-corner{color:#d6bc15}.ant-ribbon-color-gold{background-color:#d69515}.ant-ribbon-color-gold .ant-ribbon-corner{color:#d69515}.ant-ribbon-color-cyan{background-color:#12a7a9}.ant-ribbon-color-cyan .ant-ribbon-corner{color:#12a7a9}.ant-ribbon-color-lime{background-color:#8abb12}.ant-ribbon-color-lime .ant-ribbon-corner{color:#8abb12}.ant-ribbon-color-green{background-color:#47a91a}.ant-ribbon-color-green .ant-ribbon-corner{color:#47a91a}.ant-ribbon-color-blue{background-color:#167ddd}.ant-ribbon-color-blue .ant-ribbon-corner{color:#167ddd}.ant-ribbon-color-geekblue{background-color:#294acc}.ant-ribbon-color-geekblue .ant-ribbon-corner{color:#294acc}.ant-ribbon-color-purple{background-color:#6229b5}.ant-ribbon-color-purple .ant-ribbon-corner{color:#6229b5}.ant-ribbon.ant-ribbon-placement-end{right:-8px;border-bottom-right-radius:0}.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner{right:0}.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner,.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner::after{border-color:currentColor transparent transparent currentColor}.ant-ribbon.ant-ribbon-placement-start{left:-8px;border-bottom-left-radius:0}.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner{left:0}.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner::after,.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner,.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner::after{border-color:currentColor currentColor transparent transparent}.ant-badge-rtl,.ant-ribbon-rtl{direction:rtl}.ant-badge-rtl .ant-badge .ant-scroll-number-custom-component,.ant-badge-rtl .ant-badge-count,.ant-badge-rtl .ant-badge-dot{right:auto;left:0;direction:ltr;transform:translate(-50%,-50%);transform-origin:0 0}.ant-badge-rtl.ant-badge .ant-scroll-number-custom-component{right:auto;left:0;transform:translate(-50%,-50%);transform-origin:0 0}.ant-badge-rtl .ant-badge-status-text{margin-right:8px;margin-left:0}.ant-badge-rtl .ant-badge-zoom-appear,.ant-badge-rtl .ant-badge-zoom-enter{animation-name:antZoomBadgeInRtl}.ant-badge-rtl .ant-badge-zoom-leave{animation-name:antZoomBadgeOutRtl}.ant-badge-not-a-wrapper .ant-badge-count{transform:none}.ant-ribbon-rtl.ant-ribbon-placement-end{right:unset;left:-8px;border-bottom-right-radius:4px;border-bottom-left-radius:0}.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner{right:unset;left:0;border-color:currentColor currentColor transparent transparent}.ant-ribbon-rtl.ant-ribbon-placement-start{right:-8px;left:unset;border-bottom-right-radius:0;border-bottom-left-radius:4px}.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner{right:0;left:unset}.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner,.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner::after{border-color:currentColor transparent transparent currentColor}.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';color:rgba(255,255,255,.45);font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:rgba(255,255,255,.45);transition:color .3s}.ant-breadcrumb a:hover{color:#a99213}.ant-breadcrumb>span:last-child,.ant-breadcrumb>span:last-child a{color:rgba(255,255,255,.85)}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:rgba(255,255,255,.45)}.ant-breadcrumb-link>.anticon+a,.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl::before{display:table;content:''}.ant-breadcrumb-rtl::after{display:table;clear:both;content:''}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.ant-btn{line-height:1.5715;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;box-shadow:0 2px 0 rgba(0,0,0,.015);cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-ms-user-select:none;user-select:none;touch-action:manipulation;height:32px;padding:4px 15px;font-size:14px;border-radius:4px;color:rgba(255,255,255,.85);background:0 0;border-color:#6f6c6c}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;box-shadow:none}.ant-btn[disabled]{cursor:not-allowed}.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg,.ant-btn-sm{height:40px;padding:6.4px 15px;font-size:16px;border-radius:4px}.ant-btn-sm{height:24px;padding:0 7px;font-size:14px}.ant-btn>a:only-child{color:currentColor}.ant-btn>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn:focus,.ant-btn:hover{color:#a99213;border-color:#a99213}.ant-btn:focus>a:only-child,.ant-btn:hover>a:only-child{color:currentColor}.ant-btn:focus>a:only-child::after,.ant-btn:hover>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn:active{color:#e7d235;background:0 0;border-color:#e7d235}.ant-btn-primary>a:only-child,.ant-btn:active>a:only-child{color:currentColor}.ant-btn-primary>a:only-child::after,.ant-btn:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn[disabled],.ant-btn[disabled]:active,.ant-btn[disabled]:focus,.ant-btn[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-primary:focus>a:only-child,.ant-btn-primary:hover>a:only-child,.ant-btn[disabled]:active>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]>a:only-child{color:currentColor}.ant-btn-primary:focus>a:only-child::after,.ant-btn-primary:hover>a:only-child::after,.ant-btn[disabled]:active>a:only-child::after,.ant-btn[disabled]:focus>a:only-child::after,.ant-btn[disabled]:hover>a:only-child::after,.ant-btn[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn:active,.ant-btn:focus,.ant-btn:hover{text-decoration:none;background:0 0}.ant-btn>span,.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{display:inline-block}.ant-btn-primary{color:#fff;background:#ffd90f;border-color:#ffd90f;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-primary:focus,.ant-btn-primary:hover{color:#fff;background:#d9b102;border-color:#d9b102}.ant-btn-primary:active{color:#fff;background:#ffe838;border-color:#ffe838}.ant-btn-ghost>a:only-child,.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-ghost>a:only-child::after,.ant-btn-primary:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-primary[disabled],.ant-btn-primary[disabled]:active,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-ghost:focus>a:only-child,.ant-btn-ghost:hover>a:only-child,.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-ghost:focus>a:only-child::after,.ant-btn-ghost:hover>a:only-child::after,.ant-btn-primary[disabled]:active>a:only-child::after,.ant-btn-primary[disabled]:focus>a:only-child::after,.ant-btn-primary[disabled]:hover>a:only-child::after,.ant-btn-primary[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#a99213;border-left-color:#a99213}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#6f6c6c}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#a99213}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#6f6c6c}.ant-btn-group .ant-btn-primary+.ant-btn-primary,.ant-btn-group .ant-btn-primary:last-child:not(:first-child){border-left-color:#a99213}.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled],.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled]{border-left-color:#6f6c6c}.ant-btn-ghost{color:rgba(255,255,255,.85);background:0 0;border-color:#6f6c6c}.ant-btn-ghost:focus,.ant-btn-ghost:hover{color:#a99213;background:0 0;border-color:#a99213}.ant-btn-ghost:active{color:#e7d235;background:0 0;border-color:#e7d235}.ant-btn-dashed>a:only-child,.ant-btn-ghost:active>a:only-child{color:currentColor}.ant-btn-dashed>a:only-child::after,.ant-btn-ghost:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-ghost[disabled],.ant-btn-ghost[disabled]:active,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-dashed:focus>a:only-child,.ant-btn-dashed:hover>a:only-child,.ant-btn-ghost[disabled]:active>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]>a:only-child{color:currentColor}.ant-btn-dashed:focus>a:only-child::after,.ant-btn-dashed:hover>a:only-child::after,.ant-btn-ghost[disabled]:active>a:only-child::after,.ant-btn-ghost[disabled]:focus>a:only-child::after,.ant-btn-ghost[disabled]:hover>a:only-child::after,.ant-btn-ghost[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dashed{color:rgba(255,255,255,.85);background:0 0;border-color:#6f6c6c;border-style:dashed}.ant-btn-dashed:focus,.ant-btn-dashed:hover{color:#a99213;background:0 0;border-color:#a99213}.ant-btn-dashed:active{color:#e7d235;background:0 0;border-color:#e7d235}.ant-btn-danger>a:only-child,.ant-btn-dashed:active>a:only-child{color:currentColor}.ant-btn-danger>a:only-child::after,.ant-btn-dashed:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dashed[disabled],.ant-btn-dashed[disabled]:active,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-danger:focus>a:only-child,.ant-btn-danger:hover>a:only-child,.ant-btn-dashed[disabled]:active>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]>a:only-child{color:currentColor}.ant-btn-danger:focus>a:only-child::after,.ant-btn-danger:hover>a:only-child::after,.ant-btn-dashed[disabled]:active>a:only-child::after,.ant-btn-dashed[disabled]:focus>a:only-child::after,.ant-btn-dashed[disabled]:hover>a:only-child::after,.ant-btn-dashed[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-danger{color:#fff;background:#a31b26;border-color:#a31b26;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-danger:focus,.ant-btn-danger:hover{color:#fff;background:#7d0f1c;border-color:#7d0f1c}.ant-btn-danger:active{color:#fff;background:#b03a40;border-color:#b03a40}.ant-btn-danger:active>a:only-child,.ant-btn-link>a:only-child{color:currentColor}.ant-btn-danger:active>a:only-child::after,.ant-btn-link>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-danger[disabled],.ant-btn-danger[disabled]:active,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]>a:only-child,.ant-btn-link:focus>a:only-child,.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-danger[disabled]:active>a:only-child::after,.ant-btn-danger[disabled]:focus>a:only-child::after,.ant-btn-danger[disabled]:hover>a:only-child::after,.ant-btn-danger[disabled]>a:only-child::after,.ant-btn-link:focus>a:only-child::after,.ant-btn-link:hover>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-link{color:#ffd90f;background:0 0;border-color:transparent;box-shadow:none}.ant-btn-link:focus,.ant-btn-link:hover{color:#a99213;background:0 0}.ant-btn-link:active{color:#e7d235;background:0 0;border-color:#e7d235}.ant-btn-link:active>a:only-child,.ant-btn-text>a:only-child{color:currentColor}.ant-btn-link:active>a:only-child::after,.ant-btn-text>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-link[disabled],.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{background:rgba(255,255,255,.08)}.ant-btn-link[disabled]:active>a:only-child,.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-link[disabled]:active>a:only-child::after,.ant-btn-link[disabled]:focus>a:only-child::after,.ant-btn-link[disabled]:hover>a:only-child::after,.ant-btn-link[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-link:hover{background:0 0}.ant-btn-link:active,.ant-btn-link:focus,.ant-btn-link:hover{border-color:transparent}.ant-btn-link[disabled],.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{color:rgba(255,255,255,.3);background:0 0;border-color:transparent;text-shadow:none;box-shadow:none}.ant-btn-text{color:rgba(255,255,255,.85);background:0 0;border-color:transparent;box-shadow:none}.ant-btn-text:focus,.ant-btn-text:hover{color:#a99213;background:0 0}.ant-btn-text:focus>a:only-child,.ant-btn-text:hover>a:only-child{color:currentColor}.ant-btn-text:focus>a:only-child::after,.ant-btn-text:hover>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-text:active{color:#e7d235;background:0 0}.ant-btn-dangerous>a:only-child,.ant-btn-text:active>a:only-child{color:currentColor}.ant-btn-dangerous>a:only-child::after,.ant-btn-text:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-text[disabled],.ant-btn-text[disabled]:active,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:hover{background:rgba(255,255,255,.08)}.ant-btn-text[disabled]:active>a:only-child,.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-text[disabled]>a:only-child{color:currentColor}.ant-btn-text[disabled]:active>a:only-child::after,.ant-btn-text[disabled]:focus>a:only-child::after,.ant-btn-text[disabled]:hover>a:only-child::after,.ant-btn-text[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-text:focus,.ant-btn-text:hover{color:rgba(255,255,255,.85);background:rgba(255,255,255,.03);border-color:transparent}.ant-btn-text:active{color:rgba(255,255,255,.85);background:rgba(255,255,255,.04);border-color:transparent}.ant-btn-text[disabled],.ant-btn-text[disabled]:active,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:hover{color:rgba(255,255,255,.3);background:0 0;border-color:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous{color:#a31b26;background:0 0;border-color:#a31b26}.ant-btn-dangerous:focus,.ant-btn-dangerous:hover{color:#7d0f1c;background:0 0;border-color:#7d0f1c}.ant-btn-dangerous:focus>a:only-child,.ant-btn-dangerous:hover>a:only-child{color:currentColor}.ant-btn-dangerous:focus>a:only-child::after,.ant-btn-dangerous:hover>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous:active{color:#b03a40;background:0 0;border-color:#b03a40}.ant-btn-dangerous:active>a:only-child{color:currentColor}.ant-btn-dangerous:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous[disabled],.ant-btn-dangerous[disabled]:active,.ant-btn-dangerous[disabled]:focus,.ant-btn-dangerous[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-primary:focus>a:only-child,.ant-btn-dangerous.ant-btn-primary:hover>a:only-child,.ant-btn-dangerous[disabled]:active>a:only-child,.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-dangerous[disabled]>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-primary:focus>a:only-child::after,.ant-btn-dangerous.ant-btn-primary:hover>a:only-child::after,.ant-btn-dangerous[disabled]:active>a:only-child::after,.ant-btn-dangerous[disabled]:focus>a:only-child::after,.ant-btn-dangerous[disabled]:hover>a:only-child::after,.ant-btn-dangerous[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous.ant-btn-primary{color:#fff;background:#a31b26;border-color:#a31b26;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-dangerous.ant-btn-link>a:only-child,.ant-btn-dangerous.ant-btn-primary:active>a:only-child,.ant-btn-dangerous.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-link>a:only-child::after,.ant-btn-dangerous.ant-btn-primary:active>a:only-child::after,.ant-btn-dangerous.ant-btn-primary>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous.ant-btn-primary:focus,.ant-btn-dangerous.ant-btn-primary:hover{color:#fff;background:#7d0f1c;border-color:#7d0f1c}.ant-btn-dangerous.ant-btn-primary:active{color:#fff;background:#b03a40;border-color:#b03a40}.ant-btn-dangerous.ant-btn-primary[disabled],.ant-btn-dangerous.ant-btn-primary[disabled]:active,.ant-btn-dangerous.ant-btn-primary[disabled]:focus,.ant-btn-dangerous.ant-btn-primary[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child::after,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child::after,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child::after,.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous.ant-btn-link,.ant-btn-dangerous.ant-btn-text{color:#a31b26;background:0 0;border-color:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:active,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:hover{background:rgba(255,255,255,.08)}.ant-btn-dangerous.ant-btn-link:focus>a:only-child,.ant-btn-dangerous.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-link:focus>a:only-child::after,.ant-btn-dangerous.ant-btn-link:hover>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous.ant-btn-link:focus,.ant-btn-dangerous.ant-btn-link:hover{color:#7d0f1c;background:0 0;border-color:transparent}.ant-btn-dangerous.ant-btn-link:active{color:#b03a40;background:0 0;border-color:transparent}.ant-btn-dangerous.ant-btn-link:active>a:only-child,.ant-btn-dangerous.ant-btn-text>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-link:active>a:only-child::after,.ant-btn-dangerous.ant-btn-text>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:active,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:hover{color:rgba(255,255,255,.3);background:0 0;border-color:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child::after,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child::after,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child::after,.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous.ant-btn-text:focus,.ant-btn-dangerous.ant-btn-text:hover{background:0 0}.ant-btn-dangerous.ant-btn-text:active{background:0 0}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:active,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:hover{background:rgba(255,255,255,.08)}.ant-btn-dangerous.ant-btn-text:focus>a:only-child,.ant-btn-dangerous.ant-btn-text:hover>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-text:focus>a:only-child::after,.ant-btn-dangerous.ant-btn-text:hover>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous.ant-btn-text:focus,.ant-btn-dangerous.ant-btn-text:hover{color:#7d0f1c;background:rgba(255,255,255,.03);border-color:transparent}.ant-btn-dangerous.ant-btn-text:active{color:#b03a40;background:rgba(255,255,255,.04);border-color:transparent}.ant-btn-background-ghost.ant-btn-primary>a:only-child,.ant-btn-dangerous.ant-btn-text:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary>a:only-child::after,.ant-btn-dangerous.ant-btn-text:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:active,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:hover{color:rgba(255,255,255,.3);background:0 0;border-color:transparent;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child::after,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child::after,.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child::after,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child::after,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child::after,.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-icon-only{width:32px;height:32px;padding:2.4px 0;font-size:16px;border-radius:4px;vertical-align:-1px}.ant-btn-icon-only>*{font-size:16px}.ant-btn-icon-only.ant-btn-lg{width:40px;height:40px;padding:4.9px 0;font-size:18px;border-radius:4px}.ant-btn-icon-only.ant-btn-lg>*{font-size:18px}.ant-btn-icon-only.ant-btn-sm{width:24px;height:24px;padding:0;font-size:14px;border-radius:4px}.ant-btn-icon-only.ant-btn-sm>*{font-size:14px}.ant-btn-round{height:32px;padding:4px 16px;font-size:14px;border-radius:32px}.ant-btn-round.ant-btn-lg{height:40px;padding:6.4px 20px;font-size:16px;border-radius:40px}.ant-btn-round.ant-btn-sm{height:24px;padding:0 12px;font-size:14px;border-radius:24px}.ant-btn-round.ant-btn-icon-only{width:auto}.ant-btn-circle,.ant-btn-circle-outline{min-width:32px;padding-right:0;padding-left:0;text-align:center;border-radius:50%}.ant-btn-circle-outline.ant-btn-lg,.ant-btn-circle.ant-btn-lg{min-width:40px;border-radius:50%}.ant-btn-circle-outline.ant-btn-sm,.ant-btn-circle.ant-btn-sm{min-width:24px;border-radius:50%}.ant-btn::before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:1;display:none;background:#0a0f19;border-radius:inherit;opacity:.35;transition:opacity .2s;content:'';pointer-events:none}.ant-btn .anticon{transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn .anticon.anticon-minus>svg,.ant-btn .anticon.anticon-plus>svg{shape-rendering:optimizeSpeed}.ant-btn.ant-btn-loading{position:relative}.ant-btn.ant-btn-loading:not([disabled]){pointer-events:none}.ant-btn>.ant-btn-loading-icon{transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-btn>.ant-btn-loading-icon .anticon{padding-right:8px}.ant-btn-group{display:inline-flex}.ant-btn-group,.ant-btn-group>.ant-btn,.ant-btn-group>span>.ant-btn{position:relative}.ant-btn-group>.ant-btn:active,.ant-btn-group>.ant-btn:focus,.ant-btn-group>.ant-btn:hover,.ant-btn-group>span>.ant-btn:active,.ant-btn-group>span>.ant-btn:focus,.ant-btn-group>span>.ant-btn:hover{z-index:2}.ant-btn-group>.ant-btn[disabled],.ant-btn-group>span>.ant-btn[disabled]{z-index:0}.ant-btn-group .ant-btn-icon-only{font-size:14px}.ant-btn-group-lg>.ant-btn,.ant-btn-group-lg>span>.ant-btn{height:40px;padding:6.4px 15px;font-size:16px;border-radius:0}.ant-btn-group-lg .ant-btn.ant-btn-icon-only{width:40px;height:40px;padding-right:0;padding-left:0}.ant-btn-group-sm>.ant-btn,.ant-btn-group-sm>span>.ant-btn{height:24px;padding:0 7px;font-size:14px;border-radius:0}.ant-btn-group-sm>.ant-btn>.anticon,.ant-btn-group-sm>span>.ant-btn>.anticon,.ant-form label{font-size:14px}.ant-btn-group-sm .ant-btn.ant-btn-icon-only{width:24px;height:24px;padding-right:0;padding-left:0}.ant-btn+.ant-btn-group,.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group span+.ant-btn,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group,.ant-btn-group>span+span{margin-left:-1px}.ant-btn-group .ant-btn-primary+.ant-btn:not(.ant-btn-primary):not([disabled]){border-left-color:transparent}.ant-btn-group .ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group-sm>.ant-btn:only-child,.ant-btn-group-sm>span:only-child>.ant-btn,.ant-btn-group>.ant-btn:only-child,.ant-btn-group>span:only-child>.ant-btn{border-radius:4px}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{padding-right:8px;border-top-right-radius:0;border-bottom-right-radius:0}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{padding-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.ant-btn-group-rtl.ant-btn+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group-rtl.ant-btn-group .ant-btn+span,.ant-btn-group-rtl.ant-btn-group span+.ant-btn,.ant-btn-group-rtl.ant-btn-group+.ant-btn,.ant-btn-group-rtl.ant-btn-group+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group>span+span,.ant-btn-rtl.ant-btn+.ant-btn-group,.ant-btn-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-rtl.ant-btn-group .ant-btn+span,.ant-btn-rtl.ant-btn-group span+.ant-btn,.ant-btn-rtl.ant-btn-group+.ant-btn,.ant-btn-rtl.ant-btn-group+.ant-btn-group,.ant-btn-rtl.ant-btn-group>span+span{margin-right:-1px;margin-left:auto}.ant-btn-group.ant-btn-group-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}.ant-btn-group-rtl.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px}.ant-btn:active>span,.ant-btn:focus>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn-background-ghost{color:rgba(255,255,255,.85);background:0 0!important;border-color:rgba(255,255,255,.25)}.ant-btn-background-ghost.ant-btn-primary{color:#ffd90f;background:0 0;border-color:#ffd90f;text-shadow:none}.ant-btn-background-ghost.ant-btn-primary:focus,.ant-btn-background-ghost.ant-btn-primary:hover{color:#d9b102;background:0 0;border-color:#d9b102}.ant-btn-background-ghost.ant-btn-primary:active{color:#ffe838;background:0 0;border-color:#ffe838}.ant-btn-background-ghost.ant-btn-danger>a:only-child,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger>a:only-child::after,.ant-btn-background-ghost.ant-btn-primary:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled]:active,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child::after,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child::after,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child::after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child::after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child::after,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-background-ghost.ant-btn-danger,.ant-btn-background-ghost.ant-btn-dangerous{color:#a31b26;background:0 0;border-color:#a31b26;text-shadow:none}.ant-btn-background-ghost.ant-btn-danger:focus,.ant-btn-background-ghost.ant-btn-danger:hover{color:#7d0f1c;background:0 0;border-color:#7d0f1c}.ant-btn-background-ghost.ant-btn-danger:active{color:#b03a40;background:0 0;border-color:#b03a40}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled]:active,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child::after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child::after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child::after,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-background-ghost.ant-btn-dangerous:focus,.ant-btn-background-ghost.ant-btn-dangerous:hover{color:#7d0f1c;background:0 0;border-color:#7d0f1c}.ant-btn-background-ghost.ant-btn-dangerous:active{color:#b03a40;background:0 0;border-color:#b03a40}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-background-ghost.ant-btn-dangerous[disabled],.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link{color:#a31b26;background:0 0;border-color:transparent;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover{color:#7d0f1c;background:0 0;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active{color:#b03a40;background:0 0;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child::after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;content:''}.ant-btn-two-chinese-chars::first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>:not(.anticon){margin-right:-.34em;letter-spacing:.34em}.ant-btn-block{width:100%}.ant-btn:empty{display:inline-block;width:0;visibility:hidden;content:'\a0'}a.ant-btn{padding-top:.1px;line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.ant-btn-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary,.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child){border-right-color:#a99213;border-left-color:#6f6c6c}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled],.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled]{border-right-color:#6f6c6c;border-left-color:#a99213}.ant-btn-rtl.ant-btn>.ant-btn-loading-icon .anticon,.ant-comment-rtl .ant-comment-content-author>a,.ant-comment-rtl .ant-comment-content-author>span{padding-right:0;padding-left:8px}.ant-btn>.ant-btn-loading-icon:only-child .anticon{padding-right:0;padding-left:0}.ant-btn-rtl.ant-btn>.anticon+span,.ant-btn-rtl.ant-btn>span+.anticon{margin-right:8px;margin-left:0}.ant-picker-calendar{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';background:#0a0f19}.ant-picker-calendar-header{display:flex;justify-content:flex-end;padding:12px 0}.ant-picker-calendar-header .ant-picker-calendar-year-select{min-width:80px}.ant-picker-calendar-header .ant-picker-calendar-month-select{min-width:70px;margin-left:8px}.ant-picker-calendar-header .ant-picker-calendar-mode-switch{margin-left:8px}.ant-picker-calendar .ant-picker-panel{background:#0a0f19;border:0;border-top:1px solid #424242;border-radius:0}.ant-picker-calendar .ant-picker-panel .ant-picker-date-panel,.ant-picker-calendar .ant-picker-panel .ant-picker-month-panel{width:auto}.ant-picker-calendar .ant-picker-panel .ant-picker-body{padding:8px 0}.ant-picker-calendar .ant-picker-panel .ant-picker-content{width:100%}.ant-picker-calendar-mini{border-radius:4px}.ant-picker-calendar-mini .ant-picker-calendar-header{padding-right:8px;padding-left:8px}.ant-picker-calendar-mini .ant-picker-panel{border-radius:0 0 4px 4px}.ant-picker-calendar-mini .ant-picker-content{height:256px}.ant-picker-calendar-mini .ant-picker-content th{height:auto;padding:0;line-height:18px}.ant-picker-calendar-full .ant-picker-panel{display:block;width:100%;text-align:right;background:#0a0f19;border:0}.ant-picker-calendar-full .ant-picker-panel .ant-picker-body td{padding:0}.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{height:auto;padding:0 12px 5px 0;line-height:18px}.ant-carousel .slick-slide.slick-loading img,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell .ant-picker-calendar-date-today::before,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell::before{display:none}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:hover .ant-picker-calendar-date{background:rgba(255,255,255,.08)}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today{background:#232215}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today .ant-picker-calendar-date-value{color:#ffd90f}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{display:block;width:auto;height:auto;margin:0 4px;padding:4px 8px 0;border:0;border-top:2px solid #424242;border-radius:0;transition:background .3s}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-value{line-height:24px;transition:color .3s}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content{position:static;width:auto;height:86px;overflow-y:auto;color:rgba(255,255,255,.85);line-height:1.5715;text-align:left}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today{border-color:#ffd90f}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today .ant-picker-calendar-date-value,.ant-picker-header>button:hover{color:rgba(255,255,255,.85)}@media only screen and (max-width:480px){.ant-picker-calendar-header{display:block}.ant-picker-calendar-header .ant-picker-calendar-year-select{width:50%}.ant-picker-calendar-header .ant-picker-calendar-month-select{width:calc(50% - 8px)}.ant-picker-calendar-header .ant-picker-calendar-mode-switch{width:100%;margin-top:8px;margin-left:0}.ant-picker-calendar-header .ant-picker-calendar-mode-switch>label{width:50%;text-align:center}}.ant-picker-calendar-rtl{direction:rtl}.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-mode-switch,.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-month-select{margin-right:8px;margin-left:0}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel{text-align:left}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{padding:0 0 5px 12px}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content{text-align:right}.ant-card{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;background:#0a0f19;border-radius:4px}.ant-card-rtl{direction:rtl}.ant-card-hoverable{cursor:pointer;transition:box-shadow .3s,border-color .3s}.ant-card-hoverable:hover{border-color:transparent;box-shadow:0 1px 2px -2px rgba(0,0,0,.64),0 3px 6px 0 rgba(0,0,0,.48),0 5px 12px 4px rgba(0,0,0,.36)}.ant-card-bordered{border:1px solid #424242}.ant-card-head{min-height:48px;margin-bottom:-1px;padding:0 24px;color:rgba(255,255,255,.85);font-weight:500;font-size:16px;background:0 0;border-bottom:1px solid #424242;border-radius:4px 4px 0 0}.ant-card-head::before{display:table;content:''}.ant-card-head::after{clear:both}.ant-card-head-wrapper{display:flex;align-items:center}.ant-card-head-title{display:inline-block;flex:1;padding:16px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-card-extra,.ant-card-head .ant-tabs{color:rgba(255,255,255,.85);font-weight:400;font-size:14px}.ant-card-head .ant-tabs{clear:both;margin-bottom:-17px}.ant-card-head .ant-tabs-bar{border-bottom:1px solid #424242}.ant-card-extra{float:right;margin-left:auto;padding:16px 0}.ant-card-rtl .ant-card-extra{margin-right:auto;margin-left:0}.ant-card-body{padding:24px}.ant-card-body::after,.ant-card-body::before,.ant-card-head::after{display:table;content:''}.ant-card-body::after{clear:both}.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body{margin:-1px 0 0 -1px;padding:0}.ant-card-grid{float:left;width:33.33%;padding:24px;border:0;border-radius:0;box-shadow:1px 0 0 0 #424242,0 1px 0 0 #424242,1px 1px 0 0 #424242,1px 0 0 0 #424242 inset,0 1px 0 0 #424242 inset;transition:all .3s}.ant-card-rtl .ant-card-actions>li,.ant-card-rtl .ant-card-grid{float:right}.ant-card-grid-hoverable:hover{position:relative;z-index:1;box-shadow:0 1px 2px -2px rgba(0,0,0,.64),0 3px 6px 0 rgba(0,0,0,.48),0 5px 12px 4px rgba(0,0,0,.36)}.ant-card-contain-tabs>.ant-card-head .ant-card-head-title{min-height:32px;padding-bottom:0}.ant-card-contain-tabs>.ant-card-head .ant-card-extra{padding-bottom:0}.ant-card-bordered .ant-card-cover{margin-right:-1px;margin-left:-1px;transform:translateY(-1px)}.ant-card-cover>*{display:block;width:100%}.ant-card-cover img{border-radius:4px 4px 0 0}.ant-card-actions{margin:0;padding:0;list-style:none;background:#0a0f19;border-top:1px solid #424242}.ant-card-actions::before{display:table;content:''}.ant-card-actions::after{display:table;clear:both;content:''}.ant-card-actions>li{float:left;margin:12px 0;color:rgba(255,255,255,.45);text-align:center}.ant-card-actions>li>span{position:relative;display:block;min-width:32px;font-size:14px;line-height:1.5715;cursor:pointer}.ant-card-actions>li>span:hover{color:#ffd90f;transition:color .3s}.ant-card-actions>li>span a:not(.ant-btn),.ant-card-actions>li>span>.anticon{display:inline-block;width:100%;color:rgba(255,255,255,.45);line-height:22px;transition:color .3s}.ant-card-actions>li>span a:not(.ant-btn):hover,.ant-card-actions>li>span>.anticon:hover{color:#ffd90f}.ant-card-actions>li>span>.anticon{font-size:16px;line-height:22px}.ant-card-actions>li:not(:last-child){border-right:1px solid #424242}.ant-card-type-inner .ant-card-head{padding:0 24px;background:rgba(255,255,255,.04)}.ant-card-type-inner .ant-card-head-title{padding:12px 0;font-size:14px}.ant-card-type-inner .ant-card-body{padding:16px 24px}.ant-card-type-inner .ant-card-extra{padding:13.5px 0}.ant-card-meta{margin:-4px 0}.ant-card-meta::after,.ant-card-meta::before,.ant-carousel .slick-track::after,.ant-carousel .slick-track::before{display:table;content:''}.ant-card-meta::after{clear:both}.ant-card-meta-avatar{float:left;padding-right:16px}.ant-card-rtl .ant-card-meta-avatar{float:right;padding-right:0;padding-left:16px}.ant-card-meta-detail{overflow:hidden}.ant-card-meta-detail>div:not(:last-child){margin-bottom:8px}.ant-card-meta-title{overflow:hidden;color:rgba(255,255,255,.85);font-weight:500;font-size:16px;white-space:nowrap;text-overflow:ellipsis}.ant-card-meta-description{color:rgba(255,255,255,.45)}.ant-card-loading{overflow:hidden}.ant-card-loading .ant-card-body{-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-card-loading-block{height:14px;margin:4px 0;background:linear-gradient(90deg,rgba(66,66,66,.2),rgba(66,66,66,.4),rgba(66,66,66,.2));background-size:600% 600%;border-radius:4px;animation:card-loading 1.4s ease infinite}.ant-card-small>.ant-card-head{min-height:36px;padding:0 12px;font-size:14px}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-head-title{padding:8px 0}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-extra,.ant-carousel{padding:8px 0;font-size:14px}.ant-card-small>.ant-card-body{padding:12px}.ant-carousel{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum'}.ant-carousel .slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-touch-callout:none;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.ant-carousel .slick-list{position:relative;display:block;margin:0;padding:0;overflow:hidden}.ant-carousel .slick-list:focus{outline:0}.ant-carousel .slick-list.dragging{cursor:pointer}.ant-carousel .slick-list .slick-slide,.ant-carousel .slick-slide.dragging img{pointer-events:none}.ant-carousel .slick-list .slick-slide.slick-active{pointer-events:auto}.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input,.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input{visibility:visible}.ant-carousel .slick-list .slick-slide>div>div{vertical-align:bottom}.ant-carousel .slick-slider .slick-list,.ant-carousel .slick-slider .slick-track{transform:translate3d(0,0,0)}.ant-carousel .slick-track{position:relative;top:0;left:0;display:block}.ant-carousel .slick-track::after{clear:both}.ant-carousel .slick-list .slick-slide input.ant-checkbox-input,.ant-carousel .slick-list .slick-slide input.ant-radio-input,.slick-loading .ant-carousel .slick-track{visibility:hidden}.ant-carousel .slick-slide{display:none;float:left;height:100%;min-height:1px}.ant-carousel .slick-initialized .slick-slide{display:block}.ant-carousel .slick-loading .slick-slide{visibility:hidden}.ant-carousel .slick-vertical .slick-slide{display:block;height:auto}.ant-carousel .slick-arrow.slick-hidden{display:none}.ant-carousel .slick-next,.ant-carousel .slick-prev{position:absolute;top:50%;display:block;width:20px;height:20px;margin-top:-10px;padding:0;color:transparent;font-size:0;line-height:0;background:0 0;border:0;outline:0;cursor:pointer}.ant-carousel .slick-next:focus,.ant-carousel .slick-next:hover,.ant-carousel .slick-prev:focus,.ant-carousel .slick-prev:hover{color:transparent;background:0 0;outline:0}.ant-carousel .slick-dots li.slick-active:focus,.ant-carousel .slick-dots li.slick-active:hover,.ant-carousel .slick-next:focus::before,.ant-carousel .slick-next:hover::before,.ant-carousel .slick-prev:focus::before,.ant-carousel .slick-prev:hover::before{opacity:1}.ant-carousel .slick-next.slick-disabled::before,.ant-carousel .slick-prev.slick-disabled::before{opacity:.25}.ant-carousel .slick-prev{left:-25px}.ant-carousel .slick-prev::before{content:'←'}.ant-carousel .slick-next{right:-25px}.ant-carousel .slick-next::before,.ant-carousel-rtl .ant-carousel .slick-prev::before{content:'→'}.ant-carousel .slick-dots{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex!important;justify-content:center;margin-right:15%;margin-left:15%;padding-left:0;list-style:none}.ant-carousel .slick-dots-bottom{bottom:12px}.ant-carousel .slick-dots-top{top:12px}.ant-carousel .slick-dots li{position:relative;display:inline-block;flex:0 1 auto;box-sizing:content-box;width:16px;height:3px;margin:0 3px;padding:0;text-align:center;text-indent:-999px;vertical-align:top;transition:all .5s}.ant-carousel .slick-dots li button{display:block;width:100%;height:3px;padding:0;color:transparent;font-size:0;background:#0a0f19;border:0;border-radius:1px;outline:0;cursor:pointer;opacity:.3;transition:all .5s}.ant-carousel .slick-dots li button:focus,.ant-carousel .slick-dots li button:hover{opacity:.75}.ant-carousel .slick-dots li.slick-active{width:24px}.ant-carousel .slick-dots li.slick-active button{background:#0a0f19;opacity:1}.ant-carousel-vertical .slick-dots{top:50%;bottom:auto;flex-direction:column;width:3px;height:auto;margin:0;transform:translateY(-50%)}.ant-carousel-vertical .slick-dots-left{right:auto;left:12px}.ant-carousel-vertical .slick-dots-right{right:12px;left:auto}.ant-carousel-vertical .slick-dots li{width:3px;height:16px;margin:4px 2px;vertical-align:baseline}.ant-carousel-vertical .slick-dots li button{width:3px;height:16px}.ant-carousel-vertical .slick-dots li.slick-active,.ant-carousel-vertical .slick-dots li.slick-active button{width:3px;height:24px}.ant-carousel-rtl{direction:rtl}.ant-carousel-rtl .ant-carousel .slick-track{right:0;left:auto}.ant-carousel-rtl .ant-carousel .slick-prev{right:-25px;left:auto}.ant-carousel-rtl .ant-carousel .slick-next{right:auto;left:-25px}.ant-carousel-rtl .ant-carousel .slick-next::before{content:'←'}.ant-carousel-rtl.ant-carousel .slick-dots{flex-direction:row-reverse}.ant-carousel-rtl.ant-carousel-vertical .slick-dots{flex-direction:column}.ant-cascader,.ant-cascader-picker{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum'}.ant-cascader-input.ant-input{position:static;width:100%;padding-right:24px;background-color:transparent!important;cursor:pointer}.ant-cascader-picker-show-search .ant-cascader-input.ant-input{position:relative}.ant-cascader-picker{position:relative;display:inline-block;background-color:transparent;border-radius:4px;outline:0;cursor:pointer;transition:color .3s}.ant-cascader-picker-with-value .ant-cascader-picker-label{color:transparent}.ant-cascader-picker-disabled{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);cursor:not-allowed}.ant-cascader-picker-disabled .ant-cascader-input{cursor:not-allowed}.ant-cascader-picker:focus .ant-cascader-input{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-cascader-picker:focus .ant-cascader-input{border-right-width:0;border-left-width:1px!important}.ant-cascader-picker-borderless .ant-cascader-input{border-color:transparent!important;box-shadow:none!important}.ant-cascader-picker-show-search.ant-cascader-picker-focused{color:rgba(255,255,255,.3)}.ant-cascader-picker-label{position:absolute;top:50%;left:0;width:100%;height:20px;margin-top:-10px;padding:0 20px 0 12px;overflow:hidden;line-height:20px;white-space:nowrap;text-overflow:ellipsis}.ant-cascader-picker-arrow,.ant-cascader-picker-clear{position:absolute;top:50%;right:12px;width:12px;height:12px;margin-top:-6px;color:rgba(255,255,255,.3);font-size:12px;line-height:12px}.ant-cascader-picker-clear{z-index:2;background:#0a0f19;cursor:pointer;opacity:0;transition:color .3s ease,opacity .15s ease}.ant-cascader-picker-clear:hover{color:rgba(255,255,255,.45)}.ant-cascader-picker:hover .ant-cascader-picker-clear{opacity:1}.ant-cascader-picker-arrow{z-index:1}.ant-cascader-picker-label:hover+.ant-cascader-input:not(.ant-cascader-picker-disabled .ant-cascader-picker-label:hover+.ant-cascader-input){border-color:#a99213;border-right-width:1px!important}.ant-input-rtl .ant-cascader-picker-label:hover+.ant-cascader-input:not(.ant-cascader-picker-disabled .ant-cascader-picker-label:hover+.ant-cascader-input){border-right-width:0;border-left-width:1px!important}.ant-cascader-picker-small .ant-cascader-picker-arrow,.ant-cascader-picker-small .ant-cascader-picker-clear{right:8px}.ant-cascader-menus{position:absolute;z-index:1050;font-size:14px;white-space:nowrap;background:#212121;border-radius:4px;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-cascader-menus ol,.ant-cascader-menus ul{margin:0;list-style:none}.ant-cascader-menus-empty,.ant-cascader-menus-hidden,.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow::before{display:none}.ant-cascader-menus.slide-up-appear.slide-up-appear-active.ant-cascader-menus-placement-bottomLeft,.ant-cascader-menus.slide-up-enter.slide-up-enter-active.ant-cascader-menus-placement-bottomLeft{animation-name:antSlideUpIn}.ant-cascader-menus.slide-up-appear.slide-up-appear-active.ant-cascader-menus-placement-topLeft,.ant-cascader-menus.slide-up-enter.slide-up-enter-active.ant-cascader-menus-placement-topLeft{animation-name:antSlideDownIn}.ant-cascader-menus.slide-up-leave.slide-up-leave-active.ant-cascader-menus-placement-bottomLeft{animation-name:antSlideUpOut}.ant-cascader-menus.slide-up-leave.slide-up-leave-active.ant-cascader-menus-placement-topLeft{animation-name:antSlideDownOut}.ant-cascader-menu{display:inline-block;min-width:111px;height:180px;margin:0;padding:4px 0;overflow:auto;vertical-align:top;list-style:none;border-right:1px solid #424242;-ms-overflow-style:-ms-autohiding-scrollbar}.ant-cascader-menu:first-child{border-radius:4px 0 0 4px}.ant-cascader-menu:last-child{margin-right:-1px;border-right-color:transparent;border-radius:0 4px 4px 0}.ant-cascader-menu:only-child{border-radius:4px}.ant-cascader-menu-item{padding:5px 12px;overflow:hidden;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-cascader-menu-item:hover,.ant-picker-week-panel-row:hover td{background:rgba(255,255,255,.08)}.ant-cascader-menu-item-disabled,.ant-checkbox-disabled+span{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-cascader-menu-item-disabled:hover{background:0 0}.ant-cascader-menu-empty .ant-cascader-menu-item{color:rgba(255,255,255,.3);cursor:default;pointer-events:none}.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover{font-weight:600;background-color:#232215}.ant-cascader-menu-item-expand{position:relative;padding-right:24px}.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-loading-icon{display:inline-block;font-size:10px;position:absolute;right:12px;color:rgba(255,255,255,.45)}.ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-disabled.ant-cascader-menu-item-loading-icon{color:rgba(255,255,255,.3)}.ant-cascader-menu-item .ant-cascader-menu-item-keyword{color:#a31b26}.ant-cascader-picker-rtl .ant-cascader-input.ant-input{padding-right:11px;padding-left:24px;text-align:right}.ant-cascader-picker-rtl{direction:rtl}.ant-cascader-picker-rtl .ant-cascader-picker-label{padding:0 12px 0 20px;text-align:right}.ant-cascader-picker-rtl .ant-cascader-picker-arrow,.ant-cascader-picker-rtl .ant-cascader-picker-clear{right:auto;left:12px}.ant-cascader-picker-rtl.ant-cascader-picker-small .ant-cascader-picker-arrow,.ant-cascader-picker-rtl.ant-cascader-picker-small .ant-cascader-picker-clear{right:auto;left:8px}.ant-cascader-menu-rtl .ant-cascader-menu{direction:rtl;border-right:none;border-left:1px solid #424242}.ant-cascader-menu-rtl .ant-cascader-menu:first-child{border-radius:0 4px 4px 0}.ant-cascader-menu-rtl .ant-cascader-menu:last-child{margin-right:0;margin-left:-1px;border-left-color:transparent;border-radius:4px 0 0 4px}.ant-cascader-menu-rtl .ant-cascader-menu:only-child{border-radius:4px}.ant-cascader-menu-rtl .ant-cascader-menu-item-expand{padding-right:12px;padding-left:24px}.ant-cascader-menu-rtl .ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-rtl .ant-cascader-menu-item-loading-icon{right:auto;left:12px}.ant-cascader-menu-rtl .ant-cascader-menu-item-loading-icon{transform:scaleY(-1)}.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:0;cursor:pointer}.ant-checkbox-input:focus+.ant-checkbox-inner,.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner{border-color:#ffd90f}.ant-checkbox-checked::after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #ffd90f;border-radius:4px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:''}.ant-checkbox-wrapper:hover .ant-checkbox::after,.ant-checkbox:hover::after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:transparent;border:1px solid #6f6c6c;border-radius:4px;border-collapse:separate;transition:all .3s}.ant-checkbox-checked .ant-checkbox-inner::after,.ant-checkbox-inner::after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;content:' '}.ant-checkbox-inner::after{top:50%;left:22%;width:5.71428571px;height:9.14285714px;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner::after{transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s}.ant-checkbox-checked .ant-checkbox-inner{background-color:#ffd90f;border-color:#ffd90f}.ant-checkbox-disabled,.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner::after{border-color:rgba(255,255,255,.3);animation-name:none}.ant-checkbox-disabled .ant-checkbox-inner{background-color:rgba(255,255,255,.08);border-color:#6f6c6c!important}.ant-checkbox-disabled .ant-checkbox-inner::after{border-color:rgba(255,255,255,.08);border-collapse:separate;animation-name:none}.ant-checkbox-disabled:hover::after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled::after{visibility:hidden}.ant-checkbox-group,.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';display:inline-block}.ant-checkbox-wrapper{line-height:unset;cursor:pointer}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{line-height:1.5715}.ant-checkbox-group-item{display:inline-block;margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:transparent;border-color:#6f6c6c}.ant-checkbox-indeterminate .ant-checkbox-inner::after{top:50%;left:50%;width:8px;height:8px;background-color:#ffd90f;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:' '}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner::after{background-color:rgba(255,255,255,.3);border-color:rgba(255,255,255,.3)}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}.ant-collapse{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';background-color:rgba(255,255,255,.04);border:1px solid #6f6c6c;border-bottom:0;border-radius:4px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #6f6c6c}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 4px 4px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 16px 12px 40px;color:rgba(255,255,255,.85);line-height:1.5715;cursor:pointer;transition:all .3s}.ant-collapse>.ant-collapse-item>.ant-collapse-header::before{display:table;content:''}.ant-collapse>.ant-collapse-item>.ant-collapse-header::after{display:table;clear:both;content:''}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;left:16px;display:inline-block;font-size:12px;transform:translateY(-50%)}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow>*{line-height:1}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow .ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow-icon{display:block}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transition:transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{float:right}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus,.ant-rate-star>div:focus{outline:0}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{right:16px;left:auto}.ant-collapse-anim-active{transition:height .2s cubic-bezier(.215,.61,.355,1)}.ant-collapse-content{overflow:hidden;color:rgba(255,255,255,.85);background-color:#0a0f19;border-top:1px solid #6f6c6c}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-inactive{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 4px 4px}.ant-collapse-borderless{background-color:rgba(255,255,255,.04);border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #6f6c6c}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content,.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse-ghost{background-color:transparent;border:0}.ant-collapse-ghost>.ant-collapse-item{border-bottom:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:12px;padding-bottom:12px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow,.ant-picker-header button{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-collapse-rtl{direction:rtl}.ant-collapse-rtl .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transform:rotate(180deg)}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{float:left}.ant-collapse-rtl.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-right:12px;padding-left:0}.ant-comment{position:relative;background-color:transparent}.ant-comment-inner{display:flex;padding:16px 0}.ant-comment-avatar{position:relative;flex-shrink:0;margin-right:12px;cursor:pointer}.ant-comment-avatar img{width:32px;height:32px;border-radius:50%}.ant-comment-content{position:relative;flex:1 1 auto;min-width:1px;font-size:14px;word-wrap:break-word}.ant-comment-content-author{display:flex;flex-wrap:wrap;justify-content:flex-start;margin-bottom:4px;font-size:14px}.ant-comment-content-author>a,.ant-comment-content-author>span{padding-right:8px;font-size:12px;line-height:18px}.ant-comment-actions>li>span,.ant-comment-content-author-name{color:rgba(255,255,255,.45);font-size:14px;transition:color .3s}.ant-comment-actions>li,.ant-comment-content-author-name>*,.ant-comment-content-author-name>:hover{color:rgba(255,255,255,.45)}.ant-comment-content-author-time{color:rgba(255,255,255,.3);white-space:nowrap;cursor:auto}.ant-comment-content-detail p{margin-bottom:inherit;white-space:pre-wrap}.ant-comment-actions{margin-top:12px;margin-bottom:inherit;padding-left:0}.ant-comment-actions>li{display:inline-block}.ant-comment-actions>li>span{margin-right:10px;font-size:12px;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-comment-actions>li>span:hover{color:rgba(255,255,255,.65)}.ant-comment-nested{margin-left:44px}.ant-comment-rtl,.ant-picker-input>input-rtl{direction:rtl}.ant-comment-rtl .ant-comment-avatar{margin-right:0;margin-left:12px}.ant-comment-rtl .ant-comment-actions{padding-right:0}.ant-comment-rtl .ant-comment-actions>li>span{margin-right:0;margin-left:10px}.ant-comment-rtl .ant-comment-nested{margin-right:44px;margin-left:0}.ant-picker-panel{display:inline-flex;flex-direction:column;text-align:center;background:#212121;border:1px solid #424242;border-radius:4px;outline:0}.ant-picker-panel-focused{border-color:#ffd90f}.ant-picker-date-panel,.ant-picker-decade-panel,.ant-picker-month-panel,.ant-picker-quarter-panel,.ant-picker-week-panel,.ant-picker-year-panel{display:flex;flex-direction:column;width:280px}.ant-picker-time-panel{display:flex;flex-direction:column}.ant-picker-header{display:flex;padding:0 8px;color:rgba(255,255,255,.85);border-bottom:1px solid #424242}.ant-picker-header>*{flex:none}.ant-picker-header button{padding:0;line-height:40px;background:0 0;border:0;cursor:pointer;transition:color .3s}.ant-picker-header>button{min-width:1.6em;font-size:14px}.ant-picker-header-view{flex:auto;font-weight:500;line-height:40px}.ant-picker-header-view button{color:inherit;font-weight:inherit}.ant-picker-header-view button:not(:first-child){margin-left:8px}.ant-picker-header-view button:hover{color:#ffd90f}.ant-picker-next-icon,.ant-picker-prev-icon,.ant-picker-super-next-icon,.ant-picker-super-prev-icon{position:relative;display:inline-block;width:7px;height:7px}.ant-picker-next-icon::before,.ant-picker-prev-icon::before,.ant-picker-super-next-icon::after,.ant-picker-super-next-icon::before,.ant-picker-super-prev-icon::after,.ant-picker-super-prev-icon::before{position:absolute;top:0;left:0;display:inline-block;width:7px;height:7px;border:0 solid currentColor;border-width:1.5px 0 0 1.5px;content:''}.ant-picker-super-next-icon::after,.ant-picker-super-prev-icon::after{top:4px;left:4px}.ant-picker-prev-icon,.ant-picker-super-prev-icon{transform:rotate(-45deg)}.ant-picker-next-icon,.ant-picker-super-next-icon{transform:rotate(135deg)}.ant-picker-content{width:100%;table-layout:fixed;border-collapse:collapse}.ant-picker-content td,.ant-picker-content th{position:relative;min-width:24px;font-weight:400}.ant-picker-content th{height:30px;line-height:30px}.ant-picker-cell{padding:3px 0;color:rgba(255,255,255,.3);cursor:pointer}.ant-dropdown-menu-item>.anticon+span>a:hover,.ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-submenu-title>.anticon+span>a:hover,.ant-dropdown-menu-submenu-title>a:hover,.ant-picker-cell-in-view,.ant-picker-content th{color:rgba(255,255,255,.85)}.ant-picker-cell-disabled{cursor:not-allowed;pointer-events:none}.ant-picker-cell::before{position:absolute;top:50%;right:0;left:0;z-index:1;height:24px;transform:translateY(-50%);content:''}.ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner{background:rgba(255,255,255,.08)}.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border:1px solid #ffd90f;border-radius:4px;content:''}.ant-picker-cell-in-view.ant-picker-cell-in-range{position:relative}.ant-picker-cell-in-view.ant-picker-cell-in-range::before{background:#232215}.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner{color:#fff;background:#ffd90f}.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before,.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before{background:#232215}.ant-picker-cell-in-view.ant-picker-cell-range-start::before{left:50%}.ant-picker-cell-in-view.ant-picker-cell-range-end::before,.ant-picker-cell-range-hover.ant-picker-cell-range-start::after{right:50%}.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after{position:absolute;top:50%;z-index:0;height:24px;border-top:1px dashed #a88d00;border-bottom:1px dashed #a88d00;transform:translateY(-50%);content:''}.ant-picker-cell-range-hover-end::after,.ant-picker-cell-range-hover-start::after,.ant-picker-cell-range-hover::after{right:0;left:2px}.ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before,.ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before,.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end::before,.ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before,.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start::before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before{background:#5c4d00}.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-radius:4px 0 0 4px}.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-radius:0 4px 4px 0}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after,.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after{position:absolute;top:0;bottom:0;z-index:-1;background:#5c4d00;content:''}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after{right:-7px;left:0}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after,.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after{right:0;left:-7px}.ant-picker-cell-range-hover.ant-picker-cell-range-end::after{left:50%}.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after{left:6px;border-left:1px dashed #a88d00;border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after{right:6px;border-right:1px dashed #a88d00;border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-picker-cell-disabled .ant-picker-cell-inner{color:rgba(255,255,255,.3);background:0 0}.ant-picker-cell-disabled::before,.ant-picker-decade-panel .ant-picker-cell-disabled .ant-picker-cell-inner,.ant-picker-month-panel .ant-picker-cell-disabled .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-disabled .ant-picker-cell-inner,.ant-picker-year-panel .ant-picker-cell-disabled .ant-picker-cell-inner{background:#303030}.ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner::before{border-color:rgba(255,255,255,.3)}.ant-picker-decade-panel .ant-picker-content,.ant-picker-month-panel .ant-picker-content,.ant-picker-year-panel .ant-picker-content{height:264px}.ant-picker-month-panel .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-year-panel .ant-picker-cell-inner{padding:0 8px}.ant-picker-quarter-panel .ant-picker-content{height:56px}.ant-picker-footer{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:100%;line-height:38px;text-align:center;border-bottom:1px solid transparent}.ant-picker-panel .ant-picker-footer{border-top:1px solid #424242}.ant-picker-footer-extra{padding:0 12px;line-height:38px;text-align:left}.ant-drawer .ant-table.ant-table-bordered table thead>tr:not(:last-child)>th,.ant-modal .ant-table.ant-table-bordered table thead>tr:not(:last-child)>th,.ant-notification .ant-table.ant-table-bordered table thead>tr:not(:last-child)>th,.ant-picker-footer-extra:not(:last-child),.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr:not(:last-child)>th{border-bottom:1px solid #424242}.ant-picker-now{text-align:left}.ant-picker-today-btn{color:#ffd90f}.ant-picker-today-btn:hover{color:#a99213}.ant-picker-today-btn:active{color:#e7d235}.ant-picker-today-btn.ant-picker-today-btn-disabled{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-picker-decade-panel .ant-picker-cell-inner{padding:0 4px}.ant-picker-decade-panel .ant-picker-cell::before{display:none}.ant-picker-month-panel .ant-picker-body,.ant-picker-quarter-panel .ant-picker-body,.ant-picker-year-panel .ant-picker-body{padding:0 8px}.ant-picker-month-panel .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-year-panel .ant-picker-cell-inner{width:60px}.ant-picker-month-panel .ant-picker-cell-range-hover-start::after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,.ant-picker-year-panel .ant-picker-cell-range-hover-start::after{left:14px;border-left:1px dashed #a88d00;border-radius:4px 0 0 4px}.ant-picker-month-panel .ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-start::after,.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-start::after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,.ant-picker-year-panel .ant-picker-cell-range-hover-end::after{right:14px;border-right:1px dashed #a88d00;border-radius:0 4px 4px 0}.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-end::after{left:14px;border-left:1px dashed #a88d00;border-radius:4px 0 0 4px}.ant-picker-date-panel .ant-picker-body,.ant-picker-week-panel .ant-picker-body{padding:8px 12px}.ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner,.ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner{background:0 0!important}.ant-picker-week-panel-row td{transition:background .3s}.ant-picker-week-panel-row-selected td,.ant-picker-week-panel-row-selected:hover td{background:#ffd90f}.ant-picker-week-panel-row-selected td.ant-picker-cell-week,.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week{color:rgba(255,255,255,.5)}.ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner::before,.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner::before{border-color:#fff}.ant-picker-week-panel-row-selected td .ant-picker-cell-inner,.ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner{color:#fff}.ant-picker-date-panel .ant-picker-content{width:252px}.ant-picker-date-panel .ant-picker-content th{width:36px}.ant-picker-datetime-panel{display:flex}.ant-picker-datetime-panel .ant-picker-time-panel{border-left:1px solid #424242}.ant-picker-datetime-panel .ant-picker-date-panel,.ant-picker-datetime-panel .ant-picker-time-panel{transition:opacity .3s}.ant-picker-datetime-panel-active .ant-picker-date-panel,.ant-picker-datetime-panel-active .ant-picker-time-panel{opacity:.3}.ant-picker-datetime-panel-active .ant-picker-date-panel-active,.ant-picker-datetime-panel-active .ant-picker-time-panel-active{opacity:1}.ant-picker-time-panel{width:auto;min-width:auto}.ant-picker-time-panel .ant-picker-content{display:flex;flex:auto;height:224px}.ant-picker-time-panel-column{flex:1 0 auto;width:56px;margin:0;padding:0;overflow-y:hidden;text-align:left;list-style:none;transition:background .3s}.ant-picker-time-panel-column::after{display:block;height:196px;content:''}.ant-picker-datetime-panel .ant-picker-time-panel-column::after{height:198px}.ant-picker-time-panel-column:not(:first-child){border-left:1px solid #424242}.ant-picker-time-panel-column-active{background:rgba(35,34,21,.2)}.ant-picker-time-panel-column:hover{overflow-y:auto}.ant-picker-time-panel-column>li{margin:0;padding:0}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner{display:block;width:100%;height:28px;margin:0;padding:0 0 0 14px;color:rgba(255,255,255,.85);line-height:28px;border-radius:0;cursor:pointer;transition:background .3s}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover{background:rgba(255,255,255,.08)}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:#232215}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner{color:rgba(255,255,255,.3);background:0 0;cursor:not-allowed}:root .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,:root .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell,_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell{padding:21px 0}.ant-picker,.ant-picker-input>input{position:relative;color:rgba(255,255,255,.85);font-size:14px;line-height:1.5715;border-radius:4px;background:0 0}.ant-picker{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';padding:4px 11px;display:inline-flex;align-items:center;border:1px solid #6f6c6c;transition:border .3s,box-shadow .3s}.ant-picker-focused,.ant-picker:hover{border-color:#a99213;border-right-width:1px!important}.ant-input-rtl .ant-picker-focused,.ant-input-rtl .ant-picker-input>input:hover,.ant-input-rtl .ant-picker:hover{border-right-width:0;border-left-width:1px!important}.ant-picker-focused{border-color:#ffd90f;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-picker.ant-picker-disabled{background:rgba(255,255,255,.08);border-color:#6f6c6c;cursor:not-allowed}.ant-picker.ant-picker-disabled .ant-picker-suffix{color:rgba(255,255,255,.3)}.ant-picker.ant-picker-borderless{background-color:transparent!important;border-color:transparent!important;box-shadow:none!important}.ant-picker-input{position:relative;display:inline-flex;align-items:center;width:100%}.ant-picker-input>input{display:inline-block;width:100%;background-color:transparent;background-image:none;transition:all .3s;flex:auto;min-width:1px;height:auto;padding:0;border:0}.ant-picker-input>input::-webkit-input-placeholder{color:rgba(255,255,255,.3)}.ant-picker-input>input:-ms-input-placeholder{color:rgba(255,255,255,.3);text-overflow:ellipsis}.ant-picker-input>input::placeholder{color:rgba(255,255,255,.3)}.ant-picker-input>input:placeholder-shown{text-overflow:ellipsis}.ant-picker-input>input:hover{border-color:#a99213;border-right-width:1px!important}.ant-picker-input>input-focused,.ant-picker-input>input:focus{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-picker-input>input-focused,.ant-input-rtl .ant-picker-input>input:focus{border-right-width:0;border-left-width:1px!important}.ant-picker-input>input-disabled,.ant-picker-input>input[disabled]{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);cursor:not-allowed;opacity:1}.ant-picker-input>input-disabled:hover,.ant-picker-input>input[disabled]:hover{border-color:#6f6c6c;border-right-width:1px!important}.ant-picker-input>input-borderless,.ant-picker-input>input-borderless-disabled,.ant-picker-input>input-borderless-focused,.ant-picker-input>input-borderless:focus,.ant-picker-input>input-borderless:hover,.ant-picker-input>input-borderless[disabled]{background-color:transparent;border:0;box-shadow:none}textarea.ant-input,textarea.ant-input-affix-wrapper,textarea.ant-input-number,textarea.ant-mentions,textarea.ant-picker-input>input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-picker-input>input-lg{padding:6.5px 11px;font-size:16px}.ant-picker-input>input-sm{padding:0 7px}.ant-picker-input>input:focus{box-shadow:none}.ant-picker-input>input[disabled]{background:0 0}.ant-picker-input:hover .ant-picker-clear{opacity:1}.ant-picker-input-placeholder>input{color:rgba(255,255,255,.3)}.ant-picker-large{padding:6.5px 11px}.ant-picker-large .ant-picker-input>input{font-size:16px}.ant-picker-small{padding:0 7px}.ant-picker-suffix{align-self:center;margin-left:4px;color:rgba(255,255,255,.3);line-height:1;pointer-events:none}.ant-picker-suffix>*{vertical-align:top}.ant-picker-clear{position:absolute;top:50%;right:0;color:rgba(255,255,255,.3);line-height:1;background:#0a0f19;transform:translateY(-50%);cursor:pointer;opacity:0;transition:opacity .3s,color .3s}.ant-picker-clear>*{vertical-align:top}.ant-picker-clear:hover,.ant-picker-focused .ant-picker-separator{color:rgba(255,255,255,.45)}.ant-picker-separator{position:relative;display:inline-block;width:1em;height:16px;color:rgba(255,255,255,.3);font-size:16px;vertical-align:top;cursor:default}.ant-picker-disabled .ant-picker-range-separator .ant-picker-separator{cursor:not-allowed}.ant-picker-range{position:relative;display:inline-flex}.ant-picker-range .ant-picker-clear{right:11px}.ant-picker-range.ant-picker-focused .ant-picker-active-bar,.ant-picker-range:hover .ant-picker-clear{opacity:1}.ant-picker-range .ant-picker-active-bar{bottom:-1px;height:2px;margin-left:11px;background:#ffd90f;opacity:0;transition:all .3s ease-out;pointer-events:none}.ant-picker-range-separator{align-items:center;padding:0 8px;line-height:1}.ant-picker-range.ant-picker-small .ant-picker-clear{right:7px}.ant-picker-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:absolute;z-index:1050}.ant-picker-dropdown-hidden{display:none}.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow{top:1.66666667px;display:block;transform:rotate(-45deg)}.ant-picker-dropdown-placement-topLeft .ant-picker-range-arrow{bottom:1.66666667px;display:block;transform:rotate(135deg)}.ant-picker-dropdown-range{padding:6.66666667px 0}.ant-picker-dropdown-range-hidden{display:none}.ant-picker-dropdown .ant-picker-panel>.ant-picker-time-panel{padding-top:4px}.ant-picker-ranges{margin-bottom:0;padding:4px 12px;overflow:hidden;line-height:34px;text-align:left;list-style:none}.ant-picker-ranges>li{display:inline-block}.ant-picker-ranges .ant-picker-preset>.ant-tag-blue{color:#ffd90f;background:#232215;border-color:#544c16;cursor:pointer}.ant-picker-ranges .ant-picker-ok{float:right;margin-left:8px}.ant-picker-range-wrapper{display:flex}.ant-picker-range-arrow{position:absolute;z-index:1;display:none;width:10px;height:10px;margin-left:16.5px;box-shadow:2px -2px 6px rgba(0,0,0,.06);transition:left .3s ease-out}.ant-picker-range-arrow::after{position:absolute;top:1px;right:1px;width:10px;height:10px;border:5px solid #424242;border-color:#212121 #212121 transparent transparent;content:''}.ant-picker-panel-container{overflow:hidden;vertical-align:top;background:#212121;border-radius:4px;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2);transition:margin .3s}.ant-picker-panel-container .ant-picker-panels{display:inline-flex;flex-wrap:nowrap;direction:ltr}.ant-picker-panel-container .ant-picker-panel{vertical-align:top;background:0 0;border-width:0 0 1px;border-radius:0}.ant-picker-panel-container .ant-picker-panel-focused{border-color:#424242}.ant-picker-panel-rtl,.ant-picker-rtl{direction:rtl}.ant-picker-rtl .ant-picker-suffix{margin-right:4px;margin-left:0}.ant-picker-rtl .ant-picker-clear{right:auto;left:0}.ant-picker-rtl .ant-picker-separator{transform:rotate(180deg)}.ant-picker-panel-rtl .ant-picker-header-view button:not(:first-child){margin-right:8px;margin-left:0}.ant-picker-rtl.ant-picker-range .ant-picker-clear{right:auto;left:11px}.ant-picker-rtl.ant-picker-range .ant-picker-active-bar{margin-right:11px;margin-left:0}.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup li,.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup ul,.ant-picker-dropdown-rtl .ant-picker-ranges{text-align:right}.ant-picker-dropdown-rtl .ant-picker-ranges .ant-picker-ok{float:left;margin-right:8px;margin-left:0}.ant-picker-panel-rtl .ant-picker-prev-icon,.ant-picker-panel-rtl .ant-picker-super-prev-icon{transform:rotate(135deg)}.ant-picker-panel-rtl .ant-picker-next-icon,.ant-picker-panel-rtl .ant-picker-super-next-icon{transform:rotate(-45deg)}.ant-picker-cell .ant-picker-cell-inner{position:relative;z-index:2;display:inline-block;min-width:24px;height:24px;line-height:24px;border-radius:4px;transition:background .3s,border .3s}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start::before{right:50%;left:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end::before,.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-start::after{right:0;left:50%}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-end::before{right:50%;left:50%}.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after{right:-7px;left:0}.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-end::after{right:50%;left:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-radius:4px 0 0 4px}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after{right:6px;left:0;border-right:1px dashed #a88d00;border-left:none;border-top-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after{right:0;left:6px;border-right:none;border-left:1px dashed #a88d00;border-top-left-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after{right:6px;border-right:1px dashed #a88d00;border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after{left:6px;border-left:1px dashed #a88d00;border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-picker-dropdown-rtl .ant-picker-footer-extra{direction:rtl;text-align:right}.ant-picker-panel-rtl .ant-picker-time-panel{direction:ltr}.ant-descriptions-header{display:flex;align-items:center;margin-bottom:20px}.ant-descriptions-title{flex:auto;overflow:hidden;color:rgba(255,255,255,.85);font-weight:700;font-size:16px;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis}.ant-descriptions-extra{margin-left:auto;color:rgba(255,255,255,.85);font-size:14px}.ant-descriptions-view{width:100%;overflow:hidden;border-radius:4px}.ant-descriptions-view table{width:100%;table-layout:fixed}.ant-descriptions-row>td,.ant-descriptions-row>th{padding-bottom:16px}.ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-item-content,.ant-descriptions-item-label{color:rgba(255,255,255,.85);font-size:14px;line-height:1.5715}.ant-descriptions-item-label{font-weight:400;text-align:start}.ant-descriptions-item-label::after,.ant-form-item-label>label::after{content:':';position:relative;top:-.5px;margin:0 8px 0 2px}.ant-descriptions-item-label.ant-descriptions-item-no-colon::after{content:' '}.ant-descriptions-item-no-label::after{margin:0;content:''}.ant-descriptions-item-content{display:table-cell;flex:1;overflow-wrap:break-word}.ant-descriptions-item{padding-bottom:0;vertical-align:top}.ant-descriptions-item>span{display:inline-flex;align-items:baseline}.ant-descriptions-item-container{display:flex}.ant-descriptions-middle .ant-descriptions-row>td,.ant-descriptions-middle .ant-descriptions-row>th{padding-bottom:12px}.ant-descriptions-small .ant-descriptions-row>td,.ant-descriptions-small .ant-descriptions-row>th{padding-bottom:8px}.ant-descriptions-bordered .ant-descriptions-view{border:1px solid #424242}.ant-descriptions-bordered .ant-descriptions-view>table{table-layout:auto}.ant-descriptions-bordered .ant-descriptions-item-content,.ant-descriptions-bordered .ant-descriptions-item-label{padding:16px 24px;border-right:1px solid #424242}.ant-descriptions-bordered .ant-descriptions-item-content:last-child,.ant-descriptions-bordered .ant-descriptions-item-label:last-child{border-right:none}.ant-descriptions-bordered .ant-descriptions-item-label{background-color:rgba(255,255,255,.04)}.ant-descriptions-bordered .ant-descriptions-item-label::after{display:none}.ant-descriptions-bordered .ant-descriptions-row{border-bottom:1px solid #424242}.ant-descriptions-bordered .ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content,.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label{padding:12px 24px}.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content,.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label{padding:8px 16px}.ant-descriptions-rtl{direction:rtl}.ant-descriptions-rtl .ant-descriptions-item-label::after{margin:0 2px 0 8px}.ant-divider{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';border-top:1px solid rgba(255,255,255,.12)}.ant-divider-vertical{position:relative;top:-.06em;display:inline-block;height:.9em;margin:0 8px;vertical-align:middle;border-top:0;border-left:1px solid rgba(255,255,255,.12)}.ant-divider-horizontal{display:flex;clear:both;width:100%;min-width:100%;margin:24px 0}.ant-divider-horizontal.ant-divider-with-text{display:flex;margin:16px 0;color:rgba(255,255,255,.85);font-weight:500;font-size:16px;white-space:nowrap;text-align:center;border-color:rgba(255,255,255,.12);border-top:0}.ant-divider-horizontal.ant-divider-with-text::after,.ant-divider-horizontal.ant-divider-with-text::before{position:relative;top:50%;width:50%;border-top:1px solid transparent;border-top-color:inherit;border-bottom:0;transform:translateY(50%);content:''}.ant-divider-horizontal.ant-divider-with-text-left::before{top:50%;width:5%}.ant-divider-horizontal.ant-divider-with-text-left::after,.ant-divider-horizontal.ant-divider-with-text-right::before{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right::after{top:50%;width:5%}.ant-divider-inner-text{display:inline-block;padding:0 1em}.ant-divider-dashed{background:0 0;border-color:rgba(255,255,255,.12);border-style:dashed;border-width:1px 0 0}.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed{border-top:0}.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::after,.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::before{border-style:dashed none none}.ant-divider-vertical.ant-divider-dashed{border-width:0 0 0 1px}.ant-divider-plain.ant-divider-with-text{color:rgba(255,255,255,.85);font-weight:400;font-size:14px}.ant-divider-rtl{direction:rtl}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left::before{width:95%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left::after,.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right::before{width:5%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right::after{width:95%}.ant-drawer{position:fixed;z-index:1000;width:0%;height:100%;transition:transform .3s cubic-bezier(.7,.3,.1,1),height 0s ease .3s,width 0s ease .3s}.ant-drawer>*{transition:transform .3s cubic-bezier(.7,.3,.1,1),box-shadow .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-content-wrapper{position:absolute;width:100%;height:100%}.ant-drawer .ant-drawer-content{width:100%;height:100%}.ant-drawer-left,.ant-drawer-right{top:0;width:0%;height:100%}.ant-drawer-left .ant-drawer-content-wrapper,.ant-drawer-right .ant-drawer-content-wrapper,.ant-empty-image img{height:100%}.ant-drawer-left.ant-drawer-open,.ant-drawer-right.ant-drawer-open{width:100%;transition:transform .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-left,.ant-drawer-left .ant-drawer-content-wrapper{left:0}.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:6px 0 16px -8px rgba(0,0,0,.32),9px 0 28px 0 rgba(0,0,0,.2),12px 0 48px 16px rgba(0,0,0,.12)}.ant-drawer-right,.ant-drawer-right .ant-drawer-content-wrapper{right:0}.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:-6px 0 16px -8px rgba(0,0,0,.08),-9px 0 28px 0 rgba(0,0,0,.05),-12px 0 48px 16px rgba(0,0,0,.03)}.ant-drawer-right.ant-drawer-open.no-mask{right:1px;transform:translateX(1px)}.ant-drawer-bottom,.ant-drawer-top{left:0;width:100%;height:0%}.ant-drawer-bottom .ant-drawer-content-wrapper,.ant-drawer-top .ant-drawer-content-wrapper{width:100%}.ant-drawer-bottom.ant-drawer-open,.ant-drawer-top.ant-drawer-open{height:100%;transition:transform .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-top{top:0}.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 6px 16px -8px rgba(0,0,0,.32),0 9px 28px 0 rgba(0,0,0,.2),0 12px 48px 16px rgba(0,0,0,.12)}.ant-drawer-bottom,.ant-drawer-bottom .ant-drawer-content-wrapper{bottom:0}.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 -6px 16px -8px rgba(0,0,0,.32),0 -9px 28px 0 rgba(0,0,0,.2),0 -12px 48px 16px rgba(0,0,0,.12)}.ant-drawer-bottom.ant-drawer-open.no-mask{bottom:1px;transform:translateY(1px)}.ant-drawer.ant-drawer-open .ant-drawer-mask{height:100%;opacity:1;transition:none;animation:antdDrawerFadeIn .3s cubic-bezier(.7,.3,.1,1);pointer-events:auto}.ant-drawer-title{margin:0;color:rgba(255,255,255,.85);font-weight:500;font-size:16px;line-height:22px}.ant-drawer-content{position:relative;z-index:1;overflow:auto;background-color:#212121;background-clip:padding-box;border:0}.ant-drawer-close{position:absolute;top:0;right:0;z-index:10;display:block;padding:20px;color:rgba(255,255,255,.45);font-weight:700;font-size:16px;font-style:normal;line-height:1;text-align:center;text-transform:none;text-decoration:none;background:0 0;border:0;outline:0;cursor:pointer;transition:color .3s;text-rendering:auto}.ant-drawer-close:focus,.ant-drawer-close:hover{color:rgba(255,255,255,.75);text-decoration:none}.ant-drawer-header-no-title .ant-drawer-close{margin-right:var(--scroll-bar);padding-right:calc(20px - var(--scroll-bar))}.ant-drawer-header{position:relative;padding:16px 24px;border-bottom:1px solid #424242;border-radius:4px 4px 0 0}.ant-drawer-header,.ant-drawer-header-no-title{color:rgba(255,255,255,.85);background:#212121}.ant-drawer-wrapper-body{display:flex;flex-direction:column;flex-wrap:nowrap;width:100%;height:100%}.ant-drawer-body{flex-grow:1;padding:24px;overflow:auto;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-drawer-footer{flex-shrink:0;padding:10px;border-top:1px solid #424242}.ant-drawer-mask{position:absolute;top:0;left:0;width:100%;height:0;background-color:rgba(0,0,0,.45);opacity:0;filter:alpha(opacity=45);transition:opacity .3s linear,height 0s ease .3s;pointer-events:none}.ant-drawer-open-content{box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-drawer .ant-picker-clear{background:#212121;background-color:#212121}.ant-drawer .ant-anchor-wrapper,.ant-drawer .ant-card,.ant-drawer .ant-collapse-content,.ant-drawer .ant-slider-handle,.ant-drawer .ant-timeline-item-head{background-color:#212121}.ant-drawer .ant-transfer-list-header{background:#212121;border-bottom:1px solid #3a3a3a}.ant-drawer .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:rgba(255,255,255,.08)}.ant-drawer tr.ant-table-expanded-row:hover>td,.ant-drawer tr.ant-table-expanded-row>td,.ant-modal tr.ant-table-expanded-row:hover>td,.ant-modal tr.ant-table-expanded-row>td,.ant-notification tr.ant-table-expanded-row:hover>td,.ant-notification tr.ant-table-expanded-row>td{background:#272727}.ant-drawer .ant-table.ant-table-small thead>tr>th{background-color:#212121;border-bottom:1px solid #3a3a3a}.ant-drawer .ant-picker-calendar-full,.ant-drawer .ant-table,.ant-drawer .ant-table tbody>tr>td.ant-table-cell-fix-left,.ant-drawer .ant-table tbody>tr>td.ant-table-cell-fix-right{background-color:#212121}.ant-drawer .ant-table .ant-table-row-expand-icon,.ant-drawer .ant-table.ant-table-bordered .ant-table-container,.ant-drawer .ant-table.ant-table-bordered .ant-table-footer,.ant-drawer .ant-table.ant-table-bordered .ant-table-title{border:1px solid #3a3a3a}.ant-drawer .ant-table tbody>tr>td,.ant-drawer .ant-table tfoot>tr>td,.ant-drawer .ant-table tfoot>tr>th{border-bottom:1px solid #3a3a3a}.ant-drawer .ant-table thead>tr>th{background-color:#272727;border-bottom:1px solid #3a3a3a}.ant-drawer .ant-table tbody>tr.ant-table-row:hover>td,.ant-modal .ant-table tbody>tr.ant-table-row:hover>td,.ant-notification .ant-table tbody>tr.ant-table-row:hover>td,.ant-table-thead th.ant-table-column-has-sorters:hover{background:#424242}.ant-drawer .ant-table.ant-table-bordered .ant-table-cell-fix-right-first::after,.ant-drawer .ant-table.ant-table-bordered .ant-table-expanded-row-fixed::after,.ant-drawer .ant-table.ant-table-bordered tbody>tr>td,.ant-drawer .ant-table.ant-table-bordered tfoot>tr>td,.ant-drawer .ant-table.ant-table-bordered tfoot>tr>th,.ant-drawer .ant-table.ant-table-bordered thead>tr>th{border-right:1px solid #3a3a3a}.ant-drawer .ant-table .ant-table-filter-trigger-container-open{background-color:#525252}.ant-drawer .ant-picker-calendar-full .ant-picker-panel{background-color:#212121}.ant-drawer .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{border-top:2px solid #3a3a3a}.ant-drawer .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{background-color:#212121;border-bottom:1px solid #212121}.ant-drawer .ant-badge-count{box-shadow:0 0 0 1px #212121}.ant-drawer .ant-tree-show-line .ant-tree-switcher{background:#212121}.ant-drawer-rtl{direction:rtl}.ant-drawer-rtl .ant-drawer-close{right:auto;left:0}.ant-dropdown-menu-item.ant-dropdown-menu-item-danger{color:#a31b26}.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover{color:#fff;background-color:#a31b26}.ant-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-dropdown::before{position:absolute;top:-7px;right:0;bottom:-7px;left:-7px;z-index:-9999;opacity:.0001;content:' '}.ant-dropdown-wrap{position:relative}.ant-dropdown-wrap .ant-btn>.anticon-down{display:inline-block;font-size:10px}.ant-dropdown-wrap .anticon-down::before{transition:transform .2s}.ant-dropdown-wrap-open .anticon-down::before{transform:rotate(180deg)}.ant-col-24.ant-form-item-label>label::after,.ant-col-xl-24.ant-form-item-label>label::after,.ant-dropdown-hidden,.ant-dropdown-menu-hidden,.ant-form-vertical .ant-form-item-label>label::after{display:none}.ant-dropdown-show-arrow.ant-dropdown-placement-topCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-topRight{padding-bottom:10px}.ant-dropdown-show-arrow.ant-dropdown-placement-bottomCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight{padding-top:10px}.ant-dropdown-arrow{position:absolute;z-index:1;display:block;width:8.48528137px;height:8.48528137px;background:0 0;border-style:solid;border-width:4.24264069px;transform:rotate(45deg)}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow,.ant-dropdown-placement-topLeft>.ant-dropdown-arrow,.ant-dropdown-placement-topRight>.ant-dropdown-arrow{bottom:6.2px;border-color:transparent #212121 #212121 transparent;box-shadow:3px 3px 7px rgba(0,0,0,.07)}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow{left:50%;transform:translateX(-50%) rotate(45deg)}.ant-dropdown-placement-topLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-topRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow,.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow,.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{top:6px;border-color:#212121 transparent transparent #212121;box-shadow:-2px -2px 5px rgba(0,0,0,.06)}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow{left:50%;transform:translateX(-50%) rotate(45deg)}.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-menu{position:relative;margin:0;padding:4px 0;text-align:left;list-style-type:none;background-color:#212121;background-clip:padding-box;border-radius:4px;outline:0;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-dropdown-menu-item-group-title{padding:5px 12px;color:rgba(255,255,255,.45);transition:all .3s}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050;background:0 0;box-shadow:none}.ant-dropdown-menu-submenu-popup>.ant-dropdown-menu{transform-origin:0 0}.ant-dropdown-menu-submenu-popup li,.ant-dropdown-menu-submenu-popup ul{list-style:none}.ant-dropdown-menu-submenu-popup ul{margin-right:.3em;margin-left:.3em}.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:rgba(255,255,255,.85);font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;cursor:pointer;transition:all .3s}.ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-menu-item>span>.anticon:first-child,.ant-dropdown-menu-submenu-title>.anticon:first-child,.ant-dropdown-menu-submenu-title>span>.anticon:first-child{min-width:12px;margin-right:8px;font-size:12px}.ant-dropdown-menu-item>a,.ant-dropdown-menu-submenu-title>a{display:block;margin:-5px -12px;padding:5px 12px;color:rgba(255,255,255,.85);transition:all .3s}.ant-dropdown-menu-item>.anticon+span>a,.ant-dropdown-menu-submenu-title>.anticon+span>a{color:rgba(255,255,255,.85);transition:all .3s}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-item-selected>a,.ant-dropdown-menu-submenu-title-selected,.ant-dropdown-menu-submenu-title-selected>a{color:#ffd90f;background-color:#232215}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:rgba(255,255,255,.08)}.ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu-title-disabled{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu-title-disabled:hover,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(255,255,255,.3);background-color:transparent;cursor:not-allowed}.ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:#424242}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow{position:absolute;right:8px}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{margin-right:0!important;color:rgba(255,255,255,.45);font-style:normal;display:inline-block;font-size:10px}.ant-dropdown-menu-item-group-list{margin:0 8px;padding:0;list-style:none}.ant-dropdown-menu-submenu-title{padding-right:24px}.ant-dropdown-menu-submenu-vertical{position:relative}.ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{position:absolute;top:0;left:100%;min-width:100%;margin-left:4px;transform-origin:0 0}.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title{color:#ffd90f}.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-appear.slide-down-appear-active.ant-dropdown-placement-bottomRight,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-enter.slide-down-enter-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpIn}.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-appear.slide-up-appear-active.ant-dropdown-placement-topRight,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-enter.slide-up-enter-active.ant-dropdown-placement-topRight{animation-name:antSlideDownIn}.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.slide-down-leave.slide-down-leave-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpOut}.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topCenter,.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.slide-up-leave.slide-up-leave-active.ant-dropdown-placement-topRight{animation-name:antSlideDownOut}.ant-dropdown-button>.anticon.anticon-down,.ant-dropdown-link>.anticon.anticon-down,.ant-dropdown-trigger>.anticon.anticon-down{vertical-align:baseline;display:inline-block;font-size:10px}.ant-dropdown-button{white-space:nowrap}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only){padding-right:8px;padding-left:8px}.ant-dropdown-menu-dark,.ant-dropdown-menu-dark .ant-dropdown-menu{background:#212121}.ant-dropdown-menu-dark .ant-dropdown-menu-item,.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow::after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a .ant-dropdown-menu-submenu-arrow::after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a .ant-dropdown-menu-submenu-arrow::after,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow::after{color:rgba(255,255,255,.65)}.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover{color:#fff;background:0 0}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected>a{color:#fff;background:#ffd90f}.ant-dropdown-rtl{direction:rtl}.ant-dropdown-rtl.ant-dropdown::before{right:-7px;left:0}.ant-dropdown-menu.ant-dropdown-menu-rtl,.ant-dropdown-rtl .ant-dropdown-menu-item-group-title{direction:rtl;text-align:right}.ant-dropdown-rtl .ant-dropdown-menu-item,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{text-align:right}.ant-dropdown-rtl .ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-item>span>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>span>.anticon:first-child{margin-right:0;margin-left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow{right:auto;left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{margin-left:0!important;transform:scaleX(-1)}.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{padding-right:12px;padding-left:24px}.ant-dropdown-rtl .ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{right:100%;left:0;margin-right:4px;margin-left:0}.ant-empty{margin:0 8px;font-size:14px;line-height:1.5715;text-align:center}.ant-empty-image{height:100px;margin-bottom:8px}.ant-empty-image svg{height:100%;margin:auto}.ant-empty-description{margin:0}.ant-empty-footer{margin-top:16px}.ant-empty-normal,.ant-empty-small{margin:32px 0;color:rgba(255,255,255,.3)}.ant-empty-normal .ant-empty-image{height:40px}.ant-empty-small{margin:8px 0}.ant-empty-small .ant-empty-image{height:35px}.ant-empty-img-default-ellipse{fill-opacity:.08;fill:#fff}.ant-empty-img-default-path-1{fill:#262626}.ant-empty-img-default-path-2{fill:url(#linearGradient-1)}.ant-empty-img-default-path-3{fill:#595959}.ant-empty-img-default-path-4{fill:#434343}.ant-empty-img-default-path-5{fill:#595959}.ant-empty-img-default-g{fill:#434343}.ant-empty-img-simple-ellipse{fill:#fff;fill-opacity:.08}.ant-empty-img-simple-g{stroke:#434343}.ant-empty-img-simple-path{fill:#262626;stroke:#434343}.ant-empty-rtl{direction:rtl}.ant-form select[multiple],.ant-form select[size],.ant-form-item .ant-mentions,.ant-form-item textarea.ant-input,.ant-form-vertical .ant-form-item-label>label{height:auto}.ant-form-item .ant-upload{background:0 0}.ant-form-item .ant-upload.ant-upload-drag{background:rgba(255,255,255,.04)}.ant-form-item input[type=checkbox],.ant-form-item input[type=radio]{width:14px;height:14px}.ant-form-item .ant-checkbox-inline,.ant-form-item .ant-radio-inline{display:inline-block;margin-left:8px;font-weight:400;vertical-align:middle;cursor:pointer}.ant-form-item .ant-checkbox-inline:first-child,.ant-form-item .ant-radio-inline:first-child{margin-left:0}.ant-form-item .ant-checkbox-vertical,.ant-form-item .ant-radio-vertical{display:block}.ant-form-item .ant-checkbox-vertical+.ant-checkbox-vertical,.ant-form-item .ant-radio-vertical+.ant-radio-vertical{margin-left:0}.ant-form-item .ant-input-number+.ant-form-text{margin-left:8px}.ant-form-item .ant-input-number-handler-wrap{z-index:2}.ant-form-item .ant-cascader-picker,.ant-form-item .ant-select{width:100%}.ant-form-item .ant-input-group .ant-cascader-picker,.ant-form-item .ant-input-group .ant-select,tr.ant-table-expanded-row .ant-descriptions-view table{width:auto}.ant-form-inline{display:flex;flex-wrap:wrap}.ant-form-inline .ant-form-item{flex:none;flex-wrap:nowrap;margin-right:16px;margin-bottom:0}.ant-form-inline .ant-form-item-with-help{margin-bottom:24px}.ant-form-inline .ant-form-item>.ant-form-item-control,.ant-form-inline .ant-form-item>.ant-form-item-label{display:inline-block;vertical-align:top}.ant-form-inline .ant-form-item>.ant-form-item-label{flex:none}.ant-form-inline .ant-form-item .ant-form-item-has-feedback,.ant-form-inline .ant-form-item .ant-form-text,.ant-input-number-handler-down-inner svg,.ant-input-number-handler-up-inner svg{display:inline-block}.ant-form-horizontal .ant-form-item-label{flex-grow:0}.ant-form-horizontal .ant-form-item-control{flex:1 1 0}.ant-form-vertical .ant-form-item{flex-direction:column}.ant-col-24.ant-form-item-label,.ant-col-xl-24.ant-form-item-label,.ant-form-vertical .ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-24.ant-form-item-label>label,.ant-col-xl-24.ant-form-item-label>label,.ant-form-vertical .ant-form-item-label>label{margin:0}.ant-form-rtl.ant-col-24.ant-form-item-label,.ant-form-rtl.ant-col-xl-24.ant-form-item-label,.ant-form-rtl.ant-form-vertical .ant-form-item-label{text-align:right}@media (max-width:575px){.ant-form-item .ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-xs-24.ant-form-item-label>label,.ant-form-item .ant-form-item-label>label{margin:0}.ant-col-xs-24.ant-form-item-label>label::after,.ant-form-item .ant-form-item-label>label::after{display:none}.ant-form-rtl.ant-form-item .ant-form-item-label{text-align:right}.ant-form .ant-form-item{flex-wrap:wrap}.ant-form .ant-form-item .ant-form-item-control,.ant-form .ant-form-item .ant-form-item-label{flex:0 0 100%;max-width:100%}.ant-col-xs-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-form-rtl.ant-col-xs-24.ant-form-item-label{text-align:right}}@media (max-width:767px){.ant-col-sm-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-sm-24.ant-form-item-label>label{margin:0}.ant-col-sm-24.ant-form-item-label>label::after{display:none}.ant-form-rtl.ant-col-sm-24.ant-form-item-label{text-align:right}}@media (max-width:991px){.ant-col-md-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-md-24.ant-form-item-label>label{margin:0}.ant-col-md-24.ant-form-item-label>label::after{display:none}.ant-form-rtl.ant-col-md-24.ant-form-item-label{text-align:right}}@media (max-width:1199px){.ant-col-lg-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-lg-24.ant-form-item-label>label{margin:0}.ant-col-lg-24.ant-form-item-label>label::after{display:none}.ant-form-rtl.ant-col-lg-24.ant-form-item-label{text-align:right}}@media (max-width:1599px){.ant-col-xl-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-xl-24.ant-form-item-label>label{margin:0}.ant-col-xl-24.ant-form-item-label>label::after{display:none}.ant-form-rtl.ant-col-xl-24.ant-form-item-label{text-align:right}}.ant-form-item-explain.ant-form-item-explain-error{color:#a31b26}.ant-form-item-explain.ant-form-item-explain-warning{color:#d69515}.ant-form-item-has-feedback .ant-input{padding-right:24px}.ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:18px}.ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix{right:28px}.ant-form-item-has-feedback .ant-switch{margin:2px 0 4px}.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-clear,.ant-form-item-has-feedback>.ant-select .ant-select-arrow,.ant-form-item-has-feedback>.ant-select .ant-select-clear{right:32px}.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,.ant-form-item-has-feedback>.ant-select .ant-select-selection-selected-value{padding-right:42px}.ant-form-item-has-feedback .ant-cascader-picker-arrow{margin-right:19px}.ant-form-item-has-feedback .ant-cascader-picker-clear{right:32px}.ant-form-item-has-feedback .ant-picker,.ant-form-item-has-feedback .ant-picker-large{padding-right:29.2px}.ant-form-item-has-feedback .ant-picker-small{padding-right:25.2px}.ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:20px;margin-top:-10px;font-size:14px;line-height:20px;text-align:center;visibility:visible;animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);pointer-events:none}.ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon svg,.ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon svg,.ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon svg,.ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon svg{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.ant-form-item-has-success.ant-form-item-has-feedback .ant-form-item-children-icon{color:#47a91a;animation-name:diffZoomIn1!important}.ant-form-item-has-warning .ant-form-item-split{color:#d69515}.ant-form-item-has-warning .ant-input,.ant-form-item-has-warning .ant-input-affix-wrapper,.ant-form-item-has-warning .ant-input-affix-wrapper:hover,.ant-form-item-has-warning .ant-input:hover{border-color:#d69515}.ant-form-item-has-warning .ant-input-affix-wrapper-focused,.ant-form-item-has-warning .ant-input-affix-wrapper:focus,.ant-form-item-has-warning .ant-input-focused,.ant-form-item-has-warning .ant-input:focus{border-color:#d69515;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(214,149,21,.2)}.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-form-item-has-warning .ant-input-affix-wrapper-disabled),.ant-form-item-has-warning .ant-input:not(.ant-form-item-has-warning .ant-input-disabled){background-color:transparent}.ant-form-item-has-error .ant-input-affix-wrapper input:focus,.ant-form-item-has-warning .ant-input-affix-wrapper input:focus{box-shadow:none!important}.ant-form-item-has-warning .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#d69515;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(214,149,21,.2)}.ant-form-item-has-warning .ant-input-prefix{color:#d69515}.ant-form-item-has-warning .ant-input-group-addon{color:#d69515;border-color:#d69515}.ant-form-item-has-warning .has-feedback{color:#d69515}.ant-form-item-has-warning.ant-form-item-has-feedback .ant-form-item-children-icon{color:#d69515;animation-name:diffZoomIn3!important}.ant-form-item-has-warning .ant-select:not(.ant-select-borderless) .ant-select-selector{border-color:#d69515!important}.ant-form-item-has-warning .ant-select:not(.ant-select-borderless).ant-select-focused .ant-select-selector,.ant-form-item-has-warning .ant-select:not(.ant-select-borderless).ant-select-open .ant-select-selector{border-color:#d69515;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(214,149,21,.2)}.ant-form-item-has-warning .ant-input-number,.ant-form-item-has-warning .ant-picker{border-color:#d69515}.ant-form-item-has-warning .ant-input-number-focused,.ant-form-item-has-warning .ant-input-number:focus,.ant-form-item-has-warning .ant-picker-focused,.ant-form-item-has-warning .ant-picker:focus{border-color:#d69515;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(214,149,21,.2)}.ant-form-item-has-warning .ant-input-number:not([disabled]):hover,.ant-form-item-has-warning .ant-picker:not([disabled]):hover{border-color:#d69515}.ant-form-item-has-warning .ant-cascader-picker:focus .ant-cascader-input{border-color:#d69515;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(214,149,21,.2)}.ant-form-item-has-error .ant-form-item-split{color:#a31b26}.ant-form-item-has-error .ant-input,.ant-form-item-has-error .ant-input-affix-wrapper,.ant-form-item-has-error .ant-input-affix-wrapper:hover,.ant-form-item-has-error .ant-input:hover{border-color:#a31b26}.ant-form-item-has-error .ant-input-affix-wrapper-focused,.ant-form-item-has-error .ant-input-affix-wrapper:focus,.ant-form-item-has-error .ant-input-focused,.ant-form-item-has-error .ant-input:focus{border-color:#a31b26;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(163,27,38,.2)}.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-form-item-has-error .ant-input-affix-wrapper-disabled),.ant-form-item-has-error .ant-input:not(.ant-form-item-has-error .ant-input-disabled){background-color:transparent}.ant-form-item-has-error .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#a31b26;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(163,27,38,.2)}.ant-form-item-has-error .ant-input-prefix{color:#a31b26}.ant-form-item-has-error .ant-input-group-addon{color:#a31b26;border-color:#a31b26}.ant-form-item-has-error .has-feedback{color:#a31b26}.ant-form-item-has-error.ant-form-item-has-feedback .ant-form-item-children-icon{color:#a31b26;animation-name:diffZoomIn2!important}.ant-form-item-has-error .ant-select:not(.ant-select-borderless) .ant-select-selector{border-color:#a31b26!important}.ant-form-item-has-error .ant-select:not(.ant-select-borderless).ant-select-focused .ant-select-selector,.ant-form-item-has-error .ant-select:not(.ant-select-borderless).ant-select-open .ant-select-selector{border-color:#a31b26;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(163,27,38,.2)}.ant-form-item-has-error .ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{border:0}.ant-form-item-has-error .ant-select.ant-select-auto-complete .ant-input:focus{border-color:#a31b26}.ant-form-item-has-error .ant-input-number,.ant-form-item-has-error .ant-picker{border-color:#a31b26}.ant-form-item-has-error .ant-input-number-focused,.ant-form-item-has-error .ant-input-number:focus,.ant-form-item-has-error .ant-picker-focused,.ant-form-item-has-error .ant-picker:focus{border-color:#a31b26;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(163,27,38,.2)}.ant-form-item-has-error .ant-input-number:not([disabled]):hover,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover,.ant-form-item-has-error .ant-picker:not([disabled]):hover{border-color:#a31b26}.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus,.ant-form-item-has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor{border-color:#a31b26;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(163,27,38,.2)}.ant-form-item-has-error .ant-cascader-picker:focus .ant-cascader-input{border-color:#a31b26;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(163,27,38,.2)}.ant-form-item-has-error .ant-transfer-list{border-color:#a31b26}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]){border-color:#6f6c6c}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):hover{border-color:#a99213;border-right-width:1px!important}.ant-input-rtl .ant-form-item-has-error .ant-transfer-list-search:not([disabled]):hover{border-right-width:0;border-left-width:1px!important}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):focus{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-form-item-has-error .ant-transfer-list-search:not([disabled]):focus{border-right-width:0;border-left-width:1px!important}.ant-form-item-has-error .ant-radio-button-wrapper{border-color:#a31b26!important}.ant-form-item-has-error .ant-radio-button-wrapper:not(:first-child)::before{background-color:#a31b26}.ant-form-item-is-validating.ant-form-item-has-feedback .ant-form-item-children-icon{display:inline-block;color:#ffd90f}.ant-form{margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum'}.ant-form legend{display:block;width:100%;margin-bottom:20px;padding:0;color:rgba(255,255,255,.45);font-size:16px;line-height:inherit;border:0;border-bottom:1px solid #6f6c6c}.ant-form,.ant-form input[type=search]{box-sizing:border-box}.ant-form input[type=checkbox],.ant-form input[type=radio]{line-height:normal}.ant-form input[type=file]{display:block}.ant-form input[type=range]{display:block;width:100%}.ant-form input[type=checkbox]:focus,.ant-form input[type=file]:focus,.ant-form input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ant-form output,.ant-form-item{color:rgba(255,255,255,.85);font-size:14px;line-height:1.5715}.ant-form output{display:block;padding-top:15px}.ant-form .ant-form-text{display:inline-block;padding-right:8px}.ant-form-small .ant-form-item-label>label{height:24px}.ant-form-small .ant-form-item-control-input{min-height:24px}.ant-form-large .ant-form-item-label>label{height:40px}.ant-form-large .ant-form-item-control-input{min-height:40px}.ant-form-item{box-sizing:border-box;padding:0;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';margin:0 0 24px;vertical-align:top}.ant-form-item-with-help{margin-bottom:0}.ant-form-hide-required-mark .ant-form-item-label>label .ant-form-item-optional,.ant-form-item-hidden,.ant-form-item-hidden.ant-row{display:none}.ant-form-item-label{display:inline-block;flex-grow:0;overflow:hidden;white-space:nowrap;text-align:right;vertical-align:middle}.ant-form-item-label-left{text-align:left}.ant-form-item-label>label{position:relative;display:inline-flex;align-items:center;height:32px;color:rgba(255,255,255,.85);font-size:14px}.ant-form-item-label>label>.anticon{font-size:14px;vertical-align:top}.ant-form-item-label>label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before{display:inline-block;margin-right:4px;color:#a31b26;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:'*'}.ant-form-hide-required-mark .ant-form-item-label>label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before{display:none}.ant-form-item-label>label .ant-form-item-optional{display:inline-block;margin-left:4px;color:rgba(255,255,255,.45)}.ant-form-item-label>label .ant-form-item-tooltip{-ms-writing-mode:lr-tb;writing-mode:horizontal-tb;-webkit-margin-start:4px;margin-inline-start:4px;color:rgba(255,255,255,.45)}.ant-form-item-label>label.ant-form-item-no-colon::after{content:' '}.ant-form-item-control{display:flex;flex-direction:column;flex-grow:1}.ant-form-item-control:first-child:not([class^=ant-col-]):not([class*=' ant-col-']){width:100%}.ant-form-item-control-input{position:relative;display:flex;align-items:center;min-height:32px}.ant-form-item-control-input-content{flex:auto;max-width:100%}.ant-form-item-explain,.ant-form-item-extra{clear:both;min-height:24px;padding-top:0;color:rgba(255,255,255,.45);font-size:14px;line-height:1.5715;transition:color .3s cubic-bezier(.215,.61,.355,1)}.show-help-appear,.show-help-enter,.show-help-leave{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.show-help-appear.show-help-appear-active,.show-help-enter.show-help-enter-active{animation-name:antShowHelpIn;animation-play-state:running}.show-help-leave.show-help-leave-active{animation-name:antShowHelpOut;animation-play-state:running;pointer-events:none}.show-help-appear,.show-help-enter{opacity:0}.show-help-appear,.show-help-enter,.show-help-leave{animation-timing-function:cubic-bezier(.645,.045,.355,1)}.ant-form-rtl{direction:rtl}.ant-form-rtl .ant-form-item-label{text-align:left}.ant-form-rtl .ant-form-item-label>label.ant-form-item-required::before{margin-right:0;margin-left:4px}.ant-form-rtl .ant-form-item-label>label::after{margin:0 2px 0 8px}.ant-form-rtl .ant-form-item-label>label .ant-form-item-optional{margin-right:4px;margin-left:0}.ant-col-rtl .ant-form-item-control:first-child{width:100%}.ant-form-rtl .ant-form-item-has-feedback .ant-input{padding-right:11px;padding-left:24px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:11px;padding-left:18px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input{padding:0}.ant-form-rtl .ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix{right:auto;left:28px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-number{padding-left:18px}.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-clear,.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-clear{right:auto;left:32px}.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-selection-selected-value{padding-right:0;padding-left:42px}.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-arrow{margin-right:0;margin-left:19px}.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-clear{right:auto;left:32px}.ant-form-rtl .ant-form-item-has-feedback .ant-picker,.ant-form-rtl .ant-form-item-has-feedback .ant-picker-large{padding-right:11px;padding-left:29.2px}.ant-form-rtl .ant-form-item-has-feedback .ant-picker-small{padding-right:7px;padding-left:25.2px}.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon{right:auto;left:0}.ant-form-rtl.ant-form-inline .ant-form-item{margin-right:0;margin-left:16px}.ant-row{flex-flow:row wrap}.ant-row,.ant-row::after,.ant-row::before{display:flex}.ant-row-start{justify-content:flex-start}.ant-row-center{justify-content:center}.ant-row-end{justify-content:flex-end}.ant-row-space-between{justify-content:space-between}.ant-row-space-around{justify-content:space-around}.ant-row-top{align-items:flex-start}.ant-row-middle{align-items:center}.ant-row-bottom{align-items:flex-end}.ant-col{position:relative;max-width:100%;min-height:1px}.ant-col-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-push-24{left:100%}.ant-col-pull-24{right:100%}.ant-col-offset-24{margin-left:100%}.ant-col-order-24{order:24}.ant-col-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-push-23{left:95.83333333%}.ant-col-pull-23{right:95.83333333%}.ant-col-offset-23{margin-left:95.83333333%}.ant-col-order-23{order:23}.ant-col-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-push-22{left:91.66666667%}.ant-col-pull-22{right:91.66666667%}.ant-col-offset-22{margin-left:91.66666667%}.ant-col-order-22{order:22}.ant-col-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-push-21{left:87.5%}.ant-col-pull-21{right:87.5%}.ant-col-offset-21{margin-left:87.5%}.ant-col-order-21{order:21}.ant-col-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-push-20{left:83.33333333%}.ant-col-pull-20{right:83.33333333%}.ant-col-offset-20{margin-left:83.33333333%}.ant-col-order-20{order:20}.ant-col-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-push-19{left:79.16666667%}.ant-col-pull-19{right:79.16666667%}.ant-col-offset-19{margin-left:79.16666667%}.ant-col-order-19{order:19}.ant-col-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-push-18{left:75%}.ant-col-pull-18{right:75%}.ant-col-offset-18{margin-left:75%}.ant-col-order-18{order:18}.ant-col-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-push-17{left:70.83333333%}.ant-col-pull-17{right:70.83333333%}.ant-col-offset-17{margin-left:70.83333333%}.ant-col-order-17{order:17}.ant-col-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-push-16{left:66.66666667%}.ant-col-pull-16{right:66.66666667%}.ant-col-offset-16{margin-left:66.66666667%}.ant-col-order-16{order:16}.ant-col-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-push-15{left:62.5%}.ant-col-pull-15{right:62.5%}.ant-col-offset-15{margin-left:62.5%}.ant-col-order-15{order:15}.ant-col-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-push-14{left:58.33333333%}.ant-col-pull-14{right:58.33333333%}.ant-col-offset-14{margin-left:58.33333333%}.ant-col-order-14{order:14}.ant-col-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-push-13{left:54.16666667%}.ant-col-pull-13{right:54.16666667%}.ant-col-offset-13{margin-left:54.16666667%}.ant-col-order-13{order:13}.ant-col-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-push-12{left:50%}.ant-col-pull-12{right:50%}.ant-col-offset-12{margin-left:50%}.ant-col-order-12{order:12}.ant-col-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-push-11{left:45.83333333%}.ant-col-pull-11{right:45.83333333%}.ant-col-offset-11{margin-left:45.83333333%}.ant-col-order-11{order:11}.ant-col-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-push-10{left:41.66666667%}.ant-col-pull-10{right:41.66666667%}.ant-col-offset-10{margin-left:41.66666667%}.ant-col-order-10{order:10}.ant-col-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-push-9{left:37.5%}.ant-col-pull-9{right:37.5%}.ant-col-offset-9{margin-left:37.5%}.ant-col-order-9{order:9}.ant-col-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-push-8{left:33.33333333%}.ant-col-pull-8{right:33.33333333%}.ant-col-offset-8{margin-left:33.33333333%}.ant-col-order-8{order:8}.ant-col-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-push-7{left:29.16666667%}.ant-col-pull-7{right:29.16666667%}.ant-col-offset-7{margin-left:29.16666667%}.ant-col-order-7{order:7}.ant-col-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-push-6{left:25%}.ant-col-pull-6{right:25%}.ant-col-offset-6{margin-left:25%}.ant-col-order-6{order:6}.ant-col-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-push-5{left:20.83333333%}.ant-col-pull-5{right:20.83333333%}.ant-col-offset-5{margin-left:20.83333333%}.ant-col-order-5{order:5}.ant-col-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-push-4{left:16.66666667%}.ant-col-pull-4{right:16.66666667%}.ant-col-offset-4{margin-left:16.66666667%}.ant-col-order-4{order:4}.ant-col-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-push-3{left:12.5%}.ant-col-pull-3{right:12.5%}.ant-col-offset-3{margin-left:12.5%}.ant-col-order-3{order:3}.ant-col-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-push-2{left:8.33333333%}.ant-col-pull-2{right:8.33333333%}.ant-col-offset-2{margin-left:8.33333333%}.ant-col-order-2{order:2}.ant-col-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-push-1{left:4.16666667%}.ant-col-pull-1{right:4.16666667%}.ant-col-offset-1{margin-left:4.16666667%}.ant-col-order-1{order:1}.ant-col-0{display:none}.ant-col-offset-0{margin-left:0}.ant-col-order-0{order:0}.ant-col-offset-0.ant-col-rtl{margin-right:0}.ant-col-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}.ant-col-xs-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xs-push-24{left:100%}.ant-col-xs-pull-24{right:100%}.ant-col-xs-offset-24{margin-left:100%}.ant-col-xs-order-24{order:24}.ant-col-xs-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xs-push-23{left:95.83333333%}.ant-col-xs-pull-23{right:95.83333333%}.ant-col-xs-offset-23{margin-left:95.83333333%}.ant-col-xs-order-23{order:23}.ant-col-xs-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xs-push-22{left:91.66666667%}.ant-col-xs-pull-22{right:91.66666667%}.ant-col-xs-offset-22{margin-left:91.66666667%}.ant-col-xs-order-22{order:22}.ant-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xs-push-21{left:87.5%}.ant-col-xs-pull-21{right:87.5%}.ant-col-xs-offset-21{margin-left:87.5%}.ant-col-xs-order-21{order:21}.ant-col-xs-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xs-push-20{left:83.33333333%}.ant-col-xs-pull-20{right:83.33333333%}.ant-col-xs-offset-20{margin-left:83.33333333%}.ant-col-xs-order-20{order:20}.ant-col-xs-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xs-push-19{left:79.16666667%}.ant-col-xs-pull-19{right:79.16666667%}.ant-col-xs-offset-19{margin-left:79.16666667%}.ant-col-xs-order-19{order:19}.ant-col-xs-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xs-push-18{left:75%}.ant-col-xs-pull-18{right:75%}.ant-col-xs-offset-18{margin-left:75%}.ant-col-xs-order-18{order:18}.ant-col-xs-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xs-push-17{left:70.83333333%}.ant-col-xs-pull-17{right:70.83333333%}.ant-col-xs-offset-17{margin-left:70.83333333%}.ant-col-xs-order-17{order:17}.ant-col-xs-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xs-push-16{left:66.66666667%}.ant-col-xs-pull-16{right:66.66666667%}.ant-col-xs-offset-16{margin-left:66.66666667%}.ant-col-xs-order-16{order:16}.ant-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xs-push-15{left:62.5%}.ant-col-xs-pull-15{right:62.5%}.ant-col-xs-offset-15{margin-left:62.5%}.ant-col-xs-order-15{order:15}.ant-col-xs-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xs-push-14{left:58.33333333%}.ant-col-xs-pull-14{right:58.33333333%}.ant-col-xs-offset-14{margin-left:58.33333333%}.ant-col-xs-order-14{order:14}.ant-col-xs-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xs-push-13{left:54.16666667%}.ant-col-xs-pull-13{right:54.16666667%}.ant-col-xs-offset-13{margin-left:54.16666667%}.ant-col-xs-order-13{order:13}.ant-col-xs-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xs-push-12{left:50%}.ant-col-xs-pull-12{right:50%}.ant-col-xs-offset-12{margin-left:50%}.ant-col-xs-order-12{order:12}.ant-col-xs-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xs-push-11{left:45.83333333%}.ant-col-xs-pull-11{right:45.83333333%}.ant-col-xs-offset-11{margin-left:45.83333333%}.ant-col-xs-order-11{order:11}.ant-col-xs-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xs-push-10{left:41.66666667%}.ant-col-xs-pull-10{right:41.66666667%}.ant-col-xs-offset-10{margin-left:41.66666667%}.ant-col-xs-order-10{order:10}.ant-col-xs-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xs-push-9{left:37.5%}.ant-col-xs-pull-9{right:37.5%}.ant-col-xs-offset-9{margin-left:37.5%}.ant-col-xs-order-9{order:9}.ant-col-xs-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xs-push-8{left:33.33333333%}.ant-col-xs-pull-8{right:33.33333333%}.ant-col-xs-offset-8{margin-left:33.33333333%}.ant-col-xs-order-8{order:8}.ant-col-xs-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xs-push-7{left:29.16666667%}.ant-col-xs-pull-7{right:29.16666667%}.ant-col-xs-offset-7{margin-left:29.16666667%}.ant-col-xs-order-7{order:7}.ant-col-xs-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xs-push-6{left:25%}.ant-col-xs-pull-6{right:25%}.ant-col-xs-offset-6{margin-left:25%}.ant-col-xs-order-6{order:6}.ant-col-xs-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xs-push-5{left:20.83333333%}.ant-col-xs-pull-5{right:20.83333333%}.ant-col-xs-offset-5{margin-left:20.83333333%}.ant-col-xs-order-5{order:5}.ant-col-xs-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xs-push-4{left:16.66666667%}.ant-col-xs-pull-4{right:16.66666667%}.ant-col-xs-offset-4{margin-left:16.66666667%}.ant-col-xs-order-4{order:4}.ant-col-xs-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xs-push-3{left:12.5%}.ant-col-xs-pull-3{right:12.5%}.ant-col-xs-offset-3{margin-left:12.5%}.ant-col-xs-order-3{order:3}.ant-col-xs-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xs-push-2{left:8.33333333%}.ant-col-xs-pull-2{right:8.33333333%}.ant-col-xs-offset-2{margin-left:8.33333333%}.ant-col-xs-order-2{order:2}.ant-col-xs-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xs-push-1{left:4.16666667%}.ant-col-xs-pull-1{right:4.16666667%}.ant-col-xs-offset-1{margin-left:4.16666667%}.ant-col-xs-order-1{order:1}.ant-col-xs-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xs-push-0{left:auto}.ant-col-push-0.ant-col-rtl,.ant-col-xs-pull-0{right:auto}.ant-col-xs-offset-0{margin-left:0}.ant-col-xs-order-0{order:0}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xs-push-0.ant-col-rtl{right:auto}.ant-col-xs-pull-0.ant-col-rtl{left:auto}.ant-col-xs-offset-0.ant-col-rtl{margin-right:0}.ant-col-xs-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xs-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xs-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xs-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xs-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xs-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xs-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xs-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xs-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xs-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xs-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xs-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xs-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xs-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xs-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xs-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xs-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xs-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xs-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xs-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xs-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xs-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xs-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xs-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xs-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xs-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xs-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xs-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xs-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xs-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xs-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xs-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xs-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xs-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xs-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xs-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xs-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xs-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xs-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xs-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xs-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xs-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xs-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xs-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xs-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xs-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xs-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xs-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xs-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xs-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xs-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xs-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xs-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xs-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xs-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xs-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xs-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xs-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xs-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xs-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xs-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xs-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xs-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xs-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xs-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xs-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xs-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xs-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xs-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xs-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xs-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xs-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}@media (min-width:576px){.ant-col-sm-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-sm-push-24{left:100%}.ant-col-sm-pull-24{right:100%}.ant-col-sm-offset-24{margin-left:100%}.ant-col-sm-order-24{order:24}.ant-col-sm-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-sm-push-23{left:95.83333333%}.ant-col-sm-pull-23{right:95.83333333%}.ant-col-sm-offset-23{margin-left:95.83333333%}.ant-col-sm-order-23{order:23}.ant-col-sm-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-sm-push-22{left:91.66666667%}.ant-col-sm-pull-22{right:91.66666667%}.ant-col-sm-offset-22{margin-left:91.66666667%}.ant-col-sm-order-22{order:22}.ant-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-sm-push-21{left:87.5%}.ant-col-sm-pull-21{right:87.5%}.ant-col-sm-offset-21{margin-left:87.5%}.ant-col-sm-order-21{order:21}.ant-col-sm-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-sm-push-20{left:83.33333333%}.ant-col-sm-pull-20{right:83.33333333%}.ant-col-sm-offset-20{margin-left:83.33333333%}.ant-col-sm-order-20{order:20}.ant-col-sm-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-sm-push-19{left:79.16666667%}.ant-col-sm-pull-19{right:79.16666667%}.ant-col-sm-offset-19{margin-left:79.16666667%}.ant-col-sm-order-19{order:19}.ant-col-sm-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-sm-push-18{left:75%}.ant-col-sm-pull-18{right:75%}.ant-col-sm-offset-18{margin-left:75%}.ant-col-sm-order-18{order:18}.ant-col-sm-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-sm-push-17{left:70.83333333%}.ant-col-sm-pull-17{right:70.83333333%}.ant-col-sm-offset-17{margin-left:70.83333333%}.ant-col-sm-order-17{order:17}.ant-col-sm-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-sm-push-16{left:66.66666667%}.ant-col-sm-pull-16{right:66.66666667%}.ant-col-sm-offset-16{margin-left:66.66666667%}.ant-col-sm-order-16{order:16}.ant-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-sm-push-15{left:62.5%}.ant-col-sm-pull-15{right:62.5%}.ant-col-sm-offset-15{margin-left:62.5%}.ant-col-sm-order-15{order:15}.ant-col-sm-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-sm-push-14{left:58.33333333%}.ant-col-sm-pull-14{right:58.33333333%}.ant-col-sm-offset-14{margin-left:58.33333333%}.ant-col-sm-order-14{order:14}.ant-col-sm-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-sm-push-13{left:54.16666667%}.ant-col-sm-pull-13{right:54.16666667%}.ant-col-sm-offset-13{margin-left:54.16666667%}.ant-col-sm-order-13{order:13}.ant-col-sm-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-sm-push-12{left:50%}.ant-col-sm-pull-12{right:50%}.ant-col-sm-offset-12{margin-left:50%}.ant-col-sm-order-12{order:12}.ant-col-sm-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-sm-push-11{left:45.83333333%}.ant-col-sm-pull-11{right:45.83333333%}.ant-col-sm-offset-11{margin-left:45.83333333%}.ant-col-sm-order-11{order:11}.ant-col-sm-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-sm-push-10{left:41.66666667%}.ant-col-sm-pull-10{right:41.66666667%}.ant-col-sm-offset-10{margin-left:41.66666667%}.ant-col-sm-order-10{order:10}.ant-col-sm-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-sm-push-9{left:37.5%}.ant-col-sm-pull-9{right:37.5%}.ant-col-sm-offset-9{margin-left:37.5%}.ant-col-sm-order-9{order:9}.ant-col-sm-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-sm-push-8{left:33.33333333%}.ant-col-sm-pull-8{right:33.33333333%}.ant-col-sm-offset-8{margin-left:33.33333333%}.ant-col-sm-order-8{order:8}.ant-col-sm-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-sm-push-7{left:29.16666667%}.ant-col-sm-pull-7{right:29.16666667%}.ant-col-sm-offset-7{margin-left:29.16666667%}.ant-col-sm-order-7{order:7}.ant-col-sm-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-sm-push-6{left:25%}.ant-col-sm-pull-6{right:25%}.ant-col-sm-offset-6{margin-left:25%}.ant-col-sm-order-6{order:6}.ant-col-sm-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-sm-push-5{left:20.83333333%}.ant-col-sm-pull-5{right:20.83333333%}.ant-col-sm-offset-5{margin-left:20.83333333%}.ant-col-sm-order-5{order:5}.ant-col-sm-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-sm-push-4{left:16.66666667%}.ant-col-sm-pull-4{right:16.66666667%}.ant-col-sm-offset-4{margin-left:16.66666667%}.ant-col-sm-order-4{order:4}.ant-col-sm-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-sm-push-3{left:12.5%}.ant-col-sm-pull-3{right:12.5%}.ant-col-sm-offset-3{margin-left:12.5%}.ant-col-sm-order-3{order:3}.ant-col-sm-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-sm-push-2{left:8.33333333%}.ant-col-sm-pull-2{right:8.33333333%}.ant-col-sm-offset-2{margin-left:8.33333333%}.ant-col-sm-order-2{order:2}.ant-col-sm-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-sm-push-1{left:4.16666667%}.ant-col-sm-pull-1{right:4.16666667%}.ant-col-sm-offset-1{margin-left:4.16666667%}.ant-col-sm-order-1{order:1}.ant-col-sm-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-sm-push-0{left:auto}.ant-col-push-0.ant-col-rtl,.ant-col-sm-pull-0{right:auto}.ant-col-sm-offset-0{margin-left:0}.ant-col-sm-order-0{order:0}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-sm-push-0.ant-col-rtl{right:auto}.ant-col-sm-pull-0.ant-col-rtl{left:auto}.ant-col-sm-offset-0.ant-col-rtl{margin-right:0}.ant-col-sm-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-sm-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-sm-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-sm-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-sm-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-sm-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-sm-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-sm-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-sm-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-sm-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-sm-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-sm-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-sm-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-sm-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-sm-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-sm-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-sm-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-sm-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-sm-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-sm-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-sm-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-sm-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-sm-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-sm-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-sm-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-sm-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-sm-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-sm-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-sm-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-sm-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-sm-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-sm-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-sm-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-sm-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-sm-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-sm-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-sm-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-sm-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-sm-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-sm-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-sm-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-sm-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-sm-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-sm-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-sm-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-sm-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-sm-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-sm-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-sm-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-sm-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-sm-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-sm-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-sm-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-sm-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-sm-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-sm-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-sm-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-sm-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-sm-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-sm-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-sm-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-sm-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-sm-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-sm-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-sm-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-sm-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-sm-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-sm-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-sm-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-sm-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-sm-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-sm-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width:768px){.ant-col-md-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-md-push-24{left:100%}.ant-col-md-pull-24{right:100%}.ant-col-md-offset-24{margin-left:100%}.ant-col-md-order-24{order:24}.ant-col-md-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-md-push-23{left:95.83333333%}.ant-col-md-pull-23{right:95.83333333%}.ant-col-md-offset-23{margin-left:95.83333333%}.ant-col-md-order-23{order:23}.ant-col-md-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-md-push-22{left:91.66666667%}.ant-col-md-pull-22{right:91.66666667%}.ant-col-md-offset-22{margin-left:91.66666667%}.ant-col-md-order-22{order:22}.ant-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-md-push-21{left:87.5%}.ant-col-md-pull-21{right:87.5%}.ant-col-md-offset-21{margin-left:87.5%}.ant-col-md-order-21{order:21}.ant-col-md-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-md-push-20{left:83.33333333%}.ant-col-md-pull-20{right:83.33333333%}.ant-col-md-offset-20{margin-left:83.33333333%}.ant-col-md-order-20{order:20}.ant-col-md-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-md-push-19{left:79.16666667%}.ant-col-md-pull-19{right:79.16666667%}.ant-col-md-offset-19{margin-left:79.16666667%}.ant-col-md-order-19{order:19}.ant-col-md-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-md-push-18{left:75%}.ant-col-md-pull-18{right:75%}.ant-col-md-offset-18{margin-left:75%}.ant-col-md-order-18{order:18}.ant-col-md-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-md-push-17{left:70.83333333%}.ant-col-md-pull-17{right:70.83333333%}.ant-col-md-offset-17{margin-left:70.83333333%}.ant-col-md-order-17{order:17}.ant-col-md-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-md-push-16{left:66.66666667%}.ant-col-md-pull-16{right:66.66666667%}.ant-col-md-offset-16{margin-left:66.66666667%}.ant-col-md-order-16{order:16}.ant-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-md-push-15{left:62.5%}.ant-col-md-pull-15{right:62.5%}.ant-col-md-offset-15{margin-left:62.5%}.ant-col-md-order-15{order:15}.ant-col-md-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-md-push-14{left:58.33333333%}.ant-col-md-pull-14{right:58.33333333%}.ant-col-md-offset-14{margin-left:58.33333333%}.ant-col-md-order-14{order:14}.ant-col-md-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-md-push-13{left:54.16666667%}.ant-col-md-pull-13{right:54.16666667%}.ant-col-md-offset-13{margin-left:54.16666667%}.ant-col-md-order-13{order:13}.ant-col-md-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-md-push-12{left:50%}.ant-col-md-pull-12{right:50%}.ant-col-md-offset-12{margin-left:50%}.ant-col-md-order-12{order:12}.ant-col-md-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-md-push-11{left:45.83333333%}.ant-col-md-pull-11{right:45.83333333%}.ant-col-md-offset-11{margin-left:45.83333333%}.ant-col-md-order-11{order:11}.ant-col-md-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-md-push-10{left:41.66666667%}.ant-col-md-pull-10{right:41.66666667%}.ant-col-md-offset-10{margin-left:41.66666667%}.ant-col-md-order-10{order:10}.ant-col-md-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-md-push-9{left:37.5%}.ant-col-md-pull-9{right:37.5%}.ant-col-md-offset-9{margin-left:37.5%}.ant-col-md-order-9{order:9}.ant-col-md-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-md-push-8{left:33.33333333%}.ant-col-md-pull-8{right:33.33333333%}.ant-col-md-offset-8{margin-left:33.33333333%}.ant-col-md-order-8{order:8}.ant-col-md-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-md-push-7{left:29.16666667%}.ant-col-md-pull-7{right:29.16666667%}.ant-col-md-offset-7{margin-left:29.16666667%}.ant-col-md-order-7{order:7}.ant-col-md-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-md-push-6{left:25%}.ant-col-md-pull-6{right:25%}.ant-col-md-offset-6{margin-left:25%}.ant-col-md-order-6{order:6}.ant-col-md-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-md-push-5{left:20.83333333%}.ant-col-md-pull-5{right:20.83333333%}.ant-col-md-offset-5{margin-left:20.83333333%}.ant-col-md-order-5{order:5}.ant-col-md-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-md-push-4{left:16.66666667%}.ant-col-md-pull-4{right:16.66666667%}.ant-col-md-offset-4{margin-left:16.66666667%}.ant-col-md-order-4{order:4}.ant-col-md-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-md-push-3{left:12.5%}.ant-col-md-pull-3{right:12.5%}.ant-col-md-offset-3{margin-left:12.5%}.ant-col-md-order-3{order:3}.ant-col-md-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-md-push-2{left:8.33333333%}.ant-col-md-pull-2{right:8.33333333%}.ant-col-md-offset-2{margin-left:8.33333333%}.ant-col-md-order-2{order:2}.ant-col-md-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-md-push-1{left:4.16666667%}.ant-col-md-pull-1{right:4.16666667%}.ant-col-md-offset-1{margin-left:4.16666667%}.ant-col-md-order-1{order:1}.ant-col-md-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-md-push-0{left:auto}.ant-col-md-pull-0,.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-md-offset-0{margin-left:0}.ant-col-md-order-0{order:0}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-md-push-0.ant-col-rtl{right:auto}.ant-col-md-pull-0.ant-col-rtl{left:auto}.ant-col-md-offset-0.ant-col-rtl{margin-right:0}.ant-col-md-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-md-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-md-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-md-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-md-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-md-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-md-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-md-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-md-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-md-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-md-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-md-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-md-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-md-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-md-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-md-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-md-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-md-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-md-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-md-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-md-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-md-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-md-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-md-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-md-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-md-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-md-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-md-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-md-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-md-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-md-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-md-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-md-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-md-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-md-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-md-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-md-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-md-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-md-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-md-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-md-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-md-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-md-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-md-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-md-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-md-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-md-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-md-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-md-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-md-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-md-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-md-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-md-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-md-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-md-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-md-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-md-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-md-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-md-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-md-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-md-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-md-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-md-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-md-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-md-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-md-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-md-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-md-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-md-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-md-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-md-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-md-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width:992px){.ant-col-lg-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-lg-push-24{left:100%}.ant-col-lg-pull-24{right:100%}.ant-col-lg-offset-24{margin-left:100%}.ant-col-lg-order-24{order:24}.ant-col-lg-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-lg-push-23{left:95.83333333%}.ant-col-lg-pull-23{right:95.83333333%}.ant-col-lg-offset-23{margin-left:95.83333333%}.ant-col-lg-order-23{order:23}.ant-col-lg-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-lg-push-22{left:91.66666667%}.ant-col-lg-pull-22{right:91.66666667%}.ant-col-lg-offset-22{margin-left:91.66666667%}.ant-col-lg-order-22{order:22}.ant-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-lg-push-21{left:87.5%}.ant-col-lg-pull-21{right:87.5%}.ant-col-lg-offset-21{margin-left:87.5%}.ant-col-lg-order-21{order:21}.ant-col-lg-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-lg-push-20{left:83.33333333%}.ant-col-lg-pull-20{right:83.33333333%}.ant-col-lg-offset-20{margin-left:83.33333333%}.ant-col-lg-order-20{order:20}.ant-col-lg-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-lg-push-19{left:79.16666667%}.ant-col-lg-pull-19{right:79.16666667%}.ant-col-lg-offset-19{margin-left:79.16666667%}.ant-col-lg-order-19{order:19}.ant-col-lg-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-lg-push-18{left:75%}.ant-col-lg-pull-18{right:75%}.ant-col-lg-offset-18{margin-left:75%}.ant-col-lg-order-18{order:18}.ant-col-lg-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-lg-push-17{left:70.83333333%}.ant-col-lg-pull-17{right:70.83333333%}.ant-col-lg-offset-17{margin-left:70.83333333%}.ant-col-lg-order-17{order:17}.ant-col-lg-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-lg-push-16{left:66.66666667%}.ant-col-lg-pull-16{right:66.66666667%}.ant-col-lg-offset-16{margin-left:66.66666667%}.ant-col-lg-order-16{order:16}.ant-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-lg-push-15{left:62.5%}.ant-col-lg-pull-15{right:62.5%}.ant-col-lg-offset-15{margin-left:62.5%}.ant-col-lg-order-15{order:15}.ant-col-lg-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-lg-push-14{left:58.33333333%}.ant-col-lg-pull-14{right:58.33333333%}.ant-col-lg-offset-14{margin-left:58.33333333%}.ant-col-lg-order-14{order:14}.ant-col-lg-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-lg-push-13{left:54.16666667%}.ant-col-lg-pull-13{right:54.16666667%}.ant-col-lg-offset-13{margin-left:54.16666667%}.ant-col-lg-order-13{order:13}.ant-col-lg-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-lg-push-12{left:50%}.ant-col-lg-pull-12{right:50%}.ant-col-lg-offset-12{margin-left:50%}.ant-col-lg-order-12{order:12}.ant-col-lg-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-lg-push-11{left:45.83333333%}.ant-col-lg-pull-11{right:45.83333333%}.ant-col-lg-offset-11{margin-left:45.83333333%}.ant-col-lg-order-11{order:11}.ant-col-lg-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-lg-push-10{left:41.66666667%}.ant-col-lg-pull-10{right:41.66666667%}.ant-col-lg-offset-10{margin-left:41.66666667%}.ant-col-lg-order-10{order:10}.ant-col-lg-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-lg-push-9{left:37.5%}.ant-col-lg-pull-9{right:37.5%}.ant-col-lg-offset-9{margin-left:37.5%}.ant-col-lg-order-9{order:9}.ant-col-lg-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-lg-push-8{left:33.33333333%}.ant-col-lg-pull-8{right:33.33333333%}.ant-col-lg-offset-8{margin-left:33.33333333%}.ant-col-lg-order-8{order:8}.ant-col-lg-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-lg-push-7{left:29.16666667%}.ant-col-lg-pull-7{right:29.16666667%}.ant-col-lg-offset-7{margin-left:29.16666667%}.ant-col-lg-order-7{order:7}.ant-col-lg-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-lg-push-6{left:25%}.ant-col-lg-pull-6{right:25%}.ant-col-lg-offset-6{margin-left:25%}.ant-col-lg-order-6{order:6}.ant-col-lg-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-lg-push-5{left:20.83333333%}.ant-col-lg-pull-5{right:20.83333333%}.ant-col-lg-offset-5{margin-left:20.83333333%}.ant-col-lg-order-5{order:5}.ant-col-lg-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-lg-push-4{left:16.66666667%}.ant-col-lg-pull-4{right:16.66666667%}.ant-col-lg-offset-4{margin-left:16.66666667%}.ant-col-lg-order-4{order:4}.ant-col-lg-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-lg-push-3{left:12.5%}.ant-col-lg-pull-3{right:12.5%}.ant-col-lg-offset-3{margin-left:12.5%}.ant-col-lg-order-3{order:3}.ant-col-lg-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-lg-push-2{left:8.33333333%}.ant-col-lg-pull-2{right:8.33333333%}.ant-col-lg-offset-2{margin-left:8.33333333%}.ant-col-lg-order-2{order:2}.ant-col-lg-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-lg-push-1{left:4.16666667%}.ant-col-lg-pull-1{right:4.16666667%}.ant-col-lg-offset-1{margin-left:4.16666667%}.ant-col-lg-order-1{order:1}.ant-col-lg-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-lg-push-0{left:auto}.ant-col-lg-pull-0,.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-lg-offset-0{margin-left:0}.ant-col-lg-order-0{order:0}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-lg-push-0.ant-col-rtl{right:auto}.ant-col-lg-pull-0.ant-col-rtl{left:auto}.ant-col-lg-offset-0.ant-col-rtl{margin-right:0}.ant-col-lg-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-lg-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-lg-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-lg-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-lg-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-lg-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-lg-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-lg-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-lg-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-lg-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-lg-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-lg-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-lg-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-lg-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-lg-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-lg-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-lg-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-lg-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-lg-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-lg-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-lg-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-lg-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-lg-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-lg-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-lg-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-lg-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-lg-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-lg-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-lg-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-lg-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-lg-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-lg-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-lg-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-lg-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-lg-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-lg-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-lg-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-lg-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-lg-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-lg-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-lg-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-lg-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-lg-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-lg-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-lg-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-lg-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-lg-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-lg-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-lg-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-lg-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-lg-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-lg-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-lg-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-lg-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-lg-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-lg-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-lg-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-lg-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-lg-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-lg-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-lg-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-lg-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-lg-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-lg-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-lg-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-lg-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-lg-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-lg-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-lg-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-lg-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-lg-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-lg-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width:1200px){.ant-col-xl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xl-push-24{left:100%}.ant-col-xl-pull-24{right:100%}.ant-col-xl-offset-24{margin-left:100%}.ant-col-xl-order-24{order:24}.ant-col-xl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xl-push-23{left:95.83333333%}.ant-col-xl-pull-23{right:95.83333333%}.ant-col-xl-offset-23{margin-left:95.83333333%}.ant-col-xl-order-23{order:23}.ant-col-xl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xl-push-22{left:91.66666667%}.ant-col-xl-pull-22{right:91.66666667%}.ant-col-xl-offset-22{margin-left:91.66666667%}.ant-col-xl-order-22{order:22}.ant-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xl-push-21{left:87.5%}.ant-col-xl-pull-21{right:87.5%}.ant-col-xl-offset-21{margin-left:87.5%}.ant-col-xl-order-21{order:21}.ant-col-xl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xl-push-20{left:83.33333333%}.ant-col-xl-pull-20{right:83.33333333%}.ant-col-xl-offset-20{margin-left:83.33333333%}.ant-col-xl-order-20{order:20}.ant-col-xl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xl-push-19{left:79.16666667%}.ant-col-xl-pull-19{right:79.16666667%}.ant-col-xl-offset-19{margin-left:79.16666667%}.ant-col-xl-order-19{order:19}.ant-col-xl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xl-push-18{left:75%}.ant-col-xl-pull-18{right:75%}.ant-col-xl-offset-18{margin-left:75%}.ant-col-xl-order-18{order:18}.ant-col-xl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xl-push-17{left:70.83333333%}.ant-col-xl-pull-17{right:70.83333333%}.ant-col-xl-offset-17{margin-left:70.83333333%}.ant-col-xl-order-17{order:17}.ant-col-xl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xl-push-16{left:66.66666667%}.ant-col-xl-pull-16{right:66.66666667%}.ant-col-xl-offset-16{margin-left:66.66666667%}.ant-col-xl-order-16{order:16}.ant-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xl-push-15{left:62.5%}.ant-col-xl-pull-15{right:62.5%}.ant-col-xl-offset-15{margin-left:62.5%}.ant-col-xl-order-15{order:15}.ant-col-xl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xl-push-14{left:58.33333333%}.ant-col-xl-pull-14{right:58.33333333%}.ant-col-xl-offset-14{margin-left:58.33333333%}.ant-col-xl-order-14{order:14}.ant-col-xl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xl-push-13{left:54.16666667%}.ant-col-xl-pull-13{right:54.16666667%}.ant-col-xl-offset-13{margin-left:54.16666667%}.ant-col-xl-order-13{order:13}.ant-col-xl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xl-push-12{left:50%}.ant-col-xl-pull-12{right:50%}.ant-col-xl-offset-12{margin-left:50%}.ant-col-xl-order-12{order:12}.ant-col-xl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xl-push-11{left:45.83333333%}.ant-col-xl-pull-11{right:45.83333333%}.ant-col-xl-offset-11{margin-left:45.83333333%}.ant-col-xl-order-11{order:11}.ant-col-xl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xl-push-10{left:41.66666667%}.ant-col-xl-pull-10{right:41.66666667%}.ant-col-xl-offset-10{margin-left:41.66666667%}.ant-col-xl-order-10{order:10}.ant-col-xl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xl-push-9{left:37.5%}.ant-col-xl-pull-9{right:37.5%}.ant-col-xl-offset-9{margin-left:37.5%}.ant-col-xl-order-9{order:9}.ant-col-xl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xl-push-8{left:33.33333333%}.ant-col-xl-pull-8{right:33.33333333%}.ant-col-xl-offset-8{margin-left:33.33333333%}.ant-col-xl-order-8{order:8}.ant-col-xl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xl-push-7{left:29.16666667%}.ant-col-xl-pull-7{right:29.16666667%}.ant-col-xl-offset-7{margin-left:29.16666667%}.ant-col-xl-order-7{order:7}.ant-col-xl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xl-push-6{left:25%}.ant-col-xl-pull-6{right:25%}.ant-col-xl-offset-6{margin-left:25%}.ant-col-xl-order-6{order:6}.ant-col-xl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xl-push-5{left:20.83333333%}.ant-col-xl-pull-5{right:20.83333333%}.ant-col-xl-offset-5{margin-left:20.83333333%}.ant-col-xl-order-5{order:5}.ant-col-xl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xl-push-4{left:16.66666667%}.ant-col-xl-pull-4{right:16.66666667%}.ant-col-xl-offset-4{margin-left:16.66666667%}.ant-col-xl-order-4{order:4}.ant-col-xl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xl-push-3{left:12.5%}.ant-col-xl-pull-3{right:12.5%}.ant-col-xl-offset-3{margin-left:12.5%}.ant-col-xl-order-3{order:3}.ant-col-xl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xl-push-2{left:8.33333333%}.ant-col-xl-pull-2{right:8.33333333%}.ant-col-xl-offset-2{margin-left:8.33333333%}.ant-col-xl-order-2{order:2}.ant-col-xl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xl-push-1{left:4.16666667%}.ant-col-xl-pull-1{right:4.16666667%}.ant-col-xl-offset-1{margin-left:4.16666667%}.ant-col-xl-order-1{order:1}.ant-col-xl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xl-push-0{left:auto}.ant-col-push-0.ant-col-rtl,.ant-col-xl-pull-0{right:auto}.ant-col-xl-offset-0{margin-left:0}.ant-col-xl-order-0{order:0}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xl-push-0.ant-col-rtl{right:auto}.ant-col-xl-pull-0.ant-col-rtl{left:auto}.ant-col-xl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width:1600px){.ant-col-xxl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xxl-push-24{left:100%}.ant-col-xxl-pull-24{right:100%}.ant-col-xxl-offset-24{margin-left:100%}.ant-col-xxl-order-24{order:24}.ant-col-xxl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xxl-push-23{left:95.83333333%}.ant-col-xxl-pull-23{right:95.83333333%}.ant-col-xxl-offset-23{margin-left:95.83333333%}.ant-col-xxl-order-23{order:23}.ant-col-xxl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xxl-push-22{left:91.66666667%}.ant-col-xxl-pull-22{right:91.66666667%}.ant-col-xxl-offset-22{margin-left:91.66666667%}.ant-col-xxl-order-22{order:22}.ant-col-xxl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xxl-push-21{left:87.5%}.ant-col-xxl-pull-21{right:87.5%}.ant-col-xxl-offset-21{margin-left:87.5%}.ant-col-xxl-order-21{order:21}.ant-col-xxl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xxl-push-20{left:83.33333333%}.ant-col-xxl-pull-20{right:83.33333333%}.ant-col-xxl-offset-20{margin-left:83.33333333%}.ant-col-xxl-order-20{order:20}.ant-col-xxl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xxl-push-19{left:79.16666667%}.ant-col-xxl-pull-19{right:79.16666667%}.ant-col-xxl-offset-19{margin-left:79.16666667%}.ant-col-xxl-order-19{order:19}.ant-col-xxl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xxl-push-18{left:75%}.ant-col-xxl-pull-18{right:75%}.ant-col-xxl-offset-18{margin-left:75%}.ant-col-xxl-order-18{order:18}.ant-col-xxl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xxl-push-17{left:70.83333333%}.ant-col-xxl-pull-17{right:70.83333333%}.ant-col-xxl-offset-17{margin-left:70.83333333%}.ant-col-xxl-order-17{order:17}.ant-col-xxl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xxl-push-16{left:66.66666667%}.ant-col-xxl-pull-16{right:66.66666667%}.ant-col-xxl-offset-16{margin-left:66.66666667%}.ant-col-xxl-order-16{order:16}.ant-col-xxl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xxl-push-15{left:62.5%}.ant-col-xxl-pull-15{right:62.5%}.ant-col-xxl-offset-15{margin-left:62.5%}.ant-col-xxl-order-15{order:15}.ant-col-xxl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xxl-push-14{left:58.33333333%}.ant-col-xxl-pull-14{right:58.33333333%}.ant-col-xxl-offset-14{margin-left:58.33333333%}.ant-col-xxl-order-14{order:14}.ant-col-xxl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xxl-push-13{left:54.16666667%}.ant-col-xxl-pull-13{right:54.16666667%}.ant-col-xxl-offset-13{margin-left:54.16666667%}.ant-col-xxl-order-13{order:13}.ant-col-xxl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xxl-push-12{left:50%}.ant-col-xxl-pull-12{right:50%}.ant-col-xxl-offset-12{margin-left:50%}.ant-col-xxl-order-12{order:12}.ant-col-xxl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xxl-push-11{left:45.83333333%}.ant-col-xxl-pull-11{right:45.83333333%}.ant-col-xxl-offset-11{margin-left:45.83333333%}.ant-col-xxl-order-11{order:11}.ant-col-xxl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xxl-push-10{left:41.66666667%}.ant-col-xxl-pull-10{right:41.66666667%}.ant-col-xxl-offset-10{margin-left:41.66666667%}.ant-col-xxl-order-10{order:10}.ant-col-xxl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xxl-push-9{left:37.5%}.ant-col-xxl-pull-9{right:37.5%}.ant-col-xxl-offset-9{margin-left:37.5%}.ant-col-xxl-order-9{order:9}.ant-col-xxl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xxl-push-8{left:33.33333333%}.ant-col-xxl-pull-8{right:33.33333333%}.ant-col-xxl-offset-8{margin-left:33.33333333%}.ant-col-xxl-order-8{order:8}.ant-col-xxl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xxl-push-7{left:29.16666667%}.ant-col-xxl-pull-7{right:29.16666667%}.ant-col-xxl-offset-7{margin-left:29.16666667%}.ant-col-xxl-order-7{order:7}.ant-col-xxl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xxl-push-6{left:25%}.ant-col-xxl-pull-6{right:25%}.ant-col-xxl-offset-6{margin-left:25%}.ant-col-xxl-order-6{order:6}.ant-col-xxl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xxl-push-5{left:20.83333333%}.ant-col-xxl-pull-5{right:20.83333333%}.ant-col-xxl-offset-5{margin-left:20.83333333%}.ant-col-xxl-order-5{order:5}.ant-col-xxl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xxl-push-4{left:16.66666667%}.ant-col-xxl-pull-4{right:16.66666667%}.ant-col-xxl-offset-4{margin-left:16.66666667%}.ant-col-xxl-order-4{order:4}.ant-col-xxl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xxl-push-3{left:12.5%}.ant-col-xxl-pull-3{right:12.5%}.ant-col-xxl-offset-3{margin-left:12.5%}.ant-col-xxl-order-3{order:3}.ant-col-xxl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xxl-push-2{left:8.33333333%}.ant-col-xxl-pull-2{right:8.33333333%}.ant-col-xxl-offset-2{margin-left:8.33333333%}.ant-col-xxl-order-2{order:2}.ant-col-xxl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xxl-push-1{left:4.16666667%}.ant-col-xxl-pull-1{right:4.16666667%}.ant-col-xxl-offset-1{margin-left:4.16666667%}.ant-col-xxl-order-1{order:1}.ant-col-xxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxl-push-0{left:auto}.ant-col-push-0.ant-col-rtl,.ant-col-xxl-pull-0{right:auto}.ant-col-xxl-offset-0{margin-left:0}.ant-col-xxl-order-0{order:0}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xxl-push-0.ant-col-rtl{right:auto}.ant-col-xxl-pull-0.ant-col-rtl{left:auto}.ant-col-xxl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xxl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xxl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xxl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xxl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xxl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xxl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xxl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xxl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xxl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xxl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xxl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xxl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xxl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xxl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xxl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xxl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xxl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xxl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xxl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xxl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xxl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xxl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xxl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xxl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xxl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xxl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xxl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xxl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xxl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xxl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xxl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xxl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xxl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xxl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xxl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xxl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xxl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xxl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xxl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xxl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xxl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xxl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xxl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xxl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xxl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xxl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xxl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xxl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xxl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xxl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xxl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xxl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xxl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xxl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xxl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xxl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xxl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xxl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xxl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xxl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xxl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xxl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xxl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xxl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xxl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xxl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xxl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xxl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xxl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xxl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xxl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xxl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}.ant-row-rtl{direction:rtl}.ant-image{position:relative;display:inline-block}.ant-image-img{width:100%;height:auto}.ant-image-img-placeholder{background-color:#f5f5f5;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=);background-repeat:no-repeat;background-position:center center;background-size:30%}.ant-image-placeholder{position:absolute;top:0;right:0;bottom:0;left:0}.ant-image-preview{height:100%;text-align:center}.ant-image-preview-body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.ant-image-preview-img,.ant-image-preview-img-wrapper{transition:transform .3s cubic-bezier(.215,.61,.355,1) 0s}.ant-image-preview-img{max-width:100%;max-height:100%;vertical-align:middle;transform:scale3d(1,1,1);cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;-ms-user-select:none;user-select:none;pointer-events:auto}.ant-image-preview-img-wrapper{position:absolute;top:0;right:0;bottom:0;left:0}.ant-image-preview-img-wrapper::before{display:inline-block;width:1px;height:50%;margin-right:-1px;content:''}.ant-image-preview-moving .ant-image-preview-img{cursor:-webkit-grabbing;cursor:grabbing}.ant-image-preview-moving .ant-image-preview-img-wrapper{transition-duration:0s}.ant-image-preview-wrap{z-index:1080}.ant-image-preview-operations{box-sizing:border-box;margin:0;padding:0;font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:'tnum';position:absolute;top:0;right:0;z-index:1;display:flex;flex-direction:row-reverse;align-items:center;width:100%;color:rgba(255,255,255,.85);list-style:none;background:rgba(0,0,0,.1);pointer-events:auto}.ant-image-preview-operations-operation{margin-left:12px;padding:12px;cursor:pointer}.ant-image-preview-operations-operation-disabled{color:rgba(255,255,255,.45);pointer-events:none}.ant-image-preview-operations-operation:last-of-type{margin-left:0}.ant-image-preview-operations-icon{font-size:18px}.ant-input-affix-wrapper{position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:rgba(255,255,255,.85);font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;border:1px solid #6f6c6c;border-radius:4px;transition:all .3s;display:inline-flex}.ant-input-affix-wrapper::-webkit-input-placeholder{color:rgba(255,255,255,.3)}.ant-input-affix-wrapper:-ms-input-placeholder{color:rgba(255,255,255,.3);text-overflow:ellipsis}.ant-input-affix-wrapper::placeholder{color:rgba(255,255,255,.3)}.ant-input-affix-wrapper:placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:hover{border-color:#a99213;border-right-width:1px!important}.ant-input-rtl .ant-input-affix-wrapper:hover{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper-focused,.ant-input-affix-wrapper:focus{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-input-affix-wrapper-focused,.ant-input-rtl .ant-input-affix-wrapper:focus{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper-disabled:hover,.ant-input-affix-wrapper[disabled]:hover{border-color:#6f6c6c;border-right-width:1px!important}.ant-input-affix-wrapper-disabled,.ant-input-affix-wrapper[disabled]{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);cursor:not-allowed;opacity:1}.ant-input-affix-wrapper-borderless,.ant-input-affix-wrapper-borderless-disabled,.ant-input-affix-wrapper-borderless-focused,.ant-input-affix-wrapper-borderless:focus,.ant-input-affix-wrapper-borderless:hover,.ant-input-affix-wrapper-borderless[disabled]{background-color:transparent;border:0;box-shadow:none}.ant-input-affix-wrapper-lg{padding:6.5px 11px;font-size:16px}.ant-input-affix-wrapper-sm{padding:0 7px}.ant-input-affix-wrapper-rtl{direction:rtl}.ant-input-affix-wrapper-disabled .ant-input[disabled]{background:0 0}.ant-input-affix-wrapper>input.ant-input{padding:0;border:0;outline:0}.ant-input-affix-wrapper>input.ant-input:focus{box-shadow:none}.ant-input-affix-wrapper::before{width:0;visibility:hidden;content:'\a0'}.ant-input-prefix,.ant-input-suffix{display:flex;flex:none;align-items:center}.ant-input-prefix{margin-right:4px}.ant-input-suffix{margin-left:4px}.ant-input-clear-icon{color:rgba(255,255,255,.3);font-size:12px;cursor:pointer;transition:color .3s;margin:0 4px;vertical-align:-1px}.ant-input-clear-icon:hover{color:rgba(255,255,255,.45)}.ant-input-clear-icon:active{color:rgba(255,255,255,.85)}.ant-input-clear-icon+i,.ant-input-textarea-clear-icon+i{margin-left:6px}.ant-input-clear-icon-hidden{visibility:hidden}.ant-input-clear-icon:last-child{margin-right:0}.ant-input-affix-wrapper-textarea-with-clear-btn{padding:0!important;border:0!important}.ant-input-textarea-clear-icon{color:rgba(255,255,255,.3);font-size:12px;cursor:pointer;transition:color .3s;position:absolute;top:0;right:0;z-index:1;margin:8px 8px 0 0}.ant-input-textarea-clear-icon:hover{color:rgba(255,255,255,.45)}.ant-input-textarea-clear-icon:active{color:rgba(255,255,255,.85)}.ant-input-textarea-clear-icon-hidden{visibility:hidden}.ant-input{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:rgba(255,255,255,.85);font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;border:1px solid #6f6c6c;border-radius:4px;transition:all .3s}.ant-input::-webkit-input-placeholder{color:rgba(255,255,255,.3)}.ant-input:-ms-input-placeholder{color:rgba(255,255,255,.3);text-overflow:ellipsis}.ant-input::placeholder{color:rgba(255,255,255,.3)}.ant-input:placeholder-shown{text-overflow:ellipsis}.ant-input:hover{border-color:#a99213;border-right-width:1px!important}.ant-input-rtl .ant-input:hover{border-right-width:0;border-left-width:1px!important}.ant-input-focused,.ant-input:focus{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-input-focused,.ant-input-rtl .ant-input:focus{border-right-width:0;border-left-width:1px!important}.ant-input-disabled:hover,.ant-input[disabled]:hover{border-color:#6f6c6c;border-right-width:1px!important}.ant-input-disabled,.ant-input[disabled]{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);cursor:not-allowed;opacity:1}.ant-input-borderless,.ant-input-borderless-disabled,.ant-input-borderless-focused,.ant-input-borderless:focus,.ant-input-borderless:hover,.ant-input-borderless[disabled]{background-color:transparent;border:0;box-shadow:none}.ant-input-lg{padding:6.5px 11px;font-size:16px}.ant-input-sm{padding:0 7px}.ant-input-rtl{direction:rtl}.ant-input-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-group .ant-input:focus{z-index:1;border-right-width:1px}.ant-input-group .ant-input:hover{z-index:1;border-right-width:1px}.ant-input-group-addon{position:relative;padding:0 11px;color:rgba(255,255,255,.85);font-weight:400;font-size:14px;text-align:center;background-color:rgba(255,255,255,.04);border:1px solid #6f6c6c;border-radius:4px;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none}.ant-input-group-addon .ant-select-focused .ant-select-selector,.ant-input-group-addon .ant-select-open .ant-select-selector,.ant-list-item-meta-title>a:hover{color:#ffd90f}.ant-input-group-addon>i:only-child::after{position:absolute;top:0;right:0;bottom:0;left:0;content:''}.ant-input-group-addon:first-child,.ant-input-group-addon:first-child .ant-select .ant-select-selector,.ant-input-group>.ant-input:first-child,.ant-input-group>.ant-input:first-child .ant-select .ant-select-selector{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group-addon:last-child,.ant-input-group-addon:last-child .ant-select .ant-select-selector,.ant-input-group>.ant-input:last-child,.ant-input-group>.ant-input:last-child .ant-select .ant-select-selector{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{padding:6.5px 11px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{padding:0 7px}.ant-input-group-lg .ant-select-single .ant-select-selector{height:40px}.ant-input-group-sm .ant-select-single .ant-select-selector{height:24px}.ant-input-group .ant-input-affix-wrapper:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group.ant-input-group-compact{display:block}.ant-input-group.ant-input-group-compact::before{display:table;content:''}.ant-input-group.ant-input-group-compact::after{display:table;clear:both;content:''}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):focus{z-index:1}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-input-affix-wrapper,.ant-input-group.ant-input-group-compact>.ant-picker-range{display:inline-flex}.ant-input-group.ant-input-group-compact>:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-group.ant-input-group-compact .ant-input{float:none}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input{border-right-width:1px;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-select-focused,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-arrow,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:hover,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input:hover{z-index:1}.ant-input-group.ant-input-group-compact>.ant-calendar-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper .ant-mention-editor:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-group.ant-input-group-compact>.ant-time-picker .ant-time-picker-input:focus{z-index:1}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:first-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-time-picker:first-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.ant-input-group.ant-input-group-compact>.ant-calendar-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:last-child .ant-mention-editor,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-time-picker:last-child .ant-time-picker-input,.ant-input-group.ant-input-group-compact>:last-child{border-right-width:1px;border-top-right-radius:4px;border-bottom-right-radius:4px}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-group-rtl .ant-input-group-addon:first-child,.ant-input-group>.ant-input-rtl:first-child{border-radius:0 4px 4px 0}.ant-input-group-rtl .ant-input-group-addon:first-child{border-right:1px solid #6f6c6c;border-left:0}.ant-input-group-rtl .ant-input-group-addon:last-child{border-right:0;border-left:1px solid #6f6c6c}.ant-input-group-rtl.ant-input-group-addon:last-child,.ant-input-group-rtl.ant-input-group>.ant-input:last-child{border-radius:4px 0 0 4px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child){border-radius:4px 0 0 4px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-radius:0 4px 4px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>:not(:last-child){margin-right:0;margin-left:-1px;border-left-width:1px}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-calendar-picker:first-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:first-child .ant-mention-editor,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-time-picker:first-child .ant-time-picker-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>:first-child{border-radius:0 4px 4px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-calendar-picker:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-mention-wrapper:last-child .ant-mention-editor,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-time-picker:last-child .ant-time-picker-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>:last-child{border-left-width:1px;border-radius:4px 0 0 4px}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top}.ant-input-password-icon,.ant-input-search-icon{color:rgba(255,255,255,.45);cursor:pointer;transition:all .3s}.ant-input-password-icon:hover{color:rgba(255,255,255,.85)}.ant-input[type=color]{height:32px}.ant-input[type=color].ant-input-lg{height:40px}.ant-input[type=color].ant-input-sm{height:24px;padding-top:3px;padding-bottom:3px}.ant-input-textarea-show-count::after{display:block;color:#d9d9d9;text-align:right;content:attr(data-count)}.ant-input-search-icon{padding:0 9px;margin-left:.5em}.ant-input-search-icon::before{transform:translateX(-10px)}.ant-input-search-icon::after{width:32px}.ant-input-affix-wrapper-lg .ant-input-search-icon{padding:0 12px}.ant-input-affix-wrapper-lg .ant-input-search-icon::before{transform:translateX(-13px)}.ant-input-affix-wrapper-lg .ant-input-search-icon::after{width:40px}.ant-input-affix-wrapper-sm .ant-input-search-icon{padding:0 6px}.ant-input-affix-wrapper-sm .ant-input-search-icon::before{transform:translateX(-7px)}.ant-input-affix-wrapper-sm .ant-input-search-icon::after{width:24px}.ant-input-search-icon:hover{color:rgba(255,255,255,.85)}.ant-input-search-icon::before{position:absolute;top:0;bottom:0;display:block;border-left:1px solid #6f6c6c;transition:all .3s;content:''}.ant-input-search-icon::after{position:absolute;top:0;right:0;bottom:0;content:''}.ant-input-search:not(.ant-input-search-enter-button){padding-right:0}.ant-input-search-enter-button input,.ant-input-search-enter-button.ant-input-affix-wrapper{border-right:0}.ant-input-search-enter-button input:focus,.ant-input-search-enter-button input:hover{border-color:#a99213}.ant-input-search-enter-button input+.ant-input-group-addon,.ant-input-search-enter-button+.ant-input-group-addon{padding:0;border:0}.ant-input-search-enter-button input+.ant-input-group-addon .ant-input-search-button,.ant-input-search-enter-button+.ant-input-group-addon .ant-input-search-button{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-rtl,.ant-input-group-wrapper-rtl,.ant-input-search-rtl{direction:rtl}.ant-input-affix-wrapper.ant-input-affix-wrapper-rtl>input.ant-input{border:0;outline:0}.ant-input-affix-wrapper-rtl .ant-input-prefix{margin:0 0 0 4px}.ant-input-affix-wrapper-rtl .ant-input-suffix{margin:0 4px 0 0}.ant-input-affix-wrapper-rtl .ant-input-clear-icon:last-child{margin-right:4px;margin-left:0}.ant-input-affix-wrapper-rtl .ant-input-textarea-clear-icon{right:auto;left:0;margin:8px 0 0 8px}.ant-input-search-rtl .ant-input-search-icon{margin-right:.5em;margin-left:0}.ant-input-search-rtl .ant-input-search-icon::before{border-left:none}.ant-input-search-rtl .ant-input-search-icon::after{right:auto;left:0;border-right:1px solid #6f6c6c;transition:all .3s}.ant-input-search-rtl.ant-input-search:not(.ant-input-search-enter-button){padding-right:11px;padding-left:0}.ant-input-search-rtl.ant-input-search-enter-button input,.ant-input-search-rtl.ant-input-search-enter-button.ant-input-affix-wrapper{border-right:1px solid #6f6c6c;border-left:0}.ant-input-search-rtl.ant-input-search-enter-button input:focus,.ant-input-search-rtl.ant-input-search-enter-button input:hover,.ant-input-search-rtl.ant-input-search-enter-button.ant-input-affix-wrapper:focus,.ant-input-search-rtl.ant-input-search-enter-button.ant-input-affix-wrapper:hover{border-color:#a99213}.ant-input-search-rtl.ant-input-search-enter-button input+.ant-input-group-addon,.ant-input-search-rtl.ant-input-search-enter-button+.ant-input-group-addon{padding:0;border:0}.ant-input-search-rtl.ant-input-search-enter-button input+.ant-input-group-addon .ant-input-search-button,.ant-input-search-rtl.ant-input-search-enter-button+.ant-input-group-addon .ant-input-search-button{width:100%;border-radius:4px 0 0 4px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.ant-input{height:32px}.ant-input-lg{height:40px}.ant-input-sm{height:24px}.ant-input-affix-wrapper>input.ant-input{height:auto}}.ant-input-number{box-sizing:border-box;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';position:relative;min-width:0;color:rgba(255,255,255,.85);font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;transition:all .3s;display:inline-block;width:90px;margin:0;padding:0;border:1px solid #6f6c6c;border-radius:4px}.ant-input-number::-webkit-input-placeholder{color:rgba(255,255,255,.3)}.ant-input-number:-ms-input-placeholder{color:rgba(255,255,255,.3);text-overflow:ellipsis}.ant-input-number::placeholder{color:rgba(255,255,255,.3)}.ant-input-number:placeholder-shown{text-overflow:ellipsis}.ant-input-rtl .ant-input-number:hover{border-right-width:0;border-left-width:1px!important}.ant-input-number-focused,.ant-input-number:focus{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-input-number-focused,.ant-input-rtl .ant-input-number:focus{border-right-width:0;border-left-width:1px!important}.ant-input-number[disabled]:hover{border-color:#6f6c6c;border-right-width:1px!important}.ant-input-number[disabled]{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);cursor:not-allowed;opacity:1}.ant-input-number-borderless,.ant-input-number-borderless-disabled,.ant-input-number-borderless-focused,.ant-input-number-borderless:focus,.ant-input-number-borderless:hover,.ant-input-number-borderless[disabled]{background-color:transparent;border:0;box-shadow:none}.ant-input-number-handler{position:relative;display:block;width:100%;height:50%;overflow:hidden;color:rgba(255,255,255,.45);font-weight:700;line-height:0;text-align:center;transition:all .1s linear}.ant-input-number-handler:active{background:rgba(255,255,255,.08)}.ant-input-number-handler:hover .ant-input-number-handler-down-inner,.ant-input-number-handler:hover .ant-input-number-handler-up-inner{color:#a99213}.ant-input-number-handler-down-inner,.ant-input-number-handler-up-inner{display:inline-block;color:inherit;font-style:normal;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;right:4px;width:12px;height:12px;color:rgba(255,255,255,.45);line-height:12px;transition:all .1s linear;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-input-number-handler-down-inner>*,.ant-input-number-handler-up-inner>*{line-height:1}.ant-input-number-handler-down-inner::before,.ant-input-number-handler-up-inner::before{display:none}.ant-input-number-handler-down-inner .ant-input-number-handler-down-inner-icon,.ant-input-number-handler-down-inner .ant-input-number-handler-up-inner-icon,.ant-input-number-handler-up-inner .ant-input-number-handler-down-inner-icon,.ant-input-number-handler-up-inner .ant-input-number-handler-up-inner-icon{display:block}.ant-input-number-focused,.ant-input-number:hover{border-color:#a99213;border-right-width:1px!important}.ant-input-number:hover+.ant-form-item-children-icon{opacity:0;transition:opacity .24s linear .24s}.ant-input-number-focused{border-color:#ffd90f;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-input-number-focused{border-right-width:0;border-left-width:1px!important}.ant-input-number-disabled{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);cursor:not-allowed;opacity:1}.ant-input-number-disabled:hover{border-color:#6f6c6c;border-right-width:1px!important}.ant-input-number-disabled .ant-input-number-input{cursor:not-allowed}.ant-input-number-disabled .ant-input-number-handler-wrap,.ant-input-number-readonly .ant-input-number-handler-wrap{display:none}.ant-input-number-input{width:100%;height:30px;padding:0 11px;text-align:left;background-color:transparent;border:0;border-radius:4px;outline:0;transition:all .3s linear;-moz-appearance:textfield!important}.ant-input-number-input::-webkit-input-placeholder{color:rgba(255,255,255,.3)}.ant-input-number-input:-ms-input-placeholder{color:rgba(255,255,255,.3);text-overflow:ellipsis}.ant-input-number-input::placeholder{color:rgba(255,255,255,.3)}.ant-input-number-input:placeholder-shown{text-overflow:ellipsis}.ant-input-number-input[type=number]::-webkit-inner-spin-button,.ant-input-number-input[type=number]::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.ant-input-number-lg{padding:0;font-size:16px}.ant-input-number-lg input{height:38px}.ant-input-number-sm{padding:0}.ant-input-number-sm input{height:22px;padding:0 7px}.ant-input-number-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#0a0f19;border-left:1px solid #6f6c6c;border-radius:0 4px 4px 0;opacity:0;transition:opacity .24s linear .1s}.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner,.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner{display:inline-block;font-size:7px;min-width:auto;margin-right:0}.ant-input-number-handler-wrap:hover .ant-input-number-handler{height:40%}.ant-input-number:hover .ant-input-number-handler-wrap{opacity:1}.ant-input-number-handler-up{border-top-right-radius:4px;cursor:pointer}.ant-input-number-handler-up-inner{top:50%;margin-top:-5px;text-align:center}.ant-input-number-handler-down:hover,.ant-input-number-handler-up:hover{height:60%!important}.ant-input-number-handler-down{top:0;border-top:1px solid #6f6c6c;border-bottom-right-radius:4px;cursor:pointer}.ant-input-number-handler-down-inner{top:50%;text-align:center;transform:translateY(-50%)}.ant-input-number-handler-down-disabled,.ant-input-number-handler-up-disabled{cursor:not-allowed}.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner,.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner{color:rgba(255,255,255,.3)}.ant-input-number-rtl{direction:rtl}.ant-input-number-rtl .ant-input-number-handler-wrap{right:auto;left:0;border-right:1px solid #6f6c6c;border-left:0;border-radius:4px 0 0 4px}.ant-input-number-rtl .ant-input-number-input{direction:ltr;text-align:right}.ant-layout{display:flex;flex:auto;flex-direction:column;min-height:0;background:#0a0f19}.ant-layout,.ant-layout *{box-sizing:border-box}.ant-layout.ant-layout-has-sider{flex-direction:row}.ant-layout.ant-layout-has-sider>.ant-layout,.ant-layout.ant-layout-has-sider>.ant-layout-content{overflow-x:hidden}.ant-layout-footer,.ant-layout-header{flex:0 0 auto}.ant-layout-header{height:64px;padding:0 50px;color:rgba(255,255,255,.85);line-height:64px;background:#212121}.ant-layout-footer{padding:24px 50px;color:rgba(255,255,255,.85);font-size:14px;background:#0a0f19}.ant-layout-content{flex:auto;min-height:0}.ant-layout-sider{position:relative;min-width:0;background:#212121;transition:all .2s}.ant-layout-sider-children{height:100%;margin-top:-.1px;padding-top:.1px}.ant-layout-sider-has-trigger{padding-bottom:48px}.ant-layout-sider-right{order:1}.ant-layout-sider-trigger{position:fixed;bottom:0;z-index:1;height:48px;color:#fff;line-height:48px;text-align:center;background:#262626;cursor:pointer;transition:all .2s}.ant-layout-sider-zero-width>*{overflow:hidden}.ant-layout-sider-zero-width-trigger{position:absolute;top:64px;right:-36px;z-index:1;width:36px;height:42px;color:#fff;font-size:18px;line-height:42px;text-align:center;background:#212121;border-radius:0 4px 4px 0;cursor:pointer;transition:background .3s ease}.ant-layout-sider-zero-width-trigger::after{position:absolute;top:0;right:0;bottom:0;left:0;background:0 0;transition:all .3s;content:''}.ant-layout-sider-zero-width-trigger:hover::after{background:rgba(255,255,255,.1)}.ant-layout-sider-zero-width-trigger-right{left:-36px;border-radius:4px 0 0 4px}.ant-layout-sider-light{background:#fff}.ant-layout-sider-light .ant-layout-sider-trigger,.ant-layout-sider-light .ant-layout-sider-zero-width-trigger{color:rgba(255,255,255,.85);background:#fff}.ant-layout-rtl{direction:rtl}.ant-list .ant-card{background:0 0}.ant-list{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative}.ant-list *{outline:0}.ant-list-pagination{margin-top:24px;text-align:right}.ant-list-pagination .ant-pagination-options{text-align:left}.ant-list-more{margin-top:12px;text-align:center}.ant-list-more button{padding-right:32px;padding-left:32px}.ant-list-spin{min-height:40px;text-align:center}.ant-list-empty-text{padding:16px;color:rgba(255,255,255,.3);font-size:14px;text-align:center}.ant-list-items,.ant-menu ol,.ant-menu ul,.ant-pagination ol,.ant-pagination ul{margin:0;padding:0;list-style:none}.ant-list-item{display:flex;align-items:center;justify-content:space-between;padding:12px 0;color:rgba(255,255,255,.85)}.ant-list-item-meta{display:flex;flex:1;align-items:flex-start;max-width:100%}.ant-list-item-meta-avatar{margin-right:16px}.ant-list-item-meta-content{flex:1 0;width:0;color:rgba(255,255,255,.85)}.ant-list-item-meta-title{margin-bottom:4px;color:rgba(255,255,255,.85);font-size:14px;line-height:1.5715}.ant-list-item-meta-title>a{color:rgba(255,255,255,.85);transition:all .3s}.ant-list-item-action>li,.ant-list-item-meta-description{color:rgba(255,255,255,.45);font-size:14px;line-height:1.5715}.ant-list-item-action{flex:0 0 auto;margin-left:48px;padding:0;font-size:0;list-style:none}.ant-list-item-action>li{position:relative;display:inline-block;padding:0 8px;text-align:center}.ant-list-item-action>li:first-child,.ant-list-vertical .ant-list-item-action>li:first-child{padding-left:0}.ant-list-item-action-split{position:absolute;top:50%;right:0;width:1px;height:14px;margin-top:-7px;background-color:#424242}.ant-list-footer,.ant-list-header{background:0 0;padding-top:12px;padding-bottom:12px}.ant-list-empty{padding:16px 0;color:rgba(255,255,255,.45);font-size:12px;text-align:center}.ant-list-split .ant-list-header,.ant-list-split .ant-list-item{border-bottom:1px solid #424242}.ant-list-split .ant-list-item:last-child{border-bottom:none}.ant-list-split.ant-list-empty .ant-list-footer{border-top:1px solid #424242}.ant-list-loading .ant-list-spin-nested-loading{min-height:32px}.ant-list-split.ant-list-something-after-last-item .ant-spin-container>.ant-list-items>.ant-list-item:last-child,.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:1px solid #424242}.ant-list-lg .ant-list-item{padding:16px 24px}.ant-list-sm .ant-list-item{padding:8px 16px}.ant-list-vertical .ant-list-item{align-items:initial}.ant-list-vertical .ant-list-item-main{display:block;flex:1}.ant-list-vertical .ant-list-item-extra{margin-left:40px}.ant-list-vertical .ant-list-item-meta{margin-bottom:16px}.ant-list-vertical .ant-list-item-meta-title{margin-bottom:12px;color:rgba(255,255,255,.85);font-size:16px;line-height:24px}.ant-list-vertical .ant-list-item-action{margin-top:16px;margin-left:auto}.ant-list-vertical .ant-list-item-action>li{padding:0 16px}.ant-list-grid .ant-col>.ant-list-item{display:block;max-width:100%;margin-bottom:16px;padding-top:0;padding-bottom:0;border-bottom:none}.ant-list-item-no-flex{display:block}.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:right}.ant-list-bordered{border:1px solid #6f6c6c;border-radius:4px}.ant-list-bordered .ant-list-footer,.ant-list-bordered .ant-list-header,.ant-list-bordered .ant-list-item{padding-right:24px;padding-left:24px}.ant-list-bordered .ant-list-pagination{margin:16px 24px}.ant-list-bordered.ant-list-sm .ant-list-footer,.ant-list-bordered.ant-list-sm .ant-list-header,.ant-list-bordered.ant-list-sm .ant-list-item{padding:8px 16px}.ant-list-bordered.ant-list-lg .ant-list-footer,.ant-list-bordered.ant-list-lg .ant-list-header,.ant-list-bordered.ant-list-lg .ant-list-item{padding:16px 24px}@media screen and (max-width:768px){.ant-list-item-action,.ant-list-vertical .ant-list-item-extra{margin-left:24px}}@media screen and (max-width:576px){.ant-list-item{flex-wrap:wrap}.ant-list-item-action{margin-left:12px}.ant-list-vertical .ant-list-item{flex-wrap:wrap-reverse}.ant-list-vertical .ant-list-item-main{min-width:220px}.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}.ant-list-rtl{direction:rtl;text-align:right}.ant-list-rtl .ReactVirtualized__List .ant-list-item{direction:rtl}.ant-list-rtl .ant-list-pagination{text-align:left}.ant-list-rtl .ant-list-item-meta-avatar{margin-right:0;margin-left:16px}.ant-list-rtl .ant-list-item-action{margin-right:48px;margin-left:0}.ant-list-rtl .ant-list-vertical .ant-list-item-action>li:first-child,.ant-list.ant-list-rtl .ant-list-item-action>li:first-child{padding-right:0;padding-left:16px}.ant-list-rtl .ant-list-item-action-split{right:auto;left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-extra{margin-right:40px;margin-left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-action{margin-right:auto}.ant-list-rtl .ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:left}@media screen and (max-width:768px){.ant-list-rtl .ant-list-item-action,.ant-list-rtl .ant-list-vertical .ant-list-item-extra{margin-right:24px;margin-left:0}}@media screen and (max-width:576px){.ant-list-rtl .ant-list-item-action{margin-right:22px;margin-left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}.ant-mentions{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';width:100%;min-width:0;color:rgba(255,255,255,.85);font-size:14px;background-color:transparent;background-image:none;border:1px solid #6f6c6c;border-radius:4px;transition:all .3s;position:relative;display:inline-block;height:auto;padding:0;overflow:hidden;line-height:1.5715;white-space:pre-wrap;vertical-align:bottom}.ant-mentions::-webkit-input-placeholder,.ant-mentions>textarea::-webkit-input-placeholder,.ant-pagination-options-quick-jumper input::-webkit-input-placeholder{color:rgba(255,255,255,.3)}.ant-mentions:-ms-input-placeholder{color:rgba(255,255,255,.3);text-overflow:ellipsis}.ant-mentions::placeholder,.ant-mentions>textarea::placeholder,.ant-pagination-options-quick-jumper input::placeholder{color:rgba(255,255,255,.3)}.ant-mentions:placeholder-shown{text-overflow:ellipsis}.ant-mentions:hover{border-color:#a99213;border-right-width:1px!important}.ant-input-rtl .ant-mentions:hover{border-right-width:0;border-left-width:1px!important}.ant-mentions-focused,.ant-mentions:focus{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-mentions-focused,.ant-input-rtl .ant-mentions:focus{border-right-width:0;border-left-width:1px!important}.ant-mentions-disabled:hover,.ant-mentions-disabled>textarea:hover,.ant-mentions[disabled]:hover,.ant-pagination-options-quick-jumper input-disabled:hover{border-color:#6f6c6c;border-right-width:1px!important}.ant-mentions-disabled,.ant-mentions-disabled>textarea,.ant-mentions[disabled],.ant-pagination-options-quick-jumper input-disabled{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);cursor:not-allowed;opacity:1}.ant-mentions-borderless,.ant-mentions-borderless-disabled,.ant-mentions-borderless-focused,.ant-mentions-borderless:focus,.ant-mentions-borderless:hover,.ant-mentions-borderless[disabled],.ant-pagination-options-quick-jumper input-borderless,.ant-pagination-options-quick-jumper input-borderless-disabled,.ant-pagination-options-quick-jumper input-borderless-focused,.ant-pagination-options-quick-jumper input-borderless:focus,.ant-pagination-options-quick-jumper input-borderless:hover,.ant-pagination-options-quick-jumper input-borderless[disabled]{background-color:transparent;border:0;box-shadow:none}.ant-mentions-lg,.ant-pagination-options-quick-jumper input-lg{padding:6.5px 11px;font-size:16px}.ant-mentions-sm,.ant-pagination-options-quick-jumper input-sm{padding:0 7px}.ant-mentions-focused{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-mentions-focused,.ant-input-rtl .ant-pagination-options-quick-jumper input:hover{border-right-width:0;border-left-width:1px!important}.ant-mentions-measure,.ant-mentions>textarea{min-height:30px;margin:0;padding:4px 11px;overflow:inherit;overflow-x:hidden;overflow-y:auto;font-weight:inherit;font-size:inherit;font-family:inherit;font-style:inherit;font-variant:inherit;font-size-adjust:inherit;font-stretch:inherit;line-height:inherit;direction:inherit;letter-spacing:inherit;white-space:inherit;text-align:inherit;vertical-align:top;word-wrap:break-word;word-break:inherit;-moz-tab-size:inherit;tab-size:inherit}.ant-mentions>textarea{width:100%;border:0;outline:0;resize:none;background-color:transparent}.ant-mentions>textarea:-ms-input-placeholder{color:rgba(255,255,255,.3);text-overflow:ellipsis}.ant-mentions>textarea:placeholder-shown{text-overflow:ellipsis}.ant-mentions-measure{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;color:transparent;pointer-events:none}.ant-mentions-measure>span{display:inline-block;min-height:1em}.ant-mentions-dropdown{margin:0;padding:0;color:rgba(255,255,255,.85);line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:absolute;top:-9999px;left:-9999px;z-index:1050;box-sizing:border-box;font-size:14px;font-variant:initial;background-color:#212121;border-radius:4px;outline:0;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-mentions-dropdown-hidden{display:none}.ant-mentions-dropdown-menu{max-height:250px;margin-bottom:0;padding-left:0;overflow:auto;list-style:none;outline:0}.ant-mentions-dropdown-menu-item{position:relative;display:block;min-width:100px;padding:5px 12px;overflow:hidden;color:rgba(255,255,255,.85);font-weight:400;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:background .3s ease}.ant-mentions-dropdown-menu-item:hover{background-color:rgba(255,255,255,.08)}.ant-mentions-dropdown-menu-item:first-child{border-radius:4px 4px 0 0}.ant-mentions-dropdown-menu-item:last-child{border-radius:0 0 4px 4px}.ant-mentions-dropdown-menu-item-disabled{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-mentions-dropdown-menu-item-disabled:hover{color:rgba(255,255,255,.3);background-color:#212121;cursor:not-allowed}.ant-mentions-dropdown-menu-item-selected{color:rgba(255,255,255,.85);font-weight:600;background-color:rgba(255,255,255,.04)}.ant-mentions-dropdown-menu-item-active{background-color:rgba(255,255,255,.08)}.ant-mentions-rtl{direction:rtl}.ant-menu-item-danger.ant-menu-item,.ant-menu-item-danger.ant-menu-item-active,.ant-menu-item-danger.ant-menu-item-selected,.ant-menu-item-danger.ant-menu-item-selected>a,.ant-menu-item-danger.ant-menu-item-selected>a:hover,.ant-menu-item-danger.ant-menu-item:hover{color:#a31b26}.ant-menu-item-danger.ant-menu-item:active{background:#220e19}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{background-color:#220e19}.ant-menu-inline .ant-menu-item-danger.ant-menu-item::after{border-right-color:#a31b26}.ant-menu-dark .ant-menu-item-danger.ant-menu-item,.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover,.ant-menu-dark .ant-menu-item-danger.ant-menu-item>a{color:#a31b26}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{color:#fff;background-color:#a31b26}.ant-menu{box-sizing:border-box;font-variant:tabular-nums;font-feature-settings:'tnum';margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;line-height:0;text-align:left;list-style:none;background:#0a0f19;outline:0;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2);transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s}.ant-menu::after,.ant-menu::before{display:table;content:''}.ant-menu::after{clear:both}.ant-menu-hidden{display:none}.ant-menu-item-group-title{height:1.5715;padding:8px 16px;color:rgba(255,255,255,.45);font-size:14px;line-height:1.5715;transition:all .3s}.ant-menu-horizontal .ant-menu-submenu{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu,.ant-menu-submenu-inline{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-item a:hover,.ant-menu-item>.ant-badge a:hover,.ant-menu-submenu-selected{color:#ffd90f}.ant-menu-item:active,.ant-menu-submenu-title:active{background:#232215}.ant-menu-submenu .ant-menu-sub{cursor:initial;transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item a,.ant-menu-item>.ant-badge a{color:rgba(255,255,255,.85)}.ant-menu-item a::before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:''}.ant-menu-item-divider{height:1px;overflow:hidden;line-height:0;background-color:#424242}.ant-menu-item-active,.ant-menu-item:hover,.ant-menu-submenu-active,.ant-menu-submenu-title:hover,.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open{color:#ffd90f}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{margin-top:-1px}.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:transparent}.ant-menu-item-selected,.ant-menu-item-selected a,.ant-menu-item-selected a:hover{color:#ffd90f}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#232215}.ant-menu-inline,.ant-menu-vertical,.ant-menu-vertical-left,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>.ant-table-cell-fix-right-first::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>th{border-right:1px solid #424242}.ant-menu-vertical-right{border-left:1px solid #424242}.ant-menu-vertical-left.ant-menu-sub,.ant-menu-vertical-right.ant-menu-sub,.ant-menu-vertical.ant-menu-sub{min-width:160px;max-height:calc(100vh - 100px);padding:0;overflow:hidden;border-right:0;transform-origin:0 0}.ant-menu-vertical-left.ant-menu-sub:not([class*=-active]),.ant-menu-vertical-right.ant-menu-sub:not([class*=-active]),.ant-menu-vertical.ant-menu-sub:not([class*=-active]){overflow-x:hidden;overflow-y:auto}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item,.ant-menu-vertical.ant-menu-sub .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item::after,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item::after,.ant-menu-vertical.ant-menu-sub .ant-menu-item::after{border-right:0}.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu{transform-origin:0 0}.ant-menu-horizontal.ant-menu-sub{min-width:114px}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu-title{transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item,.ant-menu-submenu-title{position:relative;display:block;margin:0;padding:0 20px;white-space:nowrap;cursor:pointer;transition:color .3s cubic-bezier(.645,.045,.355,1),border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .anticon,.ant-menu-submenu-title .anticon{min-width:14px;margin-right:10px;font-size:14px;transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .anticon+span,.ant-menu-submenu-title .anticon+span{opacity:1;transition:opacity .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-submenu-title.ant-menu-item-only-child>.anticon,table tr td.ant-table-selection-column .ant-radio-wrapper,table tr th.ant-table-selection-column .ant-radio-wrapper{margin-right:0}.ant-menu>.ant-menu-item-divider{height:1px;margin:1px 0;padding:0;overflow:hidden;line-height:0;background-color:#424242}.ant-menu-submenu-popup{position:absolute;z-index:1050;border-radius:4px;box-shadow:none}.ant-menu-submenu-popup::before{position:absolute;top:-7px;right:0;bottom:0;left:0;z-index:-1;width:100%;height:100%;opacity:.0001;content:' '}.ant-menu-submenu-placement-rightTop::before{top:0;left:-7px}.ant-menu-submenu>.ant-menu{background-color:#0a0f19;border-radius:4px}.ant-menu-submenu>.ant-menu-submenu-title::after{transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-popup>.ant-menu{background-color:#212121}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow{position:absolute;top:50%;right:16px;width:10px;transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow::before{position:absolute;width:6px;height:1.5px;background-image:linear-gradient(to right,rgba(255,255,255,.85),rgba(255,255,255,.85));border-radius:2px;transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1);content:''}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow::before{transform:rotate(45deg) translateY(-2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow::after{transform:rotate(-45deg) translateY(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow::after,.ant-menu-submenu-inline>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical-left>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical>.ant-menu-submenu-title:hover .ant-menu-submenu-arrow::before{background:linear-gradient(to right,#ffd90f,#ffd90f)}.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow::before{transform:rotate(45deg) translateY(-2px)}.ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow::after{transform:rotate(-45deg) translateY(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow::before{transform:rotate(-45deg) translateX(2px)}.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow::after{transform:rotate(45deg) translateX(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow{transform:translateY(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow::after{transform:rotate(-45deg) translateX(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow::before{transform:rotate(45deg) translateX(2px)}.ant-menu-horizontal>.ant-menu-item a:hover,.ant-menu-vertical .ant-menu-submenu-selected,.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected{color:#ffd90f}.ant-menu-horizontal{line-height:46px;white-space:nowrap;border:0;border-bottom:1px solid #424242;box-shadow:none}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu{margin:-1px 20px 0;padding:0}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover{color:#ffd90f;border-bottom:2px solid #ffd90f}.ant-menu-horizontal>.ant-menu-item,.ant-menu-horizontal>.ant-menu-submenu{position:relative;top:1px;display:inline-block;vertical-align:bottom;border-bottom:2px solid transparent}.ant-menu-horizontal>.ant-menu-submenu>.ant-menu-submenu-title{padding:0}.ant-menu-horizontal>.ant-menu-item a,.ant-menu-inline-collapsed-tooltip a{color:rgba(255,255,255,.85)}.ant-menu-horizontal>.ant-menu-item a::before{bottom:-2px}.ant-menu-horizontal>.ant-menu-item-selected a{color:#ffd90f}.ant-menu-horizontal::after{display:block;clear:both;height:0;content:'\20'}.ant-menu-inline .ant-menu-item,.ant-menu-vertical .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item{position:relative}.ant-menu-inline .ant-menu-item::after,.ant-menu-vertical .ant-menu-item::after,.ant-menu-vertical-left .ant-menu-item::after,.ant-menu-vertical-right .ant-menu-item::after{position:absolute;top:0;right:0;bottom:0;border-right:3px solid #ffd90f;transform:scaleY(.0001);opacity:0;transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1);content:''}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-item,.ant-menu-vertical .ant-menu-submenu-title,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical-right .ant-menu-submenu-title{height:40px;margin-top:4px;margin-bottom:4px;padding:0 16px;overflow:hidden;line-height:40px;text-overflow:ellipsis}.ant-menu-inline .ant-menu-submenu,.ant-menu-vertical .ant-menu-submenu,.ant-menu-vertical-left .ant-menu-submenu,.ant-menu-vertical-right .ant-menu-submenu{padding-bottom:.02px}.ant-menu-inline .ant-menu-item:not(:last-child),.ant-menu-vertical .ant-menu-item:not(:last-child),.ant-menu-vertical-left .ant-menu-item:not(:last-child),.ant-menu-vertical-right .ant-menu-item:not(:last-child){margin-bottom:8px}.ant-menu-inline>.ant-menu-item,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-left>.ant-menu-item,.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-right>.ant-menu-item,.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px}.ant-menu-vertical .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline{width:100%}.ant-menu-inline .ant-menu-item-selected::after,.ant-menu-inline .ant-menu-selected::after{transform:scaleY(1);opacity:1;transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title{width:calc(100% + 1px)}.ant-menu-inline .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline-collapsed{width:80px}.ant-menu-inline-collapsed>.ant-menu-item,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title{left:0;padding:0 32px;text-overflow:clip}.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow{display:none}.ant-menu-inline-collapsed>.ant-menu-item .anticon,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px}.ant-menu-inline-collapsed>.ant-menu-item .anticon+span,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon+span,.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span,.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span{display:inline-block;max-width:0;opacity:0}.ant-menu-inline-collapsed .anticon{display:inline-block}.ant-menu-inline-collapsed-tooltip{pointer-events:none}.ant-menu-inline-collapsed-tooltip .anticon{display:none}.ant-menu-inline-collapsed .ant-menu-item-group-title{padding-right:4px;padding-left:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-menu-item-group-list{margin:0;padding:0}.ant-menu-item-group-list .ant-menu-item,.ant-menu-item-group-list .ant-menu-submenu-title{padding:0 16px 0 28px}.ant-menu-root.ant-menu-inline,.ant-menu-root.ant-menu-vertical,.ant-menu-root.ant-menu-vertical-left,.ant-menu-root.ant-menu-vertical-right{box-shadow:none}.ant-menu-root.ant-menu-inline-collapsed .ant-menu-item>.ant-menu-inline-collapsed-noicon,.ant-menu-root.ant-menu-inline-collapsed .ant-menu-submenu .ant-menu-submenu-title>.ant-menu-inline-collapsed-noicon{font-size:16px;text-align:center}.ant-menu-sub.ant-menu-inline{padding:0;border-radius:0;box-shadow:none}.ant-menu-sub.ant-menu-inline>.ant-menu-item,.ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc}.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-left:32px}.ant-menu-item-disabled,.ant-menu-submenu-disabled{background:0 0;border-color:transparent!important}.ant-menu-item-disabled a,.ant-menu-submenu-disabled a{color:rgba(255,255,255,.3)!important;pointer-events:none}.ant-menu-item-disabled,.ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-submenu-disabled,.ant-menu-submenu-disabled>.ant-menu-submenu-title{color:rgba(255,255,255,.3)!important;cursor:not-allowed}.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before{background:rgba(255,255,255,.3)!important}.ant-layout-header .ant-menu{line-height:inherit}.ant-menu-dark .ant-menu-sub,.ant-menu.ant-menu-dark,.ant-menu.ant-menu-dark .ant-menu-sub{color:rgba(255,255,255,.65);background:#212121}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:.45;transition:all .3s}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow::before{background:#fff}.ant-menu-dark.ant-menu-submenu-popup{background:0 0}.ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#0a0f19}.ant-menu-dark.ant-menu-horizontal{border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu{top:0;margin-top:0;padding:0 20px;border-color:#212121;border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item:hover{background-color:#ffd90f}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item>a::before{bottom:0}.ant-menu-dark .ant-menu-item,.ant-menu-dark .ant-menu-item-group-title,.ant-menu-dark .ant-menu-item>a,.ant-menu-dark .ant-menu-item>span>a{color:rgba(255,255,255,.65)}.ant-menu-dark .ant-menu-item-selected::after,.ant-menu-dark.ant-menu-inline,.ant-menu-dark.ant-menu-inline .ant-menu-item::after,.ant-menu-dark.ant-menu-vertical,.ant-menu-dark.ant-menu-vertical .ant-menu-item::after,.ant-menu-dark.ant-menu-vertical-left,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item::after,.ant-menu-dark.ant-menu-vertical-right,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item::after,.ant-table.ant-table-bordered.ant-table-scroll-horizontal>.ant-table-container>.ant-table-body>table>tbody>tr.ant-table-expanded-row>td,.ant-table.ant-table-bordered.ant-table-scroll-horizontal>.ant-table-container>.ant-table-body>table>tbody>tr.ant-table-placeholder>td{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-vertical .ant-menu-item,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title{width:100%}.ant-menu-dark .ant-menu-item:hover{color:#fff}.ant-menu-dark .ant-menu-item-active,.ant-menu-dark .ant-menu-submenu-active,.ant-menu-dark .ant-menu-submenu-open,.ant-menu-dark .ant-menu-submenu-selected,.ant-menu-dark .ant-menu-submenu-title:hover{color:#fff;background-color:transparent}.ant-menu-dark .ant-menu-item-active>a,.ant-menu-dark .ant-menu-item-active>span>a,.ant-menu-dark .ant-menu-item-selected>a,.ant-menu-dark .ant-menu-item-selected>a:hover,.ant-menu-dark .ant-menu-item-selected>span>a,.ant-menu-dark .ant-menu-item-selected>span>a:hover,.ant-menu-dark .ant-menu-item:hover>a,.ant-menu-dark .ant-menu-item:hover>span>a,.ant-menu-dark .ant-menu-submenu-active>a,.ant-menu-dark .ant-menu-submenu-active>span>a,.ant-menu-dark .ant-menu-submenu-open>a,.ant-menu-dark .ant-menu-submenu-open>span>a,.ant-menu-dark .ant-menu-submenu-selected>a,.ant-menu-dark .ant-menu-submenu-selected>span>a,.ant-menu-dark .ant-menu-submenu-title:hover>a,.ant-menu-dark .ant-menu-submenu-title:hover>span>a{color:#fff}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title:hover>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{opacity:1}.ant-menu-dark .ant-menu-item:hover{background-color:transparent}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#ffd90f}.ant-menu-dark .ant-menu-item-selected{color:#fff;border-right:0}.ant-menu-dark .ant-menu-item-selected .anticon,.ant-menu-dark .ant-menu-item-selected .anticon+span{color:#fff}.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected,.ant-menu.ant-menu-dark .ant-menu-item-selected{background-color:#ffd90f}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-item-disabled>a,.ant-menu-dark .ant-menu-item-disabled>span>a,.ant-menu-dark .ant-menu-submenu-disabled,.ant-menu-dark .ant-menu-submenu-disabled>a,.ant-menu-dark .ant-menu-submenu-disabled>span>a{color:rgba(255,255,255,.3)!important;opacity:.8}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title{color:rgba(255,255,255,.3)!important}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before{background:rgba(255,255,255,.3)!important}.ant-menu.ant-menu-rtl{direction:rtl;text-align:right}.ant-menu-rtl .ant-menu-item-group-title{text-align:right}.ant-menu-rtl.ant-menu-inline,.ant-menu-rtl.ant-menu-vertical{border-right:none;border-left:1px solid #424242}.ant-menu-rtl.ant-menu-dark.ant-menu-inline,.ant-menu-rtl.ant-menu-dark.ant-menu-vertical{border-left:none}.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical.ant-menu-sub,.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu{transform-origin:top right}.ant-menu-rtl .ant-menu-item .anticon,.ant-menu-rtl .ant-menu-submenu-title .anticon{margin-right:auto;margin-left:10px}.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.anticon{margin-left:0}.ant-menu-rtl .ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow{right:auto;left:16px}.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow::before,.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow::before{transform:rotate(-45deg) translateY(-2px)}.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow::after,.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow::after{transform:rotate(45deg) translateY(2px)}.ant-menu-rtl.ant-menu-inline .ant-menu-item::after,.ant-menu-rtl.ant-menu-vertical .ant-menu-item::after,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item::after,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item::after{right:auto;left:0}.ant-menu-rtl.ant-menu-inline .ant-menu-item,.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical .ant-menu-item,.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-submenu-title{text-align:right}.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title{padding-right:0;padding-left:34px}.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title{padding-right:16px;padding-left:34px}.ant-menu-rtl.ant-menu-inline-collapsed.ant-menu-vertical .ant-menu-submenu-title{padding:0 32px}.ant-menu-rtl .ant-menu-item-group-list .ant-menu-item,.ant-menu-rtl .ant-menu-item-group-list .ant-menu-submenu-title{padding:0 28px 0 16px}.ant-menu-sub.ant-menu-inline,.ant-page-header-footer .ant-tabs>.ant-tabs-nav::before{border:0}.ant-menu-rtl.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-right:32px;padding-left:0}.ant-message{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:fixed;top:8px;left:0;z-index:1010;width:100%;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice-content{display:inline-block;padding:10px 16px;background:#212121;border-radius:4px;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2);pointer-events:all}.ant-message-success .anticon{color:#47a91a}.ant-message-error .anticon{color:#a31b26}.ant-message-warning .anticon{color:#d69515}.ant-message-info .anticon,.ant-message-loading .anticon{color:#ffd90f}.ant-message .anticon{position:relative;top:1px;margin-right:8px;font-size:16px}.ant-message-notice.move-up-leave.move-up-leave-active{animation-name:MessageMoveOut;animation-duration:.3s}.ant-message-rtl,.ant-message-rtl span{direction:rtl}.ant-message-rtl .anticon{margin-right:0;margin-left:8px}.ant-modal{box-sizing:border-box;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;top:100px;width:auto;max-width:calc(100vw - 32px);margin:0 auto;padding:0 0 24px}.ant-modal-wrap{z-index:1000}.ant-modal-title{margin:0;color:rgba(255,255,255,.85);font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#212121;background-clip:padding-box;border:0;border-radius:4px;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2);pointer-events:auto}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:rgba(255,255,255,.45);font-weight:700;line-height:1;text-decoration:none;background:0 0;border:0;outline:0;cursor:pointer;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:rgba(255,255,255,.75);text-decoration:none}.ant-modal-header{padding:16px 24px;color:rgba(255,255,255,.85);background:#212121;border-bottom:1px solid #424242;border-radius:4px 4px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:0 0;border-top:1px solid #424242;border-radius:0 0 4px 4px}.ant-modal-confirm .ant-modal-confirm-btns button+button,.ant-modal-footer button+button{margin-bottom:0;margin-left:8px}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered::before{display:inline-block;width:0;height:100%;vertical-align:middle;content:''}.ant-modal-centered .ant-modal{top:0;display:inline-block;text-align:left;vertical-align:middle}@media (max-width:767px){.ant-modal{max-width:calc(100vw - 16px);margin:8px auto}.ant-modal-centered .ant-modal{flex:1}}.ant-modal-confirm .ant-modal-close,.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper::before{display:table;content:''}.ant-modal-confirm-body-wrapper::after{display:table;clear:both;content:''}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:rgba(255,255,255,.85);font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:rgba(255,255,255,.85);font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#a31b26}.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon,.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon{color:#d69515}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#ffd90f}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#47a91a}.ant-modal .ant-anchor-wrapper,.ant-modal .ant-card,.ant-modal .ant-collapse-content,.ant-modal .ant-picker-clear,.ant-modal .ant-slider-handle,.ant-modal .ant-timeline-item-head{background-color:#212121}.ant-modal .ant-transfer-list-header{background:#212121;border-bottom:1px solid #3a3a3a}.ant-modal .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:rgba(255,255,255,.08)}.ant-modal .ant-table.ant-table-small thead>tr>th{background-color:#212121;border-bottom:1px solid #3a3a3a}.ant-modal .ant-picker-calendar-full,.ant-modal .ant-table,.ant-modal .ant-table tbody>tr>td.ant-table-cell-fix-left,.ant-modal .ant-table tbody>tr>td.ant-table-cell-fix-right{background-color:#212121}.ant-modal .ant-table .ant-table-row-expand-icon,.ant-modal .ant-table.ant-table-bordered .ant-table-container,.ant-modal .ant-table.ant-table-bordered .ant-table-footer,.ant-modal .ant-table.ant-table-bordered .ant-table-title{border:1px solid #3a3a3a}.ant-modal .ant-table tbody>tr>td,.ant-modal .ant-table tfoot>tr>td,.ant-modal .ant-table tfoot>tr>th{border-bottom:1px solid #3a3a3a}.ant-modal .ant-table thead>tr>th{background-color:#272727;border-bottom:1px solid #3a3a3a}.ant-modal .ant-table.ant-table-bordered .ant-table-cell-fix-right-first::after,.ant-modal .ant-table.ant-table-bordered .ant-table-expanded-row-fixed::after,.ant-modal .ant-table.ant-table-bordered tbody>tr>td,.ant-modal .ant-table.ant-table-bordered tfoot>tr>td,.ant-modal .ant-table.ant-table-bordered tfoot>tr>th,.ant-modal .ant-table.ant-table-bordered thead>tr>th{border-right:1px solid #3a3a3a}.ant-modal .ant-table .ant-table-filter-trigger-container-open{background-color:#525252}.ant-modal .ant-picker-calendar-full .ant-picker-panel{background-color:#212121}.ant-modal .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{border-top:2px solid #3a3a3a}.ant-modal .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{background-color:#212121;border-bottom:1px solid #212121}.ant-modal .ant-badge-count{box-shadow:0 0 0 1px #212121}.ant-modal .ant-tree-show-line .ant-tree-switcher{background:#212121}.ant-modal-wrap-rtl{direction:rtl}.ant-modal-wrap-rtl .ant-modal-close{right:initial;left:0}.ant-modal-wrap-rtl .ant-modal-footer{text-align:left}.ant-modal-wrap-rtl .ant-modal-confirm-btns button+button,.ant-modal-wrap-rtl .ant-modal-footer button+button{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-body{direction:rtl}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon{float:right;margin-right:0;margin-left:16px}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-right:38px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-btns{float:left}.ant-modal-wrap-rtl.ant-modal-centered .ant-modal,.ant-table-wrapper-rtl .ant-table table{text-align:right}.ant-notification .ant-anchor-wrapper,.ant-notification .ant-card,.ant-notification .ant-collapse-content,.ant-notification .ant-picker-clear,.ant-notification .ant-slider-handle,.ant-notification .ant-timeline-item-head{background-color:#212121}.ant-notification .ant-transfer-list-header{background:#212121;border-bottom:1px solid #3a3a3a}.ant-notification .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:rgba(255,255,255,.08)}.ant-notification .ant-table.ant-table-small thead>tr>th{background-color:#212121;border-bottom:1px solid #3a3a3a}.ant-notification .ant-picker-calendar-full,.ant-notification .ant-table,.ant-notification .ant-table tbody>tr>td.ant-table-cell-fix-left,.ant-notification .ant-table tbody>tr>td.ant-table-cell-fix-right{background-color:#212121}.ant-notification .ant-table .ant-table-row-expand-icon,.ant-notification .ant-table.ant-table-bordered .ant-table-container,.ant-notification .ant-table.ant-table-bordered .ant-table-footer,.ant-notification .ant-table.ant-table-bordered .ant-table-title{border:1px solid #3a3a3a}.ant-notification .ant-table tbody>tr>td,.ant-notification .ant-table tfoot>tr>td,.ant-notification .ant-table tfoot>tr>th{border-bottom:1px solid #3a3a3a}.ant-notification .ant-table thead>tr>th{background-color:#272727;border-bottom:1px solid #3a3a3a}.ant-notification .ant-table.ant-table-bordered .ant-table-cell-fix-right-first::after,.ant-notification .ant-table.ant-table-bordered .ant-table-expanded-row-fixed::after,.ant-notification .ant-table.ant-table-bordered tbody>tr>td,.ant-notification .ant-table.ant-table-bordered tfoot>tr>td,.ant-notification .ant-table.ant-table-bordered tfoot>tr>th,.ant-notification .ant-table.ant-table-bordered thead>tr>th{border-right:1px solid #3a3a3a}.ant-notification .ant-table .ant-table-filter-trigger-container-open{background-color:#525252}.ant-notification .ant-picker-calendar-full .ant-picker-panel{background-color:#212121}.ant-notification .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{border-top:2px solid #3a3a3a}.ant-notification .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{background-color:#212121;border-bottom:1px solid #212121}.ant-notification .ant-badge-count{box-shadow:0 0 0 1px #212121}.ant-notification .ant-tree-show-line .ant-tree-switcher{background:#212121}.ant-notification{box-sizing:border-box;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:fixed;z-index:1010;max-width:calc(100vw - 32px);margin:0 24px 0 0}.ant-notification-bottomLeft,.ant-notification-topLeft{margin-right:0;margin-left:24px}.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active{animation-name:NotificationLeftFadeIn}.ant-notification-close-icon{font-size:14px;cursor:pointer}.ant-notification-hook-holder,.ant-notification-notice{position:relative;width:384px;margin-bottom:16px;margin-left:auto;overflow:hidden;background:#212121;border-radius:4px;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-notification-bottomLeft .ant-notification-hook-holder,.ant-notification-bottomLeft .ant-notification-notice,.ant-notification-topLeft .ant-notification-hook-holder,.ant-notification-topLeft .ant-notification-notice{margin-right:auto;margin-left:0}.ant-notification-hook-holder>.ant-notification-notice{margin-bottom:0;box-shadow:none}.ant-notification-notice{padding:16px 24px;line-height:1.5715}.ant-notification-notice-message{display:inline-block;margin-bottom:8px;color:rgba(255,255,255,.85);font-size:16px;line-height:24px}.ant-notification-notice-message-single-line-auto-margin{display:block;width:calc(384px - 24px*2 - 24px - 48px - 100%);max-width:4px;background-color:transparent;pointer-events:none}.ant-notification-notice-message-single-line-auto-margin::before{display:block;content:''}.ant-notification-notice-description{font-size:14px}.ant-notification-notice-closable .ant-notification-notice-message{padding-right:24px}.ant-notification-notice-with-icon .ant-notification-notice-message{margin-bottom:4px;margin-left:48px;font-size:16px}.ant-notification-notice-with-icon .ant-notification-notice-description{margin-left:48px;font-size:14px}.ant-notification-notice-icon{position:absolute;margin-left:4px;font-size:24px;line-height:24px}.anticon.ant-notification-notice-icon-success{color:#47a91a}.anticon.ant-notification-notice-icon-info{color:#ffd90f}.anticon.ant-notification-notice-icon-warning{color:#d69515}.anticon.ant-notification-notice-icon-error{color:#a31b26}.ant-notification-notice-close{position:absolute;top:16px;right:22px;color:rgba(255,255,255,.45);outline:0}.ant-notification-notice-close:hover{color:rgba(255,255,255,.85)}.ant-notification-notice-btn{float:right;margin-top:16px}.ant-notification .notification-fade-effect{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both}.ant-notification-fade-appear,.ant-notification-fade-enter,.ant-notification-fade-leave{animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both;animation-play-state:paused}.ant-notification-fade-appear,.ant-notification-fade-enter{opacity:0;animation-duration:.24s}.ant-notification-fade-leave{animation-duration:.2s}.ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-fade-enter.ant-notification-fade-enter-active{animation-name:NotificationFadeIn;animation-play-state:running}.ant-notification-fade-leave.ant-notification-fade-leave-active{animation-name:NotificationFadeOut;animation-play-state:running}.ant-notification-rtl{direction:rtl}.ant-notification-rtl .ant-notification-notice-closable .ant-notification-notice-message{padding-right:0;padding-left:24px}.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-description,.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-message{margin-right:48px;margin-left:0}.ant-notification-rtl .ant-notification-notice-icon{margin-right:4px;margin-left:0}.ant-notification-rtl .ant-notification-notice-close{right:auto;left:22px}.ant-notification-rtl .ant-notification-notice-btn{float:left}.ant-page-header{box-sizing:border-box;margin:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;padding:16px 24px;background-color:#0a0f19}.ant-page-header-ghost{background-color:transparent}.ant-page-header.has-breadcrumb{padding-top:12px}.ant-page-header.has-footer{padding-bottom:0}.ant-page-header-back{margin-right:16px;font-size:16px;line-height:1}.ant-page-header-back-button{text-decoration:none;outline:0;transition:color .3s;color:inherit;cursor:pointer}.ant-page-header-back-button:focus,.ant-page-header-back-button:hover{color:#a99213}.ant-page-header-back-button:active{color:#e7d235}.ant-page-header .ant-divider-vertical{height:14px;margin:0 12px;vertical-align:middle}.ant-breadcrumb+.ant-page-header-heading{margin-top:8px}.ant-page-header-heading{display:flex;justify-content:space-between}.ant-page-header-heading-left{display:flex;align-items:center;margin:4px 0;overflow:hidden}.ant-page-header-heading-sub-title,.ant-page-header-heading-title{margin-right:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-page-header-heading-title{margin-bottom:0;color:rgba(255,255,255,.85);font-weight:600;font-size:20px;line-height:32px}.ant-page-header-heading .ant-avatar{margin-right:12px}.ant-page-header-heading-sub-title{color:rgba(255,255,255,.45);font-size:14px;line-height:1.5715}.ant-page-header-heading-extra{margin:4px 0;white-space:nowrap}.ant-page-header-heading-extra>*{margin-left:12px;white-space:unset}.ant-page-header-heading-extra>:first-child{margin-left:0}.ant-page-header-content{padding-top:12px}.ant-page-header-footer,.ant-skeleton-content .ant-skeleton-paragraph>li+li{margin-top:16px}.ant-page-header-footer .ant-tabs>.ant-tabs-nav,.ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column{margin:0}.ant-page-header-footer .ant-tabs .ant-tabs-tab{padding:8px 0;font-size:16px}.ant-page-header-compact .ant-page-header-heading{flex-wrap:wrap}.ant-page-header-rtl,.ant-pagination-options-quick-jumper input-rtl{direction:rtl}.ant-page-header-rtl .ant-page-header-back{float:right;margin-right:0;margin-left:16px}.ant-page-header-rtl .ant-page-header-heading .ant-avatar,.ant-page-header-rtl .ant-page-header-heading-title{margin-right:0;margin-left:12px}.ant-page-header-rtl .ant-page-header-heading-sub-title{float:right;margin-right:0;margin-left:12px}.ant-page-header-rtl .ant-page-header-footer .ant-tabs-bar .ant-tabs-nav,.ant-page-header-rtl .ant-page-header-heading-tags{float:right}.ant-page-header-rtl .ant-page-header-heading-extra{float:left}.ant-page-header-rtl .ant-page-header-heading-extra>*{margin-right:12px;margin-left:0}.ant-page-header-rtl .ant-page-header-heading-extra>:first-child{margin-right:0}.ant-pagination{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum'}.ant-pagination::after{display:block;clear:both;height:0;overflow:hidden;visibility:hidden;content:' '}.ant-pagination-item,.ant-pagination-total-text{display:inline-block;height:32px;margin-right:8px;line-height:30px;vertical-align:middle}.ant-pagination-item{min-width:32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';text-align:center;list-style:none;background-color:transparent;border:1px solid #6f6c6c;border-radius:4px;outline:0;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-item a{display:block;padding:0 6px;color:rgba(255,255,255,.85);transition:none}.ant-pagination-item a:hover{text-decoration:none}.ant-pagination-item:focus,.ant-pagination-item:hover{border-color:#ffd90f;transition:all .3s}.ant-pagination-item:focus a,.ant-pagination-item:hover a{color:#ffd90f}.ant-pagination-item-active{font-weight:500;background:0 0;border-color:#ffd90f}.ant-pagination-item-active a{color:#ffd90f}.ant-pagination-item-active:focus,.ant-pagination-item-active:hover{border-color:#a99213}.ant-pagination-item-active:focus a,.ant-pagination-item-active:hover a{color:#a99213}.ant-pagination-jump-next,.ant-pagination-jump-prev{outline:0}.ant-pagination-jump-next .ant-pagination-item-container,.ant-pagination-jump-prev .ant-pagination-item-container{position:relative}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon{color:#ffd90f;font-size:12px;letter-spacing:-1px;opacity:0;transition:all .2s}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg{top:0;right:0;bottom:0;left:0;margin:auto}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis{position:absolute;top:0;right:0;bottom:0;left:0;display:block;margin:auto;color:rgba(255,255,255,.3);font-family:Arial,Helvetica,sans-serif;letter-spacing:2px;text-align:center;text-indent:.13em;opacity:1;transition:all .2s}.ant-pagination-jump-next:focus .ant-pagination-item-link-icon,.ant-pagination-jump-next:hover .ant-pagination-item-link-icon,.ant-pagination-jump-prev:focus .ant-pagination-item-link-icon,.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-next:focus .ant-pagination-item-ellipsis,.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:focus .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-prev{margin-right:8px}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-next,.ant-pagination-prev{display:inline-block;min-width:32px;height:32px;color:rgba(255,255,255,.85);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:32px;text-align:center;vertical-align:middle;list-style:none;border-radius:4px;cursor:pointer;transition:all .3s}.ant-pagination-next,.ant-pagination-prev{font-family:Arial,Helvetica,sans-serif;outline:0}.ant-pagination-next button,.ant-pagination-prev button{color:rgba(255,255,255,.85);cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-next:hover button,.ant-pagination-prev:hover button{border-color:#a99213}.ant-pagination-next .ant-pagination-item-link,.ant-pagination-prev .ant-pagination-item-link{display:block;width:100%;height:100%;font-size:12px;text-align:center;background-color:transparent;border:1px solid #6f6c6c;border-radius:4px;outline:0;transition:all .3s}.ant-pagination-next:focus .ant-pagination-item-link,.ant-pagination-next:hover .ant-pagination-item-link,.ant-pagination-prev:focus .ant-pagination-item-link,.ant-pagination-prev:hover .ant-pagination-item-link{color:#ffd90f;border-color:#ffd90f}.ant-pagination-disabled,.ant-pagination-disabled:focus,.ant-pagination-disabled:hover{cursor:not-allowed}.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination-disabled:focus .ant-pagination-item-link,.ant-pagination-disabled:hover .ant-pagination-item-link{color:rgba(255,255,255,.3);border-color:#6f6c6c;cursor:not-allowed}.ant-pagination-slash{margin:0 10px 0 5px}.ant-pagination-options{display:inline-block;margin-left:16px;vertical-align:middle}@media all and (-ms-high-contrast:none){.ant-pagination-options,.ant-pagination-options ::-ms-backdrop{vertical-align:top}}.ant-pagination-options-size-changer.ant-select{display:inline-block;width:auto;margin-right:8px}.ant-pagination-options-quick-jumper{display:inline-block;height:32px;line-height:32px;vertical-align:top}.ant-pagination-options-quick-jumper input{position:relative;display:inline-block;min-width:0;padding:4px 11px;color:rgba(255,255,255,.85);font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;border:1px solid #6f6c6c;border-radius:4px;transition:all .3s;width:50px;margin:0 8px}.ant-pagination-options-quick-jumper input:-ms-input-placeholder{color:rgba(255,255,255,.3);text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:hover{border-color:#a99213;border-right-width:1px!important}.ant-pagination-options-quick-jumper input-focused,.ant-pagination-options-quick-jumper input:focus{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-pagination-options-quick-jumper input-focused,.ant-input-rtl .ant-pagination-options-quick-jumper input:focus{border-right-width:0;border-left-width:1px!important}.ant-pagination-options-quick-jumper input[disabled]{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input[disabled]:hover{border-color:#6f6c6c;border-right-width:1px!important}textarea.ant-pagination-options-quick-jumper input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-pagination-simple .ant-pagination-next,.ant-pagination-simple .ant-pagination-prev{height:24px;line-height:24px;vertical-align:top}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link{height:24px;background-color:transparent;border:0}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link::after,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link::after,.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link::after,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link::after,.ant-pagination.mini .ant-pagination-simple-pager,.ant-pagination.mini .ant-pagination-total-text{height:24px;line-height:24px}.ant-pagination-simple .ant-pagination-simple-pager{display:inline-block;height:24px;margin-right:8px}.ant-pagination-simple .ant-pagination-simple-pager input{box-sizing:border-box;height:100%;margin-right:8px;padding:0 6px;text-align:center;background-color:transparent;border:1px solid #6f6c6c;border-radius:4px;outline:0;transition:border-color .3s}.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:#ffd90f}.ant-pagination-simple .ant-pagination-simple-pager input[disabled]{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;cursor:not-allowed}.ant-pagination.mini .ant-pagination-item{min-width:24px;height:24px;margin:0;line-height:22px}.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active){background:0 0;border-color:transparent}.ant-pagination.mini .ant-pagination-next,.ant-pagination.mini .ant-pagination-prev{min-width:24px;height:24px;margin:0;line-height:24px}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link{background:0 0;border-color:transparent}.ant-pagination.mini .ant-pagination-jump-next,.ant-pagination.mini .ant-pagination-jump-prev{height:24px;margin-right:0;line-height:24px}.ant-pagination.mini .ant-pagination-options{margin-left:2px}.ant-pagination.mini .ant-pagination-options-size-changer{top:0}.ant-pagination.mini .ant-pagination-options-quick-jumper{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-options-quick-jumper input{padding:0 7px;width:44px}.ant-pagination.ant-pagination-disabled{cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item{background:rgba(255,255,255,.08);border-color:#6f6c6c;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item a{color:rgba(255,255,255,.3);background:0 0;border:0;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active{background:rgba(255,255,255,.25);border-color:transparent}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a{color:#000}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);border-color:#6f6c6c;cursor:not-allowed}.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{background:0 0}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link-icon{opacity:0}.ant-pagination.ant-pagination-disabled .ant-pagination-item-ellipsis{opacity:1}.ant-pagination.ant-pagination-disabled .ant-pagination-simple-pager{color:rgba(255,255,255,.3)}@media only screen and (max-width:992px){.ant-pagination-item-after-jump-prev,.ant-pagination-item-before-jump-next{display:none}}@media only screen and (max-width:576px){.ant-pagination-options{display:none}}.ant-pagination-rtl{direction:rtl}.ant-pagination-rtl .ant-pagination-item,.ant-pagination-rtl .ant-pagination-jump-next,.ant-pagination-rtl .ant-pagination-jump-prev,.ant-pagination-rtl .ant-pagination-options-size-changer.ant-select,.ant-pagination-rtl .ant-pagination-prev,.ant-pagination-rtl .ant-pagination-total-text,.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager,.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager input{margin-right:0;margin-left:8px}.ant-pagination-rtl .ant-pagination-slash{margin:0 5px 0 10px}.ant-pagination-rtl .ant-pagination-options{margin-right:16px;margin-left:0}.ant-pagination-rtl.ant-pagination.mini .ant-pagination-options{margin-right:2px;margin-left:0}.ant-popconfirm{z-index:1060}.ant-popover{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:absolute;top:0;left:0;z-index:1030;font-weight:400;white-space:normal;text-align:left;cursor:auto;-webkit-user-select:text;-ms-user-select:text;user-select:text}.ant-popover::after{position:absolute;background:rgba(255,255,255,.01);content:''}.ant-popover-hidden{display:none}.ant-popover-placement-top,.ant-popover-placement-topLeft,.ant-popover-placement-topRight{padding-bottom:10px}.ant-popover-placement-right,.ant-popover-placement-rightBottom,.ant-popover-placement-rightTop{padding-left:10px}.ant-popover-placement-bottom,.ant-popover-placement-bottomLeft,.ant-popover-placement-bottomRight{padding-top:10px}.ant-popover-placement-left,.ant-popover-placement-leftBottom,.ant-popover-placement-leftTop{padding-right:10px}.ant-popover-inner{background-color:#212121;background-clip:padding-box;border-radius:4px;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2);box-shadow:0 0 8px rgba(0,0,0,.45) \9}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.ant-popover-inner{box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}}.ant-popover-title{min-width:177px;min-height:32px;margin:0;padding:5px 16px 4px;color:rgba(255,255,255,.85);font-weight:500;border-bottom:1px solid #424242}.ant-popover-inner-content,.ant-popover-message{padding:12px 16px;color:rgba(255,255,255,.85)}.ant-popover-message{position:relative;padding:4px 0 12px;font-size:14px}.ant-popover-message>.anticon{position:absolute;top:8.0005px;color:#d69515;font-size:14px}.ant-popover-message-title{padding-left:22px}.ant-popover-buttons{margin-bottom:4px;text-align:right}.ant-popover-buttons button{margin-left:8px}.ant-popover-arrow{position:absolute;display:block;width:8.48528137px;height:8.48528137px;background:0 0;border-style:solid;border-width:4.24264069px;transform:rotate(45deg)}.ant-popover-placement-top>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-topLeft>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-topRight>.ant-popover-content>.ant-popover-arrow{bottom:6.2px;border-color:transparent #212121 #212121 transparent;box-shadow:3px 3px 7px rgba(0,0,0,.07)}.ant-popover-placement-top>.ant-popover-content>.ant-popover-arrow{left:50%;transform:translateX(-50%) rotate(45deg)}.ant-popover-placement-topLeft>.ant-popover-content>.ant-popover-arrow{left:16px}.ant-popover-placement-topRight>.ant-popover-content>.ant-popover-arrow{right:16px}.ant-popover-placement-right>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-rightBottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-rightTop>.ant-popover-content>.ant-popover-arrow{left:6px;border-color:transparent transparent #212121 #212121;box-shadow:-3px 3px 7px rgba(0,0,0,.07)}.ant-popover-placement-right>.ant-popover-content>.ant-popover-arrow{top:50%;transform:translateY(-50%) rotate(45deg)}.ant-popover-placement-rightTop>.ant-popover-content>.ant-popover-arrow{top:12px}.ant-popover-placement-rightBottom>.ant-popover-content>.ant-popover-arrow{bottom:12px}.ant-popover-placement-bottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-bottomLeft>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-bottomRight>.ant-popover-content>.ant-popover-arrow{top:6px;border-color:#212121 transparent transparent #212121;box-shadow:-2px -2px 5px rgba(0,0,0,.06)}.ant-popover-placement-bottom>.ant-popover-content>.ant-popover-arrow{left:50%;transform:translateX(-50%) rotate(45deg)}.ant-popover-placement-bottomLeft>.ant-popover-content>.ant-popover-arrow{left:16px}.ant-popover-placement-bottomRight>.ant-popover-content>.ant-popover-arrow{right:16px}.ant-popover-placement-left>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-leftBottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-leftTop>.ant-popover-content>.ant-popover-arrow{right:6px;border-color:#212121 #212121 transparent transparent;box-shadow:3px -3px 7px rgba(0,0,0,.07)}.ant-popover-placement-left>.ant-popover-content>.ant-popover-arrow{top:50%;transform:translateY(-50%) rotate(45deg)}.ant-popover-placement-leftTop>.ant-popover-content>.ant-popover-arrow{top:12px}.ant-popover-placement-leftBottom>.ant-popover-content>.ant-popover-arrow{bottom:12px}.ant-popover-rtl{direction:rtl;text-align:right}.ant-popover-rtl .ant-popover-message-title{padding-right:22px;padding-left:16px}.ant-popover-rtl .ant-popover-buttons{text-align:left}.ant-popover-rtl .ant-popover-buttons button{margin-right:8px;margin-left:0}.ant-progress{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';display:inline-block}.ant-progress-line{position:relative;width:100%;font-size:14px}.ant-progress-steps,.ant-select-arrow svg,.ant-select-multiple .ant-select-selection-item-remove svg{display:inline-block}.ant-progress-steps-outer{display:flex;flex-direction:row;align-items:center}.ant-progress-steps-item{flex-shrink:0;min-width:2px;margin-right:2px;background:rgba(255,255,255,.08);transition:all .3s}.ant-progress-steps-item-active{background:#167ddd}.ant-progress-small.ant-progress-line,.ant-progress-small.ant-progress-line .ant-progress-text .anticon{font-size:12px}.ant-progress-outer{display:inline-block;width:100%;margin-right:0;padding-right:0}.ant-progress-show-info .ant-progress-outer{margin-right:calc(-2em - 8px);padding-right:calc(2em + 8px)}.ant-progress-inner{position:relative;display:inline-block;width:100%;overflow:hidden;vertical-align:middle;background-color:rgba(255,255,255,.08);border-radius:100px}.ant-progress-circle-trail{stroke:rgba(255,255,255,.08)}.ant-progress-circle-path{animation:ant-progress-appear .3s}.ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#167ddd}.ant-progress-bg,.ant-progress-success-bg{border-radius:100px;transition:all .4s cubic-bezier(.08,.82,.17,1) 0s}.ant-progress-bg{position:relative;background-color:#167ddd}.ant-progress-success-bg{position:absolute;top:0;left:0;background-color:#47a91a}.ant-progress-text{display:inline-block;width:2em;margin-left:8px;color:rgba(255,255,255,.45);font-size:1em;line-height:1;white-space:nowrap;text-align:left;vertical-align:middle;word-break:normal}.ant-progress-text .anticon{font-size:14px}.ant-progress-status-active .ant-progress-bg::before{position:absolute;top:0;right:0;bottom:0;left:0;background:#0a0f19;border-radius:10px;opacity:0;animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;content:''}.ant-progress-status-exception .ant-progress-bg{background-color:#a31b26}.ant-progress-status-exception .ant-progress-text{color:#a31b26}.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#a31b26}.ant-progress-status-success .ant-progress-bg{background-color:#47a91a}.ant-progress-status-success .ant-progress-text{color:#47a91a}.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#47a91a}.ant-progress-circle .ant-progress-inner{position:relative;line-height:1;background-color:transparent}.ant-progress-circle .ant-progress-text{position:absolute;top:50%;left:50%;width:100%;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:1em;line-height:1;white-space:normal;text-align:center;transform:translate(-50%,-50%)}.ant-progress-circle .ant-progress-text .anticon{font-size:1.16666667em}.ant-progress-circle.ant-progress-status-exception .ant-progress-text{color:#a31b26}.ant-progress-circle.ant-progress-status-success .ant-progress-text{color:#47a91a}.ant-progress-rtl{direction:rtl}.ant-progress-rtl.ant-progress-show-info .ant-progress-outer{margin-right:0;margin-left:calc(-2em - 8px);padding-right:0;padding-left:calc(2em + 8px)}.ant-progress-rtl .ant-progress-success-bg{right:0;left:auto}.ant-progress-rtl.ant-progress-line .ant-progress-text,.ant-progress-rtl.ant-progress-steps .ant-progress-text{margin-right:8px;margin-left:0;text-align:right}.ant-radio-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';display:inline-block;font-size:0;line-height:unset}.ant-radio-group .ant-badge-count{z-index:1}.ant-radio-group>.ant-badge:not(:first-child)>.ant-radio-button-wrapper{border-left:none}.ant-radio,.ant-radio-wrapper{box-sizing:border-box;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;display:inline-block;margin:0 8px 0 0;white-space:nowrap;cursor:pointer}.ant-radio{margin:0;top:0;line-height:1;vertical-align:sub;outline:0}.ant-radio-input:focus+.ant-radio-inner,.ant-radio-wrapper:hover .ant-radio,.ant-radio:hover .ant-radio-inner{border-color:#ffd90f}.ant-radio-input:focus+.ant-radio-inner{box-shadow:0 0 0 3px rgba(255,217,15,.08)}.ant-radio-checked::after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #ffd90f;border-radius:50%;visibility:hidden;animation:antRadioEffect .36s ease-in-out;animation-fill-mode:both;content:''}.ant-radio-wrapper:hover .ant-radio::after,.ant-radio:hover::after{visibility:visible}.ant-radio-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:transparent;border-color:#6f6c6c;border-style:solid;border-width:1px;border-radius:100px;transition:all .3s}.ant-radio-inner::after{position:absolute;top:3px;left:3px;display:table;width:8px;height:8px;background-color:#ffd90f;border-top:0;border-left:0;border-radius:8px;transform:scale(0);opacity:0;transition:all .3s cubic-bezier(.78,.14,.15,.86);content:' '}.ant-radio-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:pointer;opacity:0}.ant-radio-checked .ant-radio-inner{border-color:#ffd90f}.ant-radio-checked .ant-radio-inner::after{transform:scale(1);opacity:1;transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-radio-disabled .ant-radio-inner{background-color:rgba(255,255,255,.08);border-color:#6f6c6c!important;cursor:not-allowed}.ant-radio-disabled .ant-radio-inner::after{background-color:rgba(255,255,255,.2)}.ant-radio-disabled .ant-radio-input{cursor:not-allowed}.ant-radio-disabled+span{color:rgba(255,255,255,.3);cursor:not-allowed}span.ant-radio+*{padding-right:8px;padding-left:8px}.ant-radio-button-wrapper{position:relative;display:inline-block;height:32px;margin:0;padding:0 15px;font-size:14px;line-height:30px;background:0 0;border:1px solid #6f6c6c;border-top-width:1.02px;border-left-width:0;cursor:pointer;transition:color .3s,background .3s,border-color .3s,box-shadow .3s}.ant-radio-button-wrapper,.ant-radio-button-wrapper a{color:rgba(255,255,255,.85)}.ant-radio-button-wrapper>.ant-radio-button{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%}.ant-radio-group-large .ant-radio-button-wrapper{height:40px;font-size:16px;line-height:38px}.ant-radio-group-small .ant-radio-button-wrapper{height:24px;padding:0 7px;line-height:22px}.ant-radio-button-wrapper:not(:first-child)::before{position:absolute;top:-1px;left:-1px;display:block;box-sizing:content-box;width:1px;height:100%;padding:1px 0;background-color:#6f6c6c;transition:background-color .3s;content:''}.ant-radio-button-wrapper:first-child{border-left:1px solid #6f6c6c;border-radius:4px 0 0 4px}.ant-radio-button-wrapper:last-child{border-radius:0 4px 4px 0}.ant-radio-button-wrapper:first-child:last-child{border-radius:4px}.ant-radio-button-wrapper:hover{position:relative;color:#ffd90f}.ant-radio-button-wrapper:focus-within{box-shadow:0 0 0 3px rgba(255,217,15,.08)}.ant-radio-button-wrapper .ant-radio-inner,.ant-radio-button-wrapper input[type=checkbox],.ant-radio-button-wrapper input[type=radio]{width:0;height:0;opacity:0;pointer-events:none}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){z-index:1;color:#ffd90f;background:0 0;border-color:#ffd90f}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before{background-color:#ffd90f}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child{border-color:#ffd90f}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#a99213;border-color:#a99213}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before{background-color:#a99213}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#e7d235;border-color:#e7d235}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active::before{background-color:#e7d235}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{box-shadow:0 0 0 3px rgba(255,217,15,.08)}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:#ffd90f;border-color:#ffd90f}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:#a99213;border-color:#a99213}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:#e7d235;border-color:#e7d235}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{box-shadow:0 0 0 3px rgba(255,217,15,.08)}.ant-radio-button-wrapper-disabled{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);border-color:#6f6c6c;cursor:not-allowed}.ant-radio-button-wrapper-disabled:first-child,.ant-radio-button-wrapper-disabled:hover{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.08);border-color:#6f6c6c}.ant-radio-button-wrapper-disabled:first-child{border-left-color:#6f6c6c}.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked{color:rgba(255,255,255,.3);background-color:rgba(255,255,255,.2);border-color:#6f6c6c;box-shadow:none}@supports (-moz-appearance:meterbar) and (background-blend-mode:difference,normal){.ant-radio{vertical-align:text-bottom}}.ant-radio-group.ant-radio-group-rtl{direction:rtl}.ant-radio-wrapper.ant-radio-wrapper-rtl{margin-right:0;margin-left:8px;direction:rtl}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl{border-right-width:0;border-left-width:1px}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:not(:first-child)::before{right:-1px;left:0}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:first-child{border-right:1px solid #6f6c6c;border-radius:0 4px 4px 0}.ant-radio-button-wrapper-checked:not([class*=' ant-radio-button-wrapper-disabled']).ant-radio-button-wrapper:first-child{border-right-color:#a99213}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:last-child{border-radius:4px 0 0 4px}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper-disabled:first-child{border-right-color:#6f6c6c}.ant-rate,.ant-rate-star{display:inline-block;margin:0;padding:0}.ant-rate{box-sizing:border-box;color:rgba(255,255,255,.85);font-variant:tabular-nums;font-feature-settings:'tnum';color:#d6bc15;font-size:20px;line-height:unset;list-style:none;outline:0}.ant-rate-disabled .ant-rate-star{cursor:default}.ant-rate-disabled .ant-rate-star:hover{transform:scale(1)}.ant-rate-star{position:relative;color:inherit;cursor:pointer;transition:all .3s}.ant-rate-star:not(:last-child){margin-right:8px}.ant-rate-star>div:focus,.ant-rate-star>div:hover{transform:scale(1.1)}.ant-rate-star-first,.ant-rate-star-second{color:rgba(255,255,255,.12);transition:all .3s;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-rate-star-first .anticon,.ant-rate-star-second .anticon{vertical-align:middle}.ant-rate-star-first{position:absolute;top:0;left:0;width:50%;height:100%;overflow:hidden;opacity:0}.ant-rate-star-half .ant-rate-star-first,.ant-rate-star-half .ant-rate-star-second{opacity:1}.ant-rate-star-full .ant-rate-star-second,.ant-rate-star-half .ant-rate-star-first{color:inherit}.ant-rate-text{display:inline-block;margin:0 8px;font-size:14px}.ant-rate-rtl{direction:rtl}.ant-rate-rtl .ant-rate-star:not(:last-child){margin-right:0;margin-left:8px}.ant-rate-rtl .ant-rate-star-first{right:0;left:auto}.ant-result{padding:48px 32px}.ant-result-success .ant-result-icon>.anticon{color:#47a91a}.ant-result-error .ant-result-icon>.anticon{color:#a31b26}.ant-result-info .ant-result-icon>.anticon{color:#ffd90f}.ant-result-warning .ant-result-icon>.anticon{color:#d69515}.ant-result-image{width:250px;height:295px;margin:auto}.ant-result-icon{margin-bottom:24px;text-align:center}.ant-result-icon>.anticon{font-size:72px}.ant-result-title{color:rgba(255,255,255,.85);font-size:24px;line-height:1.8;text-align:center}.ant-result-subtitle{color:rgba(255,255,255,.45);font-size:14px;line-height:1.6;text-align:center}.ant-result-extra{margin:24px 0 0;text-align:center}.ant-result-extra>*{margin-right:8px}.ant-result-extra>:last-child{margin-right:0}.ant-result-content{margin-top:24px;padding:24px 40px;background-color:rgba(255,255,255,.04)}.ant-result-rtl{direction:rtl}.ant-result-rtl .ant-result-extra>*{margin-right:0;margin-left:8px}.ant-result-rtl .ant-result-extra>:last-child{margin-left:0}.ant-select-single .ant-select-selector{display:flex}.ant-select-single .ant-select-selector .ant-select-selection-search{position:absolute;top:0;right:11px;bottom:0;left:11px}.ant-select-single .ant-select-selector .ant-select-selection-search-input{width:100%}.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{padding:0;line-height:30px;transition:all .3s}@supports (-moz-appearance:meterbar){.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:30px}}.ant-select-single .ant-select-selector .ant-select-selection-item{position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-select-single .ant-select-selector .ant-select-selection-placeholder,span.ant-transfer-list-search-action{pointer-events:none}.ant-select-single .ant-select-selector .ant-select-selection-item::after,.ant-select-single .ant-select-selector .ant-select-selection-placeholder::after,.ant-select-single .ant-select-selector::after{display:inline-block;width:0;visibility:hidden;content:'\a0'}.ant-select-single.ant-select-show-arrow .ant-select-selection-search{right:25px}.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-right:18px}.ant-select-single.ant-select-open .ant-select-selection-item{color:rgba(255,255,255,.3)}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{position:relative;background-color:transparent;border:1px solid #6f6c6c;border-radius:4px;transition:all .3s cubic-bezier(.645,.045,.355,1);width:100%;height:32px;padding:0 11px}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector input{cursor:pointer}.ant-select-show-search.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{cursor:text}.ant-select-show-search.ant-select-single:not(.ant-select-customize-input) .ant-select-selector input{cursor:auto}.ant-select-focused:not(.ant-select-disabled).ant-select-single:not(.ant-select-customize-input) .ant-select-selector{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-select-focused:not(.ant-select-disabled).ant-select-single:not(.ant-select-customize-input) .ant-select-selector{border-right-width:0;border-left-width:1px!important}.ant-select-disabled.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08);cursor:not-allowed}.ant-select-disabled.ant-select-single:not(.ant-select-customize-input) .ant-select-selector input{cursor:not-allowed}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{margin:0;padding:0;background:0 0;border:0;outline:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:30px}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button{display:none;-webkit-appearance:none}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector::after{line-height:30px}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder::after,.ant-select-single.ant-select-customize-input .ant-select-selector::after{display:none}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-search{position:static;width:100%}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder{position:absolute;right:0;left:0;padding:0 11px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{height:40px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder,.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector::after{line-height:38px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input{height:38px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{height:24px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder,.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector::after{line-height:22px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input{height:22px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selection-search{right:7px;left:7px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{padding:0 7px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{right:28px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-right:21px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{padding:0 11px}.ant-select-multiple .ant-select-selector{position:relative;background-color:transparent;border:1px solid #6f6c6c;border-radius:4px;transition:all .3s cubic-bezier(.645,.045,.355,1);display:flex;flex-wrap:wrap;align-items:center;padding:1px 4px}.ant-select-multiple .ant-select-selector input,.ant-upload input[type=file]{cursor:pointer}.ant-select-show-search.ant-select-multiple .ant-select-selector input{cursor:auto}.ant-select-focused:not(.ant-select-disabled).ant-select-multiple .ant-select-selector{border-color:#ffd90f;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-input-rtl .ant-select-focused:not(.ant-select-disabled).ant-select-multiple .ant-select-selector{border-right-width:0;border-left-width:1px!important}.ant-select-disabled.ant-select-multiple .ant-select-selector{color:rgba(255,255,255,.3);background:rgba(255,255,255,.08)}.ant-select-disabled.ant-select-multiple .ant-select-selector input{cursor:not-allowed}.ant-select-multiple .ant-select-selector .ant-select-selection-search-input{margin:0;padding:0;background:0 0;border:0;outline:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ant-select-multiple .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button{display:none;-webkit-appearance:none}.ant-select-show-search.ant-select-multiple .ant-select-selector{cursor:text}.ant-select-disabled.ant-select-multiple .ant-select-selector{background:#0a0f19;cursor:not-allowed}.ant-select-multiple .ant-select-selector::after{display:inline-block;width:0;margin:2px 0;line-height:24px;content:'\a0'}.ant-select-multiple.ant-select-allow-clear .ant-select-selector,.ant-select-multiple.ant-select-show-arrow .ant-select-selector{padding-right:24px}.ant-select-multiple .ant-select-selection-item{position:relative;display:flex;flex:none;box-sizing:border-box;max-width:100%;height:24px;margin-top:2px;margin-right:4px;margin-bottom:2px;padding:0 4px 0 8px;line-height:22px;background:rgba(255,255,255,.08);border:1px solid #424242;border-radius:4px;cursor:default;transition:font-size .3s,line-height .3s,height .3s;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-select-disabled.ant-select-multiple .ant-select-selection-item{color:#595959;border-color:#212121;cursor:not-allowed}.ant-select-multiple .ant-select-selection-item-content{display:inline-block;margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-select-multiple .ant-select-selection-item-remove{color:inherit;font-style:normal;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:rgba(255,255,255,.45);font-weight:700;line-height:inherit;cursor:pointer;display:inline-block;font-size:10px}.ant-select-multiple .ant-select-selection-item-remove>*{line-height:1}.ant-select-multiple .ant-select-selection-item-remove::before{display:none}.ant-select-multiple .ant-select-selection-item-remove .ant-select-multiple .ant-select-selection-item-remove-icon{display:block}.ant-select-multiple .ant-select-selection-item-remove>.anticon{vertical-align:-.2em}.ant-select-multiple .ant-select-selection-item-remove:hover{color:rgba(255,255,255,.75)}.ant-select-multiple .ant-select-selection-search{position:relative;margin-left:.5px}.ant-select-multiple .ant-select-selection-search-input,.ant-select-multiple .ant-select-selection-search-mirror{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:1.5715;transition:all .3s}.ant-select-multiple .ant-select-selection-search-input{width:100%;min-width:4.1px}.ant-select-multiple .ant-select-selection-search-mirror{position:absolute;top:0;left:0;z-index:999;white-space:nowrap;visibility:hidden}.ant-select-multiple .ant-select-selection-search:first-child .ant-select-selection-search-input{margin-left:6.5px}.ant-select-multiple .ant-select-selection-placeholder{position:absolute;top:50%;right:11px;left:11px;transform:translateY(-50%);transition:all .3s}.ant-select-multiple.ant-select-lg .ant-select-selector::after{line-height:32px}.ant-select-multiple.ant-select-lg .ant-select-selection-search{height:33px;line-height:33px}.ant-select-multiple.ant-select-lg .ant-select-selection-search-input,.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror{height:32px;line-height:30px}.ant-select-multiple.ant-select-sm .ant-select-selector::after{line-height:16px}.ant-select-multiple.ant-select-sm .ant-select-selection-item{height:16px;line-height:14px}.ant-select-multiple.ant-select-sm .ant-select-selection-search{height:17px;line-height:17px}.ant-select-multiple.ant-select-sm .ant-select-selection-search-input,.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror{height:16px;line-height:14px}.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{left:7px}.ant-select-multiple.ant-select-sm .ant-select-selection-search:first-child .ant-select-selection-search-input{margin-left:3px}.ant-select-multiple.ant-select-lg .ant-select-selection-item{height:32px;line-height:32px}.ant-select-disabled .ant-select-selection-item-remove{display:none}.ant-select{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;display:inline-block;cursor:pointer}.ant-select:not(.ant-select-disabled):hover .ant-select-selector{border-color:#a99213;border-right-width:1px!important}.ant-input-rtl .ant-select:not(.ant-select-disabled):hover .ant-select-selector{border-right-width:0;border-left-width:1px!important}.ant-select-selection-item{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media all and (-ms-high-contrast:none){.ant-select-selection-item,.ant-select-selection-item ::-ms-backdrop{flex:auto}}.ant-select-selection-placeholder{flex:1;overflow:hidden;color:rgba(255,255,255,.3);white-space:nowrap;text-overflow:ellipsis}@media all and (-ms-high-contrast:none){.ant-select-selection-placeholder,.ant-select-selection-placeholder ::-ms-backdrop{flex:auto}}.ant-select-arrow{display:inline-block;color:inherit;font-style:normal;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:53%;right:11px;width:12px;height:12px;margin-top:-6px;color:rgba(255,255,255,.3);font-size:12px;line-height:1;text-align:center;pointer-events:none}.ant-select-arrow>*{line-height:1}.ant-select-arrow::before{display:none}.ant-select-arrow .ant-select-arrow-icon,.ant-select-clear::before{display:block}.ant-select-arrow .anticon{vertical-align:top;transition:transform .3s}.ant-select-arrow .anticon>svg{vertical-align:top}.ant-select-arrow .anticon:not(.ant-select-suffix){pointer-events:auto}.ant-select-disabled .ant-select-arrow{cursor:not-allowed}.ant-select-clear{position:absolute;top:50%;right:11px;z-index:1;display:inline-block;width:12px;height:12px;margin-top:-6px;color:rgba(255,255,255,.3);font-size:12px;font-style:normal;line-height:1;text-align:center;text-transform:none;background:#0a0f19;cursor:pointer;opacity:0;transition:color .3s ease,opacity .15s ease;text-rendering:auto}.ant-select-clear:hover{color:rgba(255,255,255,.45)}.ant-select:hover .ant-select-clear{opacity:1}.ant-select-dropdown{margin:0;color:rgba(255,255,255,.85);line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:absolute;top:-9999px;left:-9999px;z-index:1050;box-sizing:border-box;padding:4px 0;overflow:hidden;font-size:14px;font-variant:initial;background-color:#212121;border-radius:4px;outline:0;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-select-dropdown.slide-up-appear.slide-up-appear-active.ant-select-dropdown-placement-bottomLeft,.ant-select-dropdown.slide-up-enter.slide-up-enter-active.ant-select-dropdown-placement-bottomLeft{animation-name:antSlideUpIn}.ant-select-dropdown.slide-up-appear.slide-up-appear-active.ant-select-dropdown-placement-topLeft,.ant-select-dropdown.slide-up-enter.slide-up-enter-active.ant-select-dropdown-placement-topLeft{animation-name:antSlideDownIn}.ant-select-dropdown.slide-up-leave.slide-up-leave-active.ant-select-dropdown-placement-bottomLeft{animation-name:antSlideUpOut}.ant-select-dropdown.slide-up-leave.slide-up-leave-active.ant-select-dropdown-placement-topLeft{animation-name:antSlideDownOut}.ant-select-dropdown-hidden{display:none}.ant-select-dropdown-empty{color:rgba(255,255,255,.3)}.ant-select-item,.ant-select-item-empty{position:relative;display:block;min-height:32px;padding:5px 12px;font-weight:400;font-size:14px;line-height:22px;color:rgba(255,255,255,.3)}.ant-select-item{color:rgba(255,255,255,.85);cursor:pointer;transition:background .3s ease}.ant-select-item-group{color:rgba(255,255,255,.45);font-size:12px;cursor:default}.ant-select-item-option{display:flex}.ant-select-item-option-content{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-select-item-option-state{flex:none}.ant-select-item-option-active:not(.ant-select-item-option-disabled){background-color:rgba(255,255,255,.08)}.ant-select-item-option-selected:not(.ant-select-item-option-disabled){color:rgba(255,255,255,.85);font-weight:600;background-color:#232215}.ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-state{color:#ffd90f}.ant-select-item-option-disabled{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-select-item-option-grouped{padding-left:24px}.ant-select-lg{font-size:16px}.ant-select-borderless .ant-select-selector{background-color:transparent!important;border-color:transparent!important;box-shadow:none!important}.ant-select-dropdown-rtl,.ant-select-rtl{direction:rtl}.ant-select-rtl .ant-select-arrow,.ant-select-rtl .ant-select-clear{right:initial;left:11px}.ant-select-dropdown-rtl .ant-select-item-option-grouped{padding-right:24px;padding-left:12px}.ant-select-rtl.ant-select-multiple.ant-select-allow-clear .ant-select-selector,.ant-select-rtl.ant-select-multiple.ant-select-show-arrow .ant-select-selector{padding-right:4px;padding-left:24px}.ant-select-rtl.ant-select-multiple .ant-select-selection-item{margin-right:0;margin-left:4px;padding:0 8px 0 4px;text-align:right}.ant-select-rtl.ant-select-multiple .ant-select-selection-item-content{margin-right:0;margin-left:4px;text-align:right}.ant-select-rtl.ant-select-multiple .ant-select-selection-search{margin-right:.5px;margin-left:4px}.ant-select-rtl.ant-select-multiple .ant-select-selection-search-mirror{right:0;left:auto}.ant-select-rtl.ant-select-multiple .ant-select-selection-placeholder{right:11px;left:auto}.ant-select-rtl.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{right:7px}.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-placeholder{right:0;left:9px;text-align:right}.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-search{right:11px;left:25px}.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-right:0;padding-left:18px}.ant-select-rtl.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{padding:0 11px}.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{right:0}.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-right:0;padding-left:21px}.ant-skeleton{display:table;width:100%}.ant-skeleton-header{display:table-cell;padding-right:16px;vertical-align:top}.ant-skeleton-header .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:#424242;width:32px;height:32px;line-height:32px}.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle,.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle,.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-header .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-content{display:table-cell;width:100%;vertical-align:top}.ant-skeleton-content .ant-skeleton-title{width:100%;height:16px;margin-top:16px;background:#424242}.ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:24px}.ant-skeleton-content .ant-skeleton-paragraph,.ant-table.ant-table-middle .ant-table-thead th.ant-table-column-has-sorters,.ant-table.ant-table-small .ant-table-thead th.ant-table-column-has-sorters{padding:0}.ant-skeleton-content .ant-skeleton-paragraph>li{width:100%;height:16px;list-style:none;background:#424242}.ant-skeleton-content .ant-skeleton-paragraph>li:last-child:not(:first-child):not(:nth-child(2)){width:61%}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title{margin-top:12px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:28px}.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph>li,.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title{border-radius:100px}.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton.ant-skeleton-active .ant-skeleton-button,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,.ant-skeleton.ant-skeleton-active .ant-skeleton-image,.ant-skeleton.ant-skeleton-active .ant-skeleton-input{background:linear-gradient(90deg,#424242 25%,rgba(255,255,255,.16) 37%,#424242 63%);background-size:400% 100%;animation:ant-skeleton-loading 1.4s ease infinite}.ant-skeleton-element{display:inline-block;width:auto}.ant-skeleton-element .ant-skeleton-button{display:inline-block;vertical-align:top;background:#424242;border-radius:4px;width:64px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle{width:32px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round{border-radius:32px}.ant-skeleton-element .ant-skeleton-button-lg{width:80px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle{width:40px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round{border-radius:40px}.ant-skeleton-element .ant-skeleton-button-sm{width:48px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle{width:24px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round{border-radius:24px}.ant-skeleton-element .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:#424242;width:32px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle,.ant-skeleton-element .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle,.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle,.ant-skeleton-element .ant-skeleton-image-svg.ant-skeleton-image-circle,.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-input{display:inline-block;vertical-align:top;background:#424242;width:100%;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-input-lg{width:100%;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-input-sm{width:100%;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-image{display:flex;align-items:center;justify-content:center;vertical-align:top;background:#424242;width:96px;height:96px;line-height:96px}.ant-skeleton-element .ant-skeleton-image-path{fill:#bfbfbf}.ant-skeleton-element .ant-skeleton-image-svg{width:48px;height:48px;line-height:48px;max-width:192px;max-height:192px}.ant-skeleton-rtl{direction:rtl}.ant-skeleton-rtl .ant-skeleton-header{padding-right:0;padding-left:16px}.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li,.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title{animation-name:ant-skeleton-loading-rtl}.ant-slider{box-sizing:border-box;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;height:12px;margin:10px 6px;padding:4px 0;cursor:pointer;touch-action:none}.ant-slider-vertical{width:12px;height:100%;margin:6px 10px;padding:0 4px}.ant-slider-vertical .ant-slider-rail{width:4px;height:100%}.ant-slider-vertical .ant-slider-track{width:4px}.ant-slider-vertical .ant-slider-handle{margin-top:-6px;margin-left:-5px}.ant-slider-vertical .ant-slider-mark{top:0;left:12px;width:18px;height:100%}.ant-slider-vertical .ant-slider-mark-text{left:4px;white-space:nowrap}.ant-slider-vertical .ant-slider-step{width:4px;height:100%}.ant-slider-vertical .ant-slider-dot{top:auto;left:2px;margin-bottom:-4px}.ant-slider-tooltip .ant-tooltip-inner{min-width:unset}.ant-slider-rtl.ant-slider-vertical .ant-slider-handle{margin-right:-5px;margin-left:0}.ant-slider-rtl.ant-slider-vertical .ant-slider-mark{right:12px;left:auto}.ant-slider-rtl.ant-slider-vertical .ant-slider-mark-text{right:4px;left:auto}.ant-slider-rtl.ant-slider-vertical .ant-slider-dot{right:2px;left:auto}.ant-slider-with-marks{margin-bottom:28px}.ant-slider-rail,.ant-slider-track{position:absolute;height:4px;border-radius:4px;transition:background-color .3s}.ant-slider-rail{width:100%;background-color:#262626}.ant-slider-track{background-color:#544c16}.ant-slider-handle{position:absolute;width:14px;height:14px;margin-top:-5px;background-color:#0a0f19;border:solid 2px #544c16;border-radius:50%;box-shadow:0;cursor:pointer;transition:border-color .3s,box-shadow .6s,transform .3s cubic-bezier(.18,.89,.32,1.28)}.ant-slider-handle-dragging.ant-slider-handle-dragging.ant-slider-handle-dragging{border-color:#ffe13f;box-shadow:0 0 0 5px rgba(255,217,15,.12)}.ant-slider-handle:focus{border-color:#ffe13f;outline:0;box-shadow:0 0 0 5px rgba(255,217,15,.12)}.ant-slider-handle.ant-tooltip-open{border-color:#ffd90f}.ant-slider:hover .ant-slider-rail{background-color:#6f6c6c}.ant-slider:hover .ant-slider-track{background-color:#786a15}.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open){border-color:#786a15}.ant-slider-mark{position:absolute;top:14px;left:0;width:100%;font-size:14px}.ant-slider-mark-text{position:absolute;display:inline-block;color:rgba(255,255,255,.45);text-align:center;word-break:keep-all;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-slider-mark-text-active{color:rgba(255,255,255,.85)}.ant-slider-step{position:absolute;width:100%;height:4px;background:0 0}.ant-slider-dot{position:absolute;top:-2px;width:8px;height:8px;margin-left:-4px;background-color:#0a0f19;border:2px solid #424242;border-radius:50%;cursor:pointer}.ant-slider-dot:first-child{margin-left:-4px}.ant-slider-dot:last-child{margin-left:-4px}.ant-slider-dot-active{border-color:#786a15}.ant-slider-disabled .ant-slider-track{background-color:rgba(255,255,255,.3)!important}.ant-slider-disabled,.ant-slider-disabled .ant-slider-handle{cursor:not-allowed}.ant-slider-disabled .ant-slider-dot,.ant-slider-disabled .ant-slider-handle{background-color:#0a0f19;border-color:rgba(255,255,255,.3)!important;box-shadow:none}.ant-slider-disabled .ant-slider-dot,.ant-slider-disabled .ant-slider-mark-text{cursor:not-allowed!important}.ant-slider-rtl{direction:rtl}.ant-slider-rtl .ant-slider-mark{right:0;left:auto}.ant-slider-rtl .ant-slider-dot{margin-right:-4px;margin-left:0}.ant-slider-rtl .ant-slider-dot:first-child{margin-right:-4px;margin-left:0}.ant-slider-rtl .ant-slider-dot:last-child{margin-right:-4px;margin-left:0}.ant-space{display:inline-flex}.ant-space-vertical{flex-direction:column}.ant-space-align-center{align-items:center}.ant-space-align-start{align-items:flex-start}.ant-space-align-end{align-items:flex-end}.ant-space-align-baseline{align-items:baseline}.ant-space-item:empty{display:none}.ant-space-rtl{direction:rtl}.ant-spin{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:absolute;display:none;color:#ffd90f;text-align:center;vertical-align:middle;opacity:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86)}.ant-spin-spinning{position:static;display:inline-block;opacity:1}.ant-spin-nested-loading{position:relative}.ant-spin-nested-loading>div>.ant-spin{position:absolute;top:0;left:0;z-index:4;display:block;width:100%;height:100%;max-height:400px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-dot{position:absolute;top:50%;left:50%;margin:-10px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #0a0f19}.ant-spin-nested-loading>div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-dot{margin:-7px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-text{padding-top:2px}.ant-spin-nested-loading>div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-dot{margin:-16px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-text{padding-top:11px}.ant-spin-nested-loading>div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px}.ant-spin-container{position:relative;transition:opacity .3s}.ant-spin-container::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:none \9;width:100%;height:100%;background:#0a0f19;opacity:0;transition:all .3s;content:'';pointer-events:none}.ant-spin-blur{clear:both;overflow:hidden;opacity:.5;-webkit-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.ant-spin-blur::after{opacity:.4;pointer-events:auto}.ant-spin-tip{color:rgba(255,255,255,.45)}.ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em}.ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#ffd90f;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.ant-spin-dot-item:nth-child(1){top:0;left:0}.ant-spin-dot-item:nth-child(2){top:0;right:0;animation-delay:.4s}.ant-spin-dot-item:nth-child(3){right:0;bottom:0;animation-delay:.8s}.ant-spin-dot-item:nth-child(4){bottom:0;left:0;animation-delay:1.2s}.ant-spin-dot-spin{transform:rotate(45deg);animation:antRotate 1.2s infinite linear}.ant-spin-sm .ant-spin-dot{font-size:14px}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px}.ant-spin-lg .ant-spin-dot{font-size:32px}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.ant-spin-blur{background:#0a0f19;opacity:.5}}.ant-spin-rtl{direction:rtl}.ant-spin-rtl .ant-spin-dot-spin{transform:rotate(-45deg);animation-name:antRotateRtl}.ant-statistic{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum'}.ant-statistic-title{margin-bottom:4px;color:rgba(255,255,255,.45);font-size:14px}.ant-statistic-content{color:rgba(255,255,255,.85);font-size:24px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji'}.ant-statistic-content-value{display:inline-block;direction:ltr}.ant-statistic-content-value-decimal{font-size:16px}.ant-statistic-content-prefix,.ant-statistic-content-suffix{display:inline-block}.ant-statistic-content-prefix{margin-right:4px}.ant-statistic-content-suffix{margin-left:4px;font-size:16px}.ant-statistic-rtl{direction:rtl}.ant-statistic-rtl .ant-statistic-content-prefix{margin-right:0;margin-left:4px}.ant-statistic-rtl .ant-statistic-content-suffix{margin-right:4px;margin-left:0}.ant-steps{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';display:flex;width:100%;font-size:0;text-align:initial}.ant-steps-item{position:relative;display:inline-block;flex:1;overflow:hidden;vertical-align:top}.ant-steps-item-container{outline:0}.ant-steps-item:last-child{flex:none}.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after,.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-tail{display:none}.ant-steps-item-content,.ant-steps-item-icon{display:inline-block;vertical-align:top}.ant-steps-item-icon{width:32px;height:32px;margin:0 8px 0 0;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:32px;text-align:center;border:1px solid rgba(255,255,255,.3);border-radius:32px;transition:background-color .3s,border-color .3s}.ant-steps-item-icon .ant-steps-icon{position:relative;top:-1px;color:#ffd90f;line-height:1}.ant-steps-item-tail{position:absolute;top:12px;left:0;width:100%;padding:0 10px}.ant-steps-item-tail::after{display:inline-block;width:100%;height:1px;background:#424242;border-radius:1px;transition:background .3s;content:''}.ant-steps-item-title{position:relative;display:inline-block;padding-right:16px;color:rgba(255,255,255,.85);font-size:16px;line-height:32px}.ant-steps-item-title::after{position:absolute;top:16px;left:100%;display:block;width:9999px;height:1px;background:#424242;content:''}.ant-steps-item-subtitle{display:inline;margin-left:8px;font-weight:400}.ant-steps-item-description,.ant-steps-item-subtitle{color:rgba(255,255,255,.45);font-size:14px}.ant-steps-item-wait .ant-steps-item-icon{background-color:transparent;border-color:rgba(255,255,255,.3)}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon,.ant-table-empty .ant-table-tbody>tr.ant-table-placeholder{color:rgba(255,255,255,.3)}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:rgba(255,255,255,.3)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description,.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(255,255,255,.45)}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after,.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-tail::after,.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after,.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-tail::after{background-color:#424242}.ant-steps-item-process .ant-steps-item-icon{background-color:transparent;border-color:#ffd90f;background:#ffd90f}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#ffd90f}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#ffd90f}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description,.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(255,255,255,.85)}.ant-steps-item-process .ant-steps-item-icon .ant-steps-icon{color:#fff}.ant-steps-item-process .ant-steps-item-title{font-weight:500}.ant-steps-item-finish .ant-steps-item-icon{background-color:transparent;border-color:#ffd90f}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon{color:#ffd90f}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#ffd90f}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(255,255,255,.85)}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after,.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-tail::after{background-color:#ffd90f}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(255,255,255,.45)}.ant-steps-item-error .ant-steps-item-icon{background-color:transparent;border-color:#a31b26}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#a31b26}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon,.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description,.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#a31b26}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after,.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-tail::after{background-color:#424242}.ant-steps-item.ant-steps-next-error .ant-steps-item-title::after{background:#a31b26}.ant-steps-item-disabled{cursor:not-allowed}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]{cursor:pointer}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-icon .ant-steps-icon,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-title{transition:color .3s}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon .ant-steps-icon,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-title{color:#ffd90f}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon{border-color:#ffd90f}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-left:16px;white-space:nowrap}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-left:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-right:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail{display:none}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description{max-width:140px;white-space:normal}.ant-steps-item-custom .ant-steps-item-icon{height:auto;background:0 0;border:0}.ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{top:0;left:.5px;width:32px;height:32px;font-size:24px;line-height:32px}.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#ffd90f}.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon{width:auto;background:0 0}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-left:12px}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-left:0}.ant-steps-small .ant-steps-item-icon{width:24px;height:24px;margin:0 8px 0 0;font-size:12px;line-height:24px;text-align:center;border-radius:24px}.ant-steps-small .ant-steps-item-title{padding-right:12px;font-size:14px;line-height:24px}.ant-steps-small .ant-steps-item-title::after{top:12px}.ant-steps-small .ant-steps-item-description{color:rgba(255,255,255,.45);font-size:14px}.ant-steps-small .ant-steps-item-tail{top:8px}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon{width:inherit;height:inherit;line-height:inherit;background:0 0;border:0;border-radius:0}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{font-size:24px;line-height:24px;transform:none}.ant-steps-vertical{display:flex;flex-direction:column}.ant-steps-vertical .ant-steps-item{display:block;flex:1 0 auto;padding-left:0;overflow:visible}.ant-steps-vertical .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-vertical .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-vertical .ant-steps-item-title{line-height:32px}.ant-steps-vertical .ant-steps-item-description{padding-bottom:12px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail::after{width:1px;height:100%}.ant-steps-vertical>.ant-steps-item:not(:last-child)>.ant-steps-item-container>.ant-steps-item-tail{display:block}.ant-steps-label-vertical .ant-steps-item-title::after,.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after{display:none}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title{line-height:24px}.ant-steps-rtl.ant-steps-vertical .ant-steps-item-icon{float:right;margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:16px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{right:12px;left:auto}@media (max-width:480px){.ant-steps-horizontal.ant-steps-label-horizontal{display:flex;flex-direction:column}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item{display:block;flex:1 0 auto;padding-left:0;overflow:visible}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-title{line-height:32px}.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-description{padding-bottom:12px}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail::after{width:1px;height:100%}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item:not(:last-child)>.ant-steps-item-container>.ant-steps-item-tail{display:block}.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after{display:none}.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item-container .ant-steps-item-title{line-height:24px}.ant-steps-rtl.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-icon{float:right;margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-horizontal.ant-steps-label-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:16px;left:auto}.ant-steps-rtl.ant-steps-horizontal.ant-steps-label-horizontal.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{right:12px;left:auto}}.ant-steps-label-vertical .ant-steps-item{overflow:visible}.ant-steps-label-vertical .ant-steps-item-tail{margin-left:58px;padding:3.5px 24px}.ant-steps-label-vertical .ant-steps-item-content{display:block;width:116px;margin-top:8px;text-align:center}.ant-steps-label-vertical .ant-steps-item-icon{display:inline-block;margin-left:42px}.ant-steps-label-vertical .ant-steps-item-title{padding-right:0;padding-left:0}.ant-steps-label-vertical .ant-steps-item-subtitle{display:block;margin-bottom:4px;margin-left:0;line-height:1.5715}.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon{margin-left:46px}.ant-steps-dot .ant-steps-item-title,.ant-steps-dot.ant-steps-small .ant-steps-item-title{line-height:1.5715}.ant-steps-dot .ant-steps-item-tail,.ant-steps-dot.ant-steps-small .ant-steps-item-tail{top:2px;width:100%;margin:0 0 0 70px;padding:0}.ant-steps-dot .ant-steps-item-tail::after,.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after{width:calc(100% - 20px);height:3px;margin-left:12px}.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{left:2px}.ant-steps-dot .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-icon{width:8px;height:8px;margin-left:67px;padding-right:0;line-height:8px;background:0 0;border:0}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{position:relative;float:left;width:100%;height:100%;border-radius:100px;transition:all .3s}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after{position:absolute;top:-12px;left:-26px;width:60px;height:32px;background:rgba(0,0,0,.001);content:''}.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon{position:relative;top:-1px;width:10px;height:10px;line-height:10px}.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-top:8px;margin-left:0;background:0 0}.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{top:2px;left:-9px;margin:0;padding:22px 0 4px}.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot{left:-2px}.ant-steps-navigation{padding-top:12px}.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-left:-12px}.ant-steps-navigation .ant-steps-item{overflow:visible;text-align:center}.ant-steps-navigation .ant-steps-item-container{display:inline-block;height:100%;margin-left:-16px;padding-bottom:12px;text-align:left;transition:opacity .3s}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content{max-width:auto}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{max-width:100%;padding-right:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title::after{display:none}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]{cursor:pointer}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]:hover{opacity:.85}.ant-steps-navigation .ant-steps-item:last-child{flex:1}.ant-steps-navigation .ant-steps-item:last-child::after{display:none}.ant-steps-navigation .ant-steps-item::after{position:absolute;top:50%;left:100%;display:inline-block;width:12px;height:12px;margin-top:-14px;margin-left:-2px;border:1px solid rgba(255,255,255,.2);border-bottom:none;border-left:none;transform:rotate(45deg);content:''}.ant-steps-navigation .ant-steps-item::before{position:absolute;bottom:0;left:50%;display:inline-block;width:0;height:2px;background-color:#ffd90f;transition:width .3s,left .3s;transition-timing-function:ease-out;content:''}.ant-steps-navigation .ant-steps-item.ant-steps-item-active::before{left:0;width:100%}@media (max-width:480px){.ant-steps-navigation>.ant-steps-item{margin-right:0!important}.ant-steps-navigation>.ant-steps-item::before{display:none}.ant-steps-navigation>.ant-steps-item.ant-steps-item-active::before{top:0;right:0;left:unset;display:block;width:3px;height:calc(100% - 24px)}.ant-steps-navigation>.ant-steps-item::after{position:relative;top:-2px;left:50%;display:block;width:8px;height:8px;margin-bottom:8px;text-align:center;transform:rotate(135deg)}.ant-steps-navigation>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden}}.ant-steps-rtl{direction:rtl}.ant-steps.ant-steps-rtl .ant-steps-item-icon{margin-right:0;margin-left:8px}.ant-steps-rtl .ant-steps-item-tail{right:0;left:auto}.ant-steps-rtl .ant-steps-item-title{padding-right:0;padding-left:16px}.ant-steps-rtl .ant-steps-item-title::after{right:100%;left:auto}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-right:16px;padding-left:0}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-right:0}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-left:0}.ant-steps-rtl .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{right:.5px;left:auto}.ant-steps-rtl.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-right:-12px;margin-left:0}.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container{margin-right:-16px;margin-left:0;text-align:right}.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{padding-left:0}.ant-steps-rtl.ant-steps-navigation .ant-steps-item::after{right:100%;left:auto;margin-right:-2px;margin-left:0;transform:rotate(225deg)}.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-right:12px;padding-left:0}.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-right:0}.ant-steps-rtl.ant-steps-small .ant-steps-item-title{padding-right:0;padding-left:12px}.ant-steps-rtl.ant-steps-label-vertical .ant-steps-item-title{padding-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail{margin:0 70px 0 0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail::after,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after{margin-right:12px;margin-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{right:2px;left:auto}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon{margin-right:67px;margin-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{float:right}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after{right:-26px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:-9px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{right:0;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot{right:-2px;left:auto}.ant-steps:not(.ant-steps-dot):not(.ant-steps-navigation):not(.ant-steps-vertical) .ant-steps-item{padding-top:4px}.ant-steps:not(.ant-steps-dot):not(.ant-steps-navigation) .ant-steps-item .ant-steps-item-icon{position:relative}.ant-steps:not(.ant-steps-dot):not(.ant-steps-navigation) .ant-steps-item .ant-steps-item-icon .ant-progress{position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px}.ant-switch{margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';position:relative;display:inline-block;box-sizing:border-box;min-width:44px;height:22px;line-height:22px;vertical-align:middle;background-color:rgba(255,255,255,.3);border:0;border-radius:100px;cursor:pointer;transition:all .2s;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-switch:focus{outline:0;box-shadow:0 0 0 2px rgba(255,255,255,.1)}.ant-switch-checked:focus{box-shadow:0 0 0 2px rgba(255,217,15,.2)}.ant-switch:focus:hover{box-shadow:none}.ant-switch-checked{background-color:#ffd90f}.ant-switch-disabled,.ant-switch-loading{cursor:not-allowed;opacity:.4}.ant-switch-disabled *,.ant-switch-loading *{box-shadow:none;cursor:not-allowed}.ant-switch-inner{display:block;margin:0 7px 0 25px;color:#fff;font-size:12px;transition:margin .2s}.ant-switch-checked .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-handle,.ant-switch-handle::before{position:absolute;transition:all .2s ease-in-out}.ant-switch-handle{top:2px;left:2px;width:18px;height:18px}.ant-switch-handle::before{top:0;right:0;bottom:0;left:0;background-color:#fff;border-radius:9px;box-shadow:0 2px 4px 0 rgba(0,35,11,.2);content:''}.ant-switch-checked .ant-switch-handle{left:calc(100% - 18px - 2px)}.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle::before{right:-30%;left:0}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active .ant-switch-handle::before,.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle::before{right:0;left:-30%}.ant-switch-loading-icon{position:absolute;top:50%;left:50%;color:rgba(0,0,0,.65);transform:translate(-50%,-50%)}.ant-switch-checked .ant-switch-loading-icon{color:#ffd90f}.ant-switch-small{min-width:28px;height:16px;line-height:16px}.ant-switch-small .ant-switch-inner{margin:0 5px 0 18px;font-size:12px}.ant-switch-small .ant-switch-handle{width:12px;height:12px}.ant-switch-small .ant-switch-loading-icon{transform:translate(-50%,-50%) scale(.66667)}.ant-switch-small.ant-switch-checked .ant-switch-inner{margin:0 18px 0 5px}.ant-switch-small.ant-switch-checked .ant-switch-handle{left:calc(100% - 12px - 2px)}.ant-switch-rtl{direction:rtl}.ant-switch-rtl .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-rtl .ant-switch-handle{right:2px;left:auto}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active.ant-switch-checked .ant-switch-handle::before{right:-30%;left:0}.ant-switch-rtl.ant-switch-checked .ant-switch-inner{margin:0 7px 0 25px}.ant-switch-rtl.ant-switch-checked .ant-switch-handle{right:calc(100% - 18px - 2px)}.ant-switch-rtl.ant-switch-small.ant-switch-checked .ant-switch-handle{right:calc(100% - 12px - 2px)}.ant-table.ant-table-middle,.ant-table.ant-table-small{font-size:14px}.ant-table.ant-table-middle .ant-table-footer,.ant-table.ant-table-middle .ant-table-tbody>tr>td,.ant-table.ant-table-middle .ant-table-thead>tr>th,.ant-table.ant-table-middle .ant-table-title,.ant-table.ant-table-middle tfoot>tr>td,.ant-table.ant-table-middle tfoot>tr>th{padding:12px 8px}.ant-table.ant-table-middle .ant-table-expanded-row-fixed,.ant-table.ant-table-middle .ant-table-thead .ant-table-filter-column{margin:-12px -8px}.ant-table.ant-table-middle .ant-table-thead .ant-table-filter-column-title{padding:12px 2.3em 12px 8px}.ant-table.ant-table-middle .ant-table-thead .ant-table-column-sorters{padding:12px 8px}.ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin:-12px -8px -12px 25px}.ant-table.ant-table-small .ant-table-footer,.ant-table.ant-table-small .ant-table-tbody>tr>td,.ant-table.ant-table-small .ant-table-thead>tr>th,.ant-table.ant-table-small .ant-table-title,.ant-table.ant-table-small tfoot>tr>td,.ant-table.ant-table-small tfoot>tr>th{padding:8px}.ant-table.ant-table-small .ant-table-expanded-row-fixed,.ant-table.ant-table-small .ant-table-thead .ant-table-filter-column{margin:-8px}.ant-table.ant-table-small .ant-table-thead .ant-table-filter-column-title{padding:8px 2.3em 8px 8px}.ant-table.ant-table-small .ant-table-thead .ant-table-column-sorters{padding:8px}.ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin:-8px -8px -8px 25px}.ant-table-small .ant-table-thead>tr>th{background-color:#1d1d1d}.ant-table-small .ant-table-selection-column{width:46px;min-width:46px}.ant-table.ant-table-bordered>.ant-table-title{border:1px solid #424242;border-bottom:0}.ant-table.ant-table-bordered>.ant-table-container{border:1px solid #424242;border-right:0;border-bottom:0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-16px -17px}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed::after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td>.ant-table-expanded-row-fixed::after{position:absolute;top:0;right:1px;bottom:0;border-right:1px solid #424242;content:''}.ant-table.ant-table-bordered.ant-table-middle>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered.ant-table-middle>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-12px -9px}.ant-table.ant-table-bordered.ant-table-small>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered.ant-table-small>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-8px -9px}.ant-table.ant-table-bordered>.ant-table-footer{border:1px solid #424242;border-top:0}.ant-table-cell .ant-table-container:first-child{border-top:0}.ant-table-cell-scrollbar{box-shadow:0 1px 0 1px #1d1d1d}.ant-table-wrapper{clear:both;max-width:100%}.ant-table-wrapper::before{display:table;content:''}.ant-table-wrapper::after{display:table;clear:both;content:''}.ant-table{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;z-index:0;font-size:14px;background:#0a0f19;border-radius:4px}.ant-table table{width:100%;text-align:left;border-radius:4px 4px 0 0;border-collapse:separate;border-spacing:0}.ant-table tfoot>tr>td,.ant-table tfoot>tr>th,.ant-table-tbody>tr>td,.ant-table-thead>tr>th{position:relative;padding:16px;overflow-wrap:break-word}.ant-table-cell-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.ant-table-cell-ellipsis.ant-table-cell-fix-left-last,.ant-table-cell-ellipsis.ant-table-cell-fix-right-first{overflow:visible}.ant-table-cell-ellipsis.ant-table-cell-fix-left-last .ant-table-cell-content,.ant-table-cell-ellipsis.ant-table-cell-fix-right-first .ant-table-cell-content{display:block;overflow:hidden;text-overflow:ellipsis}.ant-table-title{padding:16px}.ant-table-footer{padding:16px;color:rgba(255,255,255,.85);background:rgba(255,255,255,.04)}.ant-table-thead>tr>th{color:rgba(255,255,255,.85);font-weight:500;text-align:left;background:#1d1d1d;border-bottom:1px solid #424242;transition:background .3s ease}.ant-table-thead>tr>th[colspan]:not([colspan='1']),.ant-table-wrapper-rtl .ant-table-thead>tr>th[colspan]:not([colspan='1']){text-align:center}.ant-table-thead>tr:not(:last-child)>th[colspan]{border-bottom:0}.ant-table-tbody>tr>td{border-bottom:1px solid #424242;transition:background .3s}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table{margin:-16px -16px -16px 33px}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td{border-bottom:0}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:first-child,.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:last-child{border-radius:0}.ant-table-tbody>tr.ant-table-row:hover>td{background:#262626}.ant-table-tbody>tr.ant-table-row-selected>td{background:#232215;border-color:rgba(0,0,0,.03)}.ant-table-tbody>tr.ant-table-row-selected:hover>td{background:#1d1c11}.ant-table tfoot>tr>td,.ant-table tfoot>tr>th{border-bottom:1px solid #424242}.ant-table-pagination.ant-pagination{margin:16px 0}.ant-table-pagination{display:flex}.ant-table-pagination-left{justify-content:flex-start}.ant-table-pagination-center{justify-content:center}.ant-table-pagination-right{justify-content:flex-end}.ant-table-thead th.ant-table-column-has-sorters{padding:0;cursor:pointer;transition:all .3s}.ant-table-thead th.ant-table-column-has-sorters:hover .ant-table-filter-trigger-container{background:#474747}.ant-table-thead th.ant-table-column-sort{background:#262626}td.ant-table-column-sort{background:rgba(255,255,255,.01)}.ant-table-column-sorters-with-tooltip{display:inline-block;width:100%}.ant-table-column-sorters{display:inline-flex;align-items:center;padding:16px}.ant-table-column-sorter{margin-top:.15em;margin-bottom:-.15em;margin-left:8px;color:#bfbfbf}.ant-table-column-sorter-full{margin-top:-.2em;margin-bottom:0}.ant-table-column-sorter-inner{display:inline-flex;flex-direction:column;align-items:center}.ant-table-column-sorter-down,.ant-table-column-sorter-up{display:inline-block;font-size:11px}.ant-table-column-sorter-down.active,.ant-table-column-sorter-up.active{color:#ffd90f}.ant-table-column-sorter-up+.ant-table-column-sorter-down{margin-top:-.3em}.ant-table-filter-column{display:flex;align-items:center;margin:-16px}.ant-table-filter-column-title{flex:auto;padding:16px 2.3em 16px 16px}.ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column-title{padding:0 2.3em 0 0}.ant-table-filter-trigger-container{position:absolute;top:0;right:0;bottom:0;display:flex;flex:none;align-items:stretch;align-self:stretch;cursor:pointer;transition:background-color .3s}.ant-table-filter-trigger-container-open,.ant-table-filter-trigger-container:hover,.ant-table-thead th.ant-table-column-has-sorters:hover .ant-table-filter-trigger-container:hover{background:#434343}.ant-table-filter-trigger{display:block;width:2.3em;color:#bfbfbf;font-size:12px;transition:color .3s}.ant-table-filter-trigger .anticon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.ant-table-filter-trigger-container-open .ant-table-filter-trigger,.ant-table-filter-trigger:hover{color:rgba(255,255,255,.45)}.ant-table-filter-trigger.active{color:#ffd90f}.ant-table-filter-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';min-width:120px;background-color:#212121;border-radius:4px;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-table-filter-dropdown .ant-dropdown-menu{max-height:264px;overflow-x:hidden;border:0;box-shadow:none}.ant-table-filter-dropdown-submenu>ul{max-height:calc(100vh - 130px);overflow-x:hidden;overflow-y:auto}.ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span{padding-left:8px}.ant-table-filter-dropdown-btns{display:flex;justify-content:space-between;padding:7px 8px 7px 3px;overflow:hidden;background-color:#212121;border-top:1px solid #424242}.ant-table .ant-table-selection-col{width:60px}table tr td.ant-table-selection-column,table tr th.ant-table-selection-column{padding-right:8px;padding-left:8px;text-align:center}.ant-table-selection{position:relative}.ant-table-selection-extra{position:absolute;top:0;right:0;cursor:pointer;transition:all .3s}.ant-table-selection-extra .anticon{display:inline-block;font-size:10px;color:#bfbfbf}.ant-table-selection-extra .anticon:hover{color:#a6a6a6}.ant-table-expand-icon-col{width:48px}.ant-table-row-expand-icon-cell,.ant-table-tbody>tr.ant-table-placeholder{text-align:center}.ant-table-row-indent{float:left;height:1px}.ant-table-row-expand-icon{text-decoration:none;cursor:pointer;position:relative;display:inline-flex;float:left;box-sizing:border-box;width:17px;height:17px;padding:0;color:inherit;line-height:17px;background:0 0;border:1px solid #424242;border-radius:4px;outline:0;transition:all .3s;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{color:#a99213}.ant-table-row-expand-icon:active{color:#e7d235}.ant-table-row-expand-icon:active,.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{border-color:currentColor}.ant-table-row-expand-icon::after,.ant-table-row-expand-icon::before{position:absolute;background:currentColor;transition:transform .3s ease-out;content:''}.ant-table-row-expand-icon::before{top:7px;right:3px;left:3px;height:1px}.ant-table-row-expand-icon::after{top:3px;bottom:3px;left:7px;width:1px;transform:rotate(90deg)}.ant-table-row-expand-icon-collapsed::before{transform:rotate(-180deg)}.ant-table-row-expand-icon-collapsed::after{transform:rotate(0deg)}.ant-table-row-expand-icon-spaced{background:0 0;border:0;visibility:hidden}.ant-table-row-expand-icon-spaced::after,.ant-table-row-expand-icon-spaced::before{display:none;content:none}.ant-table-row-indent+.ant-table-row-expand-icon{margin-top:2.5005px;margin-right:8px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th,tr.ant-table-expanded-row:hover>td,tr.ant-table-expanded-row>td{background:#1d1d1d}.ant-table .ant-table-expanded-row-fixed{position:relative;margin:-16px;padding:16px}.ant-table-tbody>tr.ant-table-placeholder:hover>td{background:#0a0f19}.ant-table-cell-fix-left,.ant-table-cell-fix-right{position:-webkit-sticky!important;position:sticky!important;z-index:2;background:#0a0f19}.ant-table-cell-fix-left-first::after,.ant-table-cell-fix-left-last::after{position:absolute;top:0;right:0;bottom:-1px;width:30px;transform:translateX(100%);transition:box-shadow .3s;content:'';pointer-events:none}.ant-table-cell-fix-right-first::after,.ant-table-cell-fix-right-last::after{position:absolute;top:0;bottom:-1px;left:0;width:30px;transform:translateX(-100%);transition:box-shadow .3s;content:'';pointer-events:none}.ant-table .ant-table-container::after,.ant-table .ant-table-container::before{position:absolute;top:0;bottom:0;z-index:1;width:30px;transition:box-shadow .3s;content:'';pointer-events:none}.ant-table .ant-table-container::before{left:0}.ant-table .ant-table-container::after{right:0}.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container,.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container{position:relative}.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container::before{box-shadow:inset 10px 0 8px -8px rgba(0,0,0,.45)}.ant-table-ping-left .ant-table-cell-fix-left-first::after,.ant-table-ping-left .ant-table-cell-fix-left-last::after{box-shadow:inset 10px 0 8px -8px rgba(0,0,0,.45)}.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container::after{box-shadow:inset -10px 0 8px -8px rgba(0,0,0,.45)}.ant-table-ping-right .ant-table-cell-fix-right-first::after,.ant-table-ping-right .ant-table-cell-fix-right-last::after{box-shadow:inset -10px 0 8px -8px rgba(0,0,0,.45)}.ant-table-sticky-header,.ant-table-sticky-scroll{position:-webkit-sticky;position:sticky;z-index:calc(2 + 1)}.ant-table-sticky-scroll{bottom:0;display:flex;align-items:center;background:#fff;border-top:1px solid #424242;opacity:.6}.ant-table-sticky-scroll:hover{transform-origin:center bottom}.ant-table-sticky-scroll-bar{height:8px;background-color:rgba(0,0,0,.35);border-radius:4px}.ant-table-sticky-scroll-bar-active,.ant-table-sticky-scroll-bar:hover{background-color:rgba(0,0,0,.8)}@media all and (-ms-high-contrast:none){.ant-table-ping-left .ant-table-cell-fix-left-last::after,.ant-table-ping-right .ant-table-cell-fix-right-first::after{box-shadow:none!important}}.ant-table-title{border-radius:4px 4px 0 0}.ant-table-title+.ant-table-container{border-top-left-radius:0;border-top-right-radius:0}.ant-table-title+.ant-table-container table>thead>tr:first-child th:first-child{border-radius:0}.ant-table-title+.ant-table-container table>thead>tr:first-child th:last-child{border-radius:0}.ant-table-container{border-top-left-radius:4px;border-top-right-radius:4px}.ant-table-container table>thead>tr:first-child th:first-child{border-top-left-radius:4px}.ant-table-container table>thead>tr:first-child th:last-child{border-top-right-radius:4px}.ant-table-footer{border-radius:0 0 4px 4px}.ant-table-rtl,.ant-table-wrapper-rtl,.ant-tabs-dropdown-rtl,.ant-tabs-rtl{direction:rtl}.ant-table-wrapper-rtl .ant-table-thead>tr>th{text-align:right}.ant-table-tbody>tr .ant-table-wrapper:only-child .ant-table.ant-table-rtl{margin:-16px 33px -16px -16px}.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-left{justify-content:flex-end}.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-right{justify-content:flex-start}.ant-table-wrapper-rtl .ant-table-column-sorter{margin-right:8px;margin-left:0}.ant-table-wrapper-rtl .ant-table-filter-column-title{padding:16px 16px 16px 2.3em}.ant-table-rtl .ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column-title{padding:0 0 0 2.3em}.ant-table-wrapper-rtl .ant-table-filter-trigger-container{right:auto;left:0}.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span,.ant-dropdown-rtl .ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-dropdown-rtl .ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span{padding-right:8px;padding-left:0}.ant-table-wrapper-rtl .ant-table-selection{text-align:center}.ant-table-wrapper-rtl .ant-table-selection-extra{right:auto;left:0}.ant-table-wrapper-rtl .ant-table-row-expand-icon,.ant-table-wrapper-rtl .ant-table-row-indent{float:right}.ant-table-wrapper-rtl .ant-table-row-indent+.ant-table-row-expand-icon{margin-right:0;margin-left:8px}.ant-table-wrapper-rtl .ant-table-row-expand-icon::after{transform:rotate(-90deg)}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::before{transform:rotate(180deg)}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::after{transform:rotate(0deg)}.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:8px 0;font-size:14px}.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:16px 0;font-size:16px}.ant-tabs-card.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:6px 16px}.ant-tabs-card.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:7px 16px 6px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab:last-of-type{margin-left:0}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon{margin-right:0;margin-left:12px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove{margin-right:8px;margin-left:-4px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-nav{order:1}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-content-holder,.ant-tabs-rtl.ant-tabs-right>.ant-tabs-nav{order:0}.ant-tabs-rtl.ant-tabs-right>.ant-tabs-content-holder{order:1}.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type){margin-right:0;margin-left:2px}.ant-tabs-dropdown-rtl .ant-tabs-dropdown-menu-item{text-align:right}.ant-tabs-bottom,.ant-tabs-top{flex-direction:column}.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav,.ant-tabs-top>.ant-tabs-nav,.ant-tabs-top>div>.ant-tabs-nav{margin:0 0 16px}.ant-tabs-bottom>.ant-tabs-nav::before,.ant-tabs-bottom>div>.ant-tabs-nav::before,.ant-tabs-top>.ant-tabs-nav::before,.ant-tabs-top>div>.ant-tabs-nav::before{position:absolute;right:0;left:0;border-bottom:1px solid #424242;content:''}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar{height:2px}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:width .3s,left .3s,right .3s}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap::before{top:0;bottom:0;width:30px}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap::before{left:0;box-shadow:inset 10px 0 8px -8px rgba(0,0,0,.08)}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap::after{right:0;box-shadow:inset -10px 0 8px -8px rgba(0,0,0,.08)}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after{opacity:1}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>.ant-tabs-nav::before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav::before{bottom:0}.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav{order:1;margin-top:16px;margin-bottom:0}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>.ant-tabs-nav::before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav::before{top:0}.ant-tabs-bottom>.ant-tabs-content-holder,.ant-tabs-bottom>div>.ant-tabs-content-holder{order:0}.ant-tabs-left>.ant-tabs-nav,.ant-tabs-left>div>.ant-tabs-nav,.ant-tabs-right>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{flex-direction:column;min-width:50px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{margin:0 0 16px;padding:8px 24px;text-align:center}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab:last-of-type,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab:last-of-type,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab:last-of-type,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab:last-of-type{margin-bottom:0}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap{flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap::before{right:0;left:0;height:30px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap::before{top:0;box-shadow:inset 0 10px 8px -8px rgba(0,0,0,.08)}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap::after{bottom:0;box-shadow:inset 0 -10px 8px -8px rgba(0,0,0,.08)}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before{opacity:1}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{width:2px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:height .3s,top .3s}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-operations{flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar{right:0}.ant-tabs-left>.ant-tabs-content-holder,.ant-tabs-left>div>.ant-tabs-content-holder{margin-left:-1px;border-left:1px solid #424242}.ant-tabs-left>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-left>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-left:24px}.ant-tabs-right>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{order:1}.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{left:0}.ant-tabs-right>.ant-tabs-content-holder,.ant-tabs-right>div>.ant-tabs-content-holder{order:0;margin-right:-1px;border-right:1px solid #424242}.ant-tabs-right>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-right>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-right:24px}.ant-tabs-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-tabs-dropdown-hidden{display:none}.ant-tabs-dropdown-menu{max-height:200px;margin:0;padding:4px 0;overflow-x:hidden;overflow-y:auto;text-align:left;list-style-type:none;background-color:#212121;background-clip:padding-box;border-radius:4px;outline:0;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-tabs-dropdown-menu-item{min-width:120px;margin:0;padding:5px 12px;overflow:hidden;color:rgba(255,255,255,.85);font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-tabs-dropdown-menu-item:hover{background:rgba(255,255,255,.08)}.ant-tabs-dropdown-menu-item-disabled,.ant-tabs-dropdown-menu-item-disabled:hover{color:rgba(255,255,255,.3);background:0 0;cursor:not-allowed}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab{margin:0;padding:8px 16px;background:rgba(255,255,255,.04);border:1px solid #424242;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab-active{color:#ffd90f;background:#0a0f19}.ant-tabs-card>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-ink-bar{visibility:hidden}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type){margin-right:2px}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab{border-radius:4px 4px 0 0}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab-active{border-bottom-color:#0a0f19}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 0 4px 4px}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab-active{border-top-color:#0a0f19}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type),.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab:not(:last-of-type){margin-bottom:2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab{border-radius:4px 0 0 4px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab-active{border-right-color:#0a0f19}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 4px 4px 0}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab-active{border-left-color:#0a0f19}.ant-tabs{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';display:flex;overflow:hidden}.ant-tabs>.ant-tabs-nav,.ant-tabs>div>.ant-tabs-nav{position:relative;display:flex;flex:none;align-items:center}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap{position:relative;display:inline-block;display:flex;flex:auto;align-self:stretch;overflow:hidden;white-space:nowrap;transform:translate(0)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap::before{position:absolute;z-index:1;opacity:0;transition:opacity .3s;content:'';pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-list{position:relative;display:flex;transition:transform .3s}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations{display:flex;align-self:stretch}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations-hidden,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations-hidden{position:absolute;visibility:hidden;pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more{position:relative;padding:8px 16px;background:0 0;border:0}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more::after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more::after{position:absolute;right:0;bottom:0;left:0;height:5px;transform:translateY(100%);content:''}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add{min-width:40px;padding:0 8px;background:rgba(255,255,255,.04);border:1px solid #424242;border-radius:4px 4px 0 0;outline:0;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:hover,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:hover{color:#a99213}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:focus,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:focus{color:#e7d235}.ant-tabs-extra-content{flex:none}.ant-tabs-centered>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*=ant-tabs-nav-wrap-ping]),.ant-tabs-centered>div>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*=ant-tabs-nav-wrap-ping]){justify-content:center}.ant-tabs-ink-bar{position:absolute;background:#ffd90f;pointer-events:none}.ant-tabs-tab{position:relative;display:inline-flex;align-items:center;margin:0 32px 0 0;padding:12px 0;font-size:14px;background:0 0;border:0;outline:0;cursor:pointer}.ant-tabs-tab:last-of-type{margin-right:0;margin-left:0}.ant-tabs-tab-btn:active,.ant-tabs-tab-btn:focus,.ant-tabs-tab-remove:active,.ant-tabs-tab-remove:focus{color:#e7d235}.ant-tabs-tab-btn{outline:0}.ant-tabs-tab-remove{flex:none;margin-right:-4px;margin-left:8px;color:rgba(255,255,255,.45);font-size:12px;background:0 0;border:0;outline:0;cursor:pointer;transition:all .3s}.ant-tabs-tab-remove:hover{color:rgba(255,255,255,.85)}.ant-tabs-tab:hover{color:#a99213}.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{color:#ffd90f;font-weight:500}.ant-tabs-tab.ant-tabs-tab-disabled{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:active,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:focus{color:rgba(255,255,255,.3)}.ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-tab .anticon{margin-right:12px}.ant-tabs-content{display:flex;width:100%}.ant-tabs-content-holder{flex:auto;min-width:0;min-height:0}.ant-tabs-content-animated{transition:margin .3s}.ant-tabs-tabpane{flex:none;width:100%;outline:0}.ant-tag{box-sizing:border-box;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';display:inline-block;height:auto;margin:0 8px 0 0;padding:0 7px;font-size:12px;line-height:20px;white-space:nowrap;background:rgba(255,255,255,.04);border:1px solid #6f6c6c;border-radius:4px;cursor:default;opacity:1;transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-tag:hover{opacity:.85}.ant-tag,.ant-tag a,.ant-tag a:hover,.ant-tag-close-icon:hover{color:rgba(255,255,255,.85)}.ant-tag>a:first-child:last-child{display:inline-block;margin:0 -8px;padding:0 8px}.ant-tag-close-icon{display:inline-block;font-size:10px;margin-left:3px;color:rgba(255,255,255,.45);cursor:pointer;transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-tag-has-color{border-color:transparent;color:#fff}.ant-tag-has-color .anticon-close,.ant-tag-has-color .anticon-close:hover,.ant-tag-has-color a,.ant-tag-has-color a:hover{color:#fff}.ant-tag-checkable{background-color:transparent;border-color:transparent;cursor:pointer}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:#ffd90f}.ant-tag-checkable-checked,.ant-tag-checkable:active{color:#fff}.ant-tag-checkable-checked{background-color:#ffd90f}.ant-tag-checkable:active{background-color:#e7d235}.ant-tag-hidden{display:none}.ant-tag-pink{color:#c92a83;background:#200f25;border-color:#4e193f}.ant-tag-pink-inverse{color:#fff;background:#c92a83;border-color:#c92a83}.ant-tag-magenta{color:#c92a83;background:#200f25;border-color:#4e193f}.ant-tag-magenta-inverse{color:#fff;background:#c92a83;border-color:#c92a83}.ant-tag-red{color:#d21f2a;background:#220e19;border-color:#51151f}.ant-tag-red-inverse{color:#fff;background:#d21f2a;border-color:#d21f2a}.ant-tag-volcano{color:#d64a1c;background:#221216;border-color:#52241a}.ant-tag-volcano-inverse{color:#fff;background:#d64a1c;border-color:#d64a1c}.ant-tag-orange{color:#d67916;background:#221815;border-color:#523518}.ant-tag-orange-inverse{color:#fff;background:#d67916;border-color:#d67916}.ant-tag-yellow{color:#d6bc15;background:#222215;border-color:#524c18}.ant-tag-yellow-inverse{color:#fff;background:#d6bc15;border-color:#d6bc15}.ant-tag-gold{color:#d69515;background:#221c15;border-color:#523e18}.ant-tag-gold-inverse{color:#fff;background:#d69515;border-color:#d69515}.ant-tag-cyan{color:#12a7a9;background:#091d27;border-color:#0d454c}.ant-tag-cyan-inverse{color:#fff;background:#12a7a9;border-color:#12a7a9}.ant-tag-lime{color:#8abb12;background:#162215;border-color:#374c17}.ant-tag-lime-inverse{color:#fff;background:#8abb12;border-color:#8abb12}.ant-tag-green{color:#47a91a;background:#0e1f16;border-color:#204519}.ant-tag-green-inverse{color:#fff;background:#47a91a;border-color:#47a91a}.ant-tag-blue{color:#167ddd;background:#091930;border-color:#0e365e}.ant-tag-blue-inverse{color:#fff;background:#167ddd;border-color:#167ddd}.ant-tag-geekblue{color:#294acc;background:#0b122d;border-color:#152458}.ant-tag-geekblue-inverse{color:#fff;background:#294acc;border-color:#294acc}.ant-tag-purple{color:#6229b5;background:#110f29;border-color:#291850}.ant-tag-purple-inverse{color:#fff;background:#6229b5;border-color:#6229b5}.ant-tag-success{color:#47a91a;background:#0e1f16;border-color:#204519}.ant-tag-processing{color:#167ddd;background:#091930;border-color:#0e365e}.ant-tag-error{color:#d21f2a;background:#220e19;border-color:#51151f}.ant-tag-warning{color:#d67916;background:#221815;border-color:#523518}.ant-tag>.anticon+span,.ant-tag>span+.anticon{margin-left:7px}.ant-tag.ant-tag-rtl{margin-right:0;margin-left:8px;direction:rtl;text-align:right}.ant-tag-rtl .ant-tag-close-icon{margin-right:3px;margin-left:0}.ant-tag-rtl.ant-tag>.anticon+span,.ant-tag-rtl.ant-tag>span+.anticon{margin-right:7px;margin-left:0}.ant-timeline,.ant-timeline-item{margin:0;font-size:14px;list-style:none}.ant-timeline{box-sizing:border-box;color:rgba(255,255,255,.85);font-variant:tabular-nums;line-height:1.5715;font-feature-settings:'tnum';padding:0}.ant-timeline-item{position:relative;padding-bottom:20px}.ant-timeline-item-tail{position:absolute;top:10px;left:4px;height:calc(100% - 10px);border-left:2px solid #424242}.ant-timeline-item-pending .ant-timeline-item-head{font-size:12px;background-color:transparent}.ant-timeline-item-last>.ant-timeline-item-tail,.ant-timeline-item-pending .ant-timeline-item-tail{display:none}.ant-timeline-item-head{position:absolute;width:10px;height:10px;background-color:#0a0f19;border:2px solid transparent;border-radius:100px}.ant-timeline-item-head-blue{color:#ffd90f;border-color:#ffd90f}.ant-timeline-item-head-red{color:#a31b26;border-color:#a31b26}.ant-timeline-item-head-green{color:#47a91a;border-color:#47a91a}.ant-timeline-item-head-gray{color:rgba(255,255,255,.3);border-color:rgba(255,255,255,.3)}.ant-timeline-item-head-custom{position:absolute;top:5.5px;left:5px;width:auto;height:auto;margin-top:0;padding:3px 1px;line-height:1;text-align:center;border:0;border-radius:0;transform:translate(-50%,-50%)}.ant-timeline-item-content{position:relative;top:-7.001px;margin:0 0 0 26px;word-break:break-word}.ant-timeline-item-last>.ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-tail{left:50%}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head{margin-left:-4px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom{margin-left:1px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content{left:calc(50% - 4px);width:calc(50% - 14px);text-align:left}.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content{width:calc(50% - 12px);margin:0;text-align:right}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{margin:0;text-align:right}.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content{width:calc(50% - 12px);margin:0;text-align:right}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail{left:calc(100% - 4px - 2px)}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:calc(100% - 18px)}.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail{display:block;height:calc(100% - 14px);border-left:2px dotted #424242}.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail{display:none}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{top:15px;display:block;height:calc(100% - 15px);border-left:2px dotted #424242}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-label .ant-timeline-item-label{position:absolute;top:-7.001px;width:calc(50% - 12px);text-align:right}.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{left:calc(50% + 14px);width:calc(50% - 14px);text-align:left}.ant-timeline-rtl{direction:rtl}.ant-timeline-rtl .ant-timeline-item-tail{right:4px;left:auto;border-right:2px solid #424242;border-left:none}.ant-timeline-rtl .ant-timeline-item-head-custom{right:5px;left:auto;transform:translate(50%,-50%)}.ant-timeline-rtl .ant-timeline-item-content{margin:0 18px 0 0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-tail{right:50%;left:auto}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head{margin-right:-4px;margin-left:0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom{margin-right:1px;margin-left:0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content{right:calc(50% - 4px);left:auto;text-align:right}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-label,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content{text-align:left}.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail{right:0;left:auto}.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:100%;margin-right:18px;text-align:right}.ant-timeline-rtl.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{border-right:2px dotted #424242;border-left:none}.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{right:calc(50% + 14px);text-align:right}.ant-tooltip{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:absolute;z-index:1070;display:block;max-width:250px;visibility:visible}.ant-tooltip-hidden{display:none}.ant-tooltip-placement-top,.ant-tooltip-placement-topLeft,.ant-tooltip-placement-topRight{padding-bottom:8px}.ant-tooltip-placement-right,.ant-tooltip-placement-rightBottom,.ant-tooltip-placement-rightTop{padding-left:8px}.ant-tooltip-placement-bottom,.ant-tooltip-placement-bottomLeft,.ant-tooltip-placement-bottomRight{padding-top:8px}.ant-tooltip-placement-left,.ant-tooltip-placement-leftBottom,.ant-tooltip-placement-leftTop{padding-right:8px}.ant-tooltip-inner{min-width:30px;min-height:32px;padding:6px 8px;color:#fff;text-align:left;text-decoration:none;word-wrap:break-word;background-color:#434343;border-radius:4px;box-shadow:0 3px 6px -4px rgba(0,0,0,.48),0 6px 16px 0 rgba(0,0,0,.32),0 9px 28px 8px rgba(0,0,0,.2)}.ant-tooltip-arrow{position:absolute;display:block;width:13.07106781px;height:13.07106781px;overflow:hidden;background:0 0;pointer-events:none}.ant-tooltip-arrow-content{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:5px;height:5px;margin:auto;background-color:#434343;content:'';pointer-events:auto}.ant-tooltip-placement-top .ant-tooltip-arrow,.ant-tooltip-placement-topLeft .ant-tooltip-arrow,.ant-tooltip-placement-topRight .ant-tooltip-arrow{bottom:-5.07106781px}.ant-tooltip-placement-top .ant-tooltip-arrow-content,.ant-tooltip-placement-topLeft .ant-tooltip-arrow-content,.ant-tooltip-placement-topRight .ant-tooltip-arrow-content{box-shadow:3px 3px 7px rgba(0,0,0,.07);transform:translateY(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-top .ant-tooltip-arrow{left:50%;transform:translateX(-50%)}.ant-tooltip-placement-topLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-topRight .ant-tooltip-arrow{right:13px}.ant-tooltip-placement-right .ant-tooltip-arrow,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow,.ant-tooltip-placement-rightTop .ant-tooltip-arrow{left:-5.07106781px}.ant-tooltip-placement-right .ant-tooltip-arrow-content,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content,.ant-tooltip-placement-rightTop .ant-tooltip-arrow-content{box-shadow:-3px 3px 7px rgba(0,0,0,.07);transform:translateX(6.53553391px) rotate(45deg)}.ant-tooltip-placement-right .ant-tooltip-arrow{top:50%;transform:translateY(-50%)}.ant-tooltip-placement-rightTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-left .ant-tooltip-arrow,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow,.ant-tooltip-placement-leftTop .ant-tooltip-arrow{right:-5.07106781px}.ant-tooltip-placement-left .ant-tooltip-arrow-content,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow-content,.ant-tooltip-placement-leftTop .ant-tooltip-arrow-content{box-shadow:3px -3px 7px rgba(0,0,0,.07);transform:translateX(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-left .ant-tooltip-arrow{top:50%;transform:translateY(-50%)}.ant-tooltip-placement-leftTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-bottom .ant-tooltip-arrow,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{top:-5.07106781px}.ant-tooltip-placement-bottom .ant-tooltip-arrow-content,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow-content,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow-content{box-shadow:-3px -3px 7px rgba(0,0,0,.07);transform:translateY(6.53553391px) rotate(45deg)}.ant-tooltip-placement-bottom .ant-tooltip-arrow{left:50%;transform:translateX(-50%)}.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{right:13px}.ant-tooltip-magenta .ant-tooltip-arrow-content,.ant-tooltip-magenta .ant-tooltip-inner,.ant-tooltip-pink .ant-tooltip-arrow-content,.ant-tooltip-pink .ant-tooltip-inner{background-color:#c92a83}.ant-tooltip-red .ant-tooltip-arrow-content,.ant-tooltip-red .ant-tooltip-inner{background-color:#d21f2a}.ant-tooltip-volcano .ant-tooltip-arrow-content,.ant-tooltip-volcano .ant-tooltip-inner{background-color:#d64a1c}.ant-tooltip-orange .ant-tooltip-arrow-content,.ant-tooltip-orange .ant-tooltip-inner{background-color:#d67916}.ant-tooltip-yellow .ant-tooltip-arrow-content,.ant-tooltip-yellow .ant-tooltip-inner{background-color:#d6bc15}.ant-tooltip-gold .ant-tooltip-arrow-content,.ant-tooltip-gold .ant-tooltip-inner{background-color:#d69515}.ant-tooltip-cyan .ant-tooltip-arrow-content,.ant-tooltip-cyan .ant-tooltip-inner{background-color:#12a7a9}.ant-tooltip-lime .ant-tooltip-arrow-content,.ant-tooltip-lime .ant-tooltip-inner{background-color:#8abb12}.ant-tooltip-green .ant-tooltip-arrow-content,.ant-tooltip-green .ant-tooltip-inner{background-color:#47a91a}.ant-tooltip-blue .ant-tooltip-arrow-content,.ant-tooltip-blue .ant-tooltip-inner{background-color:#167ddd}.ant-tooltip-geekblue .ant-tooltip-arrow-content,.ant-tooltip-geekblue .ant-tooltip-inner{background-color:#294acc}.ant-tooltip-purple .ant-tooltip-arrow-content,.ant-tooltip-purple .ant-tooltip-inner{background-color:#6229b5}.ant-tooltip-rtl{direction:rtl}.ant-tooltip-rtl .ant-tooltip-inner{text-align:right}.ant-transfer-customize-list .ant-transfer-list{flex:1 1 50%;width:auto;height:auto;min-height:200px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small{border:0;border-radius:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body{margin:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination{margin:16px 0 4px}.ant-transfer-customize-list .ant-input[disabled]{background-color:transparent}.ant-transfer{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';position:relative;display:flex;align-items:stretch}.ant-transfer-disabled .ant-transfer-list,.ant-tree.ant-tree-directory .ant-tree-treenode:hover::before{background:rgba(255,255,255,.08)}.ant-transfer-list{display:flex;flex-direction:column;width:180px;height:200px;border:1px solid #6f6c6c;border-radius:4px}.ant-transfer-list-with-pagination{width:250px;height:auto}.ant-transfer-list-search{padding-right:24px;padding-left:8px}.ant-transfer-list-search-action{position:absolute;top:12px;right:12px;bottom:12px;width:28px;color:rgba(255,255,255,.3);line-height:32px;text-align:center}.ant-transfer-list-search-action .anticon{color:rgba(255,255,255,.3);transition:all .3s}.ant-transfer-list-search-action .anticon:hover{color:rgba(255,255,255,.45)}.ant-transfer-list-header{display:flex;flex:none;align-items:center;height:40px;padding:8px 12px 9px;color:rgba(255,255,255,.85);background:#0a0f19;border-bottom:1px solid #424242;border-radius:4px 4px 0 0}.ant-transfer-list-header>:not(:last-child){margin-right:4px}.ant-transfer-list-header>*{flex:none}.ant-transfer-list-header-title{flex:auto;overflow:hidden;white-space:nowrap;text-align:right;text-overflow:ellipsis}.ant-transfer-list-header-dropdown{transform:translateY(10%);cursor:pointer;display:inline-block;font-size:10px}.ant-transfer-list-header-dropdown[disabled]{cursor:not-allowed}.ant-transfer-list-body{display:flex;flex:auto;flex-direction:column;overflow:hidden;font-size:14px}.ant-transfer-list-body-search-wrapper{position:relative;flex:none;padding:12px}.ant-transfer-list-content{flex:auto;margin:0;padding:0;overflow:auto;list-style:none}.ant-transfer-list-content-item{display:flex;align-items:center;min-height:32px;padding:6px 12px;overflow:hidden;line-height:20px;transition:all .3s}.ant-transfer-list-content-item>:not(:last-child){margin-right:8px}.ant-transfer-list-content-item>*{flex:none}.ant-transfer-list-content-item-text{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-transfer-list-content-item-remove{text-decoration:none;outline:0;cursor:pointer;transition:color .3s;position:relative;color:#6f6c6c}.ant-transfer-list-content-item-remove:focus,.ant-transfer-list-content-item-remove:hover,.ant-typography a:focus,.ant-typography a:hover,a.ant-typography:focus,a.ant-typography:hover{color:#a99213}.ant-transfer-list-content-item-remove:active,.ant-typography a:active,a.ant-typography:active{color:#e7d235}.ant-transfer-list-content-item-remove::after{position:absolute;top:-6px;right:-50%;bottom:-6px;left:-50%;content:''}.ant-transfer-list-content-item-remove:hover{color:#a99213}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#262626;cursor:pointer}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled).ant-transfer-list-content-item-checked:hover{background-color:#1d1c11}.ant-transfer-list-content-show-remove .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background:0 0;cursor:default}.ant-transfer-list-content-item-checked{background-color:#232215}.ant-transfer-list-content-item-disabled,.ant-tree-checkbox-disabled+span{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-transfer-list-pagination{padding:8px 0;text-align:right;border-top:1px solid #424242}.ant-transfer-list-body-not-found{flex:none;width:100%;margin:auto 0;color:rgba(255,255,255,.3);text-align:center}.ant-transfer-list-footer{border-top:1px solid #424242}.ant-transfer-operation{display:flex;flex:none;flex-direction:column;align-self:center;margin:0 8px;overflow:hidden;vertical-align:middle}.ant-transfer-operation .ant-btn{display:block}.ant-transfer-operation .ant-btn:first-child{margin-bottom:4px}.ant-transfer-operation .ant-btn .anticon{font-size:12px}.ant-transfer .ant-empty-image{max-height:-2px}.ant-transfer-rtl{direction:rtl}.ant-transfer-rtl .ant-transfer-list-search{padding-right:8px;padding-left:24px}.ant-transfer-rtl .ant-transfer-list-search-action{right:auto;left:12px}.ant-transfer-rtl .ant-transfer-list-header>:not(:last-child){margin-right:0;margin-left:4px}.ant-transfer-rtl .ant-transfer-list-header{right:0;left:auto}.ant-transfer-rtl .ant-transfer-list-header-title,.ant-transfer-rtl .ant-transfer-list-pagination{text-align:left}.ant-transfer-rtl .ant-transfer-list-content-item>:not(:last-child){margin-right:0;margin-left:8px}.ant-transfer-rtl .ant-transfer-list-footer{right:0;left:auto}.ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line::before{height:14px!important}.ant-tree.ant-tree-directory .ant-tree-treenode{position:relative}.ant-tree.ant-tree-directory .ant-tree-treenode::before{position:absolute;top:0;right:0;bottom:4px;left:0;transition:background-color .3s;content:'';pointer-events:none}.ant-tree.ant-tree-directory .ant-tree-treenode>*{z-index:1}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher{transition:color .3s}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper{border-radius:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover{background:0 0}.ant-tree.ant-tree-directory .ant-tree-treenode-selected::before,.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover::before{background:#ffd90f}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher{color:#fff}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected,.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper{color:#fff;background:0 0}.ant-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:0;cursor:pointer}.ant-tree-checkbox-input:focus+.ant-tree-checkbox-inner,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,.ant-tree-checkbox:hover .ant-tree-checkbox-inner{border-color:#ffd90f}.ant-tree-checkbox-checked::after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #ffd90f;border-radius:4px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:''}.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox::after,.ant-tree-checkbox:hover::after{visibility:visible}.ant-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:transparent;border:1px solid #6f6c6c;border-radius:4px;border-collapse:separate;transition:all .3s}.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after,.ant-tree-checkbox-inner::after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;content:' '}.ant-tree-checkbox-inner::after{top:50%;left:22%;width:5.71428571px;height:9.14285714px;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s}.ant-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after{transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s}.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:#ffd90f;border-color:#ffd90f}.ant-tree-checkbox-disabled,.ant-tree-checkbox-disabled .ant-tree-checkbox-input{cursor:not-allowed}.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after{border-color:rgba(255,255,255,.3);animation-name:none}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner{background-color:rgba(255,255,255,.08);border-color:#6f6c6c!important}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after{border-color:rgba(255,255,255,.08);border-collapse:separate;animation-name:none}.ant-tree-checkbox-disabled:hover::after,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled::after{visibility:hidden}.ant-tree-checkbox-group,.ant-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';display:inline-block}.ant-tree-checkbox-wrapper{line-height:unset;cursor:pointer}.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-tree-checkbox-wrapper+.ant-tree-checkbox-wrapper{margin-left:8px}.ant-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-tree-checkbox-group{line-height:1.5715}.ant-tree-checkbox-group-item{display:inline-block;margin-right:8px}.ant-tree-checkbox-group-item:last-child{margin-right:0}.ant-tree-checkbox-group-item+.ant-tree-checkbox-group-item{margin-left:0}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner{background-color:transparent;border-color:#6f6c6c}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner::after{top:50%;left:50%;width:8px;height:8px;background-color:#ffd90f;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:' '}.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after{background-color:rgba(255,255,255,.3);border-color:rgba(255,255,255,.3)}.ant-tree-checkbox-rtl{direction:rtl}.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item{margin-right:0;margin-left:8px}.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item:last-child{margin-left:0!important}.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item+.ant-tree-checkbox-group-item{margin-left:8px}.ant-tree{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';background:0 0;border-radius:4px;transition:background-color .3s}.ant-tree-focused:not(:hover):not(.ant-tree-active-focused){background:#232215}.ant-tree-list-holder-inner{align-items:flex-start}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner{align-items:stretch}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper{flex:auto}.ant-tree .ant-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px;outline:0}.ant-select-tree-checkbox-disabled+span,.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover{background:0 0}.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper{background:rgba(255,255,255,.08)}.ant-tree-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-tree-indent-unit{display:inline-block;width:24px}.ant-tree .ant-tree-switcher{flex:none;width:24px;height:24px;margin:0;line-height:24px;text-align:center;cursor:pointer}.ant-tree .ant-tree-switcher .ant-select-tree-switcher-icon,.ant-tree .ant-tree-switcher .ant-tree-switcher-icon{font-size:10px;display:inline-block;vertical-align:baseline}.ant-tree .ant-tree-switcher .ant-select-tree-switcher-icon svg,.ant-tree .ant-tree-switcher .ant-tree-switcher-icon svg{transition:transform .3s}.ant-tree .ant-tree-switcher-noop{cursor:default}.ant-tree .ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(-90deg)}.ant-tree .ant-tree-switcher-loading-icon{color:#ffd90f}.ant-tree .ant-tree-switcher-leaf-line{z-index:1;display:inline-block;width:100%;height:100%}.ant-tree .ant-tree-switcher-leaf-line::before{position:absolute;height:24px;margin-left:-1px;border-left:1px solid #d9d9d9;content:' '}.ant-tree .ant-tree-switcher-leaf-line::after{position:absolute;width:10px;height:14px;margin-left:-1px;border-bottom:1px solid #d9d9d9;content:' '}.ant-tree .ant-tree-checkbox{top:initial;margin:4px 8px 0 0}.ant-tree .ant-tree-node-content-wrapper{min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:0 0;border-radius:4px;cursor:pointer;transition:all .3s,border 0s,line-height 0s}.ant-tree .ant-tree-node-content-wrapper:hover{background-color:rgba(255,255,255,.08)}.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:#3e3813}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty{display:none}.ant-tree-node-content-wrapper[draggable=true]{line-height:20px;border-top:2px transparent solid;border-bottom:2px transparent solid;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-tree .ant-tree-treenode.drag-over>[draggable]{color:#fff;background-color:#ffd90f;opacity:.8}.ant-tree .ant-tree-treenode.drag-over-gap-top>[draggable]{border-top-color:#ffd90f}.ant-tree .ant-tree-treenode.drag-over-gap-bottom>[draggable]{border-bottom-color:#ffd90f}.ant-tree-show-line .ant-tree-indent-unit{position:relative;height:100%}.ant-tree-show-line .ant-tree-indent-unit:first-child::after{position:absolute;top:calc(100% - 24px - 4px);right:12px;bottom:-4px;border-right:1px solid #6f6c6c;content:''}.ant-tree-show-line .ant-tree-indent-unit::before{position:absolute;top:calc(100% - 4px);right:-12px;bottom:-28px;border-right:1px solid #6f6c6c;content:''}.ant-tree-show-line .ant-tree-indent-unit-end-first-level::after,.ant-tree-show-line .ant-tree-indent-unit-end::before{display:none}.ant-select-tree-show-line .ant-select-tree-treenode-motion:not(.ant-motion-collapse-leave):not(.ant-motion-collapse-appear-active) .ant-select-tree-indent-unit::after,.ant-select-tree-show-line .ant-select-tree-treenode-motion:not(.ant-motion-collapse-leave):not(.ant-motion-collapse-appear-active) .ant-select-tree-indent-unit::before,.ant-tree-show-line .ant-tree-treenode-motion:not(.ant-motion-collapse-leave):not(.ant-motion-collapse-appear-active) .ant-tree-indent-unit::after,.ant-tree-show-line .ant-tree-treenode-motion:not(.ant-motion-collapse-leave):not(.ant-motion-collapse-appear-active) .ant-tree-indent-unit::before{display:none}.ant-tree-show-line .ant-tree-switcher{z-index:1;background:#0a0f19}.ant-tree .ant-tree-treenode-rtl,.ant-tree-rtl{direction:rtl}.ant-tree-rtl.ant-tree .ant-tree-switcher_close .ant-tree-switcher-icon svg,.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(90deg)}.ant-tree-rtl.ant-tree .ant-tree-switcher-loading-icon{transform:scaleY(-1)}.ant-tree-rtl.ant-tree-show-line .ant-tree-indent-unit::before{right:auto;left:-13px;border-right:none;border-left:1px solid #6f6c6c}.ant-tree-rtl.ant-tree .ant-tree-checkbox,.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-checkbox{margin:4px 0 0 8px}.ant-select-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';position:relative;top:-.09em;display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;outline:0;cursor:pointer}.ant-select-tree-checkbox-input:focus+.ant-select-tree-checkbox-inner,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner{border-color:#ffd90f}.ant-select-tree-checkbox-checked::after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #ffd90f;border-radius:4px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:''}.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox::after,.ant-select-tree-checkbox:hover::after{visibility:visible}.ant-select-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:transparent;border:1px solid #6f6c6c;border-radius:4px;border-collapse:separate;transition:all .3s}.ant-select-tree-checkbox-inner::after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:' '}.ant-select-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner::after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:' '}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:#ffd90f;border-color:#ffd90f}.ant-select-tree-checkbox-disabled,.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input{cursor:not-allowed}.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner::after{border-color:rgba(255,255,255,.3);animation-name:none}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner{background-color:rgba(255,255,255,.08);border-color:#6f6c6c!important}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner::after{border-color:rgba(255,255,255,.08);border-collapse:separate;animation-name:none}.ant-select-tree-checkbox-disabled:hover::after,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-disabled::after{visibility:hidden}.ant-select-tree-checkbox-group,.ant-select-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';display:inline-block}.ant-select-tree-checkbox-wrapper{line-height:unset;cursor:pointer}.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-select-tree-checkbox-wrapper+.ant-select-tree-checkbox-wrapper{margin-left:8px}.ant-select-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-select-tree-checkbox-group{line-height:1.5715}.ant-select-tree-checkbox-group-item{display:inline-block;margin-right:8px}.ant-select-tree-checkbox-group-item:last-child{margin-right:0}.ant-select-tree-checkbox-group-item+.ant-select-tree-checkbox-group-item{margin-left:0}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner{background-color:transparent;border-color:#6f6c6c}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner::after{top:50%;left:50%;width:8px;height:8px;background-color:#ffd90f;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:' '}.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner::after{background-color:rgba(255,255,255,.3);border-color:rgba(255,255,255,.3)}.ant-select-tree-checkbox-rtl{direction:rtl}.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item{margin-right:0;margin-left:8px}.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item:last-child{margin-left:0!important}.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item+.ant-select-tree-checkbox-group-item{margin-left:8px}.ant-tree-select-dropdown{padding:8px 4px 0}.ant-tree-select-dropdown-rtl{direction:rtl}.ant-tree-select-dropdown .ant-select-tree{border-radius:0}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner{align-items:stretch}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode{padding-bottom:8px}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-node-content-wrapper,.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{flex:auto}.ant-select-tree{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';background:0 0;border-radius:4px;transition:background-color .3s}.ant-select-tree-focused:not(:hover):not(.ant-select-tree-active-focused){background:#232215}.ant-select-tree-list-holder-inner{align-items:flex-start}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner{align-items:stretch}.ant-select-tree .ant-select-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px;outline:0}.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper{color:rgba(255,255,255,.3);cursor:not-allowed}.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper:hover{background:0 0}.ant-select-tree .ant-select-tree-treenode-active .ant-select-tree-node-content-wrapper{background:rgba(255,255,255,.08)}.ant-select-tree-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-select-tree-indent-unit{display:inline-block;width:24px}.ant-select-tree .ant-select-tree-switcher{flex:none;width:24px;height:24px;margin:0;line-height:24px;text-align:center;cursor:pointer}.ant-select-tree .ant-select-tree-switcher .ant-select-tree-switcher-icon,.ant-select-tree .ant-select-tree-switcher .ant-tree-switcher-icon{font-size:10px;display:inline-block;vertical-align:baseline}.ant-select-tree .ant-select-tree-switcher .ant-select-tree-switcher-icon svg,.ant-select-tree .ant-select-tree-switcher .ant-tree-switcher-icon svg{transition:transform .3s}.ant-select-tree .ant-select-tree-switcher-noop{cursor:default}.ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(-90deg)}.ant-select-tree .ant-select-tree-switcher-loading-icon{color:#ffd90f}.ant-select-tree .ant-select-tree-switcher-leaf-line{z-index:1;display:inline-block;width:100%;height:100%}.ant-select-tree .ant-select-tree-switcher-leaf-line::before{position:absolute;height:24px;margin-left:-1px;border-left:1px solid #d9d9d9;content:' '}.ant-select-tree .ant-select-tree-switcher-leaf-line::after{position:absolute;width:10px;height:14px;margin-left:-1px;border-bottom:1px solid #d9d9d9;content:' '}.ant-select-tree .ant-select-tree-checkbox{top:initial;margin:4px 8px 0 0}.ant-select-tree .ant-select-tree-node-content-wrapper{min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:0 0;border-radius:4px;cursor:pointer;transition:all .3s,border 0s,line-height 0s}.ant-select-tree .ant-select-tree-node-content-wrapper:hover{background-color:rgba(255,255,255,.08)}.ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected{background-color:#3e3813}.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top}.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle:empty{display:none}.ant-select-tree-node-content-wrapper[draggable=true]{line-height:20px;border-top:2px transparent solid;border-bottom:2px transparent solid;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-select-tree .ant-select-tree-treenode.drag-over>[draggable]{color:#fff;background-color:#ffd90f;opacity:.8}.ant-select-tree .ant-select-tree-treenode.drag-over-gap-top>[draggable]{border-top-color:#ffd90f}.ant-select-tree .ant-select-tree-treenode.drag-over-gap-bottom>[draggable]{border-bottom-color:#ffd90f}.ant-select-tree-show-line .ant-select-tree-indent-unit{position:relative;height:100%}.ant-select-tree-show-line .ant-select-tree-indent-unit:first-child::after{position:absolute;top:calc(100% - 24px - 4px);right:12px;bottom:-4px;border-right:1px solid #6f6c6c;content:''}.ant-select-tree-show-line .ant-select-tree-indent-unit::before{position:absolute;top:calc(100% - 4px);right:-12px;bottom:-28px;border-right:1px solid #6f6c6c;content:''}.ant-select-tree-show-line .ant-select-tree-indent-unit-end-first-level::after,.ant-select-tree-show-line .ant-select-tree-indent-unit-end::before,.ant-upload-list-picture-card.ant-upload-list::after{display:none}.ant-select-tree-show-line .ant-select-tree-switcher{z-index:1;background:#0a0f19}.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher-loading-icon{transform:scaleY(-1)}.ant-typography{color:rgba(255,255,255,.85);overflow-wrap:break-word}.ant-typography.ant-typography-secondary{color:rgba(255,255,255,.45)}.ant-typography.ant-typography-success{color:#47a91a}.ant-typography.ant-typography-warning{color:#d69515}.ant-typography.ant-typography-danger{color:#a31b26}.ant-typography.ant-typography-disabled{color:rgba(255,255,255,.3);cursor:not-allowed;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ant-typography p,div.ant-typography{margin-bottom:1em}.ant-typography h1,h1.ant-typography{margin-bottom:.5em;color:rgba(255,255,255,.85);font-weight:600;font-size:38px;line-height:1.23}.ant-typography h2,.ant-typography h3,h2.ant-typography,h3.ant-typography{margin-bottom:.5em;color:rgba(255,255,255,.85);font-weight:600;font-size:30px;line-height:1.35}.ant-typography h3,h3.ant-typography{font-size:24px}.ant-typography h4,.ant-typography h5,h4.ant-typography,h5.ant-typography{margin-bottom:.5em;color:rgba(255,255,255,.85);font-weight:600;font-size:20px;line-height:1.4}.ant-typography h5,h5.ant-typography{font-size:16px;line-height:1.5}.ant-typography div+h1,.ant-typography div+h2,.ant-typography div+h3,.ant-typography div+h4,.ant-typography div+h5,.ant-typography h1+h1,.ant-typography h1+h2,.ant-typography h1+h3,.ant-typography h1+h4,.ant-typography h1+h5,.ant-typography h2+h1,.ant-typography h2+h2,.ant-typography h2+h3,.ant-typography h2+h4,.ant-typography h2+h5,.ant-typography h3+h1,.ant-typography h3+h2,.ant-typography h3+h3,.ant-typography h3+h4,.ant-typography h3+h5,.ant-typography h4+h1,.ant-typography h4+h2,.ant-typography h4+h3,.ant-typography h4+h4,.ant-typography h4+h5,.ant-typography h5+h1,.ant-typography h5+h2,.ant-typography h5+h3,.ant-typography h5+h4,.ant-typography h5+h5,.ant-typography li+h1,.ant-typography li+h2,.ant-typography li+h3,.ant-typography li+h4,.ant-typography li+h5,.ant-typography p+h1,.ant-typography p+h2,.ant-typography p+h3,.ant-typography p+h4,.ant-typography p+h5,.ant-typography ul+h1,.ant-typography ul+h2,.ant-typography ul+h3,.ant-typography ul+h4,.ant-typography ul+h5,.ant-typography+h1.ant-typography,.ant-typography+h2.ant-typography,.ant-typography+h3.ant-typography,.ant-typography+h4.ant-typography,.ant-typography+h5.ant-typography{margin-top:1.2em}a.ant-typography-ellipsis,span.ant-typography-ellipsis{display:inline-block}.ant-typography a,.ant-typography-copy,.ant-typography-edit,.ant-typography-expand,a.ant-typography{color:#ffd90f;outline:0;cursor:pointer;transition:color .3s;text-decoration:none}.ant-typography a:active,.ant-typography a:hover,a.ant-typography:active,a.ant-typography:hover{text-decoration:none}.ant-typography a[disabled],a.ant-typography[disabled]{color:rgba(255,255,255,.3);cursor:not-allowed;pointer-events:none}.ant-typography code,.ant-typography kbd{margin:0 .2em;border:1px solid rgba(100,100,100,.2);border-radius:3px}.ant-typography code{padding:.2em .4em .1em;font-size:85%;background:rgba(150,150,150,.1)}.ant-typography kbd{padding:.15em .4em .1em;font-size:90%;background:rgba(150,150,150,.06);border-bottom-width:2px}.ant-typography mark{padding:0;background-color:#523e18}.ant-typography ins,.ant-typography u{text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.ant-typography del,.ant-typography s{text-decoration:line-through}.ant-typography strong{font-weight:600}.ant-typography-copy,.ant-typography-edit,.ant-typography-expand{margin-left:4px}.ant-typography-copy:focus,.ant-typography-copy:hover,.ant-typography-edit:focus,.ant-typography-edit:hover,.ant-typography-expand:focus,.ant-typography-expand:hover{color:#a99213}.ant-typography-copy:active,.ant-typography-edit:active,.ant-typography-expand:active{color:#e7d235}.ant-typography-copy-success,.ant-typography-copy-success:focus,.ant-typography-copy-success:hover{color:#47a91a}.ant-typography-edit-content{position:relative}div.ant-typography-edit-content{left:-12px;margin-top:-5px;margin-bottom:calc(1em - 4px - 1px)}.ant-typography-edit-content-confirm{position:absolute;right:10px;bottom:8px;color:rgba(255,255,255,.45);pointer-events:none}.ant-typography-edit-content textarea{-moz-transition:none}.ant-typography ol,.ant-typography ul{margin:0 0 1em;padding:0}.ant-typography ol li,.ant-typography ul li{margin:0 0 0 20px;padding:0 0 0 4px}.ant-typography ul{list-style-type:circle}.ant-typography ul ul{list-style-type:disc}.ant-typography ol{list-style-type:decimal}.ant-typography-ellipsis-single-line{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}a.ant-typography-ellipsis-single-line,span.ant-typography-ellipsis-single-line{vertical-align:bottom}.ant-typography-ellipsis-multiple-line{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.ant-typography-rtl{direction:rtl}.ant-typography-rtl .ant-typography-copy,.ant-typography-rtl .ant-typography-edit,.ant-typography-rtl .ant-typography-expand{margin-right:4px;margin-left:0}.ant-typography-rtl .ant-typography-expand{float:left}div.ant-typography-edit-content.ant-typography-rtl{right:-12px;left:auto}.ant-typography-rtl .ant-typography-edit-content-confirm{right:auto;left:10px}.ant-typography-rtl.ant-typography ol li,.ant-typography-rtl.ant-typography ul li{margin:0 20px 0 0;padding:0 4px 0 0}.ant-upload{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:'tnum';outline:0}.ant-upload p{margin:0}.ant-upload-btn{display:block;width:100%;outline:0}.ant-upload.ant-upload-select{display:inline-block}.ant-upload.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-drag,.ant-upload.ant-upload-select-picture-card{text-align:center;border:1px dashed #6f6c6c;border-radius:4px;cursor:pointer;transition:border-color .3s}.ant-upload.ant-upload-select-picture-card{width:104px;height:104px;margin-right:8px;margin-bottom:8px;vertical-align:top;background-color:rgba(255,255,255,.04)}.ant-upload.ant-upload-select-picture-card>.ant-upload{display:flex;align-items:center;justify-content:center;height:100%;text-align:center}.ant-upload.ant-upload-select-picture-card:hover{border-color:#ffd90f}.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover{border-color:#6f6c6c}.ant-upload.ant-upload-drag{position:relative;width:100%;height:100%;background:rgba(255,255,255,.04)}.ant-upload.ant-upload-drag .ant-upload{padding:16px 0}.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled){border-color:#e7d235}.ant-upload.ant-upload-drag.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-drag .ant-upload-btn{display:table;height:100%}.ant-upload.ant-upload-drag .ant-upload-drag-container{display:table-cell;vertical-align:middle}.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover{border-color:#a99213}.ant-upload.ant-upload-drag p.ant-upload-drag-icon{margin-bottom:20px}.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon{color:#a99213;font-size:48px}.ant-upload.ant-upload-drag p.ant-upload-text{margin:0 0 4px;color:rgba(255,255,255,.85);font-size:16px}.ant-upload.ant-upload-drag p.ant-upload-hint{color:rgba(255,255,255,.45);font-size:14px}.ant-upload.ant-upload-drag .anticon-plus{color:rgba(255,255,255,.3);font-size:30px;transition:all .3s}.ant-upload.ant-upload-drag .anticon-plus:hover,.ant-upload.ant-upload-drag:hover .anticon-plus{color:rgba(255,255,255,.45)}.ant-upload-picture-card-wrapper{display:inline-block;width:100%}.ant-upload-picture-card-wrapper::before{display:table;content:''}.ant-upload-picture-card-wrapper::after{display:table;clear:both;content:''}.ant-upload-list{box-sizing:border-box;margin:0;padding:0;color:rgba(255,255,255,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:'tnum';line-height:1.5715}.ant-upload-list::after,.ant-upload-list::before{display:table;content:''}.ant-upload-list::after{clear:both}.ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1{padding-right:14px}.ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2{padding-right:28px}.ant-upload-list-item{position:relative;height:22.001px;margin-top:8px;font-size:14px}.ant-upload-list-item-name{display:inline-block;width:100%;padding-left:22px;overflow:hidden;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis}.ant-upload-list-item-name-icon-count-1{padding-right:14px}.ant-upload-list-item-card-actions{position:absolute;right:0}.ant-upload-list-item-card-actions-btn{opacity:0}.ant-upload-list-item-card-actions-btn.ant-btn-sm{height:20px;line-height:1}.ant-upload-list-item-card-actions.picture{top:22px;line-height:0}.ant-upload-list-item-card-actions-btn:focus,.ant-upload-list-item-card-actions.picture .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-card-actions .anticon{color:rgba(255,255,255,.45)}.ant-upload-list-item-info{height:100%;padding:0 12px 0 4px;transition:background-color .3s}.ant-upload-list-item-info>span{display:block;width:100%;height:100%}.ant-upload-list-item .anticon-close,.ant-upload-list-item-info .ant-upload-text-icon .anticon,.ant-upload-list-item-info .anticon-loading .anticon{position:absolute;top:5px;color:rgba(255,255,255,.45);font-size:14px}.ant-upload-list-item .anticon-close{display:inline-block;font-size:10px;top:6px;right:4px;line-height:0;cursor:pointer;opacity:0;transition:all .3s}.ant-upload-list-item .anticon-close:hover{color:rgba(255,255,255,.85)}.ant-upload-list-item:hover .ant-upload-list-item-info{background-color:rgba(255,255,255,.08)}.ant-upload-list-item:hover .ant-upload-list-item-card-actions-btn,.ant-upload-list-item:hover .anticon-close{opacity:1}.ant-upload-list-item-error,.ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon,.ant-upload-list-item-error .ant-upload-list-item-name,.ant-upload-list-item-error .ant-upload-text-icon>.anticon{color:#a31b26}.ant-upload-list-item-error .ant-upload-list-item-card-actions-btn,.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info::before{opacity:1}.ant-upload-list-item-progress{position:absolute;bottom:-12px;width:100%;padding-left:26px;font-size:14px;line-height:0}.ant-upload-list-picture .ant-upload-list-item{height:66px}.ant-upload-list-picture .ant-upload-list-item,.ant-upload-list-picture-card .ant-upload-list-item{position:relative;padding:8px;border:1px solid #6f6c6c;border-radius:4px}.ant-upload-list-picture .ant-upload-list-item:hover,.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info,.ant-upload-list-picture-card .ant-upload-list-item:hover,.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info{background:0 0}.ant-upload-list-picture .ant-upload-list-item-error,.ant-upload-list-picture-card .ant-upload-list-item-error{border-color:#a31b26}.ant-upload-list-picture .ant-upload-list-item-uploading,.ant-upload-list-picture-card .ant-upload-list-item-uploading{border-style:dashed}.ant-upload-list-picture .ant-upload-list-item-thumbnail{position:absolute;width:48px;height:48px}.ant-upload-list-picture .ant-upload-list-item-thumbnail,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail{top:8px;left:8px;line-height:54px;text-align:center;opacity:.8}.ant-upload-list-picture .ant-upload-list-item-icon .anticon,.ant-upload-list-picture .ant-upload-list-item-thumbnail .anticon,.ant-upload-list-picture-card .ant-upload-list-item-icon .anticon,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail .anticon{font-size:26px}.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff'],.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff']{fill:#e3d6d5}.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'],.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff']{fill:#a31b26}.ant-upload-list-picture .ant-upload-list-item-icon,.ant-upload-list-picture-card .ant-upload-list-item-icon{position:absolute;top:50%;left:50%;font-size:26px;transform:translate(-50%,-50%)}.ant-upload-list-picture .ant-upload-list-item-image,.ant-upload-list-picture-card .ant-upload-list-item-image{max-width:100%}.ant-upload-list-picture .ant-upload-list-item-thumbnail img{display:block;width:48px;height:48px;overflow:hidden}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{overflow:hidden}.ant-upload-list-picture .ant-upload-list-item-name{display:inline-block;margin:0 0 0 8px;padding-right:8px;padding-left:48px;line-height:44px}.ant-upload-list-picture .ant-upload-list-item-name,.ant-upload-list-picture-card .ant-upload-list-item-name{box-sizing:border-box;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;transition:all .3s}.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1,.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1{padding-right:18px}.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2,.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2{padding-right:36px}.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name{line-height:28px}.ant-upload-list-picture .ant-upload-list-item-progress{bottom:14px;width:calc(100% - 24px);margin-top:0;padding-left:56px}.ant-upload-list-picture-card .ant-upload-list-item-progress{margin-top:0}.ant-upload-list-picture .anticon-close,.ant-upload-list-picture-card .anticon-close{position:absolute;top:8px;right:8px;line-height:1;opacity:1}.ant-upload-list-picture-card-container{display:inline-block;width:104px;height:104px;margin:0 8px 8px 0;vertical-align:top}.ant-upload-list-picture-card .ant-upload-list-item{height:100%;margin:0}.ant-upload-list-picture-card .ant-upload-list-item-info{position:relative;height:100%;overflow:hidden}.ant-upload-list-picture-card .ant-upload-list-item-info::before{position:absolute;z-index:1;width:100%;height:100%;background-color:rgba(0,0,0,.5);opacity:0;transition:all .3s;content:' '}.ant-upload-list-picture-card .ant-upload-list-item-actions{position:absolute;top:50%;left:50%;z-index:10;white-space:nowrap;transform:translate(-50%,-50%);opacity:0;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye{z-index:10;width:16px;margin:0 4px;color:rgba(255,255,255,.85);font-size:16px;cursor:pointer;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover{color:#fff}.ant-upload-list-picture-card .ant-upload-list-item-actions:hover,.ant-upload-list-picture-card .ant-upload-list-item-info:hover+.ant-upload-list-item-actions{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{position:static;display:block;width:100%;height:100%;object-fit:cover}.ant-upload-list-picture-card .ant-upload-list-item-name{display:none;margin:8px 0 0;padding:0;line-height:1.5715;text-align:center}.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{position:absolute;bottom:10px;display:block}.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item{background-color:rgba(255,255,255,.04)}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info{height:auto}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info::before{display:none}.ant-upload-list-picture-card .ant-upload-list-item-progress{bottom:32px;width:calc(100% - 14px);padding-left:0}.ant-upload-list .ant-upload-success-icon{color:#47a91a;font-weight:700}.ant-upload-list .ant-upload-animate-enter,.ant-upload-list .ant-upload-animate-inline-enter,.ant-upload-list .ant-upload-animate-inline-leave,.ant-upload-list .ant-upload-animate-leave{animation-duration:.3s;animation-fill-mode:cubic-bezier(.78,.14,.15,.86)}.ant-upload-list .ant-upload-animate-enter{animation-name:uploadAnimateIn}.ant-upload-list .ant-upload-animate-leave{animation-name:uploadAnimateOut}.ant-upload-list .ant-upload-animate-inline-enter{animation-name:uploadAnimateInlineIn}.ant-upload-list .ant-upload-animate-inline-leave{animation-name:uploadAnimateInlineOut}.ant-upload-list-rtl,.ant-upload-rtl{direction:rtl}.ant-upload-rtl.ant-upload.ant-upload-select-picture-card{margin-right:auto;margin-left:8px}.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1{padding-right:22px;padding-left:14px}.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2{padding-right:22px;padding-left:28px}.ant-upload-list-rtl .ant-upload-list-item-name{padding-right:22px;padding-left:0}.ant-upload-list-rtl .ant-upload-list-item-name-icon-count-1{padding-left:14px}.ant-upload-list-rtl .ant-upload-list-item-card-actions{right:auto;left:0}.ant-upload-list-rtl .ant-upload-list-item-card-actions .anticon,.ant-upload-list-rtl .ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon{padding-right:0;padding-left:5px}.ant-upload-list-rtl .ant-upload-list-item-info{padding:0 4px 0 12px}.ant-upload-list-rtl .ant-upload-list-item .anticon-close{right:auto;left:4px}.ant-upload-list-rtl .ant-upload-list-item-progress{padding-right:26px;padding-left:0}.ant-upload-list-picture .ant-upload-list-item-info,.ant-upload-list-picture-card .ant-upload-list-item-info{padding:0}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-thumbnail,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-thumbnail{right:8px;left:auto}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-icon,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-icon{right:50%;left:auto;transform:translate(50%,-50%)}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name{margin:0 8px 0 0;padding-right:48px;padding-left:8px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1{padding-right:48px;padding-left:18px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2{padding-right:48px;padding-left:36px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-progress,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-progress{padding-right:0;padding-left:0}.ant-upload-list-rtl.ant-upload-list-picture .anticon-close,.ant-upload-list-rtl.ant-upload-list-picture-card .anticon-close{right:auto;left:8px}.ant-upload-list-rtl .ant-upload-list-picture-card-container{margin:0 0 8px 8px}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-actions{right:50%;left:auto;transform:translate(50%,-50%)}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{margin:8px 0 0;padding:0}.highlight{background-color:#3f3f3f} \ No newline at end of file diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/icon.png b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/icon.png new file mode 100644 index 00000000..e68ca916 Binary files /dev/null and b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/icon.png differ diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/index.html b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/index.html new file mode 100644 index 00000000..53555e88 --- /dev/null +++ b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/index.html @@ -0,0 +1 @@ +Flight Pronostics Dapp
\ No newline at end of file diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/light-theme.css b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/light-theme.css new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/light-theme.css @@ -0,0 +1 @@ + diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/logo.png b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/logo.png new file mode 100644 index 00000000..e68ca916 Binary files /dev/null and b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/logo.png differ diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/precache-manifest.2f0922962c27f6533c0f2ac894fd0542.js b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/precache-manifest.2f0922962c27f6533c0f2ac894fd0542.js new file mode 100644 index 00000000..d602e23c --- /dev/null +++ b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/precache-manifest.2f0922962c27f6533c0f2ac894fd0542.js @@ -0,0 +1,30 @@ +self.__precacheManifest = (self.__precacheManifest || []).concat([ + { + "revision": "fa93468a25651d118064d07c5077dc45", + "url": "/train-pronostics-ui/index.html" + }, + { + "revision": "3ad38721bd0219dadaad", + "url": "/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css" + }, + { + "revision": "929d29a7f8576d38a2b3", + "url": "/train-pronostics-ui/static/css/main.060aeaaf.chunk.css" + }, + { + "revision": "3ad38721bd0219dadaad", + "url": "/train-pronostics-ui/static/js/2.4b3225bc.chunk.js" + }, + { + "revision": "7ee0693e48d7810c5ff155e5484601ac", + "url": "/train-pronostics-ui/static/js/2.4b3225bc.chunk.js.LICENSE.txt" + }, + { + "revision": "929d29a7f8576d38a2b3", + "url": "/train-pronostics-ui/static/js/main.5d0752e9.chunk.js" + }, + { + "revision": "44bc034d111d3e0156e7", + "url": "/train-pronostics-ui/static/js/runtime-main.3062e5ad.js" + } +]); \ No newline at end of file diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/service-worker.js b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/service-worker.js new file mode 100644 index 00000000..b96be1cf --- /dev/null +++ b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/service-worker.js @@ -0,0 +1,39 @@ +/** + * Welcome to your Workbox-powered service worker! + * + * You'll need to register this file in your web app and you should + * disable HTTP caching for this file too. + * See https://goo.gl/nhQhGp + * + * The rest of the code is auto-generated. Please don't update this file + * directly; instead, make changes to your Workbox build configuration + * and re-run your build process. + * See https://goo.gl/2aRDsh + */ + +importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); + +importScripts( + "/train-pronostics-ui/precache-manifest.2f0922962c27f6533c0f2ac894fd0542.js" +); + +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +workbox.core.clientsClaim(); + +/** + * The workboxSW.precacheAndRoute() method efficiently caches and responds to + * requests for URLs in the manifest. + * See https://goo.gl/S9QRab + */ +self.__precacheManifest = [].concat(self.__precacheManifest || []); +workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); + +workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/train-pronostics-ui/index.html"), { + + blacklist: [/^\/_/,/\/[^/?]+\.[^/]+$/], +}); diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css new file mode 100644 index 00000000..ffced90f --- /dev/null +++ b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css @@ -0,0 +1,10 @@ +/*! + * + * antd v4.16.5 + * + * Copyright 2015-present, Alipay, Inc. + * All rights reserved. + * + */[class*=ant-]::-ms-clear,[class*=ant-] input::-ms-clear,[class*=ant-] input::-ms-reveal,[class^=ant-]::-ms-clear,[class^=ant-] input::-ms-clear,[class^=ant-] input::-ms-reveal{display:none}body,html{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}body{margin:0;color:rgba(0,0,0,.85);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-variant:tabular-nums;line-height:1.5715;background-color:#fff;font-feature-settings:"tnum","tnum"}[tabindex="-1"]:focus{outline:none!important}hr{box-sizing:initial;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-top:0;margin-bottom:1em}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}a{color:#1890ff;text-decoration:none;background-color:initial;outline:none;cursor:pointer;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#40a9ff}a:active{color:#096dd9}a:active,a:focus,a:hover{text-decoration:none;outline:0}a[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed}code,kbd,pre,samp{font-size:1em;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(0,0,0,.45);text-align:left;caption-side:bottom}button,input,optgroup,select,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:initial}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{color:#fff;background:#1890ff}::selection{color:#fff;background:#1890ff}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon[tabindex]{cursor:pointer}.anticon-spin,.anticon-spin:before{display:inline-block;-webkit-animation:loadingCircle 1s linear infinite;animation:loadingCircle 1s linear infinite}.ant-fade-appear,.ant-fade-enter,.ant-fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-fade-appear.ant-fade-appear-active,.ant-fade-enter.ant-fade-enter-active{-webkit-animation-name:antFadeIn;animation-name:antFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-fade-leave.ant-fade-leave-active{-webkit-animation-name:antFadeOut;animation-name:antFadeOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-fade-appear,.ant-fade-enter{opacity:0}.ant-fade-appear,.ant-fade-enter,.ant-fade-leave{-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes antFadeOut{0%{opacity:1}to{opacity:0}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.ant-move-up-appear,.ant-move-up-enter,.ant-move-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-move-up-appear.ant-move-up-appear-active,.ant-move-up-enter.ant-move-up-enter-active{-webkit-animation-name:antMoveUpIn;animation-name:antMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-move-up-leave.ant-move-up-leave-active{-webkit-animation-name:antMoveUpOut;animation-name:antMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-move-up-appear,.ant-move-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-up-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-down-appear,.ant-move-down-enter,.ant-move-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-move-down-appear.ant-move-down-appear-active,.ant-move-down-enter.ant-move-down-enter-active{-webkit-animation-name:antMoveDownIn;animation-name:antMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-move-down-leave.ant-move-down-leave-active{-webkit-animation-name:antMoveDownOut;animation-name:antMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-move-down-appear,.ant-move-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-down-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-left-appear,.ant-move-left-enter,.ant-move-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-move-left-appear.ant-move-left-appear-active,.ant-move-left-enter.ant-move-left-enter-active{-webkit-animation-name:antMoveLeftIn;animation-name:antMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-move-left-leave.ant-move-left-leave-active{-webkit-animation-name:antMoveLeftOut;animation-name:antMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-move-left-appear,.ant-move-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-left-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-right-appear,.ant-move-right-enter,.ant-move-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-move-right-appear.ant-move-right-appear-active,.ant-move-right-enter.ant-move-right-enter-active{-webkit-animation-name:antMoveRightIn;animation-name:antMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-move-right-leave.ant-move-right-leave-active{-webkit-animation-name:antMoveRightOut;animation-name:antMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-move-right-appear,.ant-move-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-right-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@-webkit-keyframes antMoveDownIn{0%{transform:translateY(100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveDownIn{0%{transform:translateY(100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveDownOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveDownOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(100%);transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveLeftIn{0%{transform:translateX(-100%);transform-origin:0 0;opacity:0}to{transform:translateX(0);transform-origin:0 0;opacity:1}}@keyframes antMoveLeftIn{0%{transform:translateX(-100%);transform-origin:0 0;opacity:0}to{transform:translateX(0);transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveLeftOut{0%{transform:translateX(0);transform-origin:0 0;opacity:1}to{transform:translateX(-100%);transform-origin:0 0;opacity:0}}@keyframes antMoveLeftOut{0%{transform:translateX(0);transform-origin:0 0;opacity:1}to{transform:translateX(-100%);transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveRightIn{0%{transform:translateX(100%);transform-origin:0 0;opacity:0}to{transform:translateX(0);transform-origin:0 0;opacity:1}}@keyframes antMoveRightIn{0%{transform:translateX(100%);transform-origin:0 0;opacity:0}to{transform:translateX(0);transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveRightOut{0%{transform:translateX(0);transform-origin:0 0;opacity:1}to{transform:translateX(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveRightOut{0%{transform:translateX(0);transform-origin:0 0;opacity:1}to{transform:translateX(100%);transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveUpIn{0%{transform:translateY(-100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveUpIn{0%{transform:translateY(-100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveUpOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(-100%);transform-origin:0 0;opacity:0}}@keyframes antMoveUpOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(-100%);transform-origin:0 0;opacity:0}}@-webkit-keyframes loadingCircle{to{transform:rotate(1turn)}}@keyframes loadingCircle{to{transform:rotate(1turn)}}[ant-click-animating-without-extra-node=true],[ant-click-animating=true]{position:relative}html{--antd-wave-shadow-color:#1890ff;--scroll-bar:0}.ant-click-animating-node,[ant-click-animating-without-extra-node=true]:after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;box-shadow:0 0 0 0 #1890ff;box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;-webkit-animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;content:"";pointer-events:none}@-webkit-keyframes waveEffect{to{box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes waveEffect{to{box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@-webkit-keyframes fadeEffect{to{opacity:0}}@keyframes fadeEffect{to{opacity:0}}.ant-slide-up-appear,.ant-slide-up-enter,.ant-slide-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-slide-up-appear.ant-slide-up-appear-active,.ant-slide-up-enter.ant-slide-up-enter-active{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-slide-up-leave.ant-slide-up-leave-active{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-slide-up-appear,.ant-slide-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-up-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-down-appear,.ant-slide-down-enter,.ant-slide-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-slide-down-appear.ant-slide-down-appear-active,.ant-slide-down-enter.ant-slide-down-enter-active{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-slide-down-leave.ant-slide-down-leave-active{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-slide-down-appear,.ant-slide-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-left-appear,.ant-slide-left-enter,.ant-slide-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-slide-left-appear.ant-slide-left-appear-active,.ant-slide-left-enter.ant-slide-left-enter-active{-webkit-animation-name:antSlideLeftIn;animation-name:antSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-slide-left-leave.ant-slide-left-leave-active{-webkit-animation-name:antSlideLeftOut;animation-name:antSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-slide-left-appear,.ant-slide-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-left-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-right-appear,.ant-slide-right-enter,.ant-slide-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-slide-right-appear.ant-slide-right-appear-active,.ant-slide-right-enter.ant-slide-right-enter-active{-webkit-animation-name:antSlideRightIn;animation-name:antSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-slide-right-leave.ant-slide-right-leave-active{-webkit-animation-name:antSlideRightOut;animation-name:antSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-slide-right-appear,.ant-slide-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-right-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes antSlideUpIn{0%{transform:scaleY(.8);transform-origin:0 0;opacity:0}to{transform:scaleY(1);transform-origin:0 0;opacity:1}}@keyframes antSlideUpIn{0%{transform:scaleY(.8);transform-origin:0 0;opacity:0}to{transform:scaleY(1);transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideUpOut{0%{transform:scaleY(1);transform-origin:0 0;opacity:1}to{transform:scaleY(.8);transform-origin:0 0;opacity:0}}@keyframes antSlideUpOut{0%{transform:scaleY(1);transform-origin:0 0;opacity:1}to{transform:scaleY(.8);transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideDownIn{0%{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}to{transform:scaleY(1);transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownIn{0%{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}to{transform:scaleY(1);transform-origin:100% 100%;opacity:1}}@-webkit-keyframes antSlideDownOut{0%{transform:scaleY(1);transform-origin:100% 100%;opacity:1}to{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}}@keyframes antSlideDownOut{0%{transform:scaleY(1);transform-origin:100% 100%;opacity:1}to{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}}@-webkit-keyframes antSlideLeftIn{0%{transform:scaleX(.8);transform-origin:0 0;opacity:0}to{transform:scaleX(1);transform-origin:0 0;opacity:1}}@keyframes antSlideLeftIn{0%{transform:scaleX(.8);transform-origin:0 0;opacity:0}to{transform:scaleX(1);transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideLeftOut{0%{transform:scaleX(1);transform-origin:0 0;opacity:1}to{transform:scaleX(.8);transform-origin:0 0;opacity:0}}@keyframes antSlideLeftOut{0%{transform:scaleX(1);transform-origin:0 0;opacity:1}to{transform:scaleX(.8);transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideRightIn{0%{transform:scaleX(.8);transform-origin:100% 0;opacity:0}to{transform:scaleX(1);transform-origin:100% 0;opacity:1}}@keyframes antSlideRightIn{0%{transform:scaleX(.8);transform-origin:100% 0;opacity:0}to{transform:scaleX(1);transform-origin:100% 0;opacity:1}}@-webkit-keyframes antSlideRightOut{0%{transform:scaleX(1);transform-origin:100% 0;opacity:1}to{transform:scaleX(.8);transform-origin:100% 0;opacity:0}}@keyframes antSlideRightOut{0%{transform:scaleX(1);transform-origin:100% 0;opacity:1}to{transform:scaleX(.8);transform-origin:100% 0;opacity:0}}.ant-zoom-appear,.ant-zoom-enter,.ant-zoom-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-zoom-appear.ant-zoom-appear-active,.ant-zoom-enter.ant-zoom-enter-active{-webkit-animation-name:antZoomIn;animation-name:antZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-zoom-leave.ant-zoom-leave-active{-webkit-animation-name:antZoomOut;animation-name:antZoomOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-zoom-appear,.ant-zoom-enter{transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-appear-prepare,.ant-zoom-enter-prepare{transform:none}.ant-zoom-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-big-appear,.ant-zoom-big-enter,.ant-zoom-big-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-zoom-big-appear.ant-zoom-big-appear-active,.ant-zoom-big-enter.ant-zoom-big-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-zoom-big-leave.ant-zoom-big-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-zoom-big-appear,.ant-zoom-big-enter{transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-big-appear-prepare,.ant-zoom-big-enter-prepare{transform:none}.ant-zoom-big-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-big-fast-appear,.ant-zoom-big-fast-enter,.ant-zoom-big-fast-leave{-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active,.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-zoom-big-fast-appear,.ant-zoom-big-fast-enter{transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-big-fast-appear-prepare,.ant-zoom-big-fast-enter-prepare{transform:none}.ant-zoom-big-fast-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-up-appear,.ant-zoom-up-enter,.ant-zoom-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-zoom-up-appear.ant-zoom-up-appear-active,.ant-zoom-up-enter.ant-zoom-up-enter-active{-webkit-animation-name:antZoomUpIn;animation-name:antZoomUpIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-zoom-up-leave.ant-zoom-up-leave-active{-webkit-animation-name:antZoomUpOut;animation-name:antZoomUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-zoom-up-appear,.ant-zoom-up-enter{transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-up-appear-prepare,.ant-zoom-up-enter-prepare{transform:none}.ant-zoom-up-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-down-appear,.ant-zoom-down-enter,.ant-zoom-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-zoom-down-appear.ant-zoom-down-appear-active,.ant-zoom-down-enter.ant-zoom-down-enter-active{-webkit-animation-name:antZoomDownIn;animation-name:antZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-zoom-down-leave.ant-zoom-down-leave-active{-webkit-animation-name:antZoomDownOut;animation-name:antZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-zoom-down-appear,.ant-zoom-down-enter{transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-down-appear-prepare,.ant-zoom-down-enter-prepare{transform:none}.ant-zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-left-appear,.ant-zoom-left-enter,.ant-zoom-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-zoom-left-appear.ant-zoom-left-appear-active,.ant-zoom-left-enter.ant-zoom-left-enter-active{-webkit-animation-name:antZoomLeftIn;animation-name:antZoomLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-zoom-left-leave.ant-zoom-left-leave-active{-webkit-animation-name:antZoomLeftOut;animation-name:antZoomLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-zoom-left-appear,.ant-zoom-left-enter{transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-left-appear-prepare,.ant-zoom-left-enter-prepare{transform:none}.ant-zoom-left-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-right-appear,.ant-zoom-right-enter,.ant-zoom-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-zoom-right-appear.ant-zoom-right-appear-active,.ant-zoom-right-enter.ant-zoom-right-enter-active{-webkit-animation-name:antZoomRightIn;animation-name:antZoomRightIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-zoom-right-leave.ant-zoom-right-leave-active{-webkit-animation-name:antZoomRightOut;animation-name:antZoomRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-zoom-right-appear,.ant-zoom-right-enter{transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-right-appear-prepare,.ant-zoom-right-enter-prepare{transform:none}.ant-zoom-right-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@-webkit-keyframes antZoomIn{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomIn{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}@-webkit-keyframes antZoomOut{0%{transform:scale(1)}to{transform:scale(.2);opacity:0}}@keyframes antZoomOut{0%{transform:scale(1)}to{transform:scale(.2);opacity:0}}@-webkit-keyframes antZoomBigIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomBigIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}@-webkit-keyframes antZoomBigOut{0%{transform:scale(1)}to{transform:scale(.8);opacity:0}}@keyframes antZoomBigOut{0%{transform:scale(1)}to{transform:scale(.8);opacity:0}}@-webkit-keyframes antZoomUpIn{0%{transform:scale(.8);transform-origin:50% 0;opacity:0}to{transform:scale(1);transform-origin:50% 0}}@keyframes antZoomUpIn{0%{transform:scale(.8);transform-origin:50% 0;opacity:0}to{transform:scale(1);transform-origin:50% 0}}@-webkit-keyframes antZoomUpOut{0%{transform:scale(1);transform-origin:50% 0}to{transform:scale(.8);transform-origin:50% 0;opacity:0}}@keyframes antZoomUpOut{0%{transform:scale(1);transform-origin:50% 0}to{transform:scale(.8);transform-origin:50% 0;opacity:0}}@-webkit-keyframes antZoomLeftIn{0%{transform:scale(.8);transform-origin:0 50%;opacity:0}to{transform:scale(1);transform-origin:0 50%}}@keyframes antZoomLeftIn{0%{transform:scale(.8);transform-origin:0 50%;opacity:0}to{transform:scale(1);transform-origin:0 50%}}@-webkit-keyframes antZoomLeftOut{0%{transform:scale(1);transform-origin:0 50%}to{transform:scale(.8);transform-origin:0 50%;opacity:0}}@keyframes antZoomLeftOut{0%{transform:scale(1);transform-origin:0 50%}to{transform:scale(.8);transform-origin:0 50%;opacity:0}}@-webkit-keyframes antZoomRightIn{0%{transform:scale(.8);transform-origin:100% 50%;opacity:0}to{transform:scale(1);transform-origin:100% 50%}}@keyframes antZoomRightIn{0%{transform:scale(.8);transform-origin:100% 50%;opacity:0}to{transform:scale(1);transform-origin:100% 50%}}@-webkit-keyframes antZoomRightOut{0%{transform:scale(1);transform-origin:100% 50%}to{transform:scale(.8);transform-origin:100% 50%;opacity:0}}@keyframes antZoomRightOut{0%{transform:scale(1);transform-origin:100% 50%}to{transform:scale(.8);transform-origin:100% 50%;opacity:0}}@-webkit-keyframes antZoomDownIn{0%{transform:scale(.8);transform-origin:50% 100%;opacity:0}to{transform:scale(1);transform-origin:50% 100%}}@keyframes antZoomDownIn{0%{transform:scale(.8);transform-origin:50% 100%;opacity:0}to{transform:scale(1);transform-origin:50% 100%}}@-webkit-keyframes antZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{transform:scale(.8);transform-origin:50% 100%;opacity:0}}@keyframes antZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{transform:scale(.8);transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse,.ant-motion-collapse-legacy-active{transition:height .2s cubic-bezier(.645,.045,.355,1),opacity .2s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden}.ant-affix{position:fixed;z-index:10}.ant-alert{box-sizing:border-box;margin:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:flex;align-items:center;padding:8px 15px;word-wrap:break-word;border-radius:2px}.ant-alert-content{flex:1 1;min-width:0}.ant-alert-icon{margin-right:8px}.ant-alert-description{display:none;font-size:14px;line-height:22px}.ant-alert-success{background-color:#f6ffed;border:1px solid #b7eb8f}.ant-alert-success .ant-alert-icon{color:#52c41a}.ant-alert-info{background-color:#e6f7ff;border:1px solid #91d5ff}.ant-alert-info .ant-alert-icon{color:#1890ff}.ant-alert-warning{background-color:#fffbe6;border:1px solid #ffe58f}.ant-alert-warning .ant-alert-icon{color:#faad14}.ant-alert-error{background-color:#fff2f0;border:1px solid #ffccc7}.ant-alert-error .ant-alert-icon{color:#ff4d4f}.ant-alert-error .ant-alert-description>pre{margin:0;padding:0}.ant-alert-action{margin-left:8px}.ant-alert-close-icon{margin-left:8px;padding:0;overflow:hidden;font-size:12px;line-height:12px;background-color:initial;border:none;outline:none;cursor:pointer}.ant-alert-close-icon .anticon-close{color:rgba(0,0,0,.45);transition:color .3s}.ant-alert-close-icon .anticon-close:hover{color:rgba(0,0,0,.75)}.ant-alert-close-text{color:rgba(0,0,0,.45);transition:color .3s}.ant-alert-close-text:hover{color:rgba(0,0,0,.75)}.ant-alert-with-description{align-items:flex-start;padding:15px 15px 15px 24px}.ant-alert-with-description.ant-alert-no-icon{padding:15px}.ant-alert-with-description .ant-alert-icon{margin-right:15px;font-size:24px}.ant-alert-with-description .ant-alert-message{display:block;margin-bottom:4px;color:rgba(0,0,0,.85);font-size:16px}.ant-alert-message{color:rgba(0,0,0,.85)}.ant-alert-with-description .ant-alert-description{display:block}.ant-alert.ant-alert-motion-leave{overflow:hidden;opacity:1;transition:max-height .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86),padding-top .3s cubic-bezier(.78,.14,.15,.86),padding-bottom .3s cubic-bezier(.78,.14,.15,.86),margin-bottom .3s cubic-bezier(.78,.14,.15,.86)}.ant-alert.ant-alert-motion-leave-active{max-height:0;margin-bottom:0!important;padding-top:0;padding-bottom:0;opacity:0}.ant-alert-banner{margin-bottom:0;border:0;border-radius:0}.ant-alert.ant-alert-rtl{direction:rtl}.ant-alert-rtl.ant-alert.ant-alert-no-icon{padding:8px 15px}.ant-alert-rtl .ant-alert-icon{margin-right:auto;margin-left:8px}.ant-alert-rtl .ant-alert-action,.ant-alert-rtl .ant-alert-close-icon{margin-right:8px;margin-left:auto}.ant-alert-rtl.ant-alert-with-description .ant-alert-icon{margin-right:auto;margin-left:15px}.ant-anchor{box-sizing:border-box;margin:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;padding:0 0 0 2px}.ant-anchor-wrapper{margin-left:-4px;padding-left:4px;overflow:auto;background-color:initial}.ant-anchor-ink{position:absolute;top:0;left:0;height:100%}.ant-anchor-ink:before{position:relative;display:block;width:2px;height:100%;margin:0 auto;background-color:#f0f0f0;content:" "}.ant-anchor-ink-ball{position:absolute;left:50%;display:none;width:8px;height:8px;background-color:#fff;border:2px solid #1890ff;border-radius:8px;transform:translateX(-50%);transition:top .3s ease-in-out}.ant-anchor-ink-ball.visible{display:inline-block}.ant-anchor.fixed .ant-anchor-ink .ant-anchor-ink-ball{display:none}.ant-anchor-link{padding:7px 0 7px 16px;line-height:1.143}.ant-anchor-link-title{position:relative;display:block;margin-bottom:6px;overflow:hidden;color:rgba(0,0,0,.85);white-space:nowrap;text-overflow:ellipsis;transition:all .3s}.ant-anchor-link-title:only-child{margin-bottom:0}.ant-anchor-link-active>.ant-anchor-link-title{color:#1890ff}.ant-anchor-link .ant-anchor-link{padding-top:5px;padding-bottom:5px}.ant-anchor-rtl{direction:rtl}.ant-anchor-rtl.ant-anchor-wrapper{margin-right:-4px;margin-left:0;padding-right:4px;padding-left:0}.ant-anchor-rtl .ant-anchor-ink{right:0;left:auto}.ant-anchor-rtl .ant-anchor-ink-ball{right:50%;left:0;transform:translateX(50%)}.ant-anchor-rtl .ant-anchor-link{padding:7px 16px 7px 0}.ant-select-auto-complete{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum"}.ant-select-auto-complete .ant-select-clear{right:13px}.ant-select-single .ant-select-selector{display:flex}.ant-select-single .ant-select-selector .ant-select-selection-search{position:absolute;top:0;right:11px;bottom:0;left:11px}.ant-select-single .ant-select-selector .ant-select-selection-search-input{width:100%}.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{padding:0;line-height:30px;transition:all .3s}@supports (-moz-appearance:meterbar){.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:30px}}.ant-select-single .ant-select-selector .ant-select-selection-item{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-single .ant-select-selector .ant-select-selection-placeholder{pointer-events:none}.ant-select-single .ant-select-selector .ant-select-selection-item:after,.ant-select-single .ant-select-selector .ant-select-selection-placeholder:after,.ant-select-single .ant-select-selector:after{display:inline-block;width:0;visibility:hidden;content:"\a0"}.ant-select-single.ant-select-show-arrow .ant-select-selection-search{right:25px}.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-right:18px}.ant-select-single.ant-select-open .ant-select-selection-item{color:#bfbfbf}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{width:100%;height:32px;padding:0 11px}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{height:30px}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector:after{line-height:30px}.ant-select-single.ant-select-customize-input .ant-select-selector:after{display:none}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-search{position:static;width:100%}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder{position:absolute;right:0;left:0;padding:0 11px}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder:after{display:none}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{height:40px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder,.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector:after{line-height:38px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input{height:38px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{height:24px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder,.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector:after{line-height:22px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input{height:22px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selection-search{right:7px;left:7px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{padding:0 7px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{right:28px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-right:21px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{padding:0 11px}.ant-select-selection-overflow{position:relative;display:flex;flex:auto;flex-wrap:wrap;max-width:100%}.ant-select-selection-overflow-item{flex:none;align-self:center;max-width:100%}.ant-select-multiple .ant-select-selector{display:flex;flex-wrap:wrap;align-items:center;padding:1px 4px}.ant-select-show-search.ant-select-multiple .ant-select-selector{cursor:text}.ant-select-disabled.ant-select-multiple .ant-select-selector{background:#f5f5f5;cursor:not-allowed}.ant-select-multiple .ant-select-selector:after{display:inline-block;width:0;margin:2px 0;line-height:24px;content:"\a0"}.ant-select-multiple.ant-select-allow-clear .ant-select-selector,.ant-select-multiple.ant-select-show-arrow .ant-select-selector{padding-right:24px}.ant-select-multiple .ant-select-selection-item{position:relative;display:flex;flex:none;box-sizing:border-box;max-width:100%;height:24px;margin-top:2px;margin-bottom:2px;line-height:22px;background:#f5f5f5;border:1px solid #f0f0f0;border-radius:2px;cursor:default;transition:font-size .3s,line-height .3s,height .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-margin-end:4px;margin-inline-end:4px;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:4px;padding-inline-end:4px}.ant-select-disabled.ant-select-multiple .ant-select-selection-item{color:#bfbfbf;border-color:#d9d9d9;cursor:not-allowed}.ant-select-multiple .ant-select-selection-item-content{display:inline-block;margin-right:4px;overflow:hidden;white-space:pre;text-overflow:ellipsis}.ant-select-multiple .ant-select-selection-item-remove{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;color:rgba(0,0,0,.45);font-weight:700;font-size:10px;line-height:inherit;cursor:pointer}.ant-select-multiple .ant-select-selection-item-remove>*{line-height:1}.ant-select-multiple .ant-select-selection-item-remove svg{display:inline-block}.ant-select-multiple .ant-select-selection-item-remove:before{display:none}.ant-select-multiple .ant-select-selection-item-remove .ant-select-multiple .ant-select-selection-item-remove-icon{display:block}.ant-select-multiple .ant-select-selection-item-remove>.anticon{vertical-align:-.2em}.ant-select-multiple .ant-select-selection-item-remove:hover{color:rgba(0,0,0,.75)}.ant-select-multiple .ant-select-selection-overflow-item+.ant-select-selection-overflow-item .ant-select-selection-search{-webkit-margin-start:0;margin-inline-start:0}.ant-select-multiple .ant-select-selection-search{position:relative;max-width:100%;margin-top:2px;margin-bottom:2px;-webkit-margin-start:7px;margin-inline-start:7px}.ant-select-multiple .ant-select-selection-search-input,.ant-select-multiple .ant-select-selection-search-mirror{height:24px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:24px;transition:all .3s}.ant-select-multiple .ant-select-selection-search-input{width:100%;min-width:4.1px}.ant-select-multiple .ant-select-selection-search-mirror{position:absolute;top:0;left:0;z-index:999;white-space:pre;visibility:hidden}.ant-select-multiple .ant-select-selection-placeholder{position:absolute;top:50%;right:11px;left:11px;transform:translateY(-50%);transition:all .3s}.ant-select-multiple.ant-select-lg .ant-select-selector:after{line-height:32px}.ant-select-multiple.ant-select-lg .ant-select-selection-item{line-height:30px}.ant-select-multiple.ant-select-lg .ant-select-selection-search{height:32px;line-height:32px}.ant-select-multiple.ant-select-lg .ant-select-selection-search-input,.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror{height:32px;line-height:30px}.ant-select-multiple.ant-select-sm .ant-select-selector:after{line-height:16px}.ant-select-multiple.ant-select-sm .ant-select-selection-item{height:16px;line-height:14px}.ant-select-multiple.ant-select-sm .ant-select-selection-search{height:16px;line-height:16px}.ant-select-multiple.ant-select-sm .ant-select-selection-search-input,.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror{height:16px;line-height:14px}.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{left:7px}.ant-select-multiple.ant-select-sm .ant-select-selection-search{-webkit-margin-start:3px;margin-inline-start:3px}.ant-select-multiple.ant-select-lg .ant-select-selection-item{height:32px;line-height:32px}.ant-select-disabled .ant-select-selection-item-remove{display:none}.ant-select{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:inline-block;cursor:pointer}.ant-select:not(.ant-select-customize-input) .ant-select-selector{position:relative;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:pointer}.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector{cursor:text}.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:auto}.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector{color:rgba(0,0,0,.25);background:#f5f5f5;cursor:not-allowed}.ant-select-multiple.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector{background:#f5f5f5}.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:not-allowed}.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{margin:0;padding:0;background:transparent;border:none;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button{display:none;-webkit-appearance:none}.ant-select:not(.ant-select-disabled):hover .ant-select-selector{border-color:#40a9ff;border-right-width:1px!important}.ant-select-selection-item{flex:1 1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media (-ms-high-contrast:none){.ant-select-selection-item,.ant-select-selection-item ::-ms-backdrop{flex:auto}}.ant-select-selection-placeholder{flex:1 1;overflow:hidden;color:#bfbfbf;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}@media (-ms-high-contrast:none){.ant-select-selection-placeholder,.ant-select-selection-placeholder ::-ms-backdrop{flex:auto}}.ant-select-arrow{display:inline-block;color:inherit;font-style:normal;line-height:0;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:53%;right:11px;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;line-height:1;text-align:center;pointer-events:none}.ant-select-arrow>*{line-height:1}.ant-select-arrow svg{display:inline-block}.ant-select-arrow:before{display:none}.ant-select-arrow .ant-select-arrow-icon{display:block}.ant-select-arrow .anticon{vertical-align:top;transition:transform .3s}.ant-select-arrow .anticon>svg{vertical-align:top}.ant-select-arrow .anticon:not(.ant-select-suffix){pointer-events:auto}.ant-select-disabled .ant-select-arrow{cursor:not-allowed}.ant-select-clear{position:absolute;top:50%;right:11px;z-index:1;display:inline-block;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;font-style:normal;line-height:1;text-align:center;text-transform:none;background:#fff;cursor:pointer;opacity:0;transition:color .3s ease,opacity .15s ease;text-rendering:auto}.ant-select-clear:before{display:block}.ant-select-clear:hover{color:rgba(0,0,0,.45)}.ant-select:hover .ant-select-clear{opacity:1}.ant-select-dropdown{margin:0;color:rgba(0,0,0,.85);font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum",;position:absolute;top:-9999px;left:-9999px;z-index:1050;box-sizing:border-box;padding:4px 0;overflow:hidden;font-size:14px;font-variant:normal;background-color:#fff;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-bottomLeft,.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-bottomLeft{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-topLeft,.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-topLeft{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-bottomLeft{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-topLeft{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-select-dropdown-hidden{display:none}.ant-select-dropdown-empty{color:rgba(0,0,0,.25)}.ant-select-item-empty{color:rgba(0,0,0,.85);color:rgba(0,0,0,.25)}.ant-select-item,.ant-select-item-empty{position:relative;display:block;min-height:32px;padding:5px 12px;font-weight:400;font-size:14px;line-height:22px}.ant-select-item{color:rgba(0,0,0,.85);cursor:pointer;transition:background .3s ease}.ant-select-item-group{color:rgba(0,0,0,.45);font-size:12px;cursor:default}.ant-select-item-option{display:flex}.ant-select-item-option-content{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-select-item-option-state{flex:none}.ant-select-item-option-active:not(.ant-select-item-option-disabled){background-color:#f5f5f5}.ant-select-item-option-selected:not(.ant-select-item-option-disabled){color:rgba(0,0,0,.85);font-weight:600;background-color:#e6f7ff}.ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-state{color:#1890ff}.ant-select-item-option-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-select-item-option-grouped{padding-left:24px}.ant-select-lg{font-size:16px}.ant-select-borderless .ant-select-selector{background-color:initial!important;border-color:transparent!important;box-shadow:none!important}.ant-select-rtl{direction:rtl}.ant-select-rtl .ant-select-arrow,.ant-select-rtl .ant-select-clear{right:auto;left:11px}.ant-select-dropdown-rtl{direction:rtl}.ant-select-dropdown-rtl .ant-select-item-option-grouped{padding-right:24px;padding-left:12px}.ant-select-rtl.ant-select-multiple.ant-select-allow-clear .ant-select-selector,.ant-select-rtl.ant-select-multiple.ant-select-show-arrow .ant-select-selector{padding-right:4px;padding-left:24px}.ant-select-rtl.ant-select-multiple .ant-select-selection-item{text-align:right}.ant-select-rtl.ant-select-multiple .ant-select-selection-item-content{margin-right:0;margin-left:4px;text-align:right}.ant-select-rtl.ant-select-multiple .ant-select-selection-search-mirror{right:0;left:auto}.ant-select-rtl.ant-select-multiple .ant-select-selection-placeholder{right:11px;left:auto}.ant-select-rtl.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{right:7px}.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-placeholder{right:0;left:9px;text-align:right}.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-search{right:11px;left:25px}.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-right:0;padding-left:18px}.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{right:6px}.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-right:0;padding-left:21px}.ant-empty{margin:0 8px;font-size:14px;line-height:1.5715;text-align:center}.ant-empty-image{height:100px;margin-bottom:8px}.ant-empty-image img{height:100%}.ant-empty-image svg{height:100%;margin:auto}.ant-empty-footer{margin-top:16px}.ant-empty-normal{margin:32px 0;color:rgba(0,0,0,.25)}.ant-empty-normal .ant-empty-image{height:40px}.ant-empty-small{margin:8px 0;color:rgba(0,0,0,.25)}.ant-empty-small .ant-empty-image{height:35px}.ant-empty-img-default-ellipse{fill:#f5f5f5;fill-opacity:.8}.ant-empty-img-default-path-1{fill:#aeb8c2}.ant-empty-img-default-path-2{fill:url(#linearGradient-1)}.ant-empty-img-default-path-3{fill:#f5f5f7}.ant-empty-img-default-path-4,.ant-empty-img-default-path-5{fill:#dce0e6}.ant-empty-img-default-g{fill:#fff}.ant-empty-img-simple-ellipse{fill:#f5f5f5}.ant-empty-img-simple-g{stroke:#d9d9d9}.ant-empty-img-simple-path{fill:#fafafa}.ant-empty-rtl{direction:rtl}.ant-avatar{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:inline-block;overflow:hidden;color:#fff;white-space:nowrap;text-align:center;vertical-align:middle;background:#ccc;width:32px;height:32px;line-height:32px;border-radius:50%}.ant-avatar-image{background:transparent}.ant-avatar .ant-image-img{display:block}.ant-avatar-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar.ant-avatar-icon{font-size:18px}.ant-avatar.ant-avatar-icon>.anticon{margin:0}.ant-avatar-lg{width:40px;height:40px;line-height:40px;border-radius:50%}.ant-avatar-lg-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar-lg.ant-avatar-icon{font-size:24px}.ant-avatar-lg.ant-avatar-icon>.anticon{margin:0}.ant-avatar-sm{width:24px;height:24px;line-height:24px;border-radius:50%}.ant-avatar-sm-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar-sm.ant-avatar-icon{font-size:14px}.ant-avatar-sm.ant-avatar-icon>.anticon{margin:0}.ant-avatar-square{border-radius:2px}.ant-avatar>img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.ant-avatar-group{display:inline-flex}.ant-avatar-group .ant-avatar{border:1px solid #fff}.ant-avatar-group .ant-avatar:not(:first-child){margin-left:-8px}.ant-avatar-group-popover .ant-avatar+.ant-avatar{margin-left:3px}.ant-avatar-group-rtl .ant-avatar:not(:first-child){margin-right:-8px;margin-left:0}.ant-avatar-group-popover.ant-popover-rtl .ant-avatar+.ant-avatar{margin-right:3px;margin-left:0}.ant-popover{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:absolute;top:0;left:0;z-index:1030;font-weight:400;white-space:normal;text-align:left;cursor:auto;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ant-popover:after{position:absolute;background:hsla(0,0%,100%,.01);content:""}.ant-popover-hidden{display:none}.ant-popover-placement-top,.ant-popover-placement-topLeft,.ant-popover-placement-topRight{padding-bottom:10px}.ant-popover-placement-right,.ant-popover-placement-rightBottom,.ant-popover-placement-rightTop{padding-left:10px}.ant-popover-placement-bottom,.ant-popover-placement-bottomLeft,.ant-popover-placement-bottomRight{padding-top:10px}.ant-popover-placement-left,.ant-popover-placement-leftBottom,.ant-popover-placement-leftTop{padding-right:10px}.ant-popover-inner{background-color:#fff;background-clip:padding-box;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);box-shadow:0 0 8px rgba(0,0,0,.15)\9}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.ant-popover-inner{box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}}.ant-popover-title{min-width:177px;min-height:32px;margin:0;padding:5px 16px 4px;color:rgba(0,0,0,.85);font-weight:500;border-bottom:1px solid #f0f0f0}.ant-popover-inner-content{padding:12px 16px;color:rgba(0,0,0,.85)}.ant-popover-message{position:relative;padding:4px 0 12px;color:rgba(0,0,0,.85);font-size:14px}.ant-popover-message>.anticon{position:absolute;top:8.0005px;color:#faad14;font-size:14px}.ant-popover-message-title{padding-left:22px}.ant-popover-buttons{margin-bottom:4px;text-align:right}.ant-popover-buttons button{margin-left:8px}.ant-popover-arrow{position:absolute;display:block;width:8.48528137px;height:8.48528137px;background:transparent;border-style:solid;border-width:4.24264069px;transform:rotate(45deg)}.ant-popover-placement-top>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-topLeft>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-topRight>.ant-popover-content>.ant-popover-arrow{bottom:6.2px;border-color:transparent #fff #fff transparent;box-shadow:3px 3px 7px rgba(0,0,0,.07)}.ant-popover-placement-top>.ant-popover-content>.ant-popover-arrow{left:50%;transform:translateX(-50%) rotate(45deg)}.ant-popover-placement-topLeft>.ant-popover-content>.ant-popover-arrow{left:16px}.ant-popover-placement-topRight>.ant-popover-content>.ant-popover-arrow{right:16px}.ant-popover-placement-right>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-rightBottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-rightTop>.ant-popover-content>.ant-popover-arrow{left:6px;border-color:transparent transparent #fff #fff;box-shadow:-3px 3px 7px rgba(0,0,0,.07)}.ant-popover-placement-right>.ant-popover-content>.ant-popover-arrow{top:50%;transform:translateY(-50%) rotate(45deg)}.ant-popover-placement-rightTop>.ant-popover-content>.ant-popover-arrow{top:12px}.ant-popover-placement-rightBottom>.ant-popover-content>.ant-popover-arrow{bottom:12px}.ant-popover-placement-bottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-bottomLeft>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-bottomRight>.ant-popover-content>.ant-popover-arrow{top:6px;border-color:#fff transparent transparent #fff;box-shadow:-2px -2px 5px rgba(0,0,0,.06)}.ant-popover-placement-bottom>.ant-popover-content>.ant-popover-arrow{left:50%;transform:translateX(-50%) rotate(45deg)}.ant-popover-placement-bottomLeft>.ant-popover-content>.ant-popover-arrow{left:16px}.ant-popover-placement-bottomRight>.ant-popover-content>.ant-popover-arrow{right:16px}.ant-popover-placement-left>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-leftBottom>.ant-popover-content>.ant-popover-arrow,.ant-popover-placement-leftTop>.ant-popover-content>.ant-popover-arrow{right:6px;border-color:#fff #fff transparent transparent;box-shadow:3px -3px 7px rgba(0,0,0,.07)}.ant-popover-placement-left>.ant-popover-content>.ant-popover-arrow{top:50%;transform:translateY(-50%) rotate(45deg)}.ant-popover-placement-leftTop>.ant-popover-content>.ant-popover-arrow{top:12px}.ant-popover-placement-leftBottom>.ant-popover-content>.ant-popover-arrow{bottom:12px}.ant-popover-rtl{direction:rtl;text-align:right}.ant-popover-rtl .ant-popover-message-title{padding-right:22px;padding-left:16px}.ant-popover-rtl .ant-popover-buttons{text-align:left}.ant-popover-rtl .ant-popover-buttons button{margin-right:8px;margin-left:0}.ant-back-top{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:fixed;right:100px;bottom:50px;z-index:10;width:40px;height:40px;cursor:pointer}.ant-back-top:empty{display:none}.ant-back-top-rtl{right:auto;left:100px;direction:rtl}.ant-back-top-content{width:40px;height:40px;overflow:hidden;color:#fff;text-align:center;background-color:rgba(0,0,0,.45);border-radius:20px;transition:all .3s}.ant-back-top-content:hover{background-color:rgba(0,0,0,.85);transition:all .3s}.ant-back-top-icon{font-size:24px;line-height:40px}@media screen and (max-width:768px){.ant-back-top{right:60px}}@media screen and (max-width:480px){.ant-back-top{right:20px}}.ant-badge{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:inline-block;line-height:1}.ant-badge-count{z-index:auto;min-width:20px;height:20px;padding:0 6px;color:#fff;font-weight:400;font-size:12px;line-height:20px;white-space:nowrap;text-align:center;background:#ff4d4f;border-radius:10px;box-shadow:0 0 0 1px #fff}.ant-badge-count a,.ant-badge-count a:hover{color:#fff}.ant-badge-count-sm{min-width:14px;height:14px;padding:0;font-size:12px;line-height:14px;border-radius:7px}.ant-badge-multiple-words{padding:0 8px}.ant-badge-dot{z-index:auto;width:6px;min-width:6px;height:6px;background:#ff4d4f;border-radius:100%;box-shadow:0 0 0 1px #fff}.ant-badge-count,.ant-badge-dot,.ant-badge .ant-scroll-number-custom-component{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0}.ant-badge-count.anticon-spin,.ant-badge-dot.anticon-spin,.ant-badge .ant-scroll-number-custom-component.anticon-spin{-webkit-animation:antBadgeLoadingCircle 1s linear infinite;animation:antBadgeLoadingCircle 1s linear infinite}.ant-badge-status{line-height:inherit;vertical-align:initial}.ant-badge-status-dot{position:relative;top:-1px;display:inline-block;width:6px;height:6px;vertical-align:middle;border-radius:50%}.ant-badge-status-success{background-color:#52c41a}.ant-badge-status-processing{position:relative;background-color:#1890ff}.ant-badge-status-processing:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;-webkit-animation:antStatusProcessing 1.2s ease-in-out infinite;animation:antStatusProcessing 1.2s ease-in-out infinite;content:""}.ant-badge-status-default{background-color:#d9d9d9}.ant-badge-status-error{background-color:#ff4d4f}.ant-badge-status-warning{background-color:#faad14}.ant-badge-status-magenta,.ant-badge-status-pink{background:#eb2f96}.ant-badge-status-red{background:#f5222d}.ant-badge-status-volcano{background:#fa541c}.ant-badge-status-orange{background:#fa8c16}.ant-badge-status-yellow{background:#fadb14}.ant-badge-status-gold{background:#faad14}.ant-badge-status-cyan{background:#13c2c2}.ant-badge-status-lime{background:#a0d911}.ant-badge-status-green{background:#52c41a}.ant-badge-status-blue{background:#1890ff}.ant-badge-status-geekblue{background:#2f54eb}.ant-badge-status-purple{background:#722ed1}.ant-badge-status-text{margin-left:8px;color:rgba(0,0,0,.85);font-size:14px}.ant-badge-zoom-appear,.ant-badge-zoom-enter{-webkit-animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-badge-zoom-leave{-webkit-animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-badge-not-a-wrapper .ant-badge-zoom-appear,.ant-badge-not-a-wrapper .ant-badge-zoom-enter{-webkit-animation:antNoWrapperZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);animation:antNoWrapperZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46)}.ant-badge-not-a-wrapper .ant-badge-zoom-leave{-webkit-animation:antNoWrapperZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);animation:antNoWrapperZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6)}.ant-badge-not-a-wrapper:not(.ant-badge-status){vertical-align:middle}.ant-badge-not-a-wrapper .ant-scroll-number-custom-component{transform:none}.ant-badge-not-a-wrapper .ant-scroll-number,.ant-badge-not-a-wrapper .ant-scroll-number-custom-component{position:relative;top:auto;display:block;transform-origin:50% 50%}@-webkit-keyframes antStatusProcessing{0%{transform:scale(.8);opacity:.5}to{transform:scale(2.4);opacity:0}}@keyframes antStatusProcessing{0%{transform:scale(.8);opacity:.5}to{transform:scale(2.4);opacity:0}}.ant-scroll-number{overflow:hidden}.ant-scroll-number-only{position:relative;display:inline-block;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-scroll-number-only,.ant-scroll-number-only>p.ant-scroll-number-only-unit{height:20px;-webkit-transform-style:preserve-3d;-webkit-backface-visibility:hidden}.ant-scroll-number-only>p.ant-scroll-number-only-unit{margin:0}.ant-scroll-number-symbol{vertical-align:top}@-webkit-keyframes antZoomBadgeIn{0%{transform:scale(0) translate(50%,-50%);opacity:0}to{transform:scale(1) translate(50%,-50%)}}@keyframes antZoomBadgeIn{0%{transform:scale(0) translate(50%,-50%);opacity:0}to{transform:scale(1) translate(50%,-50%)}}@-webkit-keyframes antZoomBadgeOut{0%{transform:scale(1) translate(50%,-50%)}to{transform:scale(0) translate(50%,-50%);opacity:0}}@keyframes antZoomBadgeOut{0%{transform:scale(1) translate(50%,-50%)}to{transform:scale(0) translate(50%,-50%);opacity:0}}@-webkit-keyframes antNoWrapperZoomBadgeIn{0%{transform:scale(0);opacity:0}to{transform:scale(1)}}@keyframes antNoWrapperZoomBadgeIn{0%{transform:scale(0);opacity:0}to{transform:scale(1)}}@-webkit-keyframes antNoWrapperZoomBadgeOut{0%{transform:scale(1)}to{transform:scale(0);opacity:0}}@keyframes antNoWrapperZoomBadgeOut{0%{transform:scale(1)}to{transform:scale(0);opacity:0}}@-webkit-keyframes antBadgeLoadingCircle{0%{transform-origin:50%}to{transform:translate(50%,-50%) rotate(1turn);transform-origin:50%}}@keyframes antBadgeLoadingCircle{0%{transform-origin:50%}to{transform:translate(50%,-50%) rotate(1turn);transform-origin:50%}}.ant-ribbon-wrapper{position:relative}.ant-ribbon{box-sizing:border-box;margin:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:absolute;top:8px;height:22px;padding:0 8px;color:#fff;line-height:22px;white-space:nowrap;background-color:#1890ff;border-radius:2px}.ant-ribbon-text{color:#fff}.ant-ribbon-corner{position:absolute;top:100%;width:8px;height:8px;color:currentColor;border:4px solid;transform:scaleY(.75);transform-origin:top}.ant-ribbon-corner:after{position:absolute;top:-4px;left:-4px;width:inherit;height:inherit;color:rgba(0,0,0,.25);border:inherit;content:""}.ant-ribbon-color-magenta,.ant-ribbon-color-pink{color:#eb2f96;background:#eb2f96}.ant-ribbon-color-red{color:#f5222d;background:#f5222d}.ant-ribbon-color-volcano{color:#fa541c;background:#fa541c}.ant-ribbon-color-orange{color:#fa8c16;background:#fa8c16}.ant-ribbon-color-yellow{color:#fadb14;background:#fadb14}.ant-ribbon-color-gold{color:#faad14;background:#faad14}.ant-ribbon-color-cyan{color:#13c2c2;background:#13c2c2}.ant-ribbon-color-lime{color:#a0d911;background:#a0d911}.ant-ribbon-color-green{color:#52c41a;background:#52c41a}.ant-ribbon-color-blue{color:#1890ff;background:#1890ff}.ant-ribbon-color-geekblue{color:#2f54eb;background:#2f54eb}.ant-ribbon-color-purple{color:#722ed1;background:#722ed1}.ant-ribbon.ant-ribbon-placement-end{right:-8px;border-bottom-right-radius:0}.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner{right:0;border-color:currentColor transparent transparent currentColor}.ant-ribbon.ant-ribbon-placement-start{left:-8px;border-bottom-left-radius:0}.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner{left:0;border-color:currentColor currentColor transparent transparent}.ant-badge-rtl{direction:rtl}.ant-badge-rtl .ant-badge-count,.ant-badge-rtl .ant-badge-dot,.ant-badge-rtl .ant-badge .ant-scroll-number-custom-component{right:auto;left:0;direction:ltr;transform:translate(-50%,-50%);transform-origin:0 0}.ant-badge-rtl.ant-badge .ant-scroll-number-custom-component{right:auto;left:0;transform:translate(-50%,-50%);transform-origin:0 0}.ant-badge-rtl .ant-badge-status-text{margin-right:8px;margin-left:0}.ant-badge-rtl .ant-badge-zoom-appear,.ant-badge-rtl .ant-badge-zoom-enter{-webkit-animation-name:antZoomBadgeInRtl;animation-name:antZoomBadgeInRtl}.ant-badge-rtl .ant-badge-zoom-leave{-webkit-animation-name:antZoomBadgeOutRtl;animation-name:antZoomBadgeOutRtl}.ant-badge-not-a-wrapper .ant-badge-count{transform:none}.ant-ribbon-rtl{direction:rtl}.ant-ribbon-rtl.ant-ribbon-placement-end{right:unset;left:-8px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner{right:unset;left:0}.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner,.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner:after{border-color:currentColor currentColor transparent transparent}.ant-ribbon-rtl.ant-ribbon-placement-start{right:-8px;left:unset;border-bottom-right-radius:0;border-bottom-left-radius:2px}.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner{right:0;left:unset}.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner,.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner:after{border-color:currentColor transparent transparent currentColor}@-webkit-keyframes antZoomBadgeInRtl{0%{transform:scale(0) translate(-50%,-50%);opacity:0}to{transform:scale(1) translate(-50%,-50%)}}@keyframes antZoomBadgeInRtl{0%{transform:scale(0) translate(-50%,-50%);opacity:0}to{transform:scale(1) translate(-50%,-50%)}}@-webkit-keyframes antZoomBadgeOutRtl{0%{transform:scale(1) translate(-50%,-50%)}to{transform:scale(0) translate(-50%,-50%);opacity:0}}@keyframes antZoomBadgeOutRtl{0%{transform:scale(1) translate(-50%,-50%)}to{transform:scale(0) translate(-50%,-50%);opacity:0}}.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";color:rgba(0,0,0,.45);font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:rgba(0,0,0,.45);transition:color .3s}.ant-breadcrumb a:hover{color:#40a9ff}.ant-breadcrumb>span:last-child,.ant-breadcrumb>span:last-child a{color:rgba(0,0,0,.85)}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:rgba(0,0,0,.45)}.ant-breadcrumb-link>.anticon+a,.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.ant-menu-item-danger.ant-menu-item,.ant-menu-item-danger.ant-menu-item-active,.ant-menu-item-danger.ant-menu-item:hover{color:#ff4d4f}.ant-menu-item-danger.ant-menu-item:active{background:#fff1f0}.ant-menu-item-danger.ant-menu-item-selected,.ant-menu-item-danger.ant-menu-item-selected>a,.ant-menu-item-danger.ant-menu-item-selected>a:hover{color:#ff4d4f}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{background-color:#fff1f0}.ant-menu-inline .ant-menu-item-danger.ant-menu-item:after{border-right-color:#ff4d4f}.ant-menu-dark .ant-menu-item-danger.ant-menu-item,.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover,.ant-menu-dark .ant-menu-item-danger.ant-menu-item>a{color:#ff4d4f}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{color:#fff;background-color:#ff4d4f}.ant-menu{box-sizing:border-box;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum","tnum";margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;line-height:0;text-align:left;list-style:none;background:#fff;outline:none;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s}.ant-menu:after,.ant-menu:before{display:table;content:""}.ant-menu:after{clear:both}.ant-menu.ant-menu-root:focus-visible{box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-menu ol,.ant-menu ul{margin:0;padding:0;list-style:none}.ant-menu-overflow{display:flex}.ant-menu-overflow-item{flex:none}.ant-menu-hidden,.ant-menu-submenu-hidden{display:none}.ant-menu-item-group-title{height:1.5715;padding:8px 16px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5715;transition:all .3s}.ant-menu-horizontal .ant-menu-submenu{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu,.ant-menu-submenu-inline{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-selected{color:#1890ff}.ant-menu-item:active,.ant-menu-submenu-title:active{background:#e6f7ff}.ant-menu-submenu .ant-menu-sub{cursor:auto;transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item a{color:rgba(0,0,0,.85)}.ant-menu-item a:hover{color:#1890ff}.ant-menu-item a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:initial;content:""}.ant-menu-item>.ant-badge a{color:rgba(0,0,0,.85)}.ant-menu-item>.ant-badge a:hover{color:#1890ff}.ant-menu-item-divider{height:1px;overflow:hidden;line-height:0;background-color:#f0f0f0}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{margin-top:-1px}.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:initial}.ant-menu-item-selected,.ant-menu-item-selected a,.ant-menu-item-selected a:hover{color:#1890ff}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#e6f7ff}.ant-menu-inline,.ant-menu-vertical,.ant-menu-vertical-left{border-right:1px solid #f0f0f0}.ant-menu-vertical-right{border-left:1px solid #f0f0f0}.ant-menu-vertical-left.ant-menu-sub,.ant-menu-vertical-right.ant-menu-sub,.ant-menu-vertical.ant-menu-sub{min-width:160px;max-height:calc(100vh - 100px);padding:0;overflow:hidden;border-right:0}.ant-menu-vertical-left.ant-menu-sub:not([class*=-active]),.ant-menu-vertical-right.ant-menu-sub:not([class*=-active]),.ant-menu-vertical.ant-menu-sub:not([class*=-active]){overflow-x:hidden;overflow-y:auto}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item,.ant-menu-vertical.ant-menu-sub .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical.ant-menu-sub .ant-menu-item:after{border-right:0}.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu{transform-origin:0 0}.ant-menu-horizontal.ant-menu-sub{min-width:114px}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu-title{transition:border-color .3s,background .3s}.ant-menu-item,.ant-menu-submenu-title{position:relative;display:block;margin:0;padding:0 20px;white-space:nowrap;cursor:pointer;transition:border-color .3s,background .3s,padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .ant-menu-item-icon,.ant-menu-item .anticon,.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-submenu-title .anticon{min-width:14px;font-size:14px;transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1),color .3s}.ant-menu-item .ant-menu-item-icon+span,.ant-menu-item .anticon+span,.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu-submenu-title .anticon+span{margin-left:10px;opacity:1;transition:opacity .3s cubic-bezier(.645,.045,.355,1),margin .3s,color .3s}.ant-menu-item .ant-menu-item-icon.svg,.ant-menu-submenu-title .ant-menu-item-icon.svg{vertical-align:-.125em}.ant-menu-item.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-submenu-title.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-submenu-title.ant-menu-item-only-child>.anticon{margin-right:0}.ant-menu-item:focus-visible,.ant-menu-submenu-title:focus-visible{box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-menu>.ant-menu-item-divider{height:1px;margin:1px 0;padding:0;overflow:hidden;line-height:0;background-color:#f0f0f0}.ant-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;border-radius:2px;box-shadow:none;transform-origin:0 0}.ant-menu-submenu-popup:before{position:absolute;top:-7px;right:0;bottom:0;left:0;z-index:-1;width:100%;height:100%;opacity:.0001;content:" "}.ant-menu-submenu-placement-rightTop:before{top:0;left:-7px}.ant-menu-submenu>.ant-menu{background-color:#fff;border-radius:2px}.ant-menu-submenu>.ant-menu-submenu-title:after{transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-popup>.ant-menu{background-color:#fff}.ant-menu-submenu-arrow,.ant-menu-submenu-expand-icon{position:absolute;top:50%;right:16px;width:10px;color:rgba(0,0,0,.85);transform:translateY(-50%);transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-arrow:after,.ant-menu-submenu-arrow:before{position:absolute;width:6px;height:1.5px;background-color:currentColor;border-radius:2px;transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-submenu-arrow:before{transform:rotate(45deg) translateY(-2.5px)}.ant-menu-submenu-arrow:after{transform:rotate(-45deg) translateY(2.5px)}.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-expand-icon{color:#1890ff}.ant-menu-inline-collapsed .ant-menu-submenu-arrow:before,.ant-menu-submenu-inline .ant-menu-submenu-arrow:before{transform:rotate(-45deg) translateX(2.5px)}.ant-menu-inline-collapsed .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline .ant-menu-submenu-arrow:after{transform:rotate(45deg) translateX(-2.5px)}.ant-menu-submenu-horizontal .ant-menu-submenu-arrow{display:none}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow{transform:translateY(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{transform:rotate(-45deg) translateX(-2.5px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{transform:rotate(45deg) translateX(2.5px)}.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected,.ant-menu-vertical .ant-menu-submenu-selected{color:#1890ff}.ant-menu-horizontal{line-height:46px;border:0;border-bottom:1px solid #f0f0f0;box-shadow:none}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu{margin-top:-1px;margin-bottom:0;padding:0 20px}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover{color:#1890ff}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover:after{border-bottom:2px solid #1890ff}.ant-menu-horizontal>.ant-menu-item,.ant-menu-horizontal>.ant-menu-submenu{position:relative;top:1px;display:inline-block;vertical-align:bottom}.ant-menu-horizontal>.ant-menu-item:after,.ant-menu-horizontal>.ant-menu-submenu:after{position:absolute;right:20px;bottom:0;left:20px;border-bottom:2px solid transparent;transition:border-color .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-horizontal>.ant-menu-submenu>.ant-menu-submenu-title{padding:0}.ant-menu-horizontal>.ant-menu-item a{color:rgba(0,0,0,.85)}.ant-menu-horizontal>.ant-menu-item a:hover{color:#1890ff}.ant-menu-horizontal>.ant-menu-item a:before{bottom:-2px}.ant-menu-horizontal>.ant-menu-item-selected a{color:#1890ff}.ant-menu-horizontal:after{display:block;clear:both;height:0;content:"\20"}.ant-menu-inline .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical .ant-menu-item{position:relative}.ant-menu-inline .ant-menu-item:after,.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-vertical .ant-menu-item:after{position:absolute;top:0;right:0;bottom:0;border-right:3px solid #1890ff;transform:scaleY(.0001);opacity:0;transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1);content:""}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-vertical-right .ant-menu-item,.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-item,.ant-menu-vertical .ant-menu-submenu-title{height:40px;margin-top:4px;margin-bottom:4px;padding:0 16px;overflow:hidden;line-height:40px;text-overflow:ellipsis}.ant-menu-inline .ant-menu-submenu,.ant-menu-vertical-left .ant-menu-submenu,.ant-menu-vertical-right .ant-menu-submenu,.ant-menu-vertical .ant-menu-submenu{padding-bottom:.02px}.ant-menu-inline .ant-menu-item:not(:last-child),.ant-menu-vertical-left .ant-menu-item:not(:last-child),.ant-menu-vertical-right .ant-menu-item:not(:last-child),.ant-menu-vertical .ant-menu-item:not(:last-child){margin-bottom:8px}.ant-menu-inline>.ant-menu-item,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-left>.ant-menu-item,.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-right>.ant-menu-item,.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px}.ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline{width:100%}.ant-menu-inline .ant-menu-item-selected:after,.ant-menu-inline .ant-menu-selected:after{transform:scaleY(1);opacity:1;transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title{width:calc(100% + 1px)}.ant-menu-inline .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-inline .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline.ant-menu-root .ant-menu-item,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title{display:flex;align-items:center;transition:border-color .3s,background .3s,padding .1s cubic-bezier(.215,.61,.355,1)}.ant-menu-inline.ant-menu-root .ant-menu-item>.ant-menu-title-content,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title>.ant-menu-title-content{flex:auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.ant-menu-inline.ant-menu-root .ant-menu-item>*,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title>*{flex:none}.ant-menu.ant-menu-inline-collapsed{width:80px}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title{left:0;padding:0 calc(50% - 8px);text-overflow:clip}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:0}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span{display:inline-block;opacity:0}.ant-menu.ant-menu-inline-collapsed .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed .anticon{display:inline-block}.ant-menu.ant-menu-inline-collapsed-tooltip{pointer-events:none}.ant-menu.ant-menu-inline-collapsed-tooltip .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed-tooltip .anticon{display:none}.ant-menu.ant-menu-inline-collapsed-tooltip a{color:hsla(0,0%,100%,.85)}.ant-menu.ant-menu-inline-collapsed .ant-menu-item-group-title{padding-right:4px;padding-left:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-menu-item-group-list{margin:0;padding:0}.ant-menu-item-group-list .ant-menu-item,.ant-menu-item-group-list .ant-menu-submenu-title{padding:0 16px 0 28px}.ant-menu-root.ant-menu-inline,.ant-menu-root.ant-menu-vertical,.ant-menu-root.ant-menu-vertical-left,.ant-menu-root.ant-menu-vertical-right{box-shadow:none}.ant-menu-root.ant-menu-inline-collapsed .ant-menu-item>.ant-menu-inline-collapsed-noicon,.ant-menu-root.ant-menu-inline-collapsed .ant-menu-submenu .ant-menu-submenu-title>.ant-menu-inline-collapsed-noicon{font-size:16px;text-align:center}.ant-menu-sub.ant-menu-inline{padding:0;background:#fafafa;border-radius:0;box-shadow:none}.ant-menu-sub.ant-menu-inline>.ant-menu-item,.ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc}.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-left:32px}.ant-menu-item-disabled,.ant-menu-submenu-disabled{color:rgba(0,0,0,.25)!important;background:none;cursor:not-allowed}.ant-menu-item-disabled:after,.ant-menu-submenu-disabled:after{border-color:transparent!important}.ant-menu-item-disabled a,.ant-menu-submenu-disabled a{color:rgba(0,0,0,.25)!important;pointer-events:none}.ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-submenu-disabled>.ant-menu-submenu-title{color:rgba(0,0,0,.25)!important;cursor:not-allowed}.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:rgba(0,0,0,.25)!important}.ant-layout-header .ant-menu{line-height:inherit}.ant-menu-light .ant-menu-item-active,.ant-menu-light .ant-menu-item:hover,.ant-menu-light .ant-menu-submenu-active,.ant-menu-light .ant-menu-submenu-title:hover,.ant-menu-light .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open{color:#1890ff}.ant-menu-dark .ant-menu-sub,.ant-menu.ant-menu-dark,.ant-menu.ant-menu-dark .ant-menu-sub{color:hsla(0,0%,100%,.65);background:#001529}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:.45;transition:all .3s}.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark.ant-menu-submenu-popup{background:transparent}.ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#000c17}.ant-menu-dark.ant-menu-horizontal{border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu{top:0;margin-top:0;padding:0 20px;border-color:#001529;border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item:hover{background-color:#1890ff}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item>a:before{bottom:0}.ant-menu-dark .ant-menu-item,.ant-menu-dark .ant-menu-item-group-title,.ant-menu-dark .ant-menu-item>a,.ant-menu-dark .ant-menu-item>span>a{color:hsla(0,0%,100%,.65)}.ant-menu-dark.ant-menu-inline,.ant-menu-dark.ant-menu-vertical,.ant-menu-dark.ant-menu-vertical-left,.ant-menu-dark.ant-menu-vertical-right{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item,.ant-menu-dark.ant-menu-vertical .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical .ant-menu-item:after{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title{width:100%}.ant-menu-dark .ant-menu-item-active,.ant-menu-dark .ant-menu-item:hover,.ant-menu-dark .ant-menu-submenu-active,.ant-menu-dark .ant-menu-submenu-open,.ant-menu-dark .ant-menu-submenu-selected,.ant-menu-dark .ant-menu-submenu-title:hover{color:#fff;background-color:initial}.ant-menu-dark .ant-menu-item-active>a,.ant-menu-dark .ant-menu-item-active>span>a,.ant-menu-dark .ant-menu-item:hover>a,.ant-menu-dark .ant-menu-item:hover>span>a,.ant-menu-dark .ant-menu-submenu-active>a,.ant-menu-dark .ant-menu-submenu-active>span>a,.ant-menu-dark .ant-menu-submenu-open>a,.ant-menu-dark .ant-menu-submenu-open>span>a,.ant-menu-dark .ant-menu-submenu-selected>a,.ant-menu-dark .ant-menu-submenu-selected>span>a,.ant-menu-dark .ant-menu-submenu-title:hover>a,.ant-menu-dark .ant-menu-submenu-title:hover>span>a{color:#fff}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{opacity:1}.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark .ant-menu-item:hover{background-color:initial}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#1890ff}.ant-menu-dark .ant-menu-item-selected{color:#fff;border-right:0}.ant-menu-dark .ant-menu-item-selected:after{border-right:0}.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon,.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon+span,.ant-menu-dark .ant-menu-item-selected .anticon,.ant-menu-dark .ant-menu-item-selected .anticon+span,.ant-menu-dark .ant-menu-item-selected>a,.ant-menu-dark .ant-menu-item-selected>a:hover,.ant-menu-dark .ant-menu-item-selected>span>a,.ant-menu-dark .ant-menu-item-selected>span>a:hover{color:#fff}.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected,.ant-menu.ant-menu-dark .ant-menu-item-selected{background-color:#1890ff}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-item-disabled>a,.ant-menu-dark .ant-menu-item-disabled>span>a,.ant-menu-dark .ant-menu-submenu-disabled,.ant-menu-dark .ant-menu-submenu-disabled>a,.ant-menu-dark .ant-menu-submenu-disabled>span>a{color:hsla(0,0%,100%,.35)!important;opacity:.8}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title{color:hsla(0,0%,100%,.35)!important}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:hsla(0,0%,100%,.35)!important}.ant-menu.ant-menu-rtl{direction:rtl;text-align:right}.ant-menu-rtl .ant-menu-item-group-title{text-align:right}.ant-menu-rtl.ant-menu-inline,.ant-menu-rtl.ant-menu-vertical{border-right:none;border-left:1px solid #f0f0f0}.ant-menu-rtl.ant-menu-dark.ant-menu-inline,.ant-menu-rtl.ant-menu-dark.ant-menu-vertical{border-left:none}.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu{transform-origin:top right}.ant-menu-rtl .ant-menu-item .ant-menu-item-icon,.ant-menu-rtl .ant-menu-item .anticon,.ant-menu-rtl .ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-rtl .ant-menu-submenu-title .anticon{margin-right:auto;margin-left:10px}.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.anticon{margin-left:0}.ant-menu-submenu-rtl.ant-menu-submenu-popup{transform-origin:100% 0}.ant-menu-rtl .ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow{right:auto;left:16px}.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{transform:rotate(-45deg) translateY(-2px)}.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{transform:rotate(45deg) translateY(2px)}.ant-menu-rtl.ant-menu-inline .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical .ant-menu-item:after{right:auto;left:0}.ant-menu-rtl.ant-menu-inline .ant-menu-item,.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical .ant-menu-item,.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title{text-align:right}.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title{padding-right:0;padding-left:34px}.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title{padding-right:16px;padding-left:34px}.ant-menu-rtl.ant-menu-inline-collapsed.ant-menu-vertical .ant-menu-submenu-title{padding:0 calc(50% - 8px)}.ant-menu-rtl .ant-menu-item-group-list .ant-menu-item,.ant-menu-rtl .ant-menu-item-group-list .ant-menu-submenu-title{padding:0 28px 0 16px}.ant-menu-sub.ant-menu-inline{border:0}.ant-menu-rtl.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-right:32px;padding-left:0}.ant-tooltip{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:absolute;z-index:1070;display:block;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;visibility:visible}.ant-tooltip-hidden{display:none}.ant-tooltip-placement-top,.ant-tooltip-placement-topLeft,.ant-tooltip-placement-topRight{padding-bottom:8px}.ant-tooltip-placement-right,.ant-tooltip-placement-rightBottom,.ant-tooltip-placement-rightTop{padding-left:8px}.ant-tooltip-placement-bottom,.ant-tooltip-placement-bottomLeft,.ant-tooltip-placement-bottomRight{padding-top:8px}.ant-tooltip-placement-left,.ant-tooltip-placement-leftBottom,.ant-tooltip-placement-leftTop{padding-right:8px}.ant-tooltip-inner{min-width:30px;min-height:32px;padding:6px 8px;color:#fff;text-align:left;text-decoration:none;word-wrap:break-word;background-color:rgba(0,0,0,.75);border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-tooltip-arrow{position:absolute;display:block;width:13.07106781px;height:13.07106781px;overflow:hidden;background:transparent;pointer-events:none}.ant-tooltip-arrow-content{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:5px;height:5px;margin:auto;background-color:rgba(0,0,0,.75);content:"";pointer-events:auto}.ant-tooltip-placement-top .ant-tooltip-arrow,.ant-tooltip-placement-topLeft .ant-tooltip-arrow,.ant-tooltip-placement-topRight .ant-tooltip-arrow{bottom:-5.07106781px}.ant-tooltip-placement-top .ant-tooltip-arrow-content,.ant-tooltip-placement-topLeft .ant-tooltip-arrow-content,.ant-tooltip-placement-topRight .ant-tooltip-arrow-content{box-shadow:3px 3px 7px rgba(0,0,0,.07);transform:translateY(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-top .ant-tooltip-arrow{left:50%;transform:translateX(-50%)}.ant-tooltip-placement-topLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-topRight .ant-tooltip-arrow{right:13px}.ant-tooltip-placement-right .ant-tooltip-arrow,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow,.ant-tooltip-placement-rightTop .ant-tooltip-arrow{left:-5.07106781px}.ant-tooltip-placement-right .ant-tooltip-arrow-content,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content,.ant-tooltip-placement-rightTop .ant-tooltip-arrow-content{box-shadow:-3px 3px 7px rgba(0,0,0,.07);transform:translateX(6.53553391px) rotate(45deg)}.ant-tooltip-placement-right .ant-tooltip-arrow{top:50%;transform:translateY(-50%)}.ant-tooltip-placement-rightTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-left .ant-tooltip-arrow,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow,.ant-tooltip-placement-leftTop .ant-tooltip-arrow{right:-5.07106781px}.ant-tooltip-placement-left .ant-tooltip-arrow-content,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow-content,.ant-tooltip-placement-leftTop .ant-tooltip-arrow-content{box-shadow:3px -3px 7px rgba(0,0,0,.07);transform:translateX(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-left .ant-tooltip-arrow{top:50%;transform:translateY(-50%)}.ant-tooltip-placement-leftTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-bottom .ant-tooltip-arrow,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{top:-5.07106781px}.ant-tooltip-placement-bottom .ant-tooltip-arrow-content,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow-content,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow-content{box-shadow:-3px -3px 7px rgba(0,0,0,.07);transform:translateY(6.53553391px) rotate(45deg)}.ant-tooltip-placement-bottom .ant-tooltip-arrow{left:50%;transform:translateX(-50%)}.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{right:13px}.ant-tooltip-magenta .ant-tooltip-arrow-content,.ant-tooltip-magenta .ant-tooltip-inner,.ant-tooltip-pink .ant-tooltip-arrow-content,.ant-tooltip-pink .ant-tooltip-inner{background-color:#eb2f96}.ant-tooltip-red .ant-tooltip-arrow-content,.ant-tooltip-red .ant-tooltip-inner{background-color:#f5222d}.ant-tooltip-volcano .ant-tooltip-arrow-content,.ant-tooltip-volcano .ant-tooltip-inner{background-color:#fa541c}.ant-tooltip-orange .ant-tooltip-arrow-content,.ant-tooltip-orange .ant-tooltip-inner{background-color:#fa8c16}.ant-tooltip-yellow .ant-tooltip-arrow-content,.ant-tooltip-yellow .ant-tooltip-inner{background-color:#fadb14}.ant-tooltip-gold .ant-tooltip-arrow-content,.ant-tooltip-gold .ant-tooltip-inner{background-color:#faad14}.ant-tooltip-cyan .ant-tooltip-arrow-content,.ant-tooltip-cyan .ant-tooltip-inner{background-color:#13c2c2}.ant-tooltip-lime .ant-tooltip-arrow-content,.ant-tooltip-lime .ant-tooltip-inner{background-color:#a0d911}.ant-tooltip-green .ant-tooltip-arrow-content,.ant-tooltip-green .ant-tooltip-inner{background-color:#52c41a}.ant-tooltip-blue .ant-tooltip-arrow-content,.ant-tooltip-blue .ant-tooltip-inner{background-color:#1890ff}.ant-tooltip-geekblue .ant-tooltip-arrow-content,.ant-tooltip-geekblue .ant-tooltip-inner{background-color:#2f54eb}.ant-tooltip-purple .ant-tooltip-arrow-content,.ant-tooltip-purple .ant-tooltip-inner{background-color:#722ed1}.ant-tooltip-rtl{direction:rtl}.ant-tooltip-rtl .ant-tooltip-inner{text-align:right}.ant-dropdown-menu-item.ant-dropdown-menu-item-danger{color:#ff4d4f}.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover{color:#fff;background-color:#ff4d4f}.ant-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-dropdown:before{position:absolute;top:-4px;right:0;bottom:-4px;left:-7px;z-index:-9999;opacity:.0001;content:" "}.ant-dropdown-wrap{position:relative}.ant-dropdown-wrap .ant-btn>.anticon-down{font-size:10px}.ant-dropdown-wrap .anticon-down:before{transition:transform .2s}.ant-dropdown-wrap-open .anticon-down:before{transform:rotate(180deg)}.ant-dropdown-hidden,.ant-dropdown-menu-hidden,.ant-dropdown-menu-submenu-hidden{display:none}.ant-dropdown-show-arrow.ant-dropdown-placement-topCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-topRight{padding-bottom:10px}.ant-dropdown-show-arrow.ant-dropdown-placement-bottomCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight{padding-top:10px}.ant-dropdown-arrow{position:absolute;z-index:1;display:block;width:8.48528137px;height:8.48528137px;background:transparent;border-style:solid;border-width:4.24264069px;transform:rotate(45deg)}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow,.ant-dropdown-placement-topLeft>.ant-dropdown-arrow,.ant-dropdown-placement-topRight>.ant-dropdown-arrow{bottom:6.2px;border-color:transparent #fff #fff transparent;box-shadow:3px 3px 7px rgba(0,0,0,.07)}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow{left:50%;transform:translateX(-50%) rotate(45deg)}.ant-dropdown-placement-topLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-topRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow,.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow,.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{top:6px;border-color:#fff transparent transparent #fff;box-shadow:-2px -2px 5px rgba(0,0,0,.06)}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow{left:50%;transform:translateX(-50%) rotate(45deg)}.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-menu{position:relative;margin:0;padding:4px 0;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-dropdown-menu-item-group-title{padding:5px 12px;color:rgba(0,0,0,.45);transition:all .3s}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;box-shadow:none;transform-origin:0 0}.ant-dropdown-menu-submenu-popup li,.ant-dropdown-menu-submenu-popup ul{list-style:none}.ant-dropdown-menu-submenu-popup ul{margin-right:.3em;margin-left:.3em}.ant-dropdown-menu-item{position:relative;display:flex;align-items:center}.ant-dropdown-menu-item-icon{min-width:12px;margin-right:8px;font-size:12px}.ant-dropdown-menu-title-content{flex:auto}.ant-dropdown-menu-title-content>a{color:inherit;transition:all .3s}.ant-dropdown-menu-title-content>a:hover{color:inherit}.ant-dropdown-menu-title-content>a:after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:rgba(0,0,0,.85);font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;cursor:pointer;transition:all .3s}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-submenu-title-selected{color:#1890ff;background-color:#e6f7ff}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:#f5f5f5}.ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu-title-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu-title-disabled:hover{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-item-disabled a,.ant-dropdown-menu-submenu-title-disabled a{pointer-events:none}.ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:#f0f0f0}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon{position:absolute;right:8px}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon{margin-right:0!important;color:rgba(0,0,0,.45);font-size:10px;font-style:normal}.ant-dropdown-menu-item-group-list{margin:0 8px;padding:0;list-style:none}.ant-dropdown-menu-submenu-title{padding-right:24px}.ant-dropdown-menu-submenu-vertical{position:relative}.ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{position:absolute;top:0;left:100%;min-width:100%;margin-left:4px;transform-origin:0 0}.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title{color:#1890ff}.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topRight,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topRight{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topRight{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-dropdown-button>.anticon.anticon-down,.ant-dropdown-link>.anticon.anticon-down,.ant-dropdown-trigger>.anticon.anticon-down{font-size:10px;vertical-align:initial}.ant-dropdown-button{white-space:nowrap}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only){padding-right:8px;padding-left:8px}.ant-dropdown-menu-dark,.ant-dropdown-menu-dark .ant-dropdown-menu{background:#001529}.ant-dropdown-menu-dark .ant-dropdown-menu-item,.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after{color:hsla(0,0%,100%,.65)}.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover{color:#fff;background:transparent}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected>a{color:#fff;background:#1890ff}.ant-dropdown-rtl{direction:rtl}.ant-dropdown-rtl.ant-dropdown:before{right:-7px;left:0}.ant-dropdown-menu.ant-dropdown-menu-rtl,.ant-dropdown-rtl .ant-dropdown-menu-item-group-title{direction:rtl;text-align:right}.ant-dropdown-menu-submenu-popup.ant-dropdown-menu-submenu-rtl{transform-origin:100% 0}.ant-dropdown-rtl .ant-dropdown-menu-item,.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup li,.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup ul,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{text-align:right}.ant-dropdown-rtl .ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-item>span>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>span>.anticon:first-child{margin-right:0;margin-left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow{right:auto;left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{margin-left:0!important;transform:scaleX(-1)}.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{padding-right:12px;padding-left:24px}.ant-dropdown-rtl .ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{right:100%;left:0;margin-right:4px;margin-left:0}.ant-btn{line-height:1.5715;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;box-shadow:0 2px 0 rgba(0,0,0,.015);cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;touch-action:manipulation;height:32px;padding:4px 15px;font-size:14px;border-radius:2px;color:rgba(0,0,0,.85);background:#fff;border:1px solid #d9d9d9}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;box-shadow:none}.ant-btn[disabled]{cursor:not-allowed}.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg{height:40px;padding:6.4px 15px;font-size:16px;border-radius:2px}.ant-btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:2px}.ant-btn>a:only-child{color:currentColor}.ant-btn>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:focus,.ant-btn:hover{color:#40a9ff;background:#fff;border-color:#40a9ff}.ant-btn:focus>a:only-child,.ant-btn:hover>a:only-child{color:currentColor}.ant-btn:focus>a:only-child:after,.ant-btn:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:active{color:#096dd9;background:#fff;border-color:#096dd9}.ant-btn:active>a:only-child{color:currentColor}.ant-btn:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn[disabled],.ant-btn[disabled]:active,.ant-btn[disabled]:focus,.ant-btn[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn[disabled]:active>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]>a:only-child{color:currentColor}.ant-btn[disabled]:active>a:only-child:after,.ant-btn[disabled]:focus>a:only-child:after,.ant-btn[disabled]:hover>a:only-child:after,.ant-btn[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:active,.ant-btn:focus,.ant-btn:hover{text-decoration:none;background:#fff}.ant-btn>span{display:inline-block}.ant-btn-primary{color:#fff;background:#1890ff;border-color:#1890ff;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:focus,.ant-btn-primary:hover{color:#fff;background:#40a9ff;border-color:#40a9ff}.ant-btn-primary:focus>a:only-child,.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-primary:focus>a:only-child:after,.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:active{color:#fff;background:#096dd9;border-color:#096dd9}.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary[disabled],.ant-btn-primary[disabled]:active,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#40a9ff;border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#d9d9d9}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#40a9ff}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#d9d9d9}.ant-btn-group .ant-btn-primary+.ant-btn-primary,.ant-btn-group .ant-btn-primary:last-child:not(:first-child){border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled],.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled]{border-left-color:#d9d9d9}.ant-btn-ghost{color:rgba(0,0,0,.85);background:transparent;border-color:#d9d9d9}.ant-btn-ghost>a:only-child{color:currentColor}.ant-btn-ghost>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:focus,.ant-btn-ghost:hover{color:#40a9ff;background:transparent;border-color:#40a9ff}.ant-btn-ghost:focus>a:only-child,.ant-btn-ghost:hover>a:only-child{color:currentColor}.ant-btn-ghost:focus>a:only-child:after,.ant-btn-ghost:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:active{color:#096dd9;background:transparent;border-color:#096dd9}.ant-btn-ghost:active>a:only-child{color:currentColor}.ant-btn-ghost:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost[disabled],.ant-btn-ghost[disabled]:active,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-ghost[disabled]:active>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]>a:only-child{color:currentColor}.ant-btn-ghost[disabled]:active>a:only-child:after,.ant-btn-ghost[disabled]:focus>a:only-child:after,.ant-btn-ghost[disabled]:hover>a:only-child:after,.ant-btn-ghost[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed{color:rgba(0,0,0,.85);background:#fff;border-color:#d9d9d9;border-style:dashed}.ant-btn-dashed>a:only-child{color:currentColor}.ant-btn-dashed>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:focus,.ant-btn-dashed:hover{color:#40a9ff;background:#fff;border-color:#40a9ff}.ant-btn-dashed:focus>a:only-child,.ant-btn-dashed:hover>a:only-child{color:currentColor}.ant-btn-dashed:focus>a:only-child:after,.ant-btn-dashed:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:active{color:#096dd9;background:#fff;border-color:#096dd9}.ant-btn-dashed:active>a:only-child{color:currentColor}.ant-btn-dashed:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed[disabled],.ant-btn-dashed[disabled]:active,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-dashed[disabled]:active>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]>a:only-child{color:currentColor}.ant-btn-dashed[disabled]:active>a:only-child:after,.ant-btn-dashed[disabled]:focus>a:only-child:after,.ant-btn-dashed[disabled]:hover>a:only-child:after,.ant-btn-dashed[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger{color:#fff;background:#ff4d4f;border-color:#ff4d4f;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:focus,.ant-btn-danger:hover{color:#fff;background:#ff7875;border-color:#ff7875}.ant-btn-danger:focus>a:only-child,.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-danger:focus>a:only-child:after,.ant-btn-danger:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:active{color:#fff;background:#d9363e;border-color:#d9363e}.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger[disabled],.ant-btn-danger[disabled]:active,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-danger[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link{color:#1890ff;background:transparent;border-color:transparent;box-shadow:none}.ant-btn-link>a:only-child{color:currentColor}.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:focus,.ant-btn-link:hover{color:#40a9ff;background:transparent;border-color:#40a9ff}.ant-btn-link:focus>a:only-child,.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-link:focus>a:only-child:after,.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:active{color:#096dd9;background:transparent;border-color:#096dd9}.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link[disabled],.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{background:#f5f5f5;border-color:#d9d9d9}.ant-btn-link:hover{background:transparent}.ant-btn-link:active,.ant-btn-link:focus,.ant-btn-link:hover{border-color:transparent}.ant-btn-link[disabled],.ant-btn-link[disabled]:active,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background:transparent;border-color:transparent;text-shadow:none;box-shadow:none}.ant-btn-link[disabled]:active>a:only-child,.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text{color:rgba(0,0,0,.85);background:transparent;border-color:transparent;box-shadow:none}.ant-btn-text>a:only-child{color:currentColor}.ant-btn-text>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text:focus,.ant-btn-text:hover{color:#40a9ff;background:transparent;border-color:#40a9ff}.ant-btn-text:focus>a:only-child,.ant-btn-text:hover>a:only-child{color:currentColor}.ant-btn-text:focus>a:only-child:after,.ant-btn-text:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text:active{color:#096dd9;background:transparent;border-color:#096dd9}.ant-btn-text:active>a:only-child{color:currentColor}.ant-btn-text:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text[disabled],.ant-btn-text[disabled]:active,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:hover{background:#f5f5f5;border-color:#d9d9d9}.ant-btn-text:focus,.ant-btn-text:hover{color:rgba(0,0,0,.85);background:rgba(0,0,0,.018);border-color:transparent}.ant-btn-text:active{color:rgba(0,0,0,.85);background:rgba(0,0,0,.028);border-color:transparent}.ant-btn-text[disabled],.ant-btn-text[disabled]:active,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:hover{color:rgba(0,0,0,.25);background:transparent;border-color:transparent;text-shadow:none;box-shadow:none}.ant-btn-text[disabled]:active>a:only-child,.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-text[disabled]>a:only-child{color:currentColor}.ant-btn-text[disabled]:active>a:only-child:after,.ant-btn-text[disabled]:focus>a:only-child:after,.ant-btn-text[disabled]:hover>a:only-child:after,.ant-btn-text[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous{color:#ff4d4f;background:#fff;border-color:#ff4d4f}.ant-btn-dangerous>a:only-child{color:currentColor}.ant-btn-dangerous>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous:focus,.ant-btn-dangerous:hover{color:#ff7875;background:#fff;border-color:#ff7875}.ant-btn-dangerous:focus>a:only-child,.ant-btn-dangerous:hover>a:only-child{color:currentColor}.ant-btn-dangerous:focus>a:only-child:after,.ant-btn-dangerous:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous:active{color:#d9363e;background:#fff;border-color:#d9363e}.ant-btn-dangerous:active>a:only-child{color:currentColor}.ant-btn-dangerous:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous[disabled],.ant-btn-dangerous[disabled]:active,.ant-btn-dangerous[disabled]:focus,.ant-btn-dangerous[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-dangerous[disabled]:active>a:only-child,.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-dangerous[disabled]>a:only-child{color:currentColor}.ant-btn-dangerous[disabled]:active>a:only-child:after,.ant-btn-dangerous[disabled]:focus>a:only-child:after,.ant-btn-dangerous[disabled]:hover>a:only-child:after,.ant-btn-dangerous[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary{color:#fff;background:#ff4d4f;border-color:#ff4d4f;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px 0 rgba(0,0,0,.045)}.ant-btn-dangerous.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary:focus,.ant-btn-dangerous.ant-btn-primary:hover{color:#fff;background:#ff7875;border-color:#ff7875}.ant-btn-dangerous.ant-btn-primary:focus>a:only-child,.ant-btn-dangerous.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-primary:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary:active{color:#fff;background:#d9363e;border-color:#d9363e}.ant-btn-dangerous.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary[disabled],.ant-btn-dangerous.ant-btn-primary[disabled]:active,.ant-btn-dangerous.ant-btn-primary[disabled]:focus,.ant-btn-dangerous.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link{color:#ff4d4f;background:transparent;border-color:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link:focus,.ant-btn-dangerous.ant-btn-link:hover{color:#40a9ff;border-color:#40a9ff}.ant-btn-dangerous.ant-btn-link:active{color:#096dd9;border-color:#096dd9}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:active,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:hover{background:#f5f5f5;border-color:#d9d9d9}.ant-btn-dangerous.ant-btn-link:focus,.ant-btn-dangerous.ant-btn-link:hover{color:#ff7875;background:transparent;border-color:transparent}.ant-btn-dangerous.ant-btn-link:focus>a:only-child,.ant-btn-dangerous.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-link:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link:active{color:#d9363e;background:transparent;border-color:transparent}.ant-btn-dangerous.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:active,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background:transparent;border-color:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text{color:#ff4d4f;background:transparent;border-color:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-text>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-text>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text:focus,.ant-btn-dangerous.ant-btn-text:hover{color:#40a9ff;background:transparent;border-color:#40a9ff}.ant-btn-dangerous.ant-btn-text:active{color:#096dd9;background:transparent;border-color:#096dd9}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:active,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:hover{background:#f5f5f5;border-color:#d9d9d9}.ant-btn-dangerous.ant-btn-text:focus,.ant-btn-dangerous.ant-btn-text:hover{color:#ff7875;background:rgba(0,0,0,.018);border-color:transparent}.ant-btn-dangerous.ant-btn-text:focus>a:only-child,.ant-btn-dangerous.ant-btn-text:hover>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-text:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-text:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text:active{color:#d9363e;background:rgba(0,0,0,.028);border-color:transparent}.ant-btn-dangerous.ant-btn-text:active>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-text:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:active,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:hover{color:rgba(0,0,0,.25);background:transparent;border-color:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child{color:currentColor}.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-icon-only{width:32px;height:32px;padding:2.4px 0;font-size:16px;border-radius:2px;vertical-align:-1px}.ant-btn-icon-only>*{font-size:16px}.ant-btn-icon-only.ant-btn-lg{width:40px;height:40px;padding:4.9px 0;font-size:18px;border-radius:2px}.ant-btn-icon-only.ant-btn-lg>*{font-size:18px}.ant-btn-icon-only.ant-btn-sm{width:24px;height:24px;padding:0;font-size:14px;border-radius:2px}.ant-btn-icon-only.ant-btn-sm>*{font-size:14px}.ant-btn-round{height:32px;padding:4px 16px;font-size:14px;border-radius:32px}.ant-btn-round.ant-btn-lg{height:40px;padding:6.4px 20px;font-size:16px;border-radius:40px}.ant-btn-round.ant-btn-sm{height:24px;padding:0 12px;font-size:14px;border-radius:24px}.ant-btn-round.ant-btn-icon-only{width:auto}.ant-btn-circle{min-width:32px;padding-right:0;padding-left:0;text-align:center;border-radius:50%}.ant-btn-circle.ant-btn-lg{min-width:40px;border-radius:50%}.ant-btn-circle.ant-btn-sm{min-width:24px;border-radius:50%}.ant-btn:before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:1;display:none;background:#fff;border-radius:inherit;opacity:.35;transition:opacity .2s;content:"";pointer-events:none}.ant-btn .anticon{transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn .anticon.anticon-minus>svg,.ant-btn .anticon.anticon-plus>svg{shape-rendering:optimizeSpeed}.ant-btn.ant-btn-loading{position:relative}.ant-btn.ant-btn-loading:not([disabled]){pointer-events:none}.ant-btn.ant-btn-loading:before{display:block}.ant-btn>.ant-btn-loading-icon{transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-btn>.ant-btn-loading-icon .anticon{padding-right:8px;-webkit-animation:none;animation:none}.ant-btn>.ant-btn-loading-icon .anticon svg{-webkit-animation:loadingCircle 1s linear infinite;animation:loadingCircle 1s linear infinite}.ant-btn-group{display:inline-flex}.ant-btn-group,.ant-btn-group>.ant-btn,.ant-btn-group>span>.ant-btn{position:relative}.ant-btn-group>.ant-btn:active,.ant-btn-group>.ant-btn:focus,.ant-btn-group>.ant-btn:hover,.ant-btn-group>span>.ant-btn:active,.ant-btn-group>span>.ant-btn:focus,.ant-btn-group>span>.ant-btn:hover{z-index:2}.ant-btn-group>.ant-btn[disabled],.ant-btn-group>span>.ant-btn[disabled]{z-index:0}.ant-btn-group .ant-btn-icon-only{font-size:14px}.ant-btn-group-lg>.ant-btn,.ant-btn-group-lg>span>.ant-btn{height:40px;padding:6.4px 15px;font-size:16px;border-radius:0}.ant-btn-group-lg .ant-btn.ant-btn-icon-only{width:40px;height:40px;padding-right:0;padding-left:0}.ant-btn-group-sm>.ant-btn,.ant-btn-group-sm>span>.ant-btn{height:24px;padding:0 7px;font-size:14px;border-radius:0}.ant-btn-group-sm>.ant-btn>.anticon,.ant-btn-group-sm>span>.ant-btn>.anticon{font-size:14px}.ant-btn-group-sm .ant-btn.ant-btn-icon-only{width:24px;height:24px;padding-right:0;padding-left:0}.ant-btn+.ant-btn-group,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group,.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group>span+span,.ant-btn-group span+.ant-btn{margin-left:-1px}.ant-btn-group .ant-btn-primary+.ant-btn:not(.ant-btn-primary):not([disabled]){border-left-color:transparent}.ant-btn-group .ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group>.ant-btn:only-child,.ant-btn-group>span:only-child>.ant-btn{border-radius:2px}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-btn-group-sm>.ant-btn:only-child,.ant-btn-group-sm>span:only-child>.ant-btn{border-radius:2px}.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{padding-right:8px;border-top-right-radius:0;border-bottom-right-radius:0}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{padding-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.ant-btn-group-rtl.ant-btn+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group+.ant-btn,.ant-btn-group-rtl.ant-btn-group+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group-rtl.ant-btn-group .ant-btn+span,.ant-btn-group-rtl.ant-btn-group>span+span,.ant-btn-group-rtl.ant-btn-group span+.ant-btn,.ant-btn-rtl.ant-btn+.ant-btn-group,.ant-btn-rtl.ant-btn-group+.ant-btn,.ant-btn-rtl.ant-btn-group+.ant-btn-group,.ant-btn-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-rtl.ant-btn-group .ant-btn+span,.ant-btn-rtl.ant-btn-group>span+span,.ant-btn-rtl.ant-btn-group span+.ant-btn{margin-right:-1px;margin-left:auto}.ant-btn-group.ant-btn-group-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.ant-btn-group-rtl.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.ant-btn:active>span,.ant-btn:focus>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn-background-ghost{color:#fff;background:transparent!important;border-color:#fff}.ant-btn-background-ghost.ant-btn-primary{color:#1890ff;background:transparent;border-color:#1890ff;text-shadow:none}.ant-btn-background-ghost.ant-btn-primary>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:focus,.ant-btn-background-ghost.ant-btn-primary:hover{color:#40a9ff;background:transparent;border-color:#40a9ff}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:active{color:#096dd9;background:transparent;border-color:#096dd9}.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled]:active,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger{color:#ff4d4f;background:transparent;border-color:#ff4d4f;text-shadow:none}.ant-btn-background-ghost.ant-btn-danger>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:focus,.ant-btn-background-ghost.ant-btn-danger:hover{color:#ff7875;background:transparent;border-color:#ff7875}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:active{color:#d9363e;background:transparent;border-color:#d9363e}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled]:active,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous{color:#ff4d4f;background:transparent;border-color:#ff4d4f;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous:focus,.ant-btn-background-ghost.ant-btn-dangerous:hover{color:#ff7875;background:transparent;border-color:#ff7875}.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous:active{color:#d9363e;background:transparent;border-color:#d9363e}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous[disabled],.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link{color:#ff4d4f;background:transparent;border-color:transparent;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover{color:#ff7875;background:transparent;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active{color:#d9363e;background:transparent;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child{color:currentColor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-two-chinese-chars:first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>:not(.anticon){margin-right:-.34em;letter-spacing:.34em}.ant-btn-block{width:100%}.ant-btn:empty{display:inline-block;width:0;visibility:hidden;content:"\a0"}a.ant-btn{padding-top:.01px!important;line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.ant-btn-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary,.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child){border-right-color:#40a9ff;border-left-color:#d9d9d9}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled],.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled]{border-right-color:#d9d9d9;border-left-color:#40a9ff}.ant-btn-rtl.ant-btn>.ant-btn-loading-icon .anticon{padding-right:0;padding-left:8px}.ant-btn>.ant-btn-loading-icon:only-child .anticon{padding-right:0;padding-left:0}.ant-btn-rtl.ant-btn>.anticon+span,.ant-btn-rtl.ant-btn>span+.anticon{margin-right:8px;margin-left:0}.ant-picker-calendar{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";background:#fff}.ant-picker-calendar-header{display:flex;justify-content:flex-end;padding:12px 0}.ant-picker-calendar-header .ant-picker-calendar-year-select{min-width:80px}.ant-picker-calendar-header .ant-picker-calendar-month-select{min-width:70px;margin-left:8px}.ant-picker-calendar-header .ant-picker-calendar-mode-switch{margin-left:8px}.ant-picker-calendar .ant-picker-panel{background:#fff;border:0;border-top:1px solid #f0f0f0;border-radius:0}.ant-picker-calendar .ant-picker-panel .ant-picker-date-panel,.ant-picker-calendar .ant-picker-panel .ant-picker-month-panel{width:auto}.ant-picker-calendar .ant-picker-panel .ant-picker-body{padding:8px 0}.ant-picker-calendar .ant-picker-panel .ant-picker-content{width:100%}.ant-picker-calendar-mini{border-radius:2px}.ant-picker-calendar-mini .ant-picker-calendar-header{padding-right:8px;padding-left:8px}.ant-picker-calendar-mini .ant-picker-panel{border-radius:0 0 2px 2px}.ant-picker-calendar-mini .ant-picker-content{height:256px}.ant-picker-calendar-mini .ant-picker-content th{height:auto;padding:0;line-height:18px}.ant-picker-calendar-full .ant-picker-panel{display:block;width:100%;text-align:right;background:#fff;border:0}.ant-picker-calendar-full .ant-picker-panel .ant-picker-body td,.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{padding:0}.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{height:auto;padding:0 12px 5px 0;line-height:18px}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:before{display:none}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:hover .ant-picker-calendar-date{background:#f5f5f5}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell .ant-picker-calendar-date-today:before{display:none}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today{background:#e6f7ff}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date .ant-picker-calendar-date-value{color:#1890ff}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{display:block;width:auto;height:auto;margin:0 4px;padding:4px 8px 0;border:0;border-top:2px solid #f0f0f0;border-radius:0;transition:background .3s}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-value{line-height:24px;transition:color .3s}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content{position:static;width:auto;height:86px;overflow-y:auto;color:rgba(0,0,0,.85);line-height:1.5715;text-align:left}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today{border-color:#1890ff}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today .ant-picker-calendar-date-value{color:rgba(0,0,0,.85)}@media only screen and (max-width:480px){.ant-picker-calendar-header{display:block}.ant-picker-calendar-header .ant-picker-calendar-year-select{width:50%}.ant-picker-calendar-header .ant-picker-calendar-month-select{width:calc(50% - 8px)}.ant-picker-calendar-header .ant-picker-calendar-mode-switch{width:100%;margin-top:8px;margin-left:0}.ant-picker-calendar-header .ant-picker-calendar-mode-switch>label{width:50%;text-align:center}}.ant-picker-calendar-rtl{direction:rtl}.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-mode-switch,.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-month-select{margin-right:8px;margin-left:0}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel{text-align:left}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{padding:0 0 5px 12px}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content{text-align:right}.ant-radio-group{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-block;font-size:0;line-height:unset}.ant-radio-group .ant-badge-count{z-index:1}.ant-radio-group>.ant-badge:not(:first-child)>.ant-radio-button-wrapper{border-left:none}.ant-radio-wrapper{box-sizing:border-box;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:inline-flex;align-items:baseline;margin:0 8px 0 0;cursor:pointer}.ant-radio-wrapper:after{display:inline-block;width:0;overflow:hidden;content:"\a0"}.ant-radio{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;top:.2em;display:inline-block;outline:none;cursor:pointer}.ant-radio-input:focus+.ant-radio-inner,.ant-radio-wrapper:hover .ant-radio,.ant-radio:hover .ant-radio-inner{border-color:#1890ff}.ant-radio-input:focus+.ant-radio-inner{box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;visibility:hidden;-webkit-animation:antRadioEffect .36s ease-in-out;animation:antRadioEffect .36s ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both;content:""}.ant-radio-wrapper:hover .ant-radio:after,.ant-radio:hover:after{visibility:visible}.ant-radio-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border:1px solid #d9d9d9;border-radius:50%;transition:all .3s}.ant-radio-inner:after{position:absolute;top:3px;left:3px;display:block;width:8px;height:8px;background-color:#1890ff;border-top:0;border-left:0;border-radius:8px;transform:scale(0);opacity:0;transition:all .3s cubic-bezier(.78,.14,.15,.86);content:" "}.ant-radio-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:pointer;opacity:0}.ant-radio-checked .ant-radio-inner{border-color:#1890ff}.ant-radio-checked .ant-radio-inner:after{transform:scale(1);opacity:1;transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-radio-disabled{cursor:not-allowed}.ant-radio-disabled .ant-radio-inner{background-color:#f5f5f5;border-color:#d9d9d9!important;cursor:not-allowed}.ant-radio-disabled .ant-radio-inner:after{background-color:rgba(0,0,0,.2)}.ant-radio-disabled .ant-radio-input{cursor:not-allowed}.ant-radio-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}span.ant-radio+*{padding-right:8px;padding-left:8px}.ant-radio-button-wrapper{position:relative;display:inline-block;height:32px;margin:0;padding:0 15px;color:rgba(0,0,0,.85);font-size:14px;line-height:30px;background:#fff;border-color:#d9d9d9;border-style:solid;border-width:1.02px 1px 1px 0;cursor:pointer;transition:color .3s,background .3s,border-color .3s,box-shadow .3s}.ant-radio-button-wrapper a{color:rgba(0,0,0,.85)}.ant-radio-button-wrapper>.ant-radio-button{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%}.ant-radio-group-large .ant-radio-button-wrapper{height:40px;font-size:16px;line-height:38px}.ant-radio-group-small .ant-radio-button-wrapper{height:24px;padding:0 7px;line-height:22px}.ant-radio-button-wrapper:not(:first-child):before{position:absolute;top:-1px;left:-1px;display:block;box-sizing:initial;width:1px;height:100%;padding:1px 0;background-color:#d9d9d9;transition:background-color .3s;content:""}.ant-radio-button-wrapper:first-child{border-left:1px solid #d9d9d9;border-radius:2px 0 0 2px}.ant-radio-button-wrapper:last-child{border-radius:0 2px 2px 0}.ant-radio-button-wrapper:first-child:last-child{border-radius:2px}.ant-radio-button-wrapper:hover{position:relative;color:#1890ff}.ant-radio-button-wrapper:focus-within{box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-button-wrapper .ant-radio-inner,.ant-radio-button-wrapper input[type=checkbox],.ant-radio-button-wrapper input[type=radio]{width:0;height:0;opacity:0;pointer-events:none}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){z-index:1;color:#1890ff;background:#fff;border-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):before{background-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child{border-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#40a9ff;border-color:#40a9ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover:before{background-color:#40a9ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#096dd9;border-color:#096dd9}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active:before{background-color:#096dd9}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:#1890ff;border-color:#1890ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:#40a9ff;border-color:#40a9ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:#096dd9;border-color:#096dd9}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{box-shadow:0 0 0 3px rgba(24,144,255,.08)}.ant-radio-button-wrapper-disabled{cursor:not-allowed}.ant-radio-button-wrapper-disabled,.ant-radio-button-wrapper-disabled:first-child,.ant-radio-button-wrapper-disabled:hover{color:rgba(0,0,0,.25);background-color:#f5f5f5;border-color:#d9d9d9}.ant-radio-button-wrapper-disabled:first-child{border-left-color:#d9d9d9}.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked{color:rgba(0,0,0,.25);background-color:#e6e6e6;border-color:#d9d9d9;box-shadow:none}@-webkit-keyframes antRadioEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}@keyframes antRadioEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-radio-group.ant-radio-group-rtl{direction:rtl}.ant-radio-wrapper.ant-radio-wrapper-rtl{margin-right:0;margin-left:8px;direction:rtl}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl{border-right-width:0;border-left-width:1px}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:not(:first-child):before{right:-1px;left:0}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:first-child{border-right:1px solid #d9d9d9;border-radius:0 2px 2px 0}.ant-radio-button-wrapper-checked:not([class*=" ant-radio-button-wrapper-disabled"]).ant-radio-button-wrapper:first-child{border-right-color:#40a9ff}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:last-child{border-radius:2px 0 0 2px}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper-disabled:first-child{border-right-color:#d9d9d9}.ant-picker{box-sizing:border-box;margin:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";padding:4px 11px;position:relative;display:inline-flex;align-items:center;background:#fff;border:1px solid #d9d9d9;border-radius:2px;transition:border .3s,box-shadow .3s}.ant-picker-focused,.ant-picker:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-picker-focused{outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-picker.ant-picker-disabled{background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-picker.ant-picker-disabled .ant-picker-suffix{color:rgba(0,0,0,.25)}.ant-picker.ant-picker-borderless{background-color:initial!important;border-color:transparent!important;box-shadow:none!important}.ant-picker-input{position:relative;display:inline-flex;align-items:center;width:100%}.ant-picker-input>input{position:relative;display:inline-block;width:100%;min-width:0;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border-radius:2px;transition:all .3s;flex:auto;min-width:1px;height:auto;padding:0;background:transparent;border:0}.ant-picker-input>input::-moz-placeholder{opacity:1}.ant-picker-input>input:-ms-input-placeholder{color:#bfbfbf}.ant-picker-input>input::placeholder{color:#bfbfbf}.ant-picker-input>input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-picker-input>input:-ms-input-placeholder{text-overflow:ellipsis}.ant-picker-input>input:placeholder-shown{text-overflow:ellipsis}.ant-picker-input>input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-picker-input>input-focused,.ant-picker-input>input:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-picker-input>input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-picker-input>input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-picker-input>input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-picker-input>input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-picker-input>input-borderless,.ant-picker-input>input-borderless-disabled,.ant-picker-input>input-borderless-focused,.ant-picker-input>input-borderless:focus,.ant-picker-input>input-borderless:hover,.ant-picker-input>input-borderless[disabled]{background-color:initial;border:none;box-shadow:none}textarea.ant-picker-input>input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-picker-input>input-lg{padding:6.5px 11px;font-size:16px}.ant-picker-input>input-sm{padding:0 7px}.ant-picker-input>input:focus{box-shadow:none}.ant-picker-input>input[disabled]{background:transparent}.ant-picker-input:hover .ant-picker-clear{opacity:1}.ant-picker-input-placeholder>input{color:#bfbfbf}.ant-picker-large{padding:6.5px 11px}.ant-picker-large .ant-picker-input>input{font-size:16px}.ant-picker-small{padding:0 7px}.ant-picker-suffix{align-self:center;margin-left:4px;color:rgba(0,0,0,.25);line-height:1;pointer-events:none}.ant-picker-suffix>*{vertical-align:top}.ant-picker-clear{position:absolute;top:50%;right:0;color:rgba(0,0,0,.25);line-height:1;background:#fff;transform:translateY(-50%);cursor:pointer;opacity:0;transition:opacity .3s,color .3s}.ant-picker-clear>*{vertical-align:top}.ant-picker-clear:hover{color:rgba(0,0,0,.45)}.ant-picker-separator{position:relative;display:inline-block;width:1em;height:16px;color:rgba(0,0,0,.25);font-size:16px;vertical-align:top;cursor:default}.ant-picker-focused .ant-picker-separator{color:rgba(0,0,0,.45)}.ant-picker-disabled .ant-picker-range-separator .ant-picker-separator{cursor:not-allowed}.ant-picker-range{position:relative;display:inline-flex}.ant-picker-range .ant-picker-clear{right:11px}.ant-picker-range:hover .ant-picker-clear{opacity:1}.ant-picker-range .ant-picker-active-bar{bottom:-1px;height:2px;margin-left:11px;background:#1890ff;opacity:0;transition:all .3s ease-out;pointer-events:none}.ant-picker-range.ant-picker-focused .ant-picker-active-bar{opacity:1}.ant-picker-range-separator{align-items:center;padding:0 8px;line-height:1}.ant-picker-range.ant-picker-small .ant-picker-clear{right:7px}.ant-picker-range.ant-picker-small .ant-picker-active-bar{margin-left:7px}.ant-picker-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:absolute;z-index:1050}.ant-picker-dropdown-hidden{display:none}.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow{top:1.66666667px;display:block;transform:rotate(-45deg)}.ant-picker-dropdown-placement-topLeft .ant-picker-range-arrow{bottom:1.66666667px;display:block;transform:rotate(135deg)}.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topRight,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topRight{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomRight,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topRight{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomRight{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-picker-dropdown-range{padding:6.66666667px 0}.ant-picker-dropdown-range-hidden{display:none}.ant-picker-dropdown .ant-picker-panel>.ant-picker-time-panel{padding-top:4px}.ant-picker-ranges{margin-bottom:0;padding:4px 12px;overflow:hidden;line-height:34px;text-align:left;list-style:none}.ant-picker-ranges>li{display:inline-block}.ant-picker-ranges .ant-picker-preset>.ant-tag-blue{color:#1890ff;background:#e6f7ff;border-color:#91d5ff;cursor:pointer}.ant-picker-ranges .ant-picker-ok{float:right;margin-left:8px}.ant-picker-range-wrapper{display:flex}.ant-picker-range-arrow{position:absolute;z-index:1;display:none;width:10px;height:10px;margin-left:16.5px;box-shadow:2px -2px 6px rgba(0,0,0,.06);transition:left .3s ease-out}.ant-picker-range-arrow:after{position:absolute;top:1px;right:1px;width:10px;height:10px;border-color:#fff #fff transparent transparent;border-style:solid;border-width:5px;content:""}.ant-picker-panel-container{overflow:hidden;vertical-align:top;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);transition:margin .3s}.ant-picker-panel-container .ant-picker-panels{display:inline-flex;flex-wrap:nowrap;direction:ltr}.ant-picker-panel-container .ant-picker-panel{vertical-align:top;background:transparent;border-width:0 0 1px;border-radius:0}.ant-picker-panel-container .ant-picker-panel-focused{border-color:#f0f0f0}.ant-picker-panel{display:inline-flex;flex-direction:column;text-align:center;background:#fff;border:1px solid #f0f0f0;border-radius:2px;outline:none}.ant-picker-panel-focused{border-color:#1890ff}.ant-picker-date-panel,.ant-picker-decade-panel,.ant-picker-month-panel,.ant-picker-quarter-panel,.ant-picker-time-panel,.ant-picker-week-panel,.ant-picker-year-panel{display:flex;flex-direction:column;width:280px}.ant-picker-header{display:flex;padding:0 8px;color:rgba(0,0,0,.85);border-bottom:1px solid #f0f0f0}.ant-picker-header>*{flex:none}.ant-picker-header button{padding:0;color:rgba(0,0,0,.25);line-height:40px;background:transparent;border:0;cursor:pointer;transition:color .3s}.ant-picker-header>button{min-width:1.6em;font-size:14px}.ant-picker-header>button:hover{color:rgba(0,0,0,.85)}.ant-picker-header-view{flex:auto;font-weight:500;line-height:40px}.ant-picker-header-view button{color:inherit;font-weight:inherit}.ant-picker-header-view button:not(:first-child){margin-left:8px}.ant-picker-header-view button:hover{color:#1890ff}.ant-picker-next-icon,.ant-picker-prev-icon,.ant-picker-super-next-icon,.ant-picker-super-prev-icon{position:relative;display:inline-block;width:7px;height:7px}.ant-picker-next-icon:before,.ant-picker-prev-icon:before,.ant-picker-super-next-icon:before,.ant-picker-super-prev-icon:before{position:absolute;top:0;left:0;display:inline-block;width:7px;height:7px;border:0 solid;border-width:1.5px 0 0 1.5px;content:""}.ant-picker-super-next-icon:after,.ant-picker-super-prev-icon:after{position:absolute;top:4px;left:4px;display:inline-block;width:7px;height:7px;border:0 solid;border-width:1.5px 0 0 1.5px;content:""}.ant-picker-prev-icon,.ant-picker-super-prev-icon{transform:rotate(-45deg)}.ant-picker-next-icon,.ant-picker-super-next-icon{transform:rotate(135deg)}.ant-picker-content{width:100%;table-layout:fixed;border-collapse:collapse}.ant-picker-content td,.ant-picker-content th{position:relative;min-width:24px;font-weight:400}.ant-picker-content th{height:30px;color:rgba(0,0,0,.85);line-height:30px}.ant-picker-cell{padding:3px 0;color:rgba(0,0,0,.25);cursor:pointer}.ant-picker-cell-in-view{color:rgba(0,0,0,.85)}.ant-picker-cell-disabled{cursor:not-allowed}.ant-picker-cell:before{position:absolute;top:50%;right:0;left:0;z-index:1;height:24px;transform:translateY(-50%);content:""}.ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner{background:#f5f5f5}.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border:1px solid #1890ff;border-radius:2px;content:""}.ant-picker-cell-in-view.ant-picker-cell-in-range{position:relative}.ant-picker-cell-in-view.ant-picker-cell-in-range:before{background:#e6f7ff}.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner{color:#fff;background:#1890ff}.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):before,.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):before{background:#e6f7ff}.ant-picker-cell-in-view.ant-picker-cell-range-start:before{left:50%}.ant-picker-cell-in-view.ant-picker-cell-range-end:before{right:50%}.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range):after{position:absolute;top:50%;z-index:0;height:24px;border-top:1px dashed #7ec1ff;border-bottom:1px dashed #7ec1ff;transform:translateY(-50%);content:""}.ant-picker-cell-range-hover-end:after,.ant-picker-cell-range-hover-start:after,.ant-picker-cell-range-hover:after{right:0;left:2px}.ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end:before,.ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start:before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end:before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start:before{background:#cbe6ff}.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-radius:2px 0 0 2px}.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-radius:0 2px 2px 0}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after,.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after{position:absolute;top:0;bottom:0;z-index:-1;background:#cbe6ff;content:""}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after{right:-6px;left:0}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after{right:0;left:-6px}.ant-picker-cell-range-hover.ant-picker-cell-range-start:after{right:50%}.ant-picker-cell-range-hover.ant-picker-cell-range-end:after{left:50%}.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:after,.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range:after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child:after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child:after{left:6px;border-left:1px dashed #7ec1ff;border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child:after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child:after{right:6px;border-right:1px dashed #7ec1ff;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-picker-cell-disabled{pointer-events:none}.ant-picker-cell-disabled .ant-picker-cell-inner{color:rgba(0,0,0,.25);background:transparent}.ant-picker-cell-disabled:before{background:#f5f5f5}.ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner:before{border-color:rgba(0,0,0,.25)}.ant-picker-decade-panel .ant-picker-content,.ant-picker-month-panel .ant-picker-content,.ant-picker-quarter-panel .ant-picker-content,.ant-picker-year-panel .ant-picker-content{height:264px}.ant-picker-decade-panel .ant-picker-cell-inner,.ant-picker-month-panel .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-year-panel .ant-picker-cell-inner{padding:0 8px}.ant-picker-decade-panel .ant-picker-cell-disabled .ant-picker-cell-inner,.ant-picker-month-panel .ant-picker-cell-disabled .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-disabled .ant-picker-cell-inner,.ant-picker-year-panel .ant-picker-cell-disabled .ant-picker-cell-inner{background:#f5f5f5}.ant-picker-quarter-panel .ant-picker-content{height:56px}.ant-picker-footer{width:-webkit-min-content;width:-moz-min-content;width:min-content;min-width:100%;line-height:38px;text-align:center;border-bottom:1px solid transparent}.ant-picker-panel .ant-picker-footer{border-top:1px solid #f0f0f0}.ant-picker-footer-extra{padding:0 12px;line-height:38px;text-align:left}.ant-picker-footer-extra:not(:last-child){border-bottom:1px solid #f0f0f0}.ant-picker-now{text-align:left}.ant-picker-today-btn{color:#1890ff}.ant-picker-today-btn:hover{color:#40a9ff}.ant-picker-today-btn:active{color:#096dd9}.ant-picker-today-btn.ant-picker-today-btn-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-picker-decade-panel .ant-picker-cell-inner{padding:0 4px}.ant-picker-decade-panel .ant-picker-cell:before{display:none}.ant-picker-month-panel .ant-picker-body,.ant-picker-quarter-panel .ant-picker-body,.ant-picker-year-panel .ant-picker-body{padding:0 8px}.ant-picker-month-panel .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-year-panel .ant-picker-cell-inner{width:60px}.ant-picker-month-panel .ant-picker-cell-range-hover-start:after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-start:after,.ant-picker-year-panel .ant-picker-cell-range-hover-start:after{left:14px;border-left:1px dashed #7ec1ff;border-radius:2px 0 0 2px}.ant-picker-month-panel .ant-picker-cell-range-hover-end:after,.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-start:after,.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-start:after,.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-start:after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-end:after,.ant-picker-year-panel .ant-picker-cell-range-hover-end:after{right:14px;border-right:1px dashed #7ec1ff;border-radius:0 2px 2px 0}.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-end:after,.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-end:after,.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-end:after{left:14px;border-left:1px dashed #7ec1ff;border-radius:2px 0 0 2px}.ant-picker-week-panel .ant-picker-body{padding:8px 12px}.ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner,.ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner{background:transparent!important}.ant-picker-week-panel-row td{transition:background .3s}.ant-picker-week-panel-row:hover td{background:#f5f5f5}.ant-picker-week-panel-row-selected:hover td,.ant-picker-week-panel-row-selected td{background:#1890ff}.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week,.ant-picker-week-panel-row-selected td.ant-picker-cell-week{color:hsla(0,0%,100%,.5)}.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner:before,.ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner:before{border-color:#fff}.ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner,.ant-picker-week-panel-row-selected td .ant-picker-cell-inner{color:#fff}.ant-picker-date-panel .ant-picker-body{padding:8px 12px}.ant-picker-date-panel .ant-picker-content{width:252px}.ant-picker-date-panel .ant-picker-content th{width:36px}.ant-picker-datetime-panel{display:flex}.ant-picker-datetime-panel .ant-picker-time-panel{border-left:1px solid #f0f0f0}.ant-picker-datetime-panel .ant-picker-date-panel,.ant-picker-datetime-panel .ant-picker-time-panel{transition:opacity .3s}.ant-picker-datetime-panel-active .ant-picker-date-panel,.ant-picker-datetime-panel-active .ant-picker-time-panel{opacity:.3}.ant-picker-datetime-panel-active .ant-picker-date-panel-active,.ant-picker-datetime-panel-active .ant-picker-time-panel-active{opacity:1}.ant-picker-time-panel{width:auto;min-width:auto}.ant-picker-time-panel .ant-picker-content{display:flex;flex:auto;height:224px}.ant-picker-time-panel-column{flex:1 0 auto;width:56px;margin:0;padding:0;overflow-y:hidden;text-align:left;list-style:none;transition:background .3s}.ant-picker-time-panel-column:after{display:block;height:196px;content:""}.ant-picker-datetime-panel .ant-picker-time-panel-column:after{height:198px}.ant-picker-time-panel-column:not(:first-child){border-left:1px solid #f0f0f0}.ant-picker-time-panel-column-active{background:rgba(230,247,255,.2)}.ant-picker-time-panel-column:hover{overflow-y:auto}.ant-picker-time-panel-column>li{margin:0;padding:0}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner{display:block;width:100%;height:28px;margin:0;padding:0 0 0 14px;color:rgba(0,0,0,.85);line-height:28px;border-radius:0;cursor:pointer;transition:background .3s}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover{background:#f5f5f5}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:#e6f7ff}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner{color:rgba(0,0,0,.25);background:transparent;cursor:not-allowed}:root .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,:root .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell,_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell{padding:21px 0}.ant-picker-rtl{direction:rtl}.ant-picker-rtl .ant-picker-suffix{margin-right:4px;margin-left:0}.ant-picker-rtl .ant-picker-clear{right:auto;left:0}.ant-picker-rtl .ant-picker-separator{transform:rotate(180deg)}.ant-picker-panel-rtl .ant-picker-header-view button:not(:first-child){margin-right:8px;margin-left:0}.ant-picker-rtl.ant-picker-range .ant-picker-clear{right:auto;left:11px}.ant-picker-rtl.ant-picker-range .ant-picker-active-bar{margin-right:11px;margin-left:0}.ant-picker-rtl.ant-picker-range.ant-picker-small .ant-picker-active-bar{margin-right:7px}.ant-picker-dropdown-rtl .ant-picker-ranges{text-align:right}.ant-picker-dropdown-rtl .ant-picker-ranges .ant-picker-ok{float:left;margin-right:8px;margin-left:0}.ant-picker-panel-rtl{direction:rtl}.ant-picker-panel-rtl .ant-picker-prev-icon,.ant-picker-panel-rtl .ant-picker-super-prev-icon{transform:rotate(135deg)}.ant-picker-panel-rtl .ant-picker-next-icon,.ant-picker-panel-rtl .ant-picker-super-next-icon{transform:rotate(-45deg)}.ant-picker-cell .ant-picker-cell-inner{position:relative;z-index:2;display:inline-block;min-width:24px;height:24px;line-height:24px;border-radius:2px;transition:background .3s,border .3s}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:before{right:50%;left:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:before{right:0;left:50%}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-end:before{right:50%;left:50%}.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after{right:0;left:-6px}.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after{right:-6px;left:0}.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-start:after{right:0;left:50%}.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-end:after{right:50%;left:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-radius:0 2px 2px 0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-radius:2px 0 0 2px}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):first-child:after{right:6px;left:0;border-right:1px dashed #7ec1ff;border-left:none;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):last-child:after{right:0;left:6px;border-right:none;border-left:1px dashed #7ec1ff;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-start.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-end.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-end:first-child:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-start:last-child:after{right:6px;left:6px;border-right:1px dashed #7ec1ff;border-left:1px dashed #7ec1ff;border-radius:2px}.ant-picker-dropdown-rtl .ant-picker-footer-extra{direction:rtl;text-align:right}.ant-picker-panel-rtl .ant-picker-time-panel{direction:ltr}.ant-tag{box-sizing:border-box;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-block;height:auto;margin:0 8px 0 0;padding:0 7px;font-size:12px;line-height:20px;white-space:nowrap;background:#fafafa;border:1px solid #d9d9d9;border-radius:2px;opacity:1;transition:all .3s}.ant-tag,.ant-tag a,.ant-tag a:hover{color:rgba(0,0,0,.85)}.ant-tag>a:first-child:last-child{display:inline-block;margin:0 -8px;padding:0 8px}.ant-tag-close-icon{margin-left:3px;color:rgba(0,0,0,.45);font-size:10px;cursor:pointer;transition:all .3s}.ant-tag-close-icon:hover{color:rgba(0,0,0,.85)}.ant-tag-has-color{border-color:transparent}.ant-tag-has-color,.ant-tag-has-color .anticon-close,.ant-tag-has-color .anticon-close:hover,.ant-tag-has-color a,.ant-tag-has-color a:hover{color:#fff}.ant-tag-checkable{background-color:initial;border-color:transparent;cursor:pointer}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:#1890ff}.ant-tag-checkable-checked,.ant-tag-checkable:active{color:#fff}.ant-tag-checkable-checked{background-color:#1890ff}.ant-tag-checkable:active{background-color:#096dd9}.ant-tag-hidden{display:none}.ant-tag-pink{color:#c41d7f;background:#fff0f6;border-color:#ffadd2}.ant-tag-pink-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-magenta{color:#c41d7f;background:#fff0f6;border-color:#ffadd2}.ant-tag-magenta-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-red{color:#cf1322;background:#fff1f0;border-color:#ffa39e}.ant-tag-red-inverse{color:#fff;background:#f5222d;border-color:#f5222d}.ant-tag-volcano{color:#d4380d;background:#fff2e8;border-color:#ffbb96}.ant-tag-volcano-inverse{color:#fff;background:#fa541c;border-color:#fa541c}.ant-tag-orange{color:#d46b08;background:#fff7e6;border-color:#ffd591}.ant-tag-orange-inverse{color:#fff;background:#fa8c16;border-color:#fa8c16}.ant-tag-yellow{color:#d4b106;background:#feffe6;border-color:#fffb8f}.ant-tag-yellow-inverse{color:#fff;background:#fadb14;border-color:#fadb14}.ant-tag-gold{color:#d48806;background:#fffbe6;border-color:#ffe58f}.ant-tag-gold-inverse{color:#fff;background:#faad14;border-color:#faad14}.ant-tag-cyan{color:#08979c;background:#e6fffb;border-color:#87e8de}.ant-tag-cyan-inverse{color:#fff;background:#13c2c2;border-color:#13c2c2}.ant-tag-lime{color:#7cb305;background:#fcffe6;border-color:#eaff8f}.ant-tag-lime-inverse{color:#fff;background:#a0d911;border-color:#a0d911}.ant-tag-green{color:#389e0d;background:#f6ffed;border-color:#b7eb8f}.ant-tag-green-inverse{color:#fff;background:#52c41a;border-color:#52c41a}.ant-tag-blue{color:#096dd9;background:#e6f7ff;border-color:#91d5ff}.ant-tag-blue-inverse{color:#fff;background:#1890ff;border-color:#1890ff}.ant-tag-geekblue{color:#1d39c4;background:#f0f5ff;border-color:#adc6ff}.ant-tag-geekblue-inverse{color:#fff;background:#2f54eb;border-color:#2f54eb}.ant-tag-purple{color:#531dab;background:#f9f0ff;border-color:#d3adf7}.ant-tag-purple-inverse{color:#fff;background:#722ed1;border-color:#722ed1}.ant-tag-success{color:#52c41a;background:#f6ffed;border-color:#b7eb8f}.ant-tag-processing{color:#1890ff;background:#e6f7ff;border-color:#91d5ff}.ant-tag-error{color:#f5222d;background:#fff1f0;border-color:#ffa39e}.ant-tag-warning{color:#fa8c16;background:#fff7e6;border-color:#ffd591}.ant-tag>.anticon+span,.ant-tag>span+.anticon{margin-left:7px}.ant-tag.ant-tag-rtl{margin-right:0;margin-left:8px;direction:rtl;text-align:right}.ant-tag-rtl .ant-tag-close-icon{margin-right:3px;margin-left:0}.ant-tag-rtl.ant-tag>.anticon+span,.ant-tag-rtl.ant-tag>span+.anticon{margin-right:7px;margin-left:0}.ant-card{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;background:#fff;border-radius:2px}.ant-card-rtl{direction:rtl}.ant-card-hoverable{cursor:pointer;transition:box-shadow .3s,border-color .3s}.ant-card-hoverable:hover{border-color:transparent;box-shadow:0 1px 2px -2px rgba(0,0,0,.16),0 3px 6px 0 rgba(0,0,0,.12),0 5px 12px 4px rgba(0,0,0,.09)}.ant-card-bordered{border:1px solid #f0f0f0}.ant-card-head{min-height:48px;margin-bottom:-1px;padding:0 24px;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;background:transparent;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-card-head:after,.ant-card-head:before{display:table;content:""}.ant-card-head:after{clear:both}.ant-card-head-wrapper{display:flex;align-items:center}.ant-card-head-title{display:inline-block;flex:1 1;padding:16px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-card-head-title>.ant-typography,.ant-card-head-title>.ant-typography-edit-content{left:0;margin-top:0;margin-bottom:0}.ant-card-head .ant-tabs{clear:both;margin-bottom:-17px;color:rgba(0,0,0,.85);font-weight:400;font-size:14px}.ant-card-head .ant-tabs-bar{border-bottom:1px solid #f0f0f0}.ant-card-extra{float:right;margin-left:auto;padding:16px 0;color:rgba(0,0,0,.85);font-weight:400;font-size:14px}.ant-card-rtl .ant-card-extra{margin-right:auto;margin-left:0}.ant-card-body{padding:24px}.ant-card-body:after,.ant-card-body:before{display:table;content:""}.ant-card-body:after{clear:both}.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body{margin:-1px 0 0 -1px;padding:0}.ant-card-grid{float:left;width:33.33%;padding:24px;border:0;border-radius:0;box-shadow:1px 0 0 0 #f0f0f0,0 1px 0 0 #f0f0f0,1px 1px 0 0 #f0f0f0,inset 1px 0 0 0 #f0f0f0,inset 0 1px 0 0 #f0f0f0;transition:all .3s}.ant-card-rtl .ant-card-grid{float:right}.ant-card-grid-hoverable:hover{position:relative;z-index:1;box-shadow:0 1px 2px -2px rgba(0,0,0,.16),0 3px 6px 0 rgba(0,0,0,.12),0 5px 12px 4px rgba(0,0,0,.09)}.ant-card-contain-tabs>.ant-card-head .ant-card-head-title{min-height:32px;padding-bottom:0}.ant-card-contain-tabs>.ant-card-head .ant-card-extra{padding-bottom:0}.ant-card-bordered .ant-card-cover{margin-top:-1px;margin-right:-1px;margin-left:-1px}.ant-card-cover>*{display:block;width:100%}.ant-card-cover img{border-radius:2px 2px 0 0}.ant-card-actions{margin:0;padding:0;list-style:none;background:#fff;border-top:1px solid #f0f0f0}.ant-card-actions:after,.ant-card-actions:before{display:table;content:""}.ant-card-actions:after{clear:both}.ant-card-actions>li{float:left;margin:12px 0;color:rgba(0,0,0,.45);text-align:center}.ant-card-rtl .ant-card-actions>li{float:right}.ant-card-actions>li>span{position:relative;display:block;min-width:32px;font-size:14px;line-height:1.5715;cursor:pointer}.ant-card-actions>li>span:hover{color:#1890ff;transition:color .3s}.ant-card-actions>li>span>.anticon,.ant-card-actions>li>span a:not(.ant-btn){display:inline-block;width:100%;color:rgba(0,0,0,.45);line-height:22px;transition:color .3s}.ant-card-actions>li>span>.anticon:hover,.ant-card-actions>li>span a:not(.ant-btn):hover{color:#1890ff}.ant-card-actions>li>span>.anticon{font-size:16px;line-height:22px}.ant-card-actions>li:not(:last-child){border-right:1px solid #f0f0f0}.ant-card-rtl .ant-card-actions>li:not(:last-child){border-right:none;border-left:1px solid #f0f0f0}.ant-card-type-inner .ant-card-head{padding:0 24px;background:#fafafa}.ant-card-type-inner .ant-card-head-title{padding:12px 0;font-size:14px}.ant-card-type-inner .ant-card-body{padding:16px 24px}.ant-card-type-inner .ant-card-extra{padding:13.5px 0}.ant-card-meta{margin:-4px 0}.ant-card-meta:after,.ant-card-meta:before{display:table;content:""}.ant-card-meta:after{clear:both}.ant-card-meta-avatar{float:left;padding-right:16px}.ant-card-rtl .ant-card-meta-avatar{float:right;padding-right:0;padding-left:16px}.ant-card-meta-detail{overflow:hidden}.ant-card-meta-detail>div:not(:last-child){margin-bottom:8px}.ant-card-meta-title{overflow:hidden;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;white-space:nowrap;text-overflow:ellipsis}.ant-card-meta-description{color:rgba(0,0,0,.45)}.ant-card-loading{overflow:hidden}.ant-card-loading .ant-card-body{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-card-loading-content p{margin:0}.ant-card-loading-block{height:14px;margin:4px 0;background:linear-gradient(90deg,rgba(207,216,220,.2),rgba(207,216,220,.4),rgba(207,216,220,.2));background-size:600% 600%;border-radius:2px;-webkit-animation:card-loading 1.4s ease infinite;animation:card-loading 1.4s ease infinite}@-webkit-keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}@keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}.ant-card-small>.ant-card-head{min-height:36px;padding:0 12px;font-size:14px}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-head-title{padding:8px 0}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-extra{padding:8px 0;font-size:14px}.ant-card-small>.ant-card-body{padding:12px}.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:8px 0;font-size:14px}.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:16px 0;font-size:16px}.ant-tabs-card.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:6px 16px}.ant-tabs-card.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:7px 16px 6px}.ant-tabs-rtl{direction:rtl}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab:last-of-type{margin-left:0}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon{margin-right:0;margin-left:12px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove{margin-right:8px;margin-left:-4px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-nav{order:1}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-content-holder,.ant-tabs-rtl.ant-tabs-right>.ant-tabs-nav{order:0}.ant-tabs-rtl.ant-tabs-right>.ant-tabs-content-holder{order:1}.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-right:0;margin-left:2px}.ant-tabs-dropdown-rtl{direction:rtl}.ant-tabs-dropdown-rtl .ant-tabs-dropdown-menu-item{text-align:right}.ant-tabs-bottom,.ant-tabs-top{flex-direction:column}.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav,.ant-tabs-top>.ant-tabs-nav,.ant-tabs-top>div>.ant-tabs-nav{margin:0 0 16px}.ant-tabs-bottom>.ant-tabs-nav:before,.ant-tabs-bottom>div>.ant-tabs-nav:before,.ant-tabs-top>.ant-tabs-nav:before,.ant-tabs-top>div>.ant-tabs-nav:before{position:absolute;right:0;left:0;border-bottom:1px solid #f0f0f0;content:""}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar{height:2px}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:width .3s,left .3s,right .3s}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{top:0;bottom:0;width:30px}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{left:0;box-shadow:inset 10px 0 8px -8px rgba(0,0,0,.08)}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{right:0;box-shadow:inset -10px 0 8px -8px rgba(0,0,0,.08)}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after{opacity:1}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>.ant-tabs-nav:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav:before{bottom:0}.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav{order:1;margin-top:16px;margin-bottom:0}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>.ant-tabs-nav:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav:before{top:0}.ant-tabs-bottom>.ant-tabs-content-holder,.ant-tabs-bottom>div>.ant-tabs-content-holder{order:0}.ant-tabs-left>.ant-tabs-nav,.ant-tabs-left>div>.ant-tabs-nav,.ant-tabs-right>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{flex-direction:column;min-width:50px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{padding:8px 24px;text-align:center}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin:16px 0 0}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap{flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{right:0;left:0;height:30px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{top:0;box-shadow:inset 0 10px 8px -8px rgba(0,0,0,.08)}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{bottom:0;box-shadow:inset 0 -10px 8px -8px rgba(0,0,0,.08)}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before{opacity:1}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{width:2px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:height .3s,top .3s}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-operations{flex:1 0 auto;flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar{right:0}.ant-tabs-left>.ant-tabs-content-holder,.ant-tabs-left>div>.ant-tabs-content-holder{margin-left:-1px;border-left:1px solid #f0f0f0}.ant-tabs-left>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-left>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-left:24px}.ant-tabs-right>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{order:1}.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{left:0}.ant-tabs-right>.ant-tabs-content-holder,.ant-tabs-right>div>.ant-tabs-content-holder{order:0;margin-right:-1px;border-right:1px solid #f0f0f0}.ant-tabs-right>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-right>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-right:24px}.ant-tabs-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-tabs-dropdown-hidden{display:none}.ant-tabs-dropdown-menu{max-height:200px;margin:0;padding:4px 0;overflow-x:hidden;overflow-y:auto;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-tabs-dropdown-menu-item{min-width:120px;margin:0;padding:5px 12px;overflow:hidden;color:rgba(0,0,0,.85);font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-tabs-dropdown-menu-item:hover{background:#f5f5f5}.ant-tabs-dropdown-menu-item-disabled,.ant-tabs-dropdown-menu-item-disabled:hover{color:rgba(0,0,0,.25);background:transparent;cursor:not-allowed}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab{margin:0;padding:8px 16px;background:#fafafa;border:1px solid #f0f0f0;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab-active{color:#1890ff;background:#fff}.ant-tabs-card>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-ink-bar{visibility:hidden}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-left:2px}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab{border-radius:2px 2px 0 0}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab-active{border-bottom-color:#fff}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 0 2px 2px}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab-active{border-top-color:#fff}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-top:2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab{border-radius:2px 0 0 2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab-active{border-right-color:#fff}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 2px 2px 0}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab-active{border-left-color:#fff}.ant-tabs{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:flex;overflow:hidden}.ant-tabs>.ant-tabs-nav,.ant-tabs>div>.ant-tabs-nav{position:relative;display:flex;flex:none;align-items:center}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap{position:relative;display:inline-block;display:flex;flex:auto;align-self:stretch;overflow:hidden;white-space:nowrap;transform:translate(0)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{position:absolute;z-index:1;opacity:0;transition:opacity .3s;content:"";pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-list{position:relative;display:flex;transition:transform .3s}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations{display:flex;align-self:stretch}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations-hidden,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations-hidden{position:absolute;visibility:hidden;pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more{position:relative;padding:8px 16px;background:transparent;border:0}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more:after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more:after{position:absolute;right:0;bottom:0;left:0;height:5px;transform:translateY(100%);content:""}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add{min-width:40px;padding:0 8px;background:#fafafa;border:1px solid #f0f0f0;border-radius:2px 2px 0 0;outline:none;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:hover,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:hover{color:#40a9ff}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:focus,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:focus{color:#096dd9}.ant-tabs-extra-content{flex:none}.ant-tabs-centered>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*=ant-tabs-nav-wrap-ping]),.ant-tabs-centered>div>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*=ant-tabs-nav-wrap-ping]){justify-content:center}.ant-tabs-ink-bar{position:absolute;background:#1890ff;pointer-events:none}.ant-tabs-tab{position:relative;display:inline-flex;align-items:center;padding:12px 0;font-size:14px;background:transparent;border:0;outline:none;cursor:pointer}.ant-tabs-tab-btn:active,.ant-tabs-tab-btn:focus,.ant-tabs-tab-remove:active,.ant-tabs-tab-remove:focus{color:#096dd9}.ant-tabs-tab-btn,.ant-tabs-tab-remove{outline:none;transition:all .3s}.ant-tabs-tab-remove{flex:none;margin-right:-4px;margin-left:8px;color:rgba(0,0,0,.45);font-size:12px;background:transparent;border:none;cursor:pointer}.ant-tabs-tab-remove:hover{color:rgba(0,0,0,.85)}.ant-tabs-tab:hover{color:#40a9ff}.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{color:#1890ff;text-shadow:0 0 .25px currentColor}.ant-tabs-tab.ant-tabs-tab-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:active,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:focus{color:rgba(0,0,0,.25)}.ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-tab .anticon{margin-right:12px}.ant-tabs-tab+.ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-content{display:flex;width:100%}.ant-tabs-content-holder{flex:auto;min-width:0;min-height:0}.ant-tabs-content-animated{transition:margin .3s}.ant-tabs-tabpane{flex:none;width:100%;outline:none}.ant-row{flex-flow:row wrap}.ant-row,.ant-row:after,.ant-row:before{display:flex}.ant-row-no-wrap{flex-wrap:nowrap}.ant-row-start{justify-content:flex-start}.ant-row-center{justify-content:center}.ant-row-end{justify-content:flex-end}.ant-row-space-between{justify-content:space-between}.ant-row-space-around{justify-content:space-around}.ant-row-top{align-items:flex-start}.ant-row-middle{align-items:center}.ant-row-bottom{align-items:flex-end}.ant-col{position:relative;max-width:100%;min-height:1px}.ant-col-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-push-24{left:100%}.ant-col-pull-24{right:100%}.ant-col-offset-24{margin-left:100%}.ant-col-order-24{order:24}.ant-col-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-push-23{left:95.83333333%}.ant-col-pull-23{right:95.83333333%}.ant-col-offset-23{margin-left:95.83333333%}.ant-col-order-23{order:23}.ant-col-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-push-22{left:91.66666667%}.ant-col-pull-22{right:91.66666667%}.ant-col-offset-22{margin-left:91.66666667%}.ant-col-order-22{order:22}.ant-col-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-push-21{left:87.5%}.ant-col-pull-21{right:87.5%}.ant-col-offset-21{margin-left:87.5%}.ant-col-order-21{order:21}.ant-col-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-push-20{left:83.33333333%}.ant-col-pull-20{right:83.33333333%}.ant-col-offset-20{margin-left:83.33333333%}.ant-col-order-20{order:20}.ant-col-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-push-19{left:79.16666667%}.ant-col-pull-19{right:79.16666667%}.ant-col-offset-19{margin-left:79.16666667%}.ant-col-order-19{order:19}.ant-col-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-push-18{left:75%}.ant-col-pull-18{right:75%}.ant-col-offset-18{margin-left:75%}.ant-col-order-18{order:18}.ant-col-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-push-17{left:70.83333333%}.ant-col-pull-17{right:70.83333333%}.ant-col-offset-17{margin-left:70.83333333%}.ant-col-order-17{order:17}.ant-col-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-push-16{left:66.66666667%}.ant-col-pull-16{right:66.66666667%}.ant-col-offset-16{margin-left:66.66666667%}.ant-col-order-16{order:16}.ant-col-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-push-15{left:62.5%}.ant-col-pull-15{right:62.5%}.ant-col-offset-15{margin-left:62.5%}.ant-col-order-15{order:15}.ant-col-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-push-14{left:58.33333333%}.ant-col-pull-14{right:58.33333333%}.ant-col-offset-14{margin-left:58.33333333%}.ant-col-order-14{order:14}.ant-col-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-push-13{left:54.16666667%}.ant-col-pull-13{right:54.16666667%}.ant-col-offset-13{margin-left:54.16666667%}.ant-col-order-13{order:13}.ant-col-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-push-12{left:50%}.ant-col-pull-12{right:50%}.ant-col-offset-12{margin-left:50%}.ant-col-order-12{order:12}.ant-col-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-push-11{left:45.83333333%}.ant-col-pull-11{right:45.83333333%}.ant-col-offset-11{margin-left:45.83333333%}.ant-col-order-11{order:11}.ant-col-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-push-10{left:41.66666667%}.ant-col-pull-10{right:41.66666667%}.ant-col-offset-10{margin-left:41.66666667%}.ant-col-order-10{order:10}.ant-col-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-push-9{left:37.5%}.ant-col-pull-9{right:37.5%}.ant-col-offset-9{margin-left:37.5%}.ant-col-order-9{order:9}.ant-col-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-push-8{left:33.33333333%}.ant-col-pull-8{right:33.33333333%}.ant-col-offset-8{margin-left:33.33333333%}.ant-col-order-8{order:8}.ant-col-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-push-7{left:29.16666667%}.ant-col-pull-7{right:29.16666667%}.ant-col-offset-7{margin-left:29.16666667%}.ant-col-order-7{order:7}.ant-col-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-push-6{left:25%}.ant-col-pull-6{right:25%}.ant-col-offset-6{margin-left:25%}.ant-col-order-6{order:6}.ant-col-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-push-5{left:20.83333333%}.ant-col-pull-5{right:20.83333333%}.ant-col-offset-5{margin-left:20.83333333%}.ant-col-order-5{order:5}.ant-col-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-push-4{left:16.66666667%}.ant-col-pull-4{right:16.66666667%}.ant-col-offset-4{margin-left:16.66666667%}.ant-col-order-4{order:4}.ant-col-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-push-3{left:12.5%}.ant-col-pull-3{right:12.5%}.ant-col-offset-3{margin-left:12.5%}.ant-col-order-3{order:3}.ant-col-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-push-2{left:8.33333333%}.ant-col-pull-2{right:8.33333333%}.ant-col-offset-2{margin-left:8.33333333%}.ant-col-order-2{order:2}.ant-col-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-push-1{left:4.16666667%}.ant-col-pull-1{right:4.16666667%}.ant-col-offset-1{margin-left:4.16666667%}.ant-col-order-1{order:1}.ant-col-0{display:none}.ant-col-offset-0{margin-left:0}.ant-col-order-0{order:0}.ant-col-offset-0.ant-col-rtl{margin-right:0}.ant-col-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}.ant-col-xs-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xs-push-24{left:100%}.ant-col-xs-pull-24{right:100%}.ant-col-xs-offset-24{margin-left:100%}.ant-col-xs-order-24{order:24}.ant-col-xs-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xs-push-23{left:95.83333333%}.ant-col-xs-pull-23{right:95.83333333%}.ant-col-xs-offset-23{margin-left:95.83333333%}.ant-col-xs-order-23{order:23}.ant-col-xs-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xs-push-22{left:91.66666667%}.ant-col-xs-pull-22{right:91.66666667%}.ant-col-xs-offset-22{margin-left:91.66666667%}.ant-col-xs-order-22{order:22}.ant-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xs-push-21{left:87.5%}.ant-col-xs-pull-21{right:87.5%}.ant-col-xs-offset-21{margin-left:87.5%}.ant-col-xs-order-21{order:21}.ant-col-xs-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xs-push-20{left:83.33333333%}.ant-col-xs-pull-20{right:83.33333333%}.ant-col-xs-offset-20{margin-left:83.33333333%}.ant-col-xs-order-20{order:20}.ant-col-xs-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xs-push-19{left:79.16666667%}.ant-col-xs-pull-19{right:79.16666667%}.ant-col-xs-offset-19{margin-left:79.16666667%}.ant-col-xs-order-19{order:19}.ant-col-xs-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xs-push-18{left:75%}.ant-col-xs-pull-18{right:75%}.ant-col-xs-offset-18{margin-left:75%}.ant-col-xs-order-18{order:18}.ant-col-xs-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xs-push-17{left:70.83333333%}.ant-col-xs-pull-17{right:70.83333333%}.ant-col-xs-offset-17{margin-left:70.83333333%}.ant-col-xs-order-17{order:17}.ant-col-xs-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xs-push-16{left:66.66666667%}.ant-col-xs-pull-16{right:66.66666667%}.ant-col-xs-offset-16{margin-left:66.66666667%}.ant-col-xs-order-16{order:16}.ant-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xs-push-15{left:62.5%}.ant-col-xs-pull-15{right:62.5%}.ant-col-xs-offset-15{margin-left:62.5%}.ant-col-xs-order-15{order:15}.ant-col-xs-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xs-push-14{left:58.33333333%}.ant-col-xs-pull-14{right:58.33333333%}.ant-col-xs-offset-14{margin-left:58.33333333%}.ant-col-xs-order-14{order:14}.ant-col-xs-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xs-push-13{left:54.16666667%}.ant-col-xs-pull-13{right:54.16666667%}.ant-col-xs-offset-13{margin-left:54.16666667%}.ant-col-xs-order-13{order:13}.ant-col-xs-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xs-push-12{left:50%}.ant-col-xs-pull-12{right:50%}.ant-col-xs-offset-12{margin-left:50%}.ant-col-xs-order-12{order:12}.ant-col-xs-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xs-push-11{left:45.83333333%}.ant-col-xs-pull-11{right:45.83333333%}.ant-col-xs-offset-11{margin-left:45.83333333%}.ant-col-xs-order-11{order:11}.ant-col-xs-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xs-push-10{left:41.66666667%}.ant-col-xs-pull-10{right:41.66666667%}.ant-col-xs-offset-10{margin-left:41.66666667%}.ant-col-xs-order-10{order:10}.ant-col-xs-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xs-push-9{left:37.5%}.ant-col-xs-pull-9{right:37.5%}.ant-col-xs-offset-9{margin-left:37.5%}.ant-col-xs-order-9{order:9}.ant-col-xs-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xs-push-8{left:33.33333333%}.ant-col-xs-pull-8{right:33.33333333%}.ant-col-xs-offset-8{margin-left:33.33333333%}.ant-col-xs-order-8{order:8}.ant-col-xs-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xs-push-7{left:29.16666667%}.ant-col-xs-pull-7{right:29.16666667%}.ant-col-xs-offset-7{margin-left:29.16666667%}.ant-col-xs-order-7{order:7}.ant-col-xs-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xs-push-6{left:25%}.ant-col-xs-pull-6{right:25%}.ant-col-xs-offset-6{margin-left:25%}.ant-col-xs-order-6{order:6}.ant-col-xs-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xs-push-5{left:20.83333333%}.ant-col-xs-pull-5{right:20.83333333%}.ant-col-xs-offset-5{margin-left:20.83333333%}.ant-col-xs-order-5{order:5}.ant-col-xs-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xs-push-4{left:16.66666667%}.ant-col-xs-pull-4{right:16.66666667%}.ant-col-xs-offset-4{margin-left:16.66666667%}.ant-col-xs-order-4{order:4}.ant-col-xs-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xs-push-3{left:12.5%}.ant-col-xs-pull-3{right:12.5%}.ant-col-xs-offset-3{margin-left:12.5%}.ant-col-xs-order-3{order:3}.ant-col-xs-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xs-push-2{left:8.33333333%}.ant-col-xs-pull-2{right:8.33333333%}.ant-col-xs-offset-2{margin-left:8.33333333%}.ant-col-xs-order-2{order:2}.ant-col-xs-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xs-push-1{left:4.16666667%}.ant-col-xs-pull-1{right:4.16666667%}.ant-col-xs-offset-1{margin-left:4.16666667%}.ant-col-xs-order-1{order:1}.ant-col-xs-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xs-push-0{left:auto}.ant-col-xs-pull-0{right:auto}.ant-col-xs-offset-0{margin-left:0}.ant-col-xs-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xs-push-0.ant-col-rtl{right:auto}.ant-col-xs-pull-0.ant-col-rtl{left:auto}.ant-col-xs-offset-0.ant-col-rtl{margin-right:0}.ant-col-xs-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xs-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xs-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xs-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xs-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xs-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xs-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xs-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xs-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xs-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xs-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xs-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xs-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xs-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xs-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xs-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xs-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xs-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xs-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xs-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xs-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xs-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xs-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xs-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xs-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xs-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xs-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xs-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xs-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xs-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xs-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xs-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xs-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xs-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xs-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xs-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xs-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xs-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xs-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xs-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xs-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xs-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xs-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xs-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xs-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xs-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xs-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xs-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xs-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xs-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xs-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xs-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xs-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xs-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xs-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xs-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xs-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xs-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xs-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xs-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xs-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xs-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xs-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xs-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xs-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xs-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xs-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xs-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xs-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xs-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xs-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xs-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}@media (min-width:576px){.ant-col-sm-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-sm-push-24{left:100%}.ant-col-sm-pull-24{right:100%}.ant-col-sm-offset-24{margin-left:100%}.ant-col-sm-order-24{order:24}.ant-col-sm-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-sm-push-23{left:95.83333333%}.ant-col-sm-pull-23{right:95.83333333%}.ant-col-sm-offset-23{margin-left:95.83333333%}.ant-col-sm-order-23{order:23}.ant-col-sm-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-sm-push-22{left:91.66666667%}.ant-col-sm-pull-22{right:91.66666667%}.ant-col-sm-offset-22{margin-left:91.66666667%}.ant-col-sm-order-22{order:22}.ant-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-sm-push-21{left:87.5%}.ant-col-sm-pull-21{right:87.5%}.ant-col-sm-offset-21{margin-left:87.5%}.ant-col-sm-order-21{order:21}.ant-col-sm-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-sm-push-20{left:83.33333333%}.ant-col-sm-pull-20{right:83.33333333%}.ant-col-sm-offset-20{margin-left:83.33333333%}.ant-col-sm-order-20{order:20}.ant-col-sm-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-sm-push-19{left:79.16666667%}.ant-col-sm-pull-19{right:79.16666667%}.ant-col-sm-offset-19{margin-left:79.16666667%}.ant-col-sm-order-19{order:19}.ant-col-sm-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-sm-push-18{left:75%}.ant-col-sm-pull-18{right:75%}.ant-col-sm-offset-18{margin-left:75%}.ant-col-sm-order-18{order:18}.ant-col-sm-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-sm-push-17{left:70.83333333%}.ant-col-sm-pull-17{right:70.83333333%}.ant-col-sm-offset-17{margin-left:70.83333333%}.ant-col-sm-order-17{order:17}.ant-col-sm-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-sm-push-16{left:66.66666667%}.ant-col-sm-pull-16{right:66.66666667%}.ant-col-sm-offset-16{margin-left:66.66666667%}.ant-col-sm-order-16{order:16}.ant-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-sm-push-15{left:62.5%}.ant-col-sm-pull-15{right:62.5%}.ant-col-sm-offset-15{margin-left:62.5%}.ant-col-sm-order-15{order:15}.ant-col-sm-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-sm-push-14{left:58.33333333%}.ant-col-sm-pull-14{right:58.33333333%}.ant-col-sm-offset-14{margin-left:58.33333333%}.ant-col-sm-order-14{order:14}.ant-col-sm-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-sm-push-13{left:54.16666667%}.ant-col-sm-pull-13{right:54.16666667%}.ant-col-sm-offset-13{margin-left:54.16666667%}.ant-col-sm-order-13{order:13}.ant-col-sm-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-sm-push-12{left:50%}.ant-col-sm-pull-12{right:50%}.ant-col-sm-offset-12{margin-left:50%}.ant-col-sm-order-12{order:12}.ant-col-sm-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-sm-push-11{left:45.83333333%}.ant-col-sm-pull-11{right:45.83333333%}.ant-col-sm-offset-11{margin-left:45.83333333%}.ant-col-sm-order-11{order:11}.ant-col-sm-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-sm-push-10{left:41.66666667%}.ant-col-sm-pull-10{right:41.66666667%}.ant-col-sm-offset-10{margin-left:41.66666667%}.ant-col-sm-order-10{order:10}.ant-col-sm-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-sm-push-9{left:37.5%}.ant-col-sm-pull-9{right:37.5%}.ant-col-sm-offset-9{margin-left:37.5%}.ant-col-sm-order-9{order:9}.ant-col-sm-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-sm-push-8{left:33.33333333%}.ant-col-sm-pull-8{right:33.33333333%}.ant-col-sm-offset-8{margin-left:33.33333333%}.ant-col-sm-order-8{order:8}.ant-col-sm-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-sm-push-7{left:29.16666667%}.ant-col-sm-pull-7{right:29.16666667%}.ant-col-sm-offset-7{margin-left:29.16666667%}.ant-col-sm-order-7{order:7}.ant-col-sm-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-sm-push-6{left:25%}.ant-col-sm-pull-6{right:25%}.ant-col-sm-offset-6{margin-left:25%}.ant-col-sm-order-6{order:6}.ant-col-sm-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-sm-push-5{left:20.83333333%}.ant-col-sm-pull-5{right:20.83333333%}.ant-col-sm-offset-5{margin-left:20.83333333%}.ant-col-sm-order-5{order:5}.ant-col-sm-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-sm-push-4{left:16.66666667%}.ant-col-sm-pull-4{right:16.66666667%}.ant-col-sm-offset-4{margin-left:16.66666667%}.ant-col-sm-order-4{order:4}.ant-col-sm-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-sm-push-3{left:12.5%}.ant-col-sm-pull-3{right:12.5%}.ant-col-sm-offset-3{margin-left:12.5%}.ant-col-sm-order-3{order:3}.ant-col-sm-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-sm-push-2{left:8.33333333%}.ant-col-sm-pull-2{right:8.33333333%}.ant-col-sm-offset-2{margin-left:8.33333333%}.ant-col-sm-order-2{order:2}.ant-col-sm-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-sm-push-1{left:4.16666667%}.ant-col-sm-pull-1{right:4.16666667%}.ant-col-sm-offset-1{margin-left:4.16666667%}.ant-col-sm-order-1{order:1}.ant-col-sm-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-sm-push-0{left:auto}.ant-col-sm-pull-0{right:auto}.ant-col-sm-offset-0{margin-left:0}.ant-col-sm-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-sm-push-0.ant-col-rtl{right:auto}.ant-col-sm-pull-0.ant-col-rtl{left:auto}.ant-col-sm-offset-0.ant-col-rtl{margin-right:0}.ant-col-sm-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-sm-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-sm-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-sm-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-sm-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-sm-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-sm-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-sm-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-sm-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-sm-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-sm-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-sm-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-sm-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-sm-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-sm-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-sm-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-sm-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-sm-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-sm-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-sm-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-sm-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-sm-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-sm-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-sm-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-sm-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-sm-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-sm-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-sm-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-sm-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-sm-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-sm-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-sm-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-sm-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-sm-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-sm-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-sm-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-sm-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-sm-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-sm-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-sm-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-sm-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-sm-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-sm-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-sm-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-sm-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-sm-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-sm-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-sm-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-sm-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-sm-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-sm-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-sm-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-sm-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-sm-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-sm-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-sm-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-sm-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-sm-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-sm-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-sm-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-sm-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-sm-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-sm-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-sm-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-sm-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-sm-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-sm-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-sm-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-sm-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-sm-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-sm-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-sm-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width:768px){.ant-col-md-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-md-push-24{left:100%}.ant-col-md-pull-24{right:100%}.ant-col-md-offset-24{margin-left:100%}.ant-col-md-order-24{order:24}.ant-col-md-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-md-push-23{left:95.83333333%}.ant-col-md-pull-23{right:95.83333333%}.ant-col-md-offset-23{margin-left:95.83333333%}.ant-col-md-order-23{order:23}.ant-col-md-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-md-push-22{left:91.66666667%}.ant-col-md-pull-22{right:91.66666667%}.ant-col-md-offset-22{margin-left:91.66666667%}.ant-col-md-order-22{order:22}.ant-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-md-push-21{left:87.5%}.ant-col-md-pull-21{right:87.5%}.ant-col-md-offset-21{margin-left:87.5%}.ant-col-md-order-21{order:21}.ant-col-md-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-md-push-20{left:83.33333333%}.ant-col-md-pull-20{right:83.33333333%}.ant-col-md-offset-20{margin-left:83.33333333%}.ant-col-md-order-20{order:20}.ant-col-md-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-md-push-19{left:79.16666667%}.ant-col-md-pull-19{right:79.16666667%}.ant-col-md-offset-19{margin-left:79.16666667%}.ant-col-md-order-19{order:19}.ant-col-md-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-md-push-18{left:75%}.ant-col-md-pull-18{right:75%}.ant-col-md-offset-18{margin-left:75%}.ant-col-md-order-18{order:18}.ant-col-md-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-md-push-17{left:70.83333333%}.ant-col-md-pull-17{right:70.83333333%}.ant-col-md-offset-17{margin-left:70.83333333%}.ant-col-md-order-17{order:17}.ant-col-md-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-md-push-16{left:66.66666667%}.ant-col-md-pull-16{right:66.66666667%}.ant-col-md-offset-16{margin-left:66.66666667%}.ant-col-md-order-16{order:16}.ant-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-md-push-15{left:62.5%}.ant-col-md-pull-15{right:62.5%}.ant-col-md-offset-15{margin-left:62.5%}.ant-col-md-order-15{order:15}.ant-col-md-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-md-push-14{left:58.33333333%}.ant-col-md-pull-14{right:58.33333333%}.ant-col-md-offset-14{margin-left:58.33333333%}.ant-col-md-order-14{order:14}.ant-col-md-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-md-push-13{left:54.16666667%}.ant-col-md-pull-13{right:54.16666667%}.ant-col-md-offset-13{margin-left:54.16666667%}.ant-col-md-order-13{order:13}.ant-col-md-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-md-push-12{left:50%}.ant-col-md-pull-12{right:50%}.ant-col-md-offset-12{margin-left:50%}.ant-col-md-order-12{order:12}.ant-col-md-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-md-push-11{left:45.83333333%}.ant-col-md-pull-11{right:45.83333333%}.ant-col-md-offset-11{margin-left:45.83333333%}.ant-col-md-order-11{order:11}.ant-col-md-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-md-push-10{left:41.66666667%}.ant-col-md-pull-10{right:41.66666667%}.ant-col-md-offset-10{margin-left:41.66666667%}.ant-col-md-order-10{order:10}.ant-col-md-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-md-push-9{left:37.5%}.ant-col-md-pull-9{right:37.5%}.ant-col-md-offset-9{margin-left:37.5%}.ant-col-md-order-9{order:9}.ant-col-md-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-md-push-8{left:33.33333333%}.ant-col-md-pull-8{right:33.33333333%}.ant-col-md-offset-8{margin-left:33.33333333%}.ant-col-md-order-8{order:8}.ant-col-md-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-md-push-7{left:29.16666667%}.ant-col-md-pull-7{right:29.16666667%}.ant-col-md-offset-7{margin-left:29.16666667%}.ant-col-md-order-7{order:7}.ant-col-md-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-md-push-6{left:25%}.ant-col-md-pull-6{right:25%}.ant-col-md-offset-6{margin-left:25%}.ant-col-md-order-6{order:6}.ant-col-md-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-md-push-5{left:20.83333333%}.ant-col-md-pull-5{right:20.83333333%}.ant-col-md-offset-5{margin-left:20.83333333%}.ant-col-md-order-5{order:5}.ant-col-md-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-md-push-4{left:16.66666667%}.ant-col-md-pull-4{right:16.66666667%}.ant-col-md-offset-4{margin-left:16.66666667%}.ant-col-md-order-4{order:4}.ant-col-md-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-md-push-3{left:12.5%}.ant-col-md-pull-3{right:12.5%}.ant-col-md-offset-3{margin-left:12.5%}.ant-col-md-order-3{order:3}.ant-col-md-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-md-push-2{left:8.33333333%}.ant-col-md-pull-2{right:8.33333333%}.ant-col-md-offset-2{margin-left:8.33333333%}.ant-col-md-order-2{order:2}.ant-col-md-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-md-push-1{left:4.16666667%}.ant-col-md-pull-1{right:4.16666667%}.ant-col-md-offset-1{margin-left:4.16666667%}.ant-col-md-order-1{order:1}.ant-col-md-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-md-push-0{left:auto}.ant-col-md-pull-0{right:auto}.ant-col-md-offset-0{margin-left:0}.ant-col-md-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-md-push-0.ant-col-rtl{right:auto}.ant-col-md-pull-0.ant-col-rtl{left:auto}.ant-col-md-offset-0.ant-col-rtl{margin-right:0}.ant-col-md-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-md-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-md-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-md-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-md-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-md-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-md-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-md-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-md-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-md-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-md-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-md-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-md-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-md-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-md-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-md-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-md-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-md-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-md-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-md-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-md-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-md-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-md-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-md-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-md-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-md-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-md-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-md-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-md-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-md-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-md-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-md-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-md-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-md-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-md-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-md-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-md-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-md-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-md-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-md-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-md-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-md-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-md-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-md-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-md-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-md-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-md-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-md-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-md-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-md-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-md-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-md-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-md-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-md-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-md-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-md-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-md-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-md-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-md-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-md-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-md-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-md-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-md-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-md-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-md-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-md-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-md-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-md-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-md-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-md-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-md-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-md-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width:992px){.ant-col-lg-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-lg-push-24{left:100%}.ant-col-lg-pull-24{right:100%}.ant-col-lg-offset-24{margin-left:100%}.ant-col-lg-order-24{order:24}.ant-col-lg-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-lg-push-23{left:95.83333333%}.ant-col-lg-pull-23{right:95.83333333%}.ant-col-lg-offset-23{margin-left:95.83333333%}.ant-col-lg-order-23{order:23}.ant-col-lg-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-lg-push-22{left:91.66666667%}.ant-col-lg-pull-22{right:91.66666667%}.ant-col-lg-offset-22{margin-left:91.66666667%}.ant-col-lg-order-22{order:22}.ant-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-lg-push-21{left:87.5%}.ant-col-lg-pull-21{right:87.5%}.ant-col-lg-offset-21{margin-left:87.5%}.ant-col-lg-order-21{order:21}.ant-col-lg-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-lg-push-20{left:83.33333333%}.ant-col-lg-pull-20{right:83.33333333%}.ant-col-lg-offset-20{margin-left:83.33333333%}.ant-col-lg-order-20{order:20}.ant-col-lg-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-lg-push-19{left:79.16666667%}.ant-col-lg-pull-19{right:79.16666667%}.ant-col-lg-offset-19{margin-left:79.16666667%}.ant-col-lg-order-19{order:19}.ant-col-lg-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-lg-push-18{left:75%}.ant-col-lg-pull-18{right:75%}.ant-col-lg-offset-18{margin-left:75%}.ant-col-lg-order-18{order:18}.ant-col-lg-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-lg-push-17{left:70.83333333%}.ant-col-lg-pull-17{right:70.83333333%}.ant-col-lg-offset-17{margin-left:70.83333333%}.ant-col-lg-order-17{order:17}.ant-col-lg-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-lg-push-16{left:66.66666667%}.ant-col-lg-pull-16{right:66.66666667%}.ant-col-lg-offset-16{margin-left:66.66666667%}.ant-col-lg-order-16{order:16}.ant-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-lg-push-15{left:62.5%}.ant-col-lg-pull-15{right:62.5%}.ant-col-lg-offset-15{margin-left:62.5%}.ant-col-lg-order-15{order:15}.ant-col-lg-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-lg-push-14{left:58.33333333%}.ant-col-lg-pull-14{right:58.33333333%}.ant-col-lg-offset-14{margin-left:58.33333333%}.ant-col-lg-order-14{order:14}.ant-col-lg-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-lg-push-13{left:54.16666667%}.ant-col-lg-pull-13{right:54.16666667%}.ant-col-lg-offset-13{margin-left:54.16666667%}.ant-col-lg-order-13{order:13}.ant-col-lg-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-lg-push-12{left:50%}.ant-col-lg-pull-12{right:50%}.ant-col-lg-offset-12{margin-left:50%}.ant-col-lg-order-12{order:12}.ant-col-lg-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-lg-push-11{left:45.83333333%}.ant-col-lg-pull-11{right:45.83333333%}.ant-col-lg-offset-11{margin-left:45.83333333%}.ant-col-lg-order-11{order:11}.ant-col-lg-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-lg-push-10{left:41.66666667%}.ant-col-lg-pull-10{right:41.66666667%}.ant-col-lg-offset-10{margin-left:41.66666667%}.ant-col-lg-order-10{order:10}.ant-col-lg-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-lg-push-9{left:37.5%}.ant-col-lg-pull-9{right:37.5%}.ant-col-lg-offset-9{margin-left:37.5%}.ant-col-lg-order-9{order:9}.ant-col-lg-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-lg-push-8{left:33.33333333%}.ant-col-lg-pull-8{right:33.33333333%}.ant-col-lg-offset-8{margin-left:33.33333333%}.ant-col-lg-order-8{order:8}.ant-col-lg-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-lg-push-7{left:29.16666667%}.ant-col-lg-pull-7{right:29.16666667%}.ant-col-lg-offset-7{margin-left:29.16666667%}.ant-col-lg-order-7{order:7}.ant-col-lg-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-lg-push-6{left:25%}.ant-col-lg-pull-6{right:25%}.ant-col-lg-offset-6{margin-left:25%}.ant-col-lg-order-6{order:6}.ant-col-lg-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-lg-push-5{left:20.83333333%}.ant-col-lg-pull-5{right:20.83333333%}.ant-col-lg-offset-5{margin-left:20.83333333%}.ant-col-lg-order-5{order:5}.ant-col-lg-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-lg-push-4{left:16.66666667%}.ant-col-lg-pull-4{right:16.66666667%}.ant-col-lg-offset-4{margin-left:16.66666667%}.ant-col-lg-order-4{order:4}.ant-col-lg-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-lg-push-3{left:12.5%}.ant-col-lg-pull-3{right:12.5%}.ant-col-lg-offset-3{margin-left:12.5%}.ant-col-lg-order-3{order:3}.ant-col-lg-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-lg-push-2{left:8.33333333%}.ant-col-lg-pull-2{right:8.33333333%}.ant-col-lg-offset-2{margin-left:8.33333333%}.ant-col-lg-order-2{order:2}.ant-col-lg-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-lg-push-1{left:4.16666667%}.ant-col-lg-pull-1{right:4.16666667%}.ant-col-lg-offset-1{margin-left:4.16666667%}.ant-col-lg-order-1{order:1}.ant-col-lg-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-lg-push-0{left:auto}.ant-col-lg-pull-0{right:auto}.ant-col-lg-offset-0{margin-left:0}.ant-col-lg-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-lg-push-0.ant-col-rtl{right:auto}.ant-col-lg-pull-0.ant-col-rtl{left:auto}.ant-col-lg-offset-0.ant-col-rtl{margin-right:0}.ant-col-lg-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-lg-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-lg-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-lg-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-lg-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-lg-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-lg-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-lg-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-lg-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-lg-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-lg-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-lg-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-lg-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-lg-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-lg-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-lg-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-lg-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-lg-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-lg-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-lg-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-lg-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-lg-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-lg-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-lg-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-lg-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-lg-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-lg-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-lg-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-lg-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-lg-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-lg-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-lg-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-lg-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-lg-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-lg-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-lg-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-lg-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-lg-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-lg-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-lg-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-lg-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-lg-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-lg-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-lg-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-lg-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-lg-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-lg-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-lg-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-lg-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-lg-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-lg-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-lg-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-lg-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-lg-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-lg-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-lg-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-lg-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-lg-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-lg-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-lg-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-lg-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-lg-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-lg-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-lg-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-lg-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-lg-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-lg-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-lg-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-lg-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-lg-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-lg-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-lg-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width:1200px){.ant-col-xl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xl-push-24{left:100%}.ant-col-xl-pull-24{right:100%}.ant-col-xl-offset-24{margin-left:100%}.ant-col-xl-order-24{order:24}.ant-col-xl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xl-push-23{left:95.83333333%}.ant-col-xl-pull-23{right:95.83333333%}.ant-col-xl-offset-23{margin-left:95.83333333%}.ant-col-xl-order-23{order:23}.ant-col-xl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xl-push-22{left:91.66666667%}.ant-col-xl-pull-22{right:91.66666667%}.ant-col-xl-offset-22{margin-left:91.66666667%}.ant-col-xl-order-22{order:22}.ant-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xl-push-21{left:87.5%}.ant-col-xl-pull-21{right:87.5%}.ant-col-xl-offset-21{margin-left:87.5%}.ant-col-xl-order-21{order:21}.ant-col-xl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xl-push-20{left:83.33333333%}.ant-col-xl-pull-20{right:83.33333333%}.ant-col-xl-offset-20{margin-left:83.33333333%}.ant-col-xl-order-20{order:20}.ant-col-xl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xl-push-19{left:79.16666667%}.ant-col-xl-pull-19{right:79.16666667%}.ant-col-xl-offset-19{margin-left:79.16666667%}.ant-col-xl-order-19{order:19}.ant-col-xl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xl-push-18{left:75%}.ant-col-xl-pull-18{right:75%}.ant-col-xl-offset-18{margin-left:75%}.ant-col-xl-order-18{order:18}.ant-col-xl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xl-push-17{left:70.83333333%}.ant-col-xl-pull-17{right:70.83333333%}.ant-col-xl-offset-17{margin-left:70.83333333%}.ant-col-xl-order-17{order:17}.ant-col-xl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xl-push-16{left:66.66666667%}.ant-col-xl-pull-16{right:66.66666667%}.ant-col-xl-offset-16{margin-left:66.66666667%}.ant-col-xl-order-16{order:16}.ant-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xl-push-15{left:62.5%}.ant-col-xl-pull-15{right:62.5%}.ant-col-xl-offset-15{margin-left:62.5%}.ant-col-xl-order-15{order:15}.ant-col-xl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xl-push-14{left:58.33333333%}.ant-col-xl-pull-14{right:58.33333333%}.ant-col-xl-offset-14{margin-left:58.33333333%}.ant-col-xl-order-14{order:14}.ant-col-xl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xl-push-13{left:54.16666667%}.ant-col-xl-pull-13{right:54.16666667%}.ant-col-xl-offset-13{margin-left:54.16666667%}.ant-col-xl-order-13{order:13}.ant-col-xl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xl-push-12{left:50%}.ant-col-xl-pull-12{right:50%}.ant-col-xl-offset-12{margin-left:50%}.ant-col-xl-order-12{order:12}.ant-col-xl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xl-push-11{left:45.83333333%}.ant-col-xl-pull-11{right:45.83333333%}.ant-col-xl-offset-11{margin-left:45.83333333%}.ant-col-xl-order-11{order:11}.ant-col-xl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xl-push-10{left:41.66666667%}.ant-col-xl-pull-10{right:41.66666667%}.ant-col-xl-offset-10{margin-left:41.66666667%}.ant-col-xl-order-10{order:10}.ant-col-xl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xl-push-9{left:37.5%}.ant-col-xl-pull-9{right:37.5%}.ant-col-xl-offset-9{margin-left:37.5%}.ant-col-xl-order-9{order:9}.ant-col-xl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xl-push-8{left:33.33333333%}.ant-col-xl-pull-8{right:33.33333333%}.ant-col-xl-offset-8{margin-left:33.33333333%}.ant-col-xl-order-8{order:8}.ant-col-xl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xl-push-7{left:29.16666667%}.ant-col-xl-pull-7{right:29.16666667%}.ant-col-xl-offset-7{margin-left:29.16666667%}.ant-col-xl-order-7{order:7}.ant-col-xl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xl-push-6{left:25%}.ant-col-xl-pull-6{right:25%}.ant-col-xl-offset-6{margin-left:25%}.ant-col-xl-order-6{order:6}.ant-col-xl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xl-push-5{left:20.83333333%}.ant-col-xl-pull-5{right:20.83333333%}.ant-col-xl-offset-5{margin-left:20.83333333%}.ant-col-xl-order-5{order:5}.ant-col-xl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xl-push-4{left:16.66666667%}.ant-col-xl-pull-4{right:16.66666667%}.ant-col-xl-offset-4{margin-left:16.66666667%}.ant-col-xl-order-4{order:4}.ant-col-xl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xl-push-3{left:12.5%}.ant-col-xl-pull-3{right:12.5%}.ant-col-xl-offset-3{margin-left:12.5%}.ant-col-xl-order-3{order:3}.ant-col-xl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xl-push-2{left:8.33333333%}.ant-col-xl-pull-2{right:8.33333333%}.ant-col-xl-offset-2{margin-left:8.33333333%}.ant-col-xl-order-2{order:2}.ant-col-xl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xl-push-1{left:4.16666667%}.ant-col-xl-pull-1{right:4.16666667%}.ant-col-xl-offset-1{margin-left:4.16666667%}.ant-col-xl-order-1{order:1}.ant-col-xl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xl-push-0{left:auto}.ant-col-xl-pull-0{right:auto}.ant-col-xl-offset-0{margin-left:0}.ant-col-xl-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xl-push-0.ant-col-rtl{right:auto}.ant-col-xl-pull-0.ant-col-rtl{left:auto}.ant-col-xl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width:1600px){.ant-col-xxl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xxl-push-24{left:100%}.ant-col-xxl-pull-24{right:100%}.ant-col-xxl-offset-24{margin-left:100%}.ant-col-xxl-order-24{order:24}.ant-col-xxl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xxl-push-23{left:95.83333333%}.ant-col-xxl-pull-23{right:95.83333333%}.ant-col-xxl-offset-23{margin-left:95.83333333%}.ant-col-xxl-order-23{order:23}.ant-col-xxl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xxl-push-22{left:91.66666667%}.ant-col-xxl-pull-22{right:91.66666667%}.ant-col-xxl-offset-22{margin-left:91.66666667%}.ant-col-xxl-order-22{order:22}.ant-col-xxl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xxl-push-21{left:87.5%}.ant-col-xxl-pull-21{right:87.5%}.ant-col-xxl-offset-21{margin-left:87.5%}.ant-col-xxl-order-21{order:21}.ant-col-xxl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xxl-push-20{left:83.33333333%}.ant-col-xxl-pull-20{right:83.33333333%}.ant-col-xxl-offset-20{margin-left:83.33333333%}.ant-col-xxl-order-20{order:20}.ant-col-xxl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xxl-push-19{left:79.16666667%}.ant-col-xxl-pull-19{right:79.16666667%}.ant-col-xxl-offset-19{margin-left:79.16666667%}.ant-col-xxl-order-19{order:19}.ant-col-xxl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xxl-push-18{left:75%}.ant-col-xxl-pull-18{right:75%}.ant-col-xxl-offset-18{margin-left:75%}.ant-col-xxl-order-18{order:18}.ant-col-xxl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xxl-push-17{left:70.83333333%}.ant-col-xxl-pull-17{right:70.83333333%}.ant-col-xxl-offset-17{margin-left:70.83333333%}.ant-col-xxl-order-17{order:17}.ant-col-xxl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xxl-push-16{left:66.66666667%}.ant-col-xxl-pull-16{right:66.66666667%}.ant-col-xxl-offset-16{margin-left:66.66666667%}.ant-col-xxl-order-16{order:16}.ant-col-xxl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xxl-push-15{left:62.5%}.ant-col-xxl-pull-15{right:62.5%}.ant-col-xxl-offset-15{margin-left:62.5%}.ant-col-xxl-order-15{order:15}.ant-col-xxl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xxl-push-14{left:58.33333333%}.ant-col-xxl-pull-14{right:58.33333333%}.ant-col-xxl-offset-14{margin-left:58.33333333%}.ant-col-xxl-order-14{order:14}.ant-col-xxl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xxl-push-13{left:54.16666667%}.ant-col-xxl-pull-13{right:54.16666667%}.ant-col-xxl-offset-13{margin-left:54.16666667%}.ant-col-xxl-order-13{order:13}.ant-col-xxl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xxl-push-12{left:50%}.ant-col-xxl-pull-12{right:50%}.ant-col-xxl-offset-12{margin-left:50%}.ant-col-xxl-order-12{order:12}.ant-col-xxl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xxl-push-11{left:45.83333333%}.ant-col-xxl-pull-11{right:45.83333333%}.ant-col-xxl-offset-11{margin-left:45.83333333%}.ant-col-xxl-order-11{order:11}.ant-col-xxl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xxl-push-10{left:41.66666667%}.ant-col-xxl-pull-10{right:41.66666667%}.ant-col-xxl-offset-10{margin-left:41.66666667%}.ant-col-xxl-order-10{order:10}.ant-col-xxl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xxl-push-9{left:37.5%}.ant-col-xxl-pull-9{right:37.5%}.ant-col-xxl-offset-9{margin-left:37.5%}.ant-col-xxl-order-9{order:9}.ant-col-xxl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xxl-push-8{left:33.33333333%}.ant-col-xxl-pull-8{right:33.33333333%}.ant-col-xxl-offset-8{margin-left:33.33333333%}.ant-col-xxl-order-8{order:8}.ant-col-xxl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xxl-push-7{left:29.16666667%}.ant-col-xxl-pull-7{right:29.16666667%}.ant-col-xxl-offset-7{margin-left:29.16666667%}.ant-col-xxl-order-7{order:7}.ant-col-xxl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xxl-push-6{left:25%}.ant-col-xxl-pull-6{right:25%}.ant-col-xxl-offset-6{margin-left:25%}.ant-col-xxl-order-6{order:6}.ant-col-xxl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xxl-push-5{left:20.83333333%}.ant-col-xxl-pull-5{right:20.83333333%}.ant-col-xxl-offset-5{margin-left:20.83333333%}.ant-col-xxl-order-5{order:5}.ant-col-xxl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xxl-push-4{left:16.66666667%}.ant-col-xxl-pull-4{right:16.66666667%}.ant-col-xxl-offset-4{margin-left:16.66666667%}.ant-col-xxl-order-4{order:4}.ant-col-xxl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xxl-push-3{left:12.5%}.ant-col-xxl-pull-3{right:12.5%}.ant-col-xxl-offset-3{margin-left:12.5%}.ant-col-xxl-order-3{order:3}.ant-col-xxl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xxl-push-2{left:8.33333333%}.ant-col-xxl-pull-2{right:8.33333333%}.ant-col-xxl-offset-2{margin-left:8.33333333%}.ant-col-xxl-order-2{order:2}.ant-col-xxl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xxl-push-1{left:4.16666667%}.ant-col-xxl-pull-1{right:4.16666667%}.ant-col-xxl-offset-1{margin-left:4.16666667%}.ant-col-xxl-order-1{order:1}.ant-col-xxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxl-push-0{left:auto}.ant-col-xxl-pull-0{right:auto}.ant-col-xxl-offset-0{margin-left:0}.ant-col-xxl-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xxl-push-0.ant-col-rtl{right:auto}.ant-col-xxl-pull-0.ant-col-rtl{left:auto}.ant-col-xxl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xxl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xxl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xxl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xxl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xxl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xxl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xxl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xxl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xxl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xxl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xxl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xxl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xxl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xxl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xxl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xxl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xxl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xxl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xxl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xxl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xxl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xxl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xxl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xxl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xxl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xxl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xxl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xxl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xxl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xxl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xxl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xxl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xxl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xxl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xxl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xxl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xxl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xxl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xxl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xxl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xxl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xxl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xxl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xxl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xxl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xxl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xxl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xxl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xxl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xxl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xxl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xxl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xxl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xxl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xxl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xxl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xxl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xxl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xxl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xxl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xxl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xxl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xxl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xxl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xxl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xxl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xxl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xxl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xxl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xxl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xxl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xxl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}.ant-row-rtl{direction:rtl}.ant-carousel{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum"}.ant-carousel .slick-slider{position:relative;display:block;box-sizing:border-box;touch-action:pan-y;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.ant-carousel .slick-list{position:relative;display:block;margin:0;padding:0;overflow:hidden}.ant-carousel .slick-list:focus{outline:none}.ant-carousel .slick-list.dragging{cursor:pointer}.ant-carousel .slick-list .slick-slide{pointer-events:none}.ant-carousel .slick-list .slick-slide input.ant-checkbox-input,.ant-carousel .slick-list .slick-slide input.ant-radio-input{visibility:hidden}.ant-carousel .slick-list .slick-slide.slick-active{pointer-events:auto}.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input,.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input{visibility:visible}.ant-carousel .slick-list .slick-slide>div>div{vertical-align:bottom}.ant-carousel .slick-slider .slick-list,.ant-carousel .slick-slider .slick-track{transform:translateZ(0);touch-action:pan-y}.ant-carousel .slick-track{position:relative;top:0;left:0;display:block}.ant-carousel .slick-track:after,.ant-carousel .slick-track:before{display:table;content:""}.ant-carousel .slick-track:after{clear:both}.slick-loading .ant-carousel .slick-track{visibility:hidden}.ant-carousel .slick-slide{display:none;float:left;height:100%;min-height:1px}.ant-carousel .slick-slide img{display:block}.ant-carousel .slick-slide.slick-loading img{display:none}.ant-carousel .slick-slide.dragging img{pointer-events:none}.ant-carousel .slick-initialized .slick-slide{display:block}.ant-carousel .slick-loading .slick-slide{visibility:hidden}.ant-carousel .slick-vertical .slick-slide{display:block;height:auto}.ant-carousel .slick-arrow.slick-hidden{display:none}.ant-carousel .slick-next,.ant-carousel .slick-prev{position:absolute;top:50%;display:block;width:20px;height:20px;margin-top:-10px;padding:0;font-size:0;line-height:0;border:0;cursor:pointer}.ant-carousel .slick-next,.ant-carousel .slick-next:focus,.ant-carousel .slick-next:hover,.ant-carousel .slick-prev,.ant-carousel .slick-prev:focus,.ant-carousel .slick-prev:hover{color:transparent;background:transparent;outline:none}.ant-carousel .slick-next:focus:before,.ant-carousel .slick-next:hover:before,.ant-carousel .slick-prev:focus:before,.ant-carousel .slick-prev:hover:before{opacity:1}.ant-carousel .slick-next.slick-disabled:before,.ant-carousel .slick-prev.slick-disabled:before{opacity:.25}.ant-carousel .slick-prev{left:-25px}.ant-carousel .slick-prev:before{content:"←"}.ant-carousel .slick-next{right:-25px}.ant-carousel .slick-next:before{content:"→"}.ant-carousel .slick-dots{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex!important;justify-content:center;margin-right:15%;margin-left:15%;padding-left:0;list-style:none}.ant-carousel .slick-dots-bottom{bottom:12px}.ant-carousel .slick-dots-top{top:12px;bottom:auto}.ant-carousel .slick-dots li{position:relative;display:inline-block;flex:0 1 auto;box-sizing:initial;width:16px;height:3px;margin:0 3px;padding:0;text-align:center;text-indent:-999px;vertical-align:top;transition:all .5s}.ant-carousel .slick-dots li button{display:block;width:100%;height:3px;padding:0;color:transparent;font-size:0;background:#fff;border:0;border-radius:1px;outline:none;cursor:pointer;opacity:.3;transition:all .5s}.ant-carousel .slick-dots li button:focus,.ant-carousel .slick-dots li button:hover{opacity:.75}.ant-carousel .slick-dots li.slick-active{width:24px}.ant-carousel .slick-dots li.slick-active button{background:#fff;opacity:1}.ant-carousel .slick-dots li.slick-active:focus,.ant-carousel .slick-dots li.slick-active:hover{opacity:1}.ant-carousel-vertical .slick-dots{top:50%;bottom:auto;flex-direction:column;width:3px;height:auto;margin:0;transform:translateY(-50%)}.ant-carousel-vertical .slick-dots-left{right:auto;left:12px}.ant-carousel-vertical .slick-dots-right{right:12px;left:auto}.ant-carousel-vertical .slick-dots li{width:3px;height:16px;margin:4px 2px;vertical-align:initial}.ant-carousel-vertical .slick-dots li button{width:3px;height:16px}.ant-carousel-vertical .slick-dots li.slick-active,.ant-carousel-vertical .slick-dots li.slick-active button{width:3px;height:24px}.ant-carousel-rtl{direction:rtl}.ant-carousel-rtl .ant-carousel .slick-track{right:0;left:auto}.ant-carousel-rtl .ant-carousel .slick-prev{right:-25px;left:auto}.ant-carousel-rtl .ant-carousel .slick-prev:before{content:"→"}.ant-carousel-rtl .ant-carousel .slick-next{right:auto;left:-25px}.ant-carousel-rtl .ant-carousel .slick-next:before{content:"←"}.ant-carousel-rtl.ant-carousel .slick-dots{flex-direction:row-reverse}.ant-carousel-rtl.ant-carousel-vertical .slick-dots{flex-direction:column}.ant-cascader{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum"}.ant-cascader-input.ant-input{position:static;width:100%;padding-right:24px;background-color:initial!important;cursor:pointer}.ant-cascader-picker-show-search .ant-cascader-input.ant-input{position:relative}.ant-cascader-picker{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:inline-block;background-color:#fff;border-radius:2px;outline:0;cursor:pointer;transition:color .3s}.ant-cascader-picker-with-value .ant-cascader-picker-label{color:transparent}.ant-cascader-picker-disabled{color:rgba(0,0,0,.25);background:#f5f5f5;cursor:not-allowed}.ant-cascader-picker-disabled .ant-cascader-input{cursor:not-allowed}.ant-cascader-picker:focus .ant-cascader-input{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-cascader-picker-borderless .ant-cascader-input{border-color:transparent!important;box-shadow:none!important}.ant-cascader-picker-show-search.ant-cascader-picker-focused{color:rgba(0,0,0,.25)}.ant-cascader-picker-label{position:absolute;top:50%;left:0;width:100%;height:20px;margin-top:-10px;padding:0 20px 0 12px;overflow:hidden;line-height:20px;white-space:nowrap;text-overflow:ellipsis}.ant-cascader-picker-clear{position:absolute;top:50%;right:12px;z-index:2;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;line-height:12px;background:#fff;cursor:pointer;opacity:0;transition:color .3s ease,opacity .15s ease}.ant-cascader-picker-clear:hover{color:rgba(0,0,0,.45)}.ant-cascader-picker:hover .ant-cascader-picker-clear{opacity:1}.ant-cascader-picker-arrow{position:absolute;top:50%;right:12px;z-index:1;width:12px;height:12px;margin-top:-6px;color:rgba(0,0,0,.25);font-size:12px;line-height:12px}.ant-cascader-picker-label:hover+.ant-cascader-input:not(.ant-cascader-picker-disabled .ant-cascader-picker-label:hover+.ant-cascader-input){border-color:#40a9ff;border-right-width:1px!important}.ant-cascader-picker-small .ant-cascader-picker-arrow,.ant-cascader-picker-small .ant-cascader-picker-clear{right:8px}.ant-cascader-menus{position:absolute;z-index:1050;font-size:14px;white-space:nowrap;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-cascader-menus ol,.ant-cascader-menus ul{margin:0;list-style:none}.ant-cascader-menus-empty,.ant-cascader-menus-hidden{display:none}.ant-cascader-menus.ant-slide-up-appear.ant-slide-up-appear-active.ant-cascader-menus-placement-bottomLeft,.ant-cascader-menus.ant-slide-up-enter.ant-slide-up-enter-active.ant-cascader-menus-placement-bottomLeft{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn}.ant-cascader-menus.ant-slide-up-appear.ant-slide-up-appear-active.ant-cascader-menus-placement-topLeft,.ant-cascader-menus.ant-slide-up-enter.ant-slide-up-enter-active.ant-cascader-menus-placement-topLeft{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn}.ant-cascader-menus.ant-slide-up-leave.ant-slide-up-leave-active.ant-cascader-menus-placement-bottomLeft{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut}.ant-cascader-menus.ant-slide-up-leave.ant-slide-up-leave-active.ant-cascader-menus-placement-topLeft{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut}.ant-cascader-menu{display:inline-block;min-width:111px;height:180px;margin:0;padding:4px 0;overflow:auto;vertical-align:top;list-style:none;border-right:1px solid #f0f0f0;-ms-overflow-style:-ms-autohiding-scrollbar}.ant-cascader-menu:first-child{border-radius:2px 0 0 2px}.ant-cascader-menu:last-child{margin-right:-1px;border-right-color:transparent;border-radius:0 2px 2px 0}.ant-cascader-menu:only-child{border-radius:2px}.ant-cascader-menu-item{padding:5px 12px;overflow:hidden;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-cascader-menu-item:hover{background:#f5f5f5}.ant-cascader-menu-item-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-cascader-menu-item-disabled:hover{background:transparent}.ant-cascader-menu-empty .ant-cascader-menu-item{color:rgba(0,0,0,.25);cursor:default;pointer-events:none}.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover{font-weight:600;background-color:#e6f7ff}.ant-cascader-menu-item-expand{position:relative;padding-right:24px}.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-loading-icon{position:absolute;right:12px;color:rgba(0,0,0,.45);font-size:10px}.ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-disabled.ant-cascader-menu-item-loading-icon{color:rgba(0,0,0,.25)}.ant-cascader-menu-item .ant-cascader-menu-item-keyword{color:#ff4d4f}.ant-cascader-picker-rtl .ant-cascader-input.ant-input{padding-right:11px;padding-left:24px;text-align:right}.ant-cascader-picker-rtl{direction:rtl}.ant-cascader-picker-rtl .ant-cascader-picker-label{padding:0 12px 0 20px;text-align:right}.ant-cascader-picker-rtl .ant-cascader-picker-arrow,.ant-cascader-picker-rtl .ant-cascader-picker-clear{right:auto;left:12px}.ant-cascader-picker-rtl.ant-cascader-picker-small .ant-cascader-picker-arrow,.ant-cascader-picker-rtl.ant-cascader-picker-small .ant-cascader-picker-clear{right:auto;left:8px}.ant-cascader-menu-rtl .ant-cascader-menu{direction:rtl;border-right:none;border-left:1px solid #f0f0f0}.ant-cascader-menu-rtl .ant-cascader-menu:first-child{border-radius:0 2px 2px 0}.ant-cascader-menu-rtl .ant-cascader-menu:last-child{margin-right:0;margin-left:-1px;border-left-color:transparent;border-radius:2px 0 0 2px}.ant-cascader-menu-rtl .ant-cascader-menu:only-child{border-radius:2px}.ant-cascader-menu-rtl .ant-cascader-menu-item-expand{padding-right:12px;padding-left:24px}.ant-cascader-menu-rtl .ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-rtl .ant-cascader-menu-item-loading-icon{right:auto;left:12px}.ant-cascader-menu-rtl .ant-cascader-menu-item-loading-icon{transform:scaleY(-1)}.ant-input-affix-wrapper{position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;display:inline-flex}.ant-input-affix-wrapper::-moz-placeholder{opacity:1}.ant-input-affix-wrapper:-ms-input-placeholder{color:#bfbfbf}.ant-input-affix-wrapper::placeholder{color:#bfbfbf}.ant-input-affix-wrapper:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:-ms-input-placeholder{text-overflow:ellipsis}.ant-input-affix-wrapper:placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-rtl .ant-input-affix-wrapper:hover{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper-focused,.ant-input-affix-wrapper:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-rtl .ant-input-affix-wrapper-focused,.ant-input-rtl .ant-input-affix-wrapper:focus{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-affix-wrapper-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-affix-wrapper[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-affix-wrapper[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-affix-wrapper-borderless,.ant-input-affix-wrapper-borderless-disabled,.ant-input-affix-wrapper-borderless-focused,.ant-input-affix-wrapper-borderless:focus,.ant-input-affix-wrapper-borderless:hover,.ant-input-affix-wrapper-borderless[disabled]{background-color:initial;border:none;box-shadow:none}textarea.ant-input-affix-wrapper{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-affix-wrapper-lg{padding:6.5px 11px;font-size:16px}.ant-input-affix-wrapper-sm{padding:0 7px}.ant-input-affix-wrapper-rtl{direction:rtl}.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:#40a9ff;border-right-width:1px!important;z-index:1}.ant-input-rtl .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-right-width:0;border-left-width:1px!important}.ant-input-search-with-button .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{z-index:0}.ant-input-affix-wrapper-focused,.ant-input-affix-wrapper:focus{z-index:1}.ant-input-affix-wrapper-disabled .ant-input[disabled]{background:transparent}.ant-input-affix-wrapper>input.ant-input{padding:0;border:none;outline:none}.ant-input-affix-wrapper>input.ant-input:focus{box-shadow:none}.ant-input-affix-wrapper:before{width:0;visibility:hidden;content:"\a0"}.ant-input-prefix,.ant-input-suffix{display:flex;flex:none;align-items:center}.ant-input-prefix{margin-right:4px}.ant-input-suffix{margin-left:4px}.ant-input-clear-icon{margin:0 4px;color:rgba(0,0,0,.25);font-size:12px;vertical-align:-1px;cursor:pointer;transition:color .3s}.ant-input-clear-icon:hover{color:rgba(0,0,0,.45)}.ant-input-clear-icon:active{color:rgba(0,0,0,.85)}.ant-input-clear-icon-hidden{visibility:hidden}.ant-input-clear-icon:last-child{margin-right:0}.ant-input-affix-wrapper-textarea-with-clear-btn{padding:0!important;border:0!important}.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input-clear-icon{position:absolute;top:8px;right:8px;z-index:1}.ant-input{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s}.ant-input::-moz-placeholder{opacity:1}.ant-input:-ms-input-placeholder{color:#bfbfbf}.ant-input::placeholder{color:#bfbfbf}.ant-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-input:placeholder-shown{text-overflow:ellipsis}.ant-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-rtl .ant-input:hover{border-right-width:0;border-left-width:1px!important}.ant-input-focused,.ant-input:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-rtl .ant-input-focused,.ant-input-rtl .ant-input:focus{border-right-width:0;border-left-width:1px!important}.ant-input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-borderless,.ant-input-borderless-disabled,.ant-input-borderless-focused,.ant-input-borderless:focus,.ant-input-borderless:hover,.ant-input-borderless[disabled]{background-color:initial;border:none;box-shadow:none}textarea.ant-input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-lg{padding:6.5px 11px;font-size:16px}.ant-input-sm{padding:0 7px}.ant-input-rtl{direction:rtl}.ant-input-group{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:table;width:100%;border-collapse:initial;border-spacing:0}.ant-input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-group .ant-input:focus,.ant-input-group .ant-input:hover{z-index:1;border-right-width:1px}.ant-input-search-with-button .ant-input-group .ant-input:hover{z-index:0}.ant-input-group-addon{position:relative;padding:0 11px;color:rgba(0,0,0,.85);font-weight:400;font-size:14px;text-align:center;background-color:#fafafa;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none}.ant-input-group-addon .ant-select-focused .ant-select-selector,.ant-input-group-addon .ant-select-open .ant-select-selector{color:#1890ff}.ant-input-group-addon:first-child,.ant-input-group-addon:first-child .ant-select .ant-select-selector,.ant-input-group>.ant-input:first-child,.ant-input-group>.ant-input:first-child .ant-select .ant-select-selector{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group-addon:last-child,.ant-input-group-addon:last-child .ant-select .ant-select-selector,.ant-input-group>.ant-input:last-child,.ant-input-group>.ant-input:last-child .ant-select .ant-select-selector{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{padding:6.5px 11px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{padding:0 7px}.ant-input-group-lg .ant-select-single .ant-select-selector{height:40px}.ant-input-group-sm .ant-select-single .ant-select-selector{height:24px}.ant-input-group .ant-input-affix-wrapper:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-group.ant-input-group-compact{display:block}.ant-input-group.ant-input-group-compact:before{display:table;content:""}.ant-input-group.ant-input-group-compact:after{display:table;clear:both;content:""}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-input-affix-wrapper,.ant-input-group.ant-input-group-compact>.ant-picker-range{display:inline-flex}.ant-input-group.ant-input-group-compact>:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-group.ant-input-group-compact .ant-input{float:none}.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector{border-right-width:1px;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-select-focused,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-arrow,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:hover{z-index:1}.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>:last-child{border-right-width:1px;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper{margin-left:-1px}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper .ant-input-affix-wrapper,.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input-group-addon>.ant-input-search-button{border-radius:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:2px 0 0 2px}.ant-input-group-rtl .ant-input-group-addon:first-child,.ant-input-group>.ant-input-rtl:first-child{border-radius:0 2px 2px 0}.ant-input-group-rtl .ant-input-group-addon:first-child{border-right:1px solid #d9d9d9;border-left:0}.ant-input-group-rtl .ant-input-group-addon:last-child{border-right:0;border-left:1px solid #d9d9d9}.ant-input-group-rtl.ant-input-group-addon:last-child,.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child),.ant-input-group-rtl.ant-input-group>.ant-input:last-child{border-radius:2px 0 0 2px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-radius:0 2px 2px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>:not(:last-child){margin-right:0;margin-left:-1px;border-left-width:1px}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>:first-child{border-radius:0 2px 2px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>:last-child{border-left-width:1px;border-radius:2px 0 0 2px}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl+.ant-input-group-wrapper-rtl{margin-right:-1px;margin-left:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:0 2px 2px 0}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top}.ant-input-password-icon{color:rgba(0,0,0,.45);cursor:pointer;transition:all .3s}.ant-input-password-icon:hover{color:rgba(0,0,0,.85)}.ant-input[type=color]{height:32px}.ant-input[type=color].ant-input-lg{height:40px}.ant-input[type=color].ant-input-sm{height:24px;padding-top:3px;padding-bottom:3px}.ant-input-textarea-show-count:after{float:right;color:rgba(0,0,0,.45);white-space:nowrap;content:attr(data-count);pointer-events:none}.ant-input-search .ant-input:focus,.ant-input-search .ant-input:hover{border-color:#40a9ff}.ant-input-search .ant-input:focus+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search .ant-input:hover+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-left-color:#40a9ff}.ant-input-search .ant-input-affix-wrapper{border-radius:0}.ant-input-search .ant-input-lg{line-height:1.5713}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child{left:-1px;padding:0;border:0}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button{padding-top:0;padding-bottom:0;border-radius:0 2px 2px 0}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary){color:rgba(0,0,0,.45)}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary).ant-btn-loading:before{top:0;right:0;bottom:0;left:0}.ant-input-search-button{height:32px}.ant-input-search-button:focus,.ant-input-search-button:hover{z-index:1}.ant-input-search-large .ant-input-search-button{height:40px}.ant-input-search-small .ant-input-search-button{height:24px}.ant-input-group-rtl,.ant-input-group-wrapper-rtl{direction:rtl}.ant-input-affix-wrapper.ant-input-affix-wrapper-rtl>input.ant-input{border:none;outline:none}.ant-input-affix-wrapper-rtl .ant-input-prefix{margin:0 0 0 4px}.ant-input-affix-wrapper-rtl .ant-input-suffix{margin:0 4px 0 0}.ant-input-textarea-rtl{direction:rtl}.ant-input-textarea-rtl.ant-input-textarea-show-count:after{text-align:left}.ant-input-affix-wrapper-rtl .ant-input-clear-icon:last-child{margin-right:4px;margin-left:0}.ant-input-affix-wrapper-rtl .ant-input-clear-icon{right:auto;left:8px}.ant-input-search-rtl{direction:rtl}.ant-input-search-rtl .ant-input:focus+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search-rtl .ant-input:hover+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-right-color:#40a9ff;border-left-color:#d9d9d9}.ant-input-search-rtl>.ant-input-group>.ant-input-affix-wrapper-focused,.ant-input-search-rtl>.ant-input-group>.ant-input-affix-wrapper:hover{border-right-color:#40a9ff}.ant-input-search-rtl>.ant-input-group>.ant-input-group-addon{right:-1px;left:auto}.ant-input-search-rtl>.ant-input-group>.ant-input-group-addon .ant-input-search-button{border-radius:2px 0 0 2px}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.ant-input{height:32px}.ant-input-lg{height:40px}.ant-input-sm{height:24px}.ant-input-affix-wrapper>input.ant-input{height:auto}}.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-checkbox-input:focus+.ant-checkbox-inner,.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner{border-color:#1890ff}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;content:""}.ant-checkbox-wrapper:hover .ant-checkbox:after,.ant-checkbox:hover:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:initial;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:initial;-webkit-animation-name:none;animation-name:none}.ant-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:"\a0"}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-block}.ant-checkbox-group-item{margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}.ant-collapse{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";background-color:#fafafa;border:1px solid #d9d9d9;border-bottom:0;border-radius:2px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 2px 2px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 16px;color:rgba(0,0,0,.85);line-height:1.5715;cursor:pointer;transition:all .3s,visibility 0s}.ant-collapse>.ant-collapse-item>.ant-collapse-header:before{display:table;content:""}.ant-collapse>.ant-collapse-item>.ant-collapse-header:after{display:table;clear:both;content:""}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{display:inline-block;margin-right:12px;font-size:12px;vertical-align:-1px}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transition:transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{float:right}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus{outline:none}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only{cursor:default}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text{cursor:pointer}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{position:absolute;top:50%;right:16px;left:auto;margin:0;transform:translateY(-50%)}.ant-collapse-content{color:rgba(0,0,0,.85);background-color:#fff;border-top:1px solid #d9d9d9}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-hidden{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 2px 2px}.ant-collapse-borderless{background-color:#fafafa;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:initial;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse-ghost{background-color:initial;border:0}.ant-collapse-ghost>.ant-collapse-item{border-bottom:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content{background-color:initial;border-top:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:12px;padding-bottom:12px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-collapse-rtl{direction:rtl}.ant-collapse-rtl .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transform:rotate(180deg)}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{float:left}.ant-collapse-rtl.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-right:12px;padding-left:0}.ant-comment{position:relative;background-color:inherit}.ant-comment-inner{display:flex;padding:16px 0}.ant-comment-avatar{position:relative;flex-shrink:0;margin-right:12px;cursor:pointer}.ant-comment-avatar img{width:32px;height:32px;border-radius:50%}.ant-comment-content{position:relative;flex:1 1 auto;min-width:1px;font-size:14px;word-wrap:break-word}.ant-comment-content-author{display:flex;flex-wrap:wrap;justify-content:flex-start;margin-bottom:4px;font-size:14px}.ant-comment-content-author>a,.ant-comment-content-author>span{padding-right:8px;font-size:12px;line-height:18px}.ant-comment-content-author-name{color:rgba(0,0,0,.45);font-size:14px;transition:color .3s}.ant-comment-content-author-name>*,.ant-comment-content-author-name>:hover{color:rgba(0,0,0,.45)}.ant-comment-content-author-time{color:#ccc;white-space:nowrap;cursor:auto}.ant-comment-content-detail p{margin-bottom:inherit;white-space:pre-wrap}.ant-comment-actions{margin-top:12px;margin-bottom:inherit;padding-left:0}.ant-comment-actions>li{display:inline-block;color:rgba(0,0,0,.45)}.ant-comment-actions>li>span{margin-right:10px;color:rgba(0,0,0,.45);font-size:12px;cursor:pointer;transition:color .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-comment-actions>li>span:hover{color:#595959}.ant-comment-nested{margin-left:44px}.ant-comment-rtl{direction:rtl}.ant-comment-rtl .ant-comment-avatar{margin-right:0;margin-left:12px}.ant-comment-rtl .ant-comment-content-author>a,.ant-comment-rtl .ant-comment-content-author>span{padding-right:0;padding-left:8px}.ant-comment-rtl .ant-comment-actions{padding-right:0}.ant-comment-rtl .ant-comment-actions>li>span{margin-right:0;margin-left:10px}.ant-comment-rtl .ant-comment-nested{margin-right:44px;margin-left:0}.ant-descriptions-header{display:flex;align-items:center;margin-bottom:20px}.ant-descriptions-title{flex:auto;overflow:hidden;color:rgba(0,0,0,.85);font-weight:700;font-size:16px;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis}.ant-descriptions-extra{margin-left:auto;color:rgba(0,0,0,.85);font-size:14px}.ant-descriptions-view{width:100%;overflow:hidden;border-radius:2px}.ant-descriptions-view table{width:100%;table-layout:fixed}.ant-descriptions-row>td,.ant-descriptions-row>th{padding-bottom:16px}.ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-item-label{color:rgba(0,0,0,.85);font-weight:400;font-size:14px;line-height:1.5715;text-align:start}.ant-descriptions-item-label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-descriptions-item-label.ant-descriptions-item-no-colon:after{content:" "}.ant-descriptions-item-no-label:after{margin:0;content:""}.ant-descriptions-item-content{display:table-cell;flex:1 1;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715;word-break:break-word;overflow-wrap:break-word}.ant-descriptions-item{padding-bottom:0;vertical-align:top}.ant-descriptions-item-container{display:flex}.ant-descriptions-item-container .ant-descriptions-item-content,.ant-descriptions-item-container .ant-descriptions-item-label{display:inline-flex;align-items:baseline}.ant-descriptions-middle .ant-descriptions-row>td,.ant-descriptions-middle .ant-descriptions-row>th{padding-bottom:12px}.ant-descriptions-small .ant-descriptions-row>td,.ant-descriptions-small .ant-descriptions-row>th{padding-bottom:8px}.ant-descriptions-bordered .ant-descriptions-view{border:1px solid #f0f0f0}.ant-descriptions-bordered .ant-descriptions-view>table{table-layout:auto}.ant-descriptions-bordered .ant-descriptions-item-content,.ant-descriptions-bordered .ant-descriptions-item-label{padding:16px 24px;border-right:1px solid #f0f0f0}.ant-descriptions-bordered .ant-descriptions-item-content:last-child,.ant-descriptions-bordered .ant-descriptions-item-label:last-child{border-right:none}.ant-descriptions-bordered .ant-descriptions-item-label{background-color:#fafafa}.ant-descriptions-bordered .ant-descriptions-item-label:after{display:none}.ant-descriptions-bordered .ant-descriptions-row{border-bottom:1px solid #f0f0f0}.ant-descriptions-bordered .ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content,.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label{padding:12px 24px}.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content,.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label{padding:8px 16px}.ant-descriptions-rtl{direction:rtl}.ant-descriptions-rtl .ant-descriptions-item-label:after{margin:0 2px 0 8px}.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content,.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label{border-right:none;border-left:1px solid #f0f0f0}.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content:last-child,.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label:last-child{border-left:none}.ant-divider{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";border-top:1px solid rgba(0,0,0,.06)}.ant-divider-vertical{position:relative;top:-.06em;display:inline-block;height:.9em;margin:0 8px;vertical-align:middle;border-top:0;border-left:1px solid rgba(0,0,0,.06)}.ant-divider-horizontal{display:flex;clear:both;width:100%;min-width:100%;margin:24px 0}.ant-divider-horizontal.ant-divider-with-text{display:flex;margin:16px 0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;white-space:nowrap;text-align:center;border-top:0;border-top-color:rgba(0,0,0,.06)}.ant-divider-horizontal.ant-divider-with-text:after,.ant-divider-horizontal.ant-divider-with-text:before{position:relative;top:50%;width:50%;border-top:1px solid transparent;border-top-color:inherit;border-bottom:0;transform:translateY(50%);content:""}.ant-divider-horizontal.ant-divider-with-text-left:before{top:50%;width:5%}.ant-divider-horizontal.ant-divider-with-text-left:after,.ant-divider-horizontal.ant-divider-with-text-right:before{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right:after{top:50%;width:5%}.ant-divider-inner-text{display:inline-block;padding:0 1em}.ant-divider-dashed{background:none;border:dashed rgba(0,0,0,.06);border-width:1px 0 0}.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed{border-top:0}.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:after,.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:before{border-style:dashed none none}.ant-divider-vertical.ant-divider-dashed{border-width:0 0 0 1px}.ant-divider-plain.ant-divider-with-text{color:rgba(0,0,0,.85);font-weight:400;font-size:14px}.ant-divider-rtl{direction:rtl}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left:before{width:95%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left:after,.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right:before{width:5%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right:after{width:95%}.ant-drawer{position:fixed;z-index:1000;width:0;height:100%;transition:transform .3s cubic-bezier(.7,.3,.1,1),height 0s ease .3s,width 0s ease .3s}.ant-drawer>*{transition:transform .3s cubic-bezier(.7,.3,.1,1),box-shadow .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-content-wrapper{position:absolute;width:100%;height:100%}.ant-drawer .ant-drawer-content{width:100%;height:100%}.ant-drawer-left,.ant-drawer-right{top:0;width:0;height:100%}.ant-drawer-left .ant-drawer-content-wrapper,.ant-drawer-right .ant-drawer-content-wrapper{height:100%}.ant-drawer-left.ant-drawer-open,.ant-drawer-right.ant-drawer-open{width:100%;transition:transform .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-left,.ant-drawer-left .ant-drawer-content-wrapper{left:0}.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:6px 0 16px -8px rgba(0,0,0,.08),9px 0 28px 0 rgba(0,0,0,.05),12px 0 48px 16px rgba(0,0,0,.03)}.ant-drawer-right,.ant-drawer-right .ant-drawer-content-wrapper{right:0}.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:-6px 0 16px -8px rgba(0,0,0,.08),-9px 0 28px 0 rgba(0,0,0,.05),-12px 0 48px 16px rgba(0,0,0,.03)}.ant-drawer-right.ant-drawer-open.no-mask{right:1px;transform:translateX(1px)}.ant-drawer-bottom,.ant-drawer-top{left:0;width:100%;height:0%}.ant-drawer-bottom .ant-drawer-content-wrapper,.ant-drawer-top .ant-drawer-content-wrapper{width:100%}.ant-drawer-bottom.ant-drawer-open,.ant-drawer-top.ant-drawer-open{height:100%;transition:transform .3s cubic-bezier(.7,.3,.1,1)}.ant-drawer-top{top:0}.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 6px 16px -8px rgba(0,0,0,.08),0 9px 28px 0 rgba(0,0,0,.05),0 12px 48px 16px rgba(0,0,0,.03)}.ant-drawer-bottom,.ant-drawer-bottom .ant-drawer-content-wrapper{bottom:0}.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 -6px 16px -8px rgba(0,0,0,.08),0 -9px 28px 0 rgba(0,0,0,.05),0 -12px 48px 16px rgba(0,0,0,.03)}.ant-drawer-bottom.ant-drawer-open.no-mask{bottom:1px;transform:translateY(1px)}.ant-drawer.ant-drawer-open .ant-drawer-mask{height:100%;opacity:1;transition:none;-webkit-animation:antdDrawerFadeIn .3s cubic-bezier(.7,.3,.1,1);animation:antdDrawerFadeIn .3s cubic-bezier(.7,.3,.1,1);pointer-events:auto}.ant-drawer-title{margin:0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:22px}.ant-drawer-content{position:relative;z-index:1;overflow:auto;background-color:#fff;background-clip:padding-box;border:0}.ant-drawer-close{position:absolute;top:0;right:0;z-index:10;display:block;padding:20px;color:rgba(0,0,0,.45);font-weight:700;font-size:16px;font-style:normal;line-height:1;text-align:center;text-transform:none;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s;text-rendering:auto}.ant-drawer-close:focus,.ant-drawer-close:hover{color:rgba(0,0,0,.75);text-decoration:none}.ant-drawer-header-no-title .ant-drawer-close{margin-right:var(--scroll-bar);padding-right:calc(20px - var(--scroll-bar))}.ant-drawer-header{position:relative;padding:16px 24px;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-drawer-header,.ant-drawer-header-no-title{color:rgba(0,0,0,.85);background:#fff}.ant-drawer-wrapper-body{display:flex;flex-direction:column;flex-wrap:nowrap;width:100%;height:100%}.ant-drawer-body{flex-grow:1;padding:24px;overflow:auto;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-drawer-footer{flex-shrink:0;padding:10px 16px;border-top:1px solid #f0f0f0}.ant-drawer-mask{position:absolute;top:0;left:0;width:100%;height:0;background-color:rgba(0,0,0,.45);opacity:0;filter:alpha(opacity=45);transition:opacity .3s linear,height 0s ease .3s;pointer-events:none}.ant-drawer-open-content{box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-drawer .ant-picker-clear{background:#fff}@-webkit-keyframes antdDrawerFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antdDrawerFadeIn{0%{opacity:0}to{opacity:1}}.ant-drawer-rtl{direction:rtl}.ant-drawer-rtl .ant-drawer-close{right:auto;left:0}.ant-form-item .ant-mentions,.ant-form-item textarea.ant-input{height:auto}.ant-form-item .ant-upload{background:transparent}.ant-form-item .ant-upload.ant-upload-drag{background:#fafafa}.ant-form-item input[type=checkbox],.ant-form-item input[type=radio]{width:14px;height:14px}.ant-form-item .ant-checkbox-inline,.ant-form-item .ant-radio-inline{display:inline-block;margin-left:8px;font-weight:400;vertical-align:middle;cursor:pointer}.ant-form-item .ant-checkbox-inline:first-child,.ant-form-item .ant-radio-inline:first-child{margin-left:0}.ant-form-item .ant-checkbox-vertical,.ant-form-item .ant-radio-vertical{display:block}.ant-form-item .ant-checkbox-vertical+.ant-checkbox-vertical,.ant-form-item .ant-radio-vertical+.ant-radio-vertical{margin-left:0}.ant-form-item .ant-input-number+.ant-form-text{margin-left:8px}.ant-form-item .ant-input-number-handler-wrap{z-index:2}.ant-form-item .ant-cascader-picker,.ant-form-item .ant-select{width:100%}.ant-form-item .ant-input-group .ant-cascader-picker,.ant-form-item .ant-input-group .ant-select,.ant-form-item .ant-picker-calendar-month-select,.ant-form-item .ant-picker-calendar-year-select{width:auto}.ant-form-inline{display:flex;flex-wrap:wrap}.ant-form-inline .ant-form-item{flex:none;flex-wrap:nowrap;margin-right:16px;margin-bottom:0}.ant-form-inline .ant-form-item-with-help{margin-bottom:24px}.ant-form-inline .ant-form-item>.ant-form-item-control,.ant-form-inline .ant-form-item>.ant-form-item-label{display:inline-block;vertical-align:top}.ant-form-inline .ant-form-item>.ant-form-item-label{flex:none}.ant-form-inline .ant-form-item .ant-form-item-has-feedback,.ant-form-inline .ant-form-item .ant-form-text{display:inline-block}.ant-form-horizontal .ant-form-item-label{flex-grow:0}.ant-form-horizontal .ant-form-item-control{flex:1 1}.ant-form-vertical .ant-form-item{flex-direction:column}.ant-form-vertical .ant-form-item-label>label{height:auto}.ant-col-24.ant-form-item-label,.ant-col-xl-24.ant-form-item-label,.ant-form-vertical .ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:normal;text-align:left}.ant-col-24.ant-form-item-label>label,.ant-col-xl-24.ant-form-item-label>label,.ant-form-vertical .ant-form-item-label>label{margin:0}.ant-col-24.ant-form-item-label>label:after,.ant-col-xl-24.ant-form-item-label>label:after,.ant-form-vertical .ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-24.ant-form-item-label,.ant-form-rtl.ant-col-xl-24.ant-form-item-label,.ant-form-rtl.ant-form-vertical .ant-form-item-label{text-align:right}@media (max-width:575px){.ant-form-item .ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:normal;text-align:left}.ant-form-item .ant-form-item-label>label{margin:0}.ant-form-item .ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-form-item .ant-form-item-label{text-align:right}.ant-form .ant-form-item{flex-wrap:wrap}.ant-form .ant-form-item .ant-form-item-control,.ant-form .ant-form-item .ant-form-item-label{flex:0 0 100%;max-width:100%}.ant-col-xs-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:normal;text-align:left}.ant-col-xs-24.ant-form-item-label>label{margin:0}.ant-col-xs-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-xs-24.ant-form-item-label{text-align:right}}@media (max-width:767px){.ant-col-sm-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:normal;text-align:left}.ant-col-sm-24.ant-form-item-label>label{margin:0}.ant-col-sm-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-sm-24.ant-form-item-label{text-align:right}}@media (max-width:991px){.ant-col-md-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:normal;text-align:left}.ant-col-md-24.ant-form-item-label>label{margin:0}.ant-col-md-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-md-24.ant-form-item-label{text-align:right}}@media (max-width:1199px){.ant-col-lg-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:normal;text-align:left}.ant-col-lg-24.ant-form-item-label>label{margin:0}.ant-col-lg-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-lg-24.ant-form-item-label{text-align:right}}@media (max-width:1599px){.ant-col-xl-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:normal;text-align:left}.ant-col-xl-24.ant-form-item-label>label{margin:0}.ant-col-xl-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-xl-24.ant-form-item-label{text-align:right}}.ant-form-item-explain.ant-form-item-explain-error{color:#ff4d4f}.ant-form-item-explain.ant-form-item-explain-warning{color:#faad14}.ant-form-item-has-feedback .ant-input{padding-right:24px}.ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:18px}.ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix{right:28px}.ant-form-item-has-feedback .ant-switch{margin:2px 0 4px}.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-clear,.ant-form-item-has-feedback>.ant-select .ant-select-arrow,.ant-form-item-has-feedback>.ant-select .ant-select-clear{right:32px}.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,.ant-form-item-has-feedback>.ant-select .ant-select-selection-selected-value{padding-right:42px}.ant-form-item-has-feedback .ant-cascader-picker-arrow{margin-right:19px}.ant-form-item-has-feedback .ant-cascader-picker-clear{right:32px}.ant-form-item-has-feedback .ant-picker,.ant-form-item-has-feedback .ant-picker-large{padding-right:29.2px}.ant-form-item-has-feedback .ant-picker-small{padding-right:25.2px}.ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:20px;margin-top:-10px;font-size:14px;line-height:20px;text-align:center;visibility:visible;-webkit-animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);pointer-events:none}.ant-form-item-has-success.ant-form-item-has-feedback .ant-form-item-children-icon{color:#52c41a;-webkit-animation-name:diffZoomIn1!important;animation-name:diffZoomIn1!important}.ant-form-item-has-warning .ant-form-item-split{color:#faad14}.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled),.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover,.ant-form-item-has-warning .ant-input:not(.ant-input-disabled),.ant-form-item-has-warning .ant-input:not(.ant-input-disabled):hover{background-color:#fff;border-color:#faad14}.ant-form-item-has-warning .ant-calendar-picker-open .ant-calendar-picker-input,.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled)-focused,.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):focus,.ant-form-item-has-warning .ant-input:not(.ant-input-disabled)-focused,.ant-form-item-has-warning .ant-input:not(.ant-input-disabled):focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(250,173,20,.2)}.ant-form-item-has-warning .ant-input-prefix{color:#faad14}.ant-form-item-has-warning .ant-input-group-addon{color:#faad14;border-color:#faad14}.ant-form-item-has-warning .has-feedback{color:#faad14}.ant-form-item-has-warning.ant-form-item-has-feedback .ant-form-item-children-icon{color:#faad14;-webkit-animation-name:diffZoomIn3!important;animation-name:diffZoomIn3!important}.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input) .ant-select-selector{background-color:#fff;border-color:#faad14!important}.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-focused .ant-select-selector,.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-open .ant-select-selector{border-color:#ffc53d;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(250,173,20,.2)}.ant-form-item-has-warning .ant-input-number,.ant-form-item-has-warning .ant-picker{background-color:#fff;border-color:#faad14}.ant-form-item-has-warning .ant-input-number-focused,.ant-form-item-has-warning .ant-input-number:focus,.ant-form-item-has-warning .ant-picker-focused,.ant-form-item-has-warning .ant-picker:focus{border-color:#ffc53d;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(250,173,20,.2)}.ant-form-item-has-warning .ant-input-number:not([disabled]):hover,.ant-form-item-has-warning .ant-picker:not([disabled]):hover{background-color:#fff;border-color:#faad14}.ant-form-item-has-warning .ant-cascader-picker:focus .ant-cascader-input{border-color:#ffc53d;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(250,173,20,.2)}.ant-form-item-has-error .ant-form-item-split{color:#ff4d4f}.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled),.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover,.ant-form-item-has-error .ant-input:not(.ant-input-disabled),.ant-form-item-has-error .ant-input:not(.ant-input-disabled):hover{background-color:#fff;border-color:#ff4d4f}.ant-form-item-has-error .ant-calendar-picker-open .ant-calendar-picker-input,.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled)-focused,.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):focus,.ant-form-item-has-error .ant-input:not(.ant-input-disabled)-focused,.ant-form-item-has-error .ant-input:not(.ant-input-disabled):focus{border-color:#ff7875;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,77,79,.2)}.ant-form-item-has-error .ant-input-prefix{color:#ff4d4f}.ant-form-item-has-error .ant-input-group-addon{color:#ff4d4f;border-color:#ff4d4f}.ant-form-item-has-error .has-feedback{color:#ff4d4f}.ant-form-item-has-error.ant-form-item-has-feedback .ant-form-item-children-icon{color:#ff4d4f;-webkit-animation-name:diffZoomIn2!important;animation-name:diffZoomIn2!important}.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input) .ant-select-selector{background-color:#fff;border-color:#ff4d4f!important}.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-focused .ant-select-selector,.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-open .ant-select-selector{border-color:#ff7875;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,77,79,.2)}.ant-form-item-has-error .ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:0;box-shadow:none}.ant-form-item-has-error .ant-select.ant-select-auto-complete .ant-input:focus{border-color:#ff4d4f}.ant-form-item-has-error .ant-input-number,.ant-form-item-has-error .ant-picker{background-color:#fff;border-color:#ff4d4f}.ant-form-item-has-error .ant-input-number-focused,.ant-form-item-has-error .ant-input-number:focus,.ant-form-item-has-error .ant-picker-focused,.ant-form-item-has-error .ant-picker:focus{border-color:#ff7875;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,77,79,.2)}.ant-form-item-has-error .ant-input-number:not([disabled]):hover,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover,.ant-form-item-has-error .ant-picker:not([disabled]):hover{background-color:#fff;border-color:#ff4d4f}.ant-form-item-has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus{border-color:#ff7875;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,77,79,.2)}.ant-form-item-has-error .ant-cascader-picker:hover .ant-cascader-picker-label:hover+.ant-cascader-input.ant-input{border-color:#ff4d4f}.ant-form-item-has-error .ant-cascader-picker:focus .ant-cascader-input{background-color:#fff;border-color:#ff7875;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(255,77,79,.2)}.ant-form-item-has-error .ant-transfer-list{border-color:#ff4d4f}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]){border-color:#d9d9d9}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):hover{border-color:#40a9ff;border-right-width:1px!important}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-form-item-has-error .ant-radio-button-wrapper{border-color:#ff4d4f!important}.ant-form-item-has-error .ant-radio-button-wrapper:not(:first-child):before{background-color:#ff4d4f}.ant-form-item-is-validating.ant-form-item-has-feedback .ant-form-item-children-icon{display:inline-block;color:#1890ff}.ant-form{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum"}.ant-form legend{display:block;width:100%;margin-bottom:20px;padding:0;color:rgba(0,0,0,.45);font-size:16px;line-height:inherit;border:0;border-bottom:1px solid #d9d9d9}.ant-form label{font-size:14px}.ant-form input[type=search]{box-sizing:border-box}.ant-form input[type=checkbox],.ant-form input[type=radio]{line-height:normal}.ant-form input[type=file]{display:block}.ant-form input[type=range]{display:block;width:100%}.ant-form select[multiple],.ant-form select[size]{height:auto}.ant-form input[type=checkbox]:focus,.ant-form input[type=file]:focus,.ant-form input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ant-form output{display:block;padding-top:15px;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715}.ant-form .ant-form-text{display:inline-block;padding-right:8px}.ant-form-small .ant-form-item-label>label{height:24px}.ant-form-small .ant-form-item-control-input{min-height:24px}.ant-form-large .ant-form-item-label>label{height:40px}.ant-form-large .ant-form-item-control-input{min-height:40px}.ant-form-item{box-sizing:border-box;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";margin:0 0 24px;vertical-align:top}.ant-form-item-with-help{margin-bottom:0}.ant-form-item-hidden,.ant-form-item-hidden.ant-row{display:none}.ant-form-item-label{display:inline-block;flex-grow:0;overflow:hidden;white-space:nowrap;text-align:right;vertical-align:middle}.ant-form-item-label-left{text-align:left}.ant-form-item-label>label{position:relative;display:inline-flex;align-items:center;height:32px;color:rgba(0,0,0,.85);font-size:14px}.ant-form-item-label>label>.anticon{font-size:14px;vertical-align:top}.ant-form-item-label>label.ant-form-item-required:not(.ant-form-item-required-mark-optional):before{display:inline-block;margin-right:4px;color:#ff4d4f;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:"*"}.ant-form-hide-required-mark .ant-form-item-label>label.ant-form-item-required:not(.ant-form-item-required-mark-optional):before{display:none}.ant-form-item-label>label .ant-form-item-optional{display:inline-block;margin-left:4px;color:rgba(0,0,0,.45)}.ant-form-hide-required-mark .ant-form-item-label>label .ant-form-item-optional{display:none}.ant-form-item-label>label .ant-form-item-tooltip{color:rgba(0,0,0,.45);cursor:help;-ms-writing-mode:lr-tb;writing-mode:initial;-webkit-margin-start:4px;margin-inline-start:4px}.ant-form-item-label>label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-form-item-label>label.ant-form-item-no-colon:after{content:" "}.ant-form-item-control{display:flex;flex-direction:column;flex-grow:1}.ant-form-item-control:first-child:not([class^=ant-col-]):not([class*=" ant-col-"]){width:100%}.ant-form-item-control-input{position:relative;display:flex;align-items:center;min-height:32px}.ant-form-item-control-input-content{flex:auto;max-width:100%}.ant-form-item-explain,.ant-form-item-extra{clear:both;min-height:24px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5715;transition:color .3s cubic-bezier(.215,.61,.355,1)}.ant-form-item .ant-input-textarea-show-count:after{margin-bottom:-22px}.ant-show-help-appear,.ant-show-help-enter,.ant-show-help-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-show-help-appear.ant-show-help-appear-active,.ant-show-help-enter.ant-show-help-enter-active{-webkit-animation-name:antShowHelpIn;animation-name:antShowHelpIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-show-help-leave.ant-show-help-leave-active{-webkit-animation-name:antShowHelpOut;animation-name:antShowHelpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.ant-show-help-appear,.ant-show-help-enter{opacity:0}.ant-show-help-appear,.ant-show-help-enter,.ant-show-help-leave{-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1)}@-webkit-keyframes antShowHelpIn{0%{transform:translateY(-5px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes antShowHelpIn{0%{transform:translateY(-5px);opacity:0}to{transform:translateY(0);opacity:1}}@-webkit-keyframes antShowHelpOut{to{transform:translateY(-5px);opacity:0}}@keyframes antShowHelpOut{to{transform:translateY(-5px);opacity:0}}@-webkit-keyframes diffZoomIn1{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes diffZoomIn1{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@-webkit-keyframes diffZoomIn2{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes diffZoomIn2{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@-webkit-keyframes diffZoomIn3{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes diffZoomIn3{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}.ant-form-rtl{direction:rtl}.ant-form-rtl .ant-form-item-label{text-align:left}.ant-form-rtl .ant-form-item-label>label.ant-form-item-required:before{margin-right:0;margin-left:4px}.ant-form-rtl .ant-form-item-label>label:after{margin:0 2px 0 8px}.ant-form-rtl .ant-form-item-label>label .ant-form-item-optional{margin-right:4px;margin-left:0}.ant-col-rtl .ant-form-item-control:first-child{width:100%}.ant-form-rtl .ant-form-item-has-feedback .ant-input{padding-right:11px;padding-left:24px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:11px;padding-left:18px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input{padding:0}.ant-form-rtl .ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix{right:auto;left:28px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-number{padding-left:18px}.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-clear,.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-clear{right:auto;left:32px}.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-selection-selected-value{padding-right:0;padding-left:42px}.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-arrow{margin-right:0;margin-left:19px}.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-clear{right:auto;left:32px}.ant-form-rtl .ant-form-item-has-feedback .ant-picker,.ant-form-rtl .ant-form-item-has-feedback .ant-picker-large{padding-right:11px;padding-left:29.2px}.ant-form-rtl .ant-form-item-has-feedback .ant-picker-small{padding-right:7px;padding-left:25.2px}.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon{right:auto;left:0}.ant-form-rtl.ant-form-inline .ant-form-item{margin-right:0;margin-left:16px}.ant-image{position:relative;display:inline-block}.ant-image-img{display:block;width:100%;height:auto}.ant-image-img-placeholder{background-color:#f5f5f5;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE0LjUgMi41aC0xM0EuNS41IDAgMDAxIDN2MTBhLjUuNSAwIDAwLjUuNWgxM2EuNS41IDAgMDAuNS0uNVYzYS41LjUgMCAwMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwMTAgMiAxIDEgMCAwMTAtMnptOC4wMyA2LjgzYS4xMjcuMTI3IDAgMDEtLjA4MS4wM0gyLjc2OWEuMTI1LjEyNSAwIDAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAxLjE3Ny0uMDE2bC4wMTYuMDE2TDcuMDggMTAuMDlsMi40Ny0yLjkzYS4xMjYuMTI2IDAgMDEuMTc3LS4wMTZsLjAxNS4wMTYgMy41ODggNC4yNDRhLjEyNy4xMjcgMCAwMS0uMDIuMTc1eiIgZmlsbD0iIzhDOEM4QyIvPjwvc3ZnPg==);background-repeat:no-repeat;background-position:50%;background-size:30%}.ant-image-mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:#fff;background:rgba(0,0,0,.5);cursor:pointer;opacity:0;transition:opacity .3s}.ant-image-mask-info .anticon{-webkit-margin-end:4px;margin-inline-end:4px}.ant-image-mask:hover{opacity:1}.ant-image-placeholder{position:absolute;top:0;right:0;bottom:0;left:0}.ant-image-preview{pointer-events:none;height:100%;text-align:center}.ant-image-preview.ant-zoom-enter,.ant-image-preview.antzoom-appear{transform:none;opacity:0;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-image-preview-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:rgba(0,0,0,.45)}.ant-image-preview-mask-hidden{display:none}.ant-image-preview-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-image-preview-body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.ant-image-preview-img{max-width:100%;max-height:100%;vertical-align:middle;transform:scaleX(1);cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:auto}.ant-image-preview-img,.ant-image-preview-img-wrapper{transition:transform .3s cubic-bezier(.215,.61,.355,1) 0s}.ant-image-preview-img-wrapper{position:absolute;top:0;right:0;bottom:0;left:0}.ant-image-preview-img-wrapper:before{display:inline-block;width:1px;height:50%;margin-right:-1px;content:""}.ant-image-preview-moving .ant-image-preview-img{cursor:-webkit-grabbing;cursor:grabbing}.ant-image-preview-moving .ant-image-preview-img-wrapper{transition-duration:0s}.ant-image-preview-wrap{z-index:1080}.ant-image-preview-operations{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum","tnum";position:absolute;top:0;right:0;z-index:1;display:flex;flex-direction:row-reverse;align-items:center;width:100%;color:hsla(0,0%,100%,.85);list-style:none;background:rgba(0,0,0,.1);pointer-events:auto}.ant-image-preview-operations-operation{margin-left:12px;padding:12px;cursor:pointer}.ant-image-preview-operations-operation-disabled{color:hsla(0,0%,100%,.25);pointer-events:none}.ant-image-preview-operations-operation:last-of-type{margin-left:0}.ant-image-preview-operations-icon{font-size:18px}.ant-image-preview-switch-left,.ant-image-preview-switch-right{position:absolute;top:50%;right:10px;z-index:1;display:flex;align-items:center;justify-content:center;width:44px;height:44px;margin-top:-22px;color:hsla(0,0%,100%,.85);background:rgba(0,0,0,.1);border-radius:50%;cursor:pointer;pointer-events:auto}.ant-image-preview-switch-left-disabled,.ant-image-preview-switch-right-disabled{color:hsla(0,0%,100%,.25);cursor:not-allowed}.ant-image-preview-switch-left-disabled>.anticon,.ant-image-preview-switch-right-disabled>.anticon{cursor:not-allowed}.ant-image-preview-switch-left>.anticon,.ant-image-preview-switch-right>.anticon{font-size:18px}.ant-image-preview-switch-left{left:10px}.ant-image-preview-switch-right{right:10px}.ant-input-number{box-sizing:border-box;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum","tnum";position:relative;width:100%;min-width:0;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;transition:all .3s;display:inline-block;width:90px;margin:0;padding:0;border:1px solid #d9d9d9;border-radius:2px}.ant-input-number::-moz-placeholder{opacity:1}.ant-input-number:-ms-input-placeholder{color:#bfbfbf}.ant-input-number::placeholder{color:#bfbfbf}.ant-input-number:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number:-ms-input-placeholder{text-overflow:ellipsis}.ant-input-number:placeholder-shown{text-overflow:ellipsis}.ant-input-number-focused,.ant-input-number:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-number[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-number[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-number-borderless,.ant-input-number-borderless-disabled,.ant-input-number-borderless-focused,.ant-input-number-borderless:focus,.ant-input-number-borderless:hover,.ant-input-number-borderless[disabled]{background-color:initial;border:none;box-shadow:none}textarea.ant-input-number{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-number-lg{padding:6.5px 11px}.ant-input-number-sm{padding:0 7px}.ant-input-number-handler{position:relative;display:block;width:100%;height:50%;overflow:hidden;color:rgba(0,0,0,.45);font-weight:700;line-height:0;text-align:center;transition:all .1s linear}.ant-input-number-handler:active{background:#f4f4f4}.ant-input-number-handler:hover .ant-input-number-handler-down-inner,.ant-input-number-handler:hover .ant-input-number-handler-up-inner{color:#40a9ff}.ant-input-number-handler-down-inner,.ant-input-number-handler-up-inner{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;right:4px;width:12px;height:12px;color:rgba(0,0,0,.45);line-height:12px;transition:all .1s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-input-number-handler-down-inner>*,.ant-input-number-handler-up-inner>*{line-height:1}.ant-input-number-handler-down-inner svg,.ant-input-number-handler-up-inner svg{display:inline-block}.ant-input-number-handler-down-inner:before,.ant-input-number-handler-up-inner:before{display:none}.ant-input-number-handler-down-inner .ant-input-number-handler-down-inner-icon,.ant-input-number-handler-down-inner .ant-input-number-handler-up-inner-icon,.ant-input-number-handler-up-inner .ant-input-number-handler-down-inner-icon,.ant-input-number-handler-up-inner .ant-input-number-handler-up-inner-icon{display:block}.ant-input-number:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-number:hover+.ant-form-item-children-icon{opacity:0;transition:opacity .24s linear .24s}.ant-input-number-focused{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-input-number-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-input-number-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-number-disabled .ant-input-number-input{cursor:not-allowed}.ant-input-number-disabled .ant-input-number-handler-wrap,.ant-input-number-readonly .ant-input-number-handler-wrap{display:none}.ant-input-number-input{width:100%;height:30px;padding:0 11px;text-align:left;background-color:initial;border:0;border-radius:2px;outline:0;transition:all .3s linear;-moz-appearance:textfield!important}.ant-input-number-input::-moz-placeholder{opacity:1}.ant-input-number-input:-ms-input-placeholder{color:#bfbfbf}.ant-input-number-input::placeholder{color:#bfbfbf}.ant-input-number-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number-input:-ms-input-placeholder{text-overflow:ellipsis}.ant-input-number-input:placeholder-shown{text-overflow:ellipsis}.ant-input-number-input[type=number]::-webkit-inner-spin-button,.ant-input-number-input[type=number]::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.ant-input-number-lg{padding:0;font-size:16px}.ant-input-number-lg input{height:38px}.ant-input-number-sm{padding:0}.ant-input-number-sm input{height:22px;padding:0 7px}.ant-input-number-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#fff;border-left:1px solid #d9d9d9;border-radius:0 2px 2px 0;opacity:0;transition:opacity .24s linear .1s}.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner,.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner{min-width:auto;margin-right:0;font-size:7px}.ant-input-number-borderless .ant-input-number-handler-wrap{border-left-width:0}.ant-input-number-handler-wrap:hover .ant-input-number-handler{height:40%}.ant-input-number:hover .ant-input-number-handler-wrap{opacity:1}.ant-input-number-handler-up{border-top-right-radius:2px;cursor:pointer}.ant-input-number-handler-up-inner{top:50%;margin-top:-5px;text-align:center}.ant-input-number-handler-up:hover{height:60%!important}.ant-input-number-handler-down{top:0;border-top:1px solid #d9d9d9;border-bottom-right-radius:2px;cursor:pointer}.ant-input-number-handler-down-inner{top:50%;text-align:center;transform:translateY(-50%)}.ant-input-number-handler-down:hover{height:60%!important}.ant-input-number-borderless .ant-input-number-handler-down{border-top-width:0}.ant-input-number-handler-down-disabled,.ant-input-number-handler-up-disabled{cursor:not-allowed}.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner,.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner{color:rgba(0,0,0,.25)}.ant-input-number-borderless{box-shadow:none}.ant-input-number-out-of-range input{color:#ff4d4f}.ant-input-number-rtl{direction:rtl}.ant-input-number-rtl .ant-input-number-handler-wrap{right:auto;left:0;border-right:1px solid #d9d9d9;border-left:0;border-radius:2px 0 0 2px}.ant-input-number-rtl.ant-input-number-borderless .ant-input-number-handler-wrap{border-right-width:0}.ant-input-number-rtl .ant-input-number-input{direction:ltr;text-align:right}.ant-layout{display:flex;flex:auto;flex-direction:column;min-height:0;background:#f0f2f5}.ant-layout,.ant-layout *{box-sizing:border-box}.ant-layout.ant-layout-has-sider{flex-direction:row}.ant-layout.ant-layout-has-sider>.ant-layout,.ant-layout.ant-layout-has-sider>.ant-layout-content{width:0}.ant-layout-footer,.ant-layout-header{flex:0 0 auto}.ant-layout-header{height:64px;padding:0 50px;color:rgba(0,0,0,.85);line-height:64px;background:#001529}.ant-layout-footer{padding:24px 50px;color:rgba(0,0,0,.85);font-size:14px;background:#f0f2f5}.ant-layout-content{flex:auto;min-height:0}.ant-layout-sider{position:relative;min-width:0;background:#001529;transition:all .2s}.ant-layout-sider-children{height:100%;margin-top:-.1px;padding-top:.1px}.ant-layout-sider-children .ant-menu.ant-menu-inline-collapsed{width:auto}.ant-layout-sider-has-trigger{padding-bottom:48px}.ant-layout-sider-right{order:1}.ant-layout-sider-trigger{position:fixed;bottom:0;z-index:1;height:48px;color:#fff;line-height:48px;text-align:center;background:#002140;cursor:pointer;transition:all .2s}.ant-layout-sider-zero-width>*{overflow:hidden}.ant-layout-sider-zero-width-trigger{position:absolute;top:64px;right:-36px;z-index:1;width:36px;height:42px;color:#fff;font-size:18px;line-height:42px;text-align:center;background:#001529;border-radius:0 2px 2px 0;cursor:pointer;transition:background .3s ease}.ant-layout-sider-zero-width-trigger:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;transition:all .3s;content:""}.ant-layout-sider-zero-width-trigger:hover:after{background:hsla(0,0%,100%,.1)}.ant-layout-sider-zero-width-trigger-right{left:-36px;border-radius:2px 0 0 2px}.ant-layout-sider-light{background:#fff}.ant-layout-sider-light .ant-layout-sider-trigger,.ant-layout-sider-light .ant-layout-sider-zero-width-trigger{color:rgba(0,0,0,.85);background:#fff}.ant-layout-rtl{direction:rtl}.ant-list{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative}.ant-list *{outline:none}.ant-list-pagination{margin-top:24px;text-align:right}.ant-list-pagination .ant-pagination-options{text-align:left}.ant-list-more{margin-top:12px;text-align:center}.ant-list-more button{padding-right:32px;padding-left:32px}.ant-list-spin{min-height:40px;text-align:center}.ant-list-empty-text{padding:16px;color:rgba(0,0,0,.25);font-size:14px;text-align:center}.ant-list-items{margin:0;padding:0;list-style:none}.ant-list-item{display:flex;align-items:center;justify-content:space-between;padding:12px 0;color:rgba(0,0,0,.85)}.ant-list-item-meta{display:flex;flex:1 1;align-items:flex-start;max-width:100%}.ant-list-item-meta-avatar{margin-right:16px}.ant-list-item-meta-content{flex:1 0;width:0;color:rgba(0,0,0,.85)}.ant-list-item-meta-title{margin-bottom:4px;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715}.ant-list-item-meta-title>a{color:rgba(0,0,0,.85);transition:all .3s}.ant-list-item-meta-title>a:hover{color:#1890ff}.ant-list-item-meta-description{color:rgba(0,0,0,.45);font-size:14px;line-height:1.5715}.ant-list-item-action{flex:0 0 auto;margin-left:48px;padding:0;font-size:0;list-style:none}.ant-list-item-action>li{position:relative;display:inline-block;padding:0 8px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5715;text-align:center}.ant-list-item-action>li:first-child{padding-left:0}.ant-list-item-action-split{position:absolute;top:50%;right:0;width:1px;height:14px;margin-top:-7px;background-color:#f0f0f0}.ant-list-footer,.ant-list-header{background:transparent}.ant-list-footer,.ant-list-header{padding-top:12px;padding-bottom:12px}.ant-list-empty{padding:16px 0;color:rgba(0,0,0,.45);font-size:12px;text-align:center}.ant-list-split .ant-list-item{border-bottom:1px solid #f0f0f0}.ant-list-split .ant-list-item:last-child{border-bottom:none}.ant-list-split .ant-list-header{border-bottom:1px solid #f0f0f0}.ant-list-split.ant-list-empty .ant-list-footer{border-top:1px solid #f0f0f0}.ant-list-loading .ant-list-spin-nested-loading{min-height:32px}.ant-list-split.ant-list-something-after-last-item .ant-spin-container>.ant-list-items>.ant-list-item:last-child{border-bottom:1px solid #f0f0f0}.ant-list-lg .ant-list-item{padding:16px 24px}.ant-list-sm .ant-list-item{padding:8px 16px}.ant-list-vertical .ant-list-item{align-items:normal}.ant-list-vertical .ant-list-item-main{display:block;flex:1 1}.ant-list-vertical .ant-list-item-extra{margin-left:40px}.ant-list-vertical .ant-list-item-meta{margin-bottom:16px}.ant-list-vertical .ant-list-item-meta-title{margin-bottom:12px;color:rgba(0,0,0,.85);font-size:16px;line-height:24px}.ant-list-vertical .ant-list-item-action{margin-top:16px;margin-left:auto}.ant-list-vertical .ant-list-item-action>li{padding:0 16px}.ant-list-vertical .ant-list-item-action>li:first-child{padding-left:0}.ant-list-grid .ant-col>.ant-list-item{display:block;max-width:100%;margin-bottom:16px;padding-top:0;padding-bottom:0;border-bottom:none}.ant-list-item-no-flex{display:block}.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:right}.ant-list-bordered{border:1px solid #d9d9d9;border-radius:2px}.ant-list-bordered .ant-list-footer,.ant-list-bordered .ant-list-header,.ant-list-bordered .ant-list-item{padding-right:24px;padding-left:24px}.ant-list-bordered .ant-list-pagination{margin:16px 24px}.ant-list-bordered.ant-list-sm .ant-list-footer,.ant-list-bordered.ant-list-sm .ant-list-header,.ant-list-bordered.ant-list-sm .ant-list-item{padding:8px 16px}.ant-list-bordered.ant-list-lg .ant-list-footer,.ant-list-bordered.ant-list-lg .ant-list-header,.ant-list-bordered.ant-list-lg .ant-list-item{padding:16px 24px}@media screen and (max-width:768px){.ant-list-item-action,.ant-list-vertical .ant-list-item-extra{margin-left:24px}}@media screen and (max-width:576px){.ant-list-item{flex-wrap:wrap}.ant-list-item-action{margin-left:12px}.ant-list-vertical .ant-list-item{flex-wrap:wrap-reverse}.ant-list-vertical .ant-list-item-main{min-width:220px}.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}.ant-list-rtl{direction:rtl;text-align:right}.ant-list-rtl .ReactVirtualized__List .ant-list-item{direction:rtl}.ant-list-rtl .ant-list-pagination{text-align:left}.ant-list-rtl .ant-list-item-meta-avatar{margin-right:0;margin-left:16px}.ant-list-rtl .ant-list-item-action{margin-right:48px;margin-left:0}.ant-list.ant-list-rtl .ant-list-item-action>li:first-child{padding-right:0;padding-left:16px}.ant-list-rtl .ant-list-item-action-split{right:auto;left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-extra{margin-right:40px;margin-left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-action{margin-right:auto}.ant-list-rtl .ant-list-vertical .ant-list-item-action>li:first-child{padding-right:0;padding-left:16px}.ant-list-rtl .ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:left}@media screen and (max-width:768px){.ant-list-rtl .ant-list-item-action,.ant-list-rtl .ant-list-vertical .ant-list-item-extra{margin-right:24px;margin-left:0}}@media screen and (max-width:576px){.ant-list-rtl .ant-list-item-action{margin-right:22px;margin-left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}.ant-spin{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:absolute;display:none;color:#1890ff;text-align:center;vertical-align:middle;opacity:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86)}.ant-spin-spinning{position:static;display:inline-block;opacity:1}.ant-spin-nested-loading{position:relative}.ant-spin-nested-loading>div>.ant-spin{position:absolute;top:0;left:0;z-index:4;display:block;width:100%;height:100%;max-height:400px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-dot{position:absolute;top:50%;left:50%;margin:-10px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #fff}.ant-spin-nested-loading>div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-dot{margin:-7px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-text{padding-top:2px}.ant-spin-nested-loading>div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-dot{margin:-16px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-text{padding-top:11px}.ant-spin-nested-loading>div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px}.ant-spin-container{position:relative;transition:opacity .3s}.ant-spin-container:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:none\9;width:100%;height:100%;background:#fff;opacity:0;transition:all .3s;content:"";pointer-events:none}.ant-spin-blur{clear:both;overflow:hidden;opacity:.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.ant-spin-blur:after{opacity:.4;pointer-events:auto}.ant-spin-tip{color:rgba(0,0,0,.45)}.ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em}.ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;-webkit-animation:antSpinMove 1s linear infinite alternate;animation:antSpinMove 1s linear infinite alternate}.ant-spin-dot-item:first-child{top:0;left:0}.ant-spin-dot-item:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.ant-spin-dot-item:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.ant-spin-dot-item:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}.ant-spin-dot-spin{transform:rotate(45deg);-webkit-animation:antRotate 1.2s linear infinite;animation:antRotate 1.2s linear infinite}.ant-spin-sm .ant-spin-dot{font-size:14px}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px}.ant-spin-lg .ant-spin-dot{font-size:32px}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ant-spin-blur{background:#fff;opacity:.5}}@-webkit-keyframes antSpinMove{to{opacity:1}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antRotate{to{transform:rotate(405deg)}}@keyframes antRotate{to{transform:rotate(405deg)}}.ant-spin-rtl{direction:rtl}.ant-spin-rtl .ant-spin-dot-spin{transform:rotate(-45deg);-webkit-animation-name:antRotateRtl;animation-name:antRotateRtl}@-webkit-keyframes antRotateRtl{to{transform:rotate(-405deg)}}@keyframes antRotateRtl{to{transform:rotate(-405deg)}}.ant-pagination{box-sizing:border-box;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum","tnum"}.ant-pagination,.ant-pagination ol,.ant-pagination ul{margin:0;padding:0;list-style:none}.ant-pagination:after{display:block;clear:both;height:0;overflow:hidden;visibility:hidden;content:" "}.ant-pagination-item,.ant-pagination-total-text{display:inline-block;height:32px;margin-right:8px;line-height:30px;vertical-align:middle}.ant-pagination-item{min-width:32px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";text-align:center;list-style:none;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;outline:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-item a{display:block;padding:0 6px;color:rgba(0,0,0,.85);transition:none}.ant-pagination-item a:hover{text-decoration:none}.ant-pagination-item:focus-visible,.ant-pagination-item:hover{border-color:#1890ff;transition:all .3s}.ant-pagination-item:focus-visible a,.ant-pagination-item:hover a{color:#1890ff}.ant-pagination-item-active{font-weight:500;background:#fff;border-color:#1890ff}.ant-pagination-item-active a{color:#1890ff}.ant-pagination-item-active:focus-visible,.ant-pagination-item-active:hover{border-color:#40a9ff}.ant-pagination-item-active:focus-visible a,.ant-pagination-item-active:hover a{color:#40a9ff}.ant-pagination-jump-next,.ant-pagination-jump-prev{outline:0}.ant-pagination-jump-next .ant-pagination-item-container,.ant-pagination-jump-prev .ant-pagination-item-container{position:relative}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon{color:#1890ff;font-size:12px;letter-spacing:-1px;opacity:0;transition:all .2s}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg{top:0;right:0;bottom:0;left:0;margin:auto}.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis,.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis{position:absolute;top:0;right:0;bottom:0;left:0;display:block;margin:auto;color:rgba(0,0,0,.25);font-family:Arial,Helvetica,sans-serif;letter-spacing:2px;text-align:center;text-indent:.13em;opacity:1;transition:all .2s}.ant-pagination-jump-next:focus-visible .ant-pagination-item-link-icon,.ant-pagination-jump-next:hover .ant-pagination-item-link-icon,.ant-pagination-jump-prev:focus-visible .ant-pagination-item-link-icon,.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-next:focus-visible .ant-pagination-item-ellipsis,.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:focus-visible .ant-pagination-item-ellipsis,.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-prev{margin-right:8px}.ant-pagination-jump-next,.ant-pagination-jump-prev,.ant-pagination-next,.ant-pagination-prev{display:inline-block;min-width:32px;height:32px;color:rgba(0,0,0,.85);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:32px;text-align:center;vertical-align:middle;list-style:none;border-radius:2px;cursor:pointer;transition:all .3s}.ant-pagination-next,.ant-pagination-prev{font-family:Arial,Helvetica,sans-serif;outline:0}.ant-pagination-next button,.ant-pagination-prev button{color:rgba(0,0,0,.85);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-pagination-next:hover button,.ant-pagination-prev:hover button{border-color:#40a9ff}.ant-pagination-next .ant-pagination-item-link,.ant-pagination-prev .ant-pagination-item-link{display:block;width:100%;height:100%;padding:0;font-size:12px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;outline:none;transition:all .3s}.ant-pagination-next:focus-visible .ant-pagination-item-link,.ant-pagination-next:hover .ant-pagination-item-link,.ant-pagination-prev:focus-visible .ant-pagination-item-link,.ant-pagination-prev:hover .ant-pagination-item-link{color:#1890ff;border-color:#1890ff}.ant-pagination-disabled,.ant-pagination-disabled:focus-visible,.ant-pagination-disabled:hover{cursor:not-allowed}.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination-disabled:focus-visible .ant-pagination-item-link,.ant-pagination-disabled:hover .ant-pagination-item-link{color:rgba(0,0,0,.25);border-color:#d9d9d9;cursor:not-allowed}.ant-pagination-slash{margin:0 10px 0 5px}.ant-pagination-options{display:inline-block;margin-left:16px;vertical-align:middle}@media (-ms-high-contrast:none){.ant-pagination-options,.ant-pagination-options ::-ms-backdrop{vertical-align:top}}.ant-pagination-options-size-changer.ant-select{display:inline-block;width:auto}.ant-pagination-options-quick-jumper{display:inline-block;height:32px;margin-left:8px;line-height:32px;vertical-align:top}.ant-pagination-options-quick-jumper input{position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:rgba(0,0,0,.85);font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;width:50px;height:32px;margin:0 8px}.ant-pagination-options-quick-jumper input::-moz-placeholder{opacity:1}.ant-pagination-options-quick-jumper input:-ms-input-placeholder{color:#bfbfbf}.ant-pagination-options-quick-jumper input::placeholder{color:#bfbfbf}.ant-pagination-options-quick-jumper input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:-ms-input-placeholder{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-pagination-options-quick-jumper input-focused,.ant-pagination-options-quick-jumper input:focus{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-pagination-options-quick-jumper input-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-pagination-options-quick-jumper input[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-pagination-options-quick-jumper input-borderless,.ant-pagination-options-quick-jumper input-borderless-disabled,.ant-pagination-options-quick-jumper input-borderless-focused,.ant-pagination-options-quick-jumper input-borderless:focus,.ant-pagination-options-quick-jumper input-borderless:hover,.ant-pagination-options-quick-jumper input-borderless[disabled]{background-color:initial;border:none;box-shadow:none}textarea.ant-pagination-options-quick-jumper input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-pagination-options-quick-jumper input-lg{padding:6.5px 11px;font-size:16px}.ant-pagination-options-quick-jumper input-sm{padding:0 7px}.ant-pagination-simple .ant-pagination-next,.ant-pagination-simple .ant-pagination-prev{height:24px;line-height:24px;vertical-align:top}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link{height:24px;background-color:initial;border:0}.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link:after,.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination-simple .ant-pagination-simple-pager{display:inline-block;height:24px;margin-right:8px}.ant-pagination-simple .ant-pagination-simple-pager input{box-sizing:border-box;height:100%;margin-right:8px;padding:0 6px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;outline:none;transition:border-color .3s}.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:#1890ff}.ant-pagination-simple .ant-pagination-simple-pager input[disabled]{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.mini .ant-pagination-simple-pager,.ant-pagination.mini .ant-pagination-total-text{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-item{min-width:24px;height:24px;margin:0;line-height:22px}.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active){background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-next,.ant-pagination.mini .ant-pagination-prev{min-width:24px;height:24px;margin:0;line-height:24px}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link{background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link:after,.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-jump-next,.ant-pagination.mini .ant-pagination-jump-prev{height:24px;margin-right:0;line-height:24px}.ant-pagination.mini .ant-pagination-options{margin-left:2px}.ant-pagination.mini .ant-pagination-options-size-changer{top:0}.ant-pagination.mini .ant-pagination-options-quick-jumper{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-options-quick-jumper input{padding:0 7px;width:44px;height:24px}.ant-pagination.ant-pagination-disabled{cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item{background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item a{color:rgba(0,0,0,.25);background:transparent;border:none;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active{background:#dbdbdb;border-color:transparent}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a{color:#fff}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{color:rgba(0,0,0,.25);background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{background:transparent}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link-icon{opacity:0}.ant-pagination.ant-pagination-disabled .ant-pagination-item-ellipsis{opacity:1}.ant-pagination.ant-pagination-disabled .ant-pagination-simple-pager{color:rgba(0,0,0,.25)}@media only screen and (max-width:992px){.ant-pagination-item-after-jump-prev,.ant-pagination-item-before-jump-next{display:none}}@media only screen and (max-width:576px){.ant-pagination-options{display:none}}.ant-pagination-rtl .ant-pagination-item,.ant-pagination-rtl .ant-pagination-jump-next,.ant-pagination-rtl .ant-pagination-jump-prev,.ant-pagination-rtl .ant-pagination-prev,.ant-pagination-rtl .ant-pagination-total-text{margin-right:0;margin-left:8px}.ant-pagination-rtl .ant-pagination-slash{margin:0 5px 0 10px}.ant-pagination-rtl .ant-pagination-options{margin-right:16px;margin-left:0}.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-size-changer.ant-select{margin-right:0;margin-left:8px}.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-quick-jumper{margin-left:0}.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager,.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager input{margin-right:0;margin-left:8px}.ant-pagination-rtl.ant-pagination.mini .ant-pagination-options{margin-right:2px;margin-left:0}.ant-mentions{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum","tnum";width:100%;min-width:0;color:rgba(0,0,0,.85);font-size:14px;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;position:relative;display:inline-block;height:auto;padding:0;overflow:hidden;line-height:1.5715;white-space:pre-wrap;vertical-align:bottom}.ant-mentions::-moz-placeholder{opacity:1}.ant-mentions:-ms-input-placeholder{color:#bfbfbf}.ant-mentions::placeholder{color:#bfbfbf}.ant-mentions:-moz-placeholder-shown{text-overflow:ellipsis}.ant-mentions:-ms-input-placeholder{text-overflow:ellipsis}.ant-mentions:placeholder-shown{text-overflow:ellipsis}.ant-mentions-focused,.ant-mentions:focus,.ant-mentions:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-mentions-focused,.ant-mentions:focus{outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-mentions-disabled{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-mentions-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-mentions[disabled]{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-mentions[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-mentions-borderless,.ant-mentions-borderless-disabled,.ant-mentions-borderless-focused,.ant-mentions-borderless:focus,.ant-mentions-borderless:hover,.ant-mentions-borderless[disabled]{background-color:initial;border:none;box-shadow:none}textarea.ant-mentions{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-mentions-lg{padding:6.5px 11px;font-size:16px}.ant-mentions-sm{padding:0 7px}.ant-mentions-disabled>textarea{color:rgba(0,0,0,.25);background-color:#f5f5f5;cursor:not-allowed;opacity:1}.ant-mentions-disabled>textarea:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-mentions-focused{border-color:#40a9ff;border-right-width:1px!important;outline:0;box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-mentions-measure,.ant-mentions>textarea{min-height:30px;margin:0;padding:4px 11px;overflow:inherit;overflow-x:hidden;overflow-y:auto;font-weight:inherit;font-size:inherit;font-family:inherit;font-style:inherit;font-feature-settings:inherit;font-variant:inherit;font-size-adjust:inherit;font-stretch:inherit;line-height:inherit;direction:inherit;letter-spacing:inherit;white-space:inherit;text-align:inherit;vertical-align:top;word-wrap:break-word;word-break:inherit;-moz-tab-size:inherit;-o-tab-size:inherit;tab-size:inherit}.ant-mentions>textarea{width:100%;border:none;outline:none;resize:none}.ant-mentions>textarea::-moz-placeholder{opacity:1}.ant-mentions>textarea:-ms-input-placeholder{color:#bfbfbf}.ant-mentions>textarea::placeholder{color:#bfbfbf}.ant-mentions>textarea:-moz-placeholder-shown{text-overflow:ellipsis}.ant-mentions>textarea:-ms-input-placeholder{text-overflow:ellipsis}.ant-mentions>textarea:placeholder-shown{text-overflow:ellipsis}.ant-mentions-measure{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;color:transparent;pointer-events:none}.ant-mentions-measure>span{display:inline-block;min-height:1em}.ant-mentions-dropdown{margin:0;padding:0;color:rgba(0,0,0,.85);font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum",;position:absolute;top:-9999px;left:-9999px;z-index:1050;box-sizing:border-box;font-size:14px;font-variant:normal;background-color:#fff;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-mentions-dropdown-hidden{display:none}.ant-mentions-dropdown-menu{max-height:250px;margin-bottom:0;padding-left:0;overflow:auto;list-style:none;outline:none}.ant-mentions-dropdown-menu-item{position:relative;display:block;min-width:100px;padding:5px 12px;overflow:hidden;color:rgba(0,0,0,.85);font-weight:400;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:background .3s ease}.ant-mentions-dropdown-menu-item:hover{background-color:#f5f5f5}.ant-mentions-dropdown-menu-item:first-child{border-radius:2px 2px 0 0}.ant-mentions-dropdown-menu-item:last-child{border-radius:0 0 2px 2px}.ant-mentions-dropdown-menu-item-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-mentions-dropdown-menu-item-disabled:hover{color:rgba(0,0,0,.25);background-color:#fff;cursor:not-allowed}.ant-mentions-dropdown-menu-item-selected{color:rgba(0,0,0,.85);font-weight:600;background-color:#fafafa}.ant-mentions-dropdown-menu-item-active{background-color:#f5f5f5}.ant-mentions-rtl{direction:rtl}.ant-message{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:fixed;top:8px;left:0;z-index:1010;width:100%;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice-content{display:inline-block;padding:10px 16px;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);pointer-events:all}.ant-message-success .anticon{color:#52c41a}.ant-message-error .anticon{color:#ff4d4f}.ant-message-warning .anticon{color:#faad14}.ant-message-info .anticon,.ant-message-loading .anticon{color:#1890ff}.ant-message .anticon{position:relative;top:1px;margin-right:8px;font-size:16px}.ant-message-notice.ant-move-up-leave.ant-move-up-leave-active{-webkit-animation-name:MessageMoveOut;animation-name:MessageMoveOut;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}.ant-message-rtl,.ant-message-rtl span{direction:rtl}.ant-message-rtl .anticon{margin-right:0;margin-left:8px}.ant-modal{box-sizing:border-box;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";pointer-events:none;position:relative;top:100px;width:auto;max-width:calc(100vw - 32px);margin:0 auto;padding:0 0 24px}.ant-modal.ant-zoom-enter,.ant-modal.antzoom-appear{transform:none;opacity:0;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:rgba(0,0,0,.45)}.ant-modal-mask-hidden{display:none}.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch;z-index:1000}.ant-modal-title{margin:0;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:0;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);pointer-events:auto}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:rgba(0,0,0,.45);font-weight:700;line-height:1;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:rgba(0,0,0,.75);text-decoration:none}.ant-modal-header{padding:16px 24px;color:rgba(0,0,0,.85);background:#fff;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:transparent;border-top:1px solid #f0f0f0;border-radius:0 0 2px 2px}.ant-modal-footer .ant-btn+.ant-btn:not(.ant-dropdown-trigger){margin-bottom:0;margin-left:8px}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:""}.ant-modal-centered .ant-modal{top:0;display:inline-block;text-align:left;vertical-align:middle}@media (max-width:767px){.ant-modal{max-width:calc(100vw - 16px);margin:8px auto}.ant-modal-centered .ant-modal{flex:1 1}}.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper:before{display:table;content:""}.ant-modal-confirm-body-wrapper:after{display:table;clear:both;content:""}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:rgba(0,0,0,.85);font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:rgba(0,0,0,.85);font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-bottom:0;margin-left:8px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#ff4d4f}.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon,.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon{color:#faad14}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#1890ff}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#52c41a}.ant-modal-wrap-rtl{direction:rtl}.ant-modal-wrap-rtl .ant-modal-close{right:auto;left:0}.ant-modal-wrap-rtl .ant-modal-footer{text-align:left}.ant-modal-wrap-rtl .ant-modal-footer .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-body{direction:rtl}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon{float:right;margin-right:0;margin-left:16px}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-right:38px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-btns{float:left}.ant-modal-wrap-rtl .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl.ant-modal-centered .ant-modal{text-align:right}.ant-notification{box-sizing:border-box;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:fixed;z-index:1010;margin:0 24px 0 0}.ant-notification-bottomLeft,.ant-notification-topLeft{margin-right:0;margin-left:24px}.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active{-webkit-animation-name:NotificationLeftFadeIn;animation-name:NotificationLeftFadeIn}.ant-notification-close-icon{font-size:14px;cursor:pointer}.ant-notification-hook-holder{position:relative}.ant-notification-notice{position:relative;width:384px;max-width:calc(100vw - 48px);margin-bottom:16px;margin-left:auto;padding:16px 24px;overflow:hidden;line-height:1.5715;word-wrap:break-word;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-notification-bottomLeft .ant-notification-notice,.ant-notification-topLeft .ant-notification-notice{margin-right:auto;margin-left:0}.ant-notification-notice-message{margin-bottom:8px;color:rgba(0,0,0,.85);font-size:16px;line-height:24px}.ant-notification-notice-message-single-line-auto-margin{display:block;width:calc(264px - 100%);max-width:4px;background-color:initial;pointer-events:none}.ant-notification-notice-message-single-line-auto-margin:before{display:block;content:""}.ant-notification-notice-description{font-size:14px}.ant-notification-notice-closable .ant-notification-notice-message{padding-right:24px}.ant-notification-notice-with-icon .ant-notification-notice-message{margin-bottom:4px;margin-left:48px;font-size:16px}.ant-notification-notice-with-icon .ant-notification-notice-description{margin-left:48px;font-size:14px}.ant-notification-notice-icon{position:absolute;margin-left:4px;font-size:24px;line-height:24px}.anticon.ant-notification-notice-icon-success{color:#52c41a}.anticon.ant-notification-notice-icon-info{color:#1890ff}.anticon.ant-notification-notice-icon-warning{color:#faad14}.anticon.ant-notification-notice-icon-error{color:#ff4d4f}.ant-notification-notice-close{position:absolute;top:16px;right:22px;color:rgba(0,0,0,.45);outline:none}.ant-notification-notice-close:hover{color:rgba(0,0,0,.67)}.ant-notification-notice-btn{float:right;margin-top:16px}.ant-notification .notification-fade-effect{-webkit-animation-duration:.24s;animation-duration:.24s;-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-notification-fade-appear,.ant-notification-fade-enter{opacity:0;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-notification-fade-appear,.ant-notification-fade-enter,.ant-notification-fade-leave{-webkit-animation-duration:.24s;animation-duration:.24s;-webkit-animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-timing-function:cubic-bezier(.645,.045,.355,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.ant-notification-fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-play-state:paused;animation-play-state:paused}.ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-fade-enter.ant-notification-fade-enter-active{-webkit-animation-name:NotificationFadeIn;animation-name:NotificationFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.ant-notification-fade-leave.ant-notification-fade-leave-active{-webkit-animation-name:NotificationFadeOut;animation-name:NotificationFadeOut;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@-webkit-keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@-webkit-keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}@keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}.ant-notification-rtl{direction:rtl}.ant-notification-rtl .ant-notification-notice-closable .ant-notification-notice-message{padding-right:0;padding-left:24px}.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-description,.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-message{margin-right:48px;margin-left:0}.ant-notification-rtl .ant-notification-notice-icon{margin-right:4px;margin-left:0}.ant-notification-rtl .ant-notification-notice-close{right:auto;left:22px}.ant-notification-rtl .ant-notification-notice-btn{float:left}.ant-page-header{box-sizing:border-box;margin:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;padding:16px 24px;background-color:#fff}.ant-page-header-ghost{background-color:inherit}.ant-page-header.has-breadcrumb{padding-top:12px}.ant-page-header.has-footer{padding-bottom:0}.ant-page-header-back{margin-right:16px;font-size:16px;line-height:1}.ant-page-header-back-button{color:#1890ff;text-decoration:none;outline:none;transition:color .3s;color:#000;cursor:pointer}.ant-page-header-back-button:focus,.ant-page-header-back-button:hover{color:#40a9ff}.ant-page-header-back-button:active{color:#096dd9}.ant-page-header .ant-divider-vertical{height:14px;margin:0 12px;vertical-align:middle}.ant-breadcrumb+.ant-page-header-heading{margin-top:8px}.ant-page-header-heading{display:flex;justify-content:space-between}.ant-page-header-heading-left{display:flex;align-items:center;margin:4px 0;overflow:hidden}.ant-page-header-heading-title{margin-right:12px;margin-bottom:0;color:rgba(0,0,0,.85);font-weight:600;font-size:20px;line-height:32px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-page-header-heading .ant-avatar{margin-right:12px}.ant-page-header-heading-sub-title{margin-right:12px;color:rgba(0,0,0,.45);font-size:14px;line-height:1.5715;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-page-header-heading-extra{margin:4px 0;white-space:nowrap}.ant-page-header-heading-extra>*{margin-left:12px;white-space:unset}.ant-page-header-heading-extra>:first-child{margin-left:0}.ant-page-header-content{padding-top:12px}.ant-page-header-footer{margin-top:16px}.ant-page-header-footer .ant-tabs>.ant-tabs-nav{margin:0}.ant-page-header-footer .ant-tabs>.ant-tabs-nav:before{border:none}.ant-page-header-footer .ant-tabs .ant-tabs-tab{padding-top:8px;padding-bottom:8px;font-size:16px}.ant-page-header-compact .ant-page-header-heading{flex-wrap:wrap}.ant-page-header-rtl{direction:rtl}.ant-page-header-rtl .ant-page-header-back{float:right;margin-right:0;margin-left:16px}.ant-page-header-rtl .ant-page-header-heading-title,.ant-page-header-rtl .ant-page-header-heading .ant-avatar{margin-right:0;margin-left:12px}.ant-page-header-rtl .ant-page-header-heading-sub-title{float:right;margin-right:0;margin-left:12px}.ant-page-header-rtl .ant-page-header-heading-tags{float:right}.ant-page-header-rtl .ant-page-header-heading-extra{float:left}.ant-page-header-rtl .ant-page-header-heading-extra>*{margin-right:12px;margin-left:0}.ant-page-header-rtl .ant-page-header-heading-extra>:first-child{margin-right:0}.ant-page-header-rtl .ant-page-header-footer .ant-tabs-bar .ant-tabs-nav{float:right}.ant-popconfirm{z-index:1060}.ant-progress{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-block}.ant-progress-line{position:relative;width:100%;font-size:14px}.ant-progress-steps{display:inline-block}.ant-progress-steps-outer{display:flex;flex-direction:row;align-items:center}.ant-progress-steps-item{flex-shrink:0;min-width:2px;margin-right:2px;background:#f3f3f3;transition:all .3s}.ant-progress-steps-item-active{background:#1890ff}.ant-progress-small.ant-progress-line,.ant-progress-small.ant-progress-line .ant-progress-text .anticon{font-size:12px}.ant-progress-outer{display:inline-block;width:100%;margin-right:0;padding-right:0}.ant-progress-show-info .ant-progress-outer{margin-right:calc(-2em - 8px);padding-right:calc(2em + 8px)}.ant-progress-inner{position:relative;display:inline-block;width:100%;overflow:hidden;vertical-align:middle;background-color:#f5f5f5;border-radius:100px}.ant-progress-circle-trail{stroke:#f5f5f5}.ant-progress-circle-path{-webkit-animation:ant-progress-appear .3s;animation:ant-progress-appear .3s}.ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#1890ff}.ant-progress-bg,.ant-progress-success-bg{position:relative;background-color:#1890ff;border-radius:100px;transition:all .4s cubic-bezier(.08,.82,.17,1) 0s}.ant-progress-success-bg{position:absolute;top:0;left:0;background-color:#52c41a}.ant-progress-text{display:inline-block;width:2em;margin-left:8px;color:rgba(0,0,0,.85);font-size:1em;line-height:1;white-space:nowrap;text-align:left;vertical-align:middle;word-break:normal}.ant-progress-text .anticon{font-size:14px}.ant-progress-status-active .ant-progress-bg:before{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;border-radius:10px;opacity:0;-webkit-animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;content:""}.ant-progress-status-exception .ant-progress-bg{background-color:#ff4d4f}.ant-progress-status-exception .ant-progress-text{color:#ff4d4f}.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#ff4d4f}.ant-progress-status-success .ant-progress-bg{background-color:#52c41a}.ant-progress-status-success .ant-progress-text{color:#52c41a}.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#52c41a}.ant-progress-circle .ant-progress-inner{position:relative;line-height:1;background-color:initial}.ant-progress-circle .ant-progress-text{position:absolute;top:50%;left:50%;width:100%;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:1em;line-height:1;white-space:normal;text-align:center;transform:translate(-50%,-50%)}.ant-progress-circle .ant-progress-text .anticon{font-size:1.16666667em}.ant-progress-circle.ant-progress-status-exception .ant-progress-text{color:#ff4d4f}.ant-progress-circle.ant-progress-status-success .ant-progress-text{color:#52c41a}@-webkit-keyframes ant-progress-active{0%{width:0;opacity:.1}20%{width:0;opacity:.5}to{width:100%;opacity:0}}@keyframes ant-progress-active{0%{width:0;opacity:.1}20%{width:0;opacity:.5}to{width:100%;opacity:0}}.ant-progress-rtl{direction:rtl}.ant-progress-rtl.ant-progress-show-info .ant-progress-outer{margin-right:0;margin-left:calc(-2em - 8px);padding-right:0;padding-left:calc(2em + 8px)}.ant-progress-rtl .ant-progress-success-bg{right:0;left:auto}.ant-progress-rtl.ant-progress-line .ant-progress-text,.ant-progress-rtl.ant-progress-steps .ant-progress-text{margin-right:8px;margin-left:0;text-align:right}.ant-rate{box-sizing:border-box;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum","tnum";display:inline-block;margin:0;padding:0;color:#fadb14;font-size:20px;line-height:unset;list-style:none;outline:none}.ant-rate-disabled .ant-rate-star{cursor:default}.ant-rate-disabled .ant-rate-star:hover{transform:scale(1)}.ant-rate-star{position:relative;display:inline-block;color:inherit;cursor:pointer}.ant-rate-star:not(:last-child){margin-right:8px}.ant-rate-star>div{transition:all .3s}.ant-rate-star>div:focus-visible,.ant-rate-star>div:hover{transform:scale(1.1)}.ant-rate-star>div:focus:not(:focus-visible){outline:0}.ant-rate-star-first,.ant-rate-star-second{color:#f0f0f0;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-rate-star-first .anticon,.ant-rate-star-second .anticon{vertical-align:middle}.ant-rate-star-first{position:absolute;top:0;left:0;width:50%;height:100%;overflow:hidden;opacity:0}.ant-rate-star-half .ant-rate-star-first,.ant-rate-star-half .ant-rate-star-second{opacity:1}.ant-rate-star-full .ant-rate-star-second,.ant-rate-star-half .ant-rate-star-first{color:inherit}.ant-rate-text{display:inline-block;margin:0 8px;font-size:14px}.ant-rate-rtl{direction:rtl}.ant-rate-rtl .ant-rate-star:not(:last-child){margin-right:0;margin-left:8px}.ant-rate-rtl .ant-rate-star-first{right:0;left:auto}.ant-result{padding:48px 32px}.ant-result-success .ant-result-icon>.anticon{color:#52c41a}.ant-result-error .ant-result-icon>.anticon{color:#ff4d4f}.ant-result-info .ant-result-icon>.anticon{color:#1890ff}.ant-result-warning .ant-result-icon>.anticon{color:#faad14}.ant-result-image{width:250px;height:295px;margin:auto}.ant-result-icon{margin-bottom:24px;text-align:center}.ant-result-icon>.anticon{font-size:72px}.ant-result-title{color:rgba(0,0,0,.85);font-size:24px;line-height:1.8;text-align:center}.ant-result-subtitle{color:rgba(0,0,0,.45);font-size:14px;line-height:1.6;text-align:center}.ant-result-extra{margin:24px 0 0;text-align:center}.ant-result-extra>*{margin-right:8px}.ant-result-extra>:last-child{margin-right:0}.ant-result-content{margin-top:24px;padding:24px 40px;background-color:#fafafa}.ant-result-rtl{direction:rtl}.ant-result-rtl .ant-result-extra>*{margin-right:0;margin-left:8px}.ant-result-rtl .ant-result-extra>:last-child{margin-left:0}.ant-skeleton{display:table;width:100%}.ant-skeleton-header{display:table-cell;padding-right:16px;vertical-align:top}.ant-skeleton-header .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:hsla(0,0%,74.5%,.2);width:32px;height:32px;line-height:32px}.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-content{display:table-cell;width:100%;vertical-align:top}.ant-skeleton-content .ant-skeleton-title{width:100%;height:16px;margin-top:16px;background:hsla(0,0%,74.5%,.2);border-radius:4px}.ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:24px}.ant-skeleton-content .ant-skeleton-paragraph{padding:0}.ant-skeleton-content .ant-skeleton-paragraph>li{width:100%;height:16px;list-style:none;background:hsla(0,0%,74.5%,.2);border-radius:4px}.ant-skeleton-content .ant-skeleton-paragraph>li:last-child:not(:first-child):not(:nth-child(2)){width:61%}.ant-skeleton-content .ant-skeleton-paragraph>li+li{margin-top:16px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title{margin-top:12px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:28px}.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph>li,.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title{border-radius:100px}.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton.ant-skeleton-active .ant-skeleton-button,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,.ant-skeleton.ant-skeleton-active .ant-skeleton-image,.ant-skeleton.ant-skeleton-active .ant-skeleton-input{background:linear-gradient(90deg,hsla(0,0%,74.5%,.2) 25%,hsla(0,0%,50.6%,.24) 37%,hsla(0,0%,74.5%,.2) 63%);background-size:400% 100%;-webkit-animation:ant-skeleton-loading 1.4s ease infinite;animation:ant-skeleton-loading 1.4s ease infinite}.ant-skeleton-element{display:inline-block;width:auto}.ant-skeleton-element .ant-skeleton-button{display:inline-block;vertical-align:top;background:hsla(0,0%,74.5%,.2);border-radius:2px;width:64px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle{width:32px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round{border-radius:32px}.ant-skeleton-element .ant-skeleton-button-lg{width:80px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle{width:40px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round{border-radius:40px}.ant-skeleton-element .ant-skeleton-button-sm{width:48px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle{width:24px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round{border-radius:24px}.ant-skeleton-element .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:hsla(0,0%,74.5%,.2);width:32px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-input{display:inline-block;vertical-align:top;background:hsla(0,0%,74.5%,.2);width:100%;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-input-lg{width:100%;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-input-sm{width:100%;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-image{display:flex;align-items:center;justify-content:center;vertical-align:top;background:hsla(0,0%,74.5%,.2);width:96px;height:96px;line-height:96px}.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-image-path{fill:#bfbfbf}.ant-skeleton-element .ant-skeleton-image-svg{width:48px;height:48px;line-height:48px;max-width:192px;max-height:192px}.ant-skeleton-element .ant-skeleton-image-svg.ant-skeleton-image-circle{border-radius:50%}@-webkit-keyframes ant-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes ant-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.ant-skeleton-rtl{direction:rtl}.ant-skeleton-rtl .ant-skeleton-header{padding-right:0;padding-left:16px}.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li,.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title{-webkit-animation-name:ant-skeleton-loading-rtl;animation-name:ant-skeleton-loading-rtl}@-webkit-keyframes ant-skeleton-loading-rtl{0%{background-position:0 50%}to{background-position:100% 50%}}@keyframes ant-skeleton-loading-rtl{0%{background-position:0 50%}to{background-position:100% 50%}}.ant-slider{box-sizing:border-box;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;height:12px;margin:10px 6px;padding:4px 0;cursor:pointer;touch-action:none}.ant-slider-vertical{width:12px;height:100%;margin:6px 10px;padding:0 4px}.ant-slider-vertical .ant-slider-rail{width:4px;height:100%}.ant-slider-vertical .ant-slider-track{width:4px}.ant-slider-vertical .ant-slider-handle{margin-top:-6px;margin-left:-5px}.ant-slider-vertical .ant-slider-mark{top:0;left:12px;width:18px;height:100%}.ant-slider-vertical .ant-slider-mark-text{left:4px;white-space:nowrap}.ant-slider-vertical .ant-slider-step{width:4px;height:100%}.ant-slider-vertical .ant-slider-dot{top:auto;left:2px;margin-bottom:-4px}.ant-slider-tooltip .ant-tooltip-inner{min-width:unset}.ant-slider-rtl.ant-slider-vertical .ant-slider-handle{margin-right:-5px;margin-left:0}.ant-slider-rtl.ant-slider-vertical .ant-slider-mark{right:12px;left:auto}.ant-slider-rtl.ant-slider-vertical .ant-slider-mark-text{right:4px;left:auto}.ant-slider-rtl.ant-slider-vertical .ant-slider-dot{right:2px;left:auto}.ant-slider-with-marks{margin-bottom:28px}.ant-slider-rail{width:100%;background-color:#f5f5f5}.ant-slider-rail,.ant-slider-track{position:absolute;height:4px;border-radius:2px;transition:background-color .3s}.ant-slider-track{background-color:#91d5ff}.ant-slider-handle{position:absolute;width:14px;height:14px;margin-top:-5px;background-color:#fff;border:2px solid #91d5ff;border-radius:50%;box-shadow:0;cursor:pointer;transition:border-color .3s,box-shadow .6s,transform .3s cubic-bezier(.18,.89,.32,1.28)}.ant-slider-handle-dragging.ant-slider-handle-dragging.ant-slider-handle-dragging,.ant-slider-handle:focus{border-color:#46a6ff;box-shadow:0 0 0 5px rgba(24,144,255,.12)}.ant-slider-handle:focus{outline:none}.ant-slider-handle.ant-tooltip-open{border-color:#1890ff}.ant-slider:hover .ant-slider-rail{background-color:#e1e1e1}.ant-slider:hover .ant-slider-track{background-color:#69c0ff}.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open){border-color:#69c0ff}.ant-slider-mark{position:absolute;top:14px;left:0;width:100%;font-size:14px}.ant-slider-mark-text{position:absolute;display:inline-block;color:rgba(0,0,0,.45);text-align:center;word-break:keep-all;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-slider-mark-text-active{color:rgba(0,0,0,.85)}.ant-slider-step{position:absolute;width:100%;height:4px;background:transparent}.ant-slider-dot{position:absolute;top:-2px;width:8px;height:8px;background-color:#fff;border:2px solid #f0f0f0;border-radius:50%;cursor:pointer}.ant-slider-dot,.ant-slider-dot:first-child,.ant-slider-dot:last-child{margin-left:-4px}.ant-slider-dot-active{border-color:#8cc8ff}.ant-slider-disabled{cursor:not-allowed}.ant-slider-disabled .ant-slider-track{background-color:rgba(0,0,0,.25)!important}.ant-slider-disabled .ant-slider-dot,.ant-slider-disabled .ant-slider-handle{background-color:#fff;border-color:rgba(0,0,0,.25)!important;box-shadow:none;cursor:not-allowed}.ant-slider-disabled .ant-slider-dot,.ant-slider-disabled .ant-slider-mark-text{cursor:not-allowed!important}.ant-slider-rtl{direction:rtl}.ant-slider-rtl .ant-slider-mark{right:0;left:auto}.ant-slider-rtl .ant-slider-dot,.ant-slider-rtl .ant-slider-dot:first-child,.ant-slider-rtl .ant-slider-dot:last-child{margin-right:-4px;margin-left:0}.ant-space{display:inline-flex}.ant-space-vertical{flex-direction:column}.ant-space-align-center{align-items:center}.ant-space-align-start{align-items:flex-start}.ant-space-align-end{align-items:flex-end}.ant-space-align-baseline{align-items:baseline}.ant-space-item:empty{display:none}.ant-space-rtl{direction:rtl}.ant-statistic{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum"}.ant-statistic-title{margin-bottom:4px;color:rgba(0,0,0,.45);font-size:14px}.ant-statistic-content{color:rgba(0,0,0,.85);font-size:24px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.ant-statistic-content-value{display:inline-block;direction:ltr}.ant-statistic-content-prefix,.ant-statistic-content-suffix{display:inline-block}.ant-statistic-content-prefix{margin-right:4px}.ant-statistic-content-suffix{margin-left:4px}.ant-statistic-rtl{direction:rtl}.ant-statistic-rtl .ant-statistic-content-prefix{margin-right:0;margin-left:4px}.ant-statistic-rtl .ant-statistic-content-suffix{margin-right:4px;margin-left:0}.ant-steps{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:flex;width:100%;font-size:0;text-align:initial}.ant-steps-item{position:relative;display:inline-block;flex:1 1;overflow:hidden;vertical-align:top}.ant-steps-item-container{outline:none}.ant-steps-item:last-child{flex:none}.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after,.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-tail{display:none}.ant-steps-item-content,.ant-steps-item-icon{display:inline-block;vertical-align:top}.ant-steps-item-icon{width:32px;height:32px;margin:0 8px 0 0;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:32px;text-align:center;border:1px solid rgba(0,0,0,.25);border-radius:32px;transition:background-color .3s,border-color .3s}.ant-steps-item-icon .ant-steps-icon{position:relative;top:-.5px;color:#1890ff;line-height:1}.ant-steps-item-tail{position:absolute;top:12px;left:0;width:100%;padding:0 10px}.ant-steps-item-tail:after{display:inline-block;width:100%;height:1px;background:#f0f0f0;border-radius:1px;transition:background .3s;content:""}.ant-steps-item-title{position:relative;display:inline-block;padding-right:16px;color:rgba(0,0,0,.85);font-size:16px;line-height:32px}.ant-steps-item-title:after{position:absolute;top:16px;left:100%;display:block;width:9999px;height:1px;background:#f0f0f0;content:""}.ant-steps-item-subtitle{display:inline;margin-left:8px;font-weight:400}.ant-steps-item-description,.ant-steps-item-subtitle{color:rgba(0,0,0,.45);font-size:14px}.ant-steps-item-wait .ant-steps-item-icon{background-color:#fff;border-color:rgba(0,0,0,.25)}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon{color:rgba(0,0,0,.25)}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:rgba(0,0,0,.25)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.45)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#f0f0f0}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.45)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#f0f0f0}.ant-steps-item-process .ant-steps-item-icon{background-color:#fff;border-color:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#1890ff}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.85)}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#f0f0f0}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.85)}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#f0f0f0}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-icon{background:#1890ff}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-icon .ant-steps-icon{color:#fff}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-title{font-weight:500}.ant-steps-item-finish .ant-steps-item-icon{background-color:#fff;border-color:#1890ff}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#1890ff}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(0,0,0,.85)}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#1890ff}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(0,0,0,.45)}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#1890ff}.ant-steps-item-error .ant-steps-item-icon{background-color:#fff;border-color:#ff4d4f}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon{color:#ff4d4f}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#ff4d4f}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#ff4d4f}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#f0f0f0}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#ff4d4f}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#f0f0f0}.ant-steps-item.ant-steps-next-error .ant-steps-item-title:after{background:#ff4d4f}.ant-steps-item-disabled{cursor:not-allowed}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]{cursor:pointer}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-icon .ant-steps-icon,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-title{transition:color .3s}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-title{color:#1890ff}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon{border-color:#1890ff}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon .ant-steps-icon{color:#1890ff}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-left:16px;white-space:nowrap}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-left:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-right:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail{display:none}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description{max-width:140px;white-space:normal}.ant-steps-item-custom>.ant-steps-item-container>.ant-steps-item-icon{height:auto;background:none;border:0}.ant-steps-item-custom>.ant-steps-item-container>.ant-steps-item-icon>.ant-steps-icon{top:0;left:.5px;width:32px;height:32px;font-size:24px;line-height:32px}.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon{width:auto;background:none}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-left:12px}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-left:0}.ant-steps-small .ant-steps-item-icon{width:24px;height:24px;margin:0 8px 0 0;font-size:12px;line-height:24px;text-align:center;border-radius:24px}.ant-steps-small .ant-steps-item-title{padding-right:12px;font-size:14px;line-height:24px}.ant-steps-small .ant-steps-item-title:after{top:12px}.ant-steps-small .ant-steps-item-description{color:rgba(0,0,0,.45);font-size:14px}.ant-steps-small .ant-steps-item-tail{top:8px}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon{width:inherit;height:inherit;line-height:inherit;background:none;border:0;border-radius:0}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{font-size:24px;line-height:24px;transform:none}.ant-steps-vertical{display:flex;flex-direction:column}.ant-steps-vertical>.ant-steps-item{display:block;flex:1 0 auto;padding-left:0;overflow:visible}.ant-steps-vertical>.ant-steps-item .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-vertical>.ant-steps-item .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-vertical>.ant-steps-item .ant-steps-item-title{line-height:32px}.ant-steps-vertical>.ant-steps-item .ant-steps-item-description{padding-bottom:12px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail:after{width:1px;height:100%}.ant-steps-vertical>.ant-steps-item:not(:last-child)>.ant-steps-item-container>.ant-steps-item-tail{display:block}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title{line-height:24px}.ant-steps-label-vertical .ant-steps-item{overflow:visible}.ant-steps-label-vertical .ant-steps-item-tail{margin-left:58px;padding:3.5px 24px}.ant-steps-label-vertical .ant-steps-item-content{display:block;width:116px;margin-top:8px;text-align:center}.ant-steps-label-vertical .ant-steps-item-icon{display:inline-block;margin-left:42px}.ant-steps-label-vertical .ant-steps-item-title{padding-right:0;padding-left:0}.ant-steps-label-vertical .ant-steps-item-title:after{display:none}.ant-steps-label-vertical .ant-steps-item-subtitle{display:block;margin-bottom:4px;margin-left:0;line-height:1.5715}.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon{margin-left:46px}.ant-steps-dot .ant-steps-item-title,.ant-steps-dot.ant-steps-small .ant-steps-item-title{line-height:1.5715}.ant-steps-dot .ant-steps-item-tail,.ant-steps-dot.ant-steps-small .ant-steps-item-tail{top:2px;width:100%;margin:0 0 0 70px;padding:0}.ant-steps-dot .ant-steps-item-tail:after,.ant-steps-dot.ant-steps-small .ant-steps-item-tail:after{width:calc(100% - 20px);height:3px;margin-left:12px}.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{left:2px}.ant-steps-dot .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-icon{width:8px;height:8px;margin-left:67px;padding-right:0;line-height:8px;background:transparent;border:0}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{position:relative;float:left;width:100%;height:100%;border-radius:100px;transition:all .3s}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot:after{position:absolute;top:-12px;left:-26px;width:60px;height:32px;background:rgba(0,0,0,.001);content:""}.ant-steps-dot .ant-steps-item-content,.ant-steps-dot.ant-steps-small .ant-steps-item-content{width:140px}.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon{position:relative;top:-1px;width:10px;height:10px;line-height:10px;background:none}.ant-steps-dot .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-top:8px;margin-left:0;background:none}.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{top:2px;left:-9px;margin:0;padding:22px 0 4px}.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-content{width:inherit}.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-item-container .ant-steps-item-icon .ant-steps-icon-dot{left:-2px}.ant-steps-navigation{padding-top:12px}.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-left:-12px}.ant-steps-navigation .ant-steps-item{overflow:visible;text-align:center}.ant-steps-navigation .ant-steps-item-container{display:inline-block;height:100%;margin-left:-16px;padding-bottom:12px;text-align:left;transition:opacity .3s}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content{max-width:auto}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{max-width:100%;padding-right:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title:after{display:none}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]{cursor:pointer}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]:hover{opacity:.85}.ant-steps-navigation .ant-steps-item:last-child{flex:1 1}.ant-steps-navigation .ant-steps-item:last-child:after{display:none}.ant-steps-navigation .ant-steps-item:after{position:absolute;top:50%;left:100%;display:inline-block;width:12px;height:12px;margin-top:-14px;margin-left:-2px;border:1px solid rgba(0,0,0,.25);border-bottom:none;border-left:none;transform:rotate(45deg);content:""}.ant-steps-navigation .ant-steps-item:before{position:absolute;bottom:0;left:50%;display:inline-block;width:0;height:2px;background-color:#1890ff;transition:width .3s,left .3s;transition-timing-function:ease-out;content:""}.ant-steps-navigation .ant-steps-item.ant-steps-item-active:before{left:0;width:100%}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item{margin-right:0!important}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item:before{display:none}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item.ant-steps-item-active:before{top:0;right:0;left:unset;display:block;width:3px;height:calc(100% - 24px)}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item:after{position:relative;top:-2px;left:50%;display:block;width:8px;height:8px;margin-bottom:8px;text-align:center;transform:rotate(135deg)}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden}.ant-steps-rtl{direction:rtl}.ant-steps.ant-steps-rtl .ant-steps-item-icon{margin-right:0;margin-left:8px}.ant-steps-rtl .ant-steps-item-tail{right:0;left:auto}.ant-steps-rtl .ant-steps-item-title{padding-right:0;padding-left:16px}.ant-steps-rtl .ant-steps-item-title:after{right:100%;left:auto}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-right:16px;padding-left:0}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-right:0}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-left:0}.ant-steps-rtl .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{right:.5px;left:auto}.ant-steps-rtl.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-right:-12px;margin-left:0}.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container{margin-right:-16px;margin-left:0;text-align:right}.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{padding-left:0}.ant-steps-rtl.ant-steps-navigation .ant-steps-item:after{right:100%;left:auto;margin-right:-2px;margin-left:0;transform:rotate(225deg)}.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-right:12px;padding-left:0}.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-right:0}.ant-steps-rtl.ant-steps-small .ant-steps-item-title{padding-right:0;padding-left:12px}.ant-steps-rtl.ant-steps-vertical>.ant-steps-item .ant-steps-item-icon{float:right;margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:16px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{right:12px;left:auto}.ant-steps-rtl.ant-steps-label-vertical .ant-steps-item-title{padding-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail{margin:0 70px 0 0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail:after,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail:after{margin-right:12px;margin-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{right:2px;left:auto}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon{margin-right:67px;margin-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{float:right}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot:after{right:-26px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:-9px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{right:0;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot{right:-2px;left:auto}.ant-steps-rtl.ant-steps-with-progress.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item:first-child.ant-steps-item-active{padding-right:4px}.ant-steps-with-progress .ant-steps-item{padding-top:4px}.ant-steps-with-progress .ant-steps-item .ant-steps-item-tail{top:4px!important}.ant-steps-with-progress.ant-steps-horizontal .ant-steps-item:first-child{padding-bottom:4px;padding-left:4px}.ant-steps-with-progress .ant-steps-item-icon{position:relative}.ant-steps-with-progress .ant-steps-item-icon .ant-progress{position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px}.ant-switch{margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:inline-block;box-sizing:border-box;min-width:44px;height:22px;line-height:22px;vertical-align:middle;background-color:rgba(0,0,0,.25);border:0;border-radius:100px;cursor:pointer;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-switch:focus{outline:0;box-shadow:0 0 0 2px rgba(0,0,0,.1)}.ant-switch-checked:focus{box-shadow:0 0 0 2px rgba(24,144,255,.2)}.ant-switch:focus:hover{box-shadow:none}.ant-switch-checked{background-color:#1890ff}.ant-switch-disabled,.ant-switch-loading{cursor:not-allowed;opacity:.4}.ant-switch-disabled *,.ant-switch-loading *{box-shadow:none;cursor:not-allowed}.ant-switch-inner{display:block;margin:0 7px 0 25px;color:#fff;font-size:12px;transition:margin .2s}.ant-switch-checked .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-handle{top:2px;left:2px;width:18px;height:18px}.ant-switch-handle,.ant-switch-handle:before{position:absolute;transition:all .2s ease-in-out}.ant-switch-handle:before{top:0;right:0;bottom:0;left:0;background-color:#fff;border-radius:9px;box-shadow:0 2px 4px 0 rgba(0,35,11,.2);content:""}.ant-switch-checked .ant-switch-handle{left:calc(100% - 20px)}.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle:before{right:-30%;left:0}.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle:before{right:0;left:-30%}.ant-switch-loading-icon{position:relative;top:2px;color:rgba(0,0,0,.65);vertical-align:top}.ant-switch-checked .ant-switch-loading-icon{color:#1890ff}.ant-switch-small{min-width:28px;height:16px;line-height:16px}.ant-switch-small .ant-switch-inner{margin:0 5px 0 18px;font-size:12px}.ant-switch-small .ant-switch-handle{width:12px;height:12px}.ant-switch-small .ant-switch-loading-icon{top:1.5px;font-size:9px}.ant-switch-small.ant-switch-checked .ant-switch-inner{margin:0 18px 0 5px}.ant-switch-small.ant-switch-checked .ant-switch-handle{left:calc(100% - 14px)}.ant-switch-rtl{direction:rtl}.ant-switch-rtl .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-rtl .ant-switch-handle{right:2px;left:auto}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active .ant-switch-handle:before{right:0;left:-30%}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active.ant-switch-checked .ant-switch-handle:before{right:-30%;left:0}.ant-switch-rtl.ant-switch-checked .ant-switch-inner{margin:0 7px 0 25px}.ant-switch-rtl.ant-switch-checked .ant-switch-handle{right:calc(100% - 20px)}.ant-switch-rtl.ant-switch-small.ant-switch-checked .ant-switch-handle{right:calc(100% - 14px)}.ant-table.ant-table-middle{font-size:14px}.ant-table.ant-table-middle .ant-table-footer,.ant-table.ant-table-middle .ant-table-tbody>tr>td,.ant-table.ant-table-middle .ant-table-thead>tr>th,.ant-table.ant-table-middle .ant-table-title,.ant-table.ant-table-middle tfoot>tr>td,.ant-table.ant-table-middle tfoot>tr>th{padding:12px 8px}.ant-table.ant-table-middle .ant-table-filter-trigger{margin-right:-4px}.ant-table.ant-table-middle .ant-table-expanded-row-fixed{margin:-12px -8px}.ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin:-12px -8px -12px 25px}.ant-table.ant-table-small{font-size:14px}.ant-table.ant-table-small .ant-table-footer,.ant-table.ant-table-small .ant-table-tbody>tr>td,.ant-table.ant-table-small .ant-table-thead>tr>th,.ant-table.ant-table-small .ant-table-title,.ant-table.ant-table-small tfoot>tr>td,.ant-table.ant-table-small tfoot>tr>th{padding:8px}.ant-table.ant-table-small .ant-table-filter-trigger{margin-right:-4px}.ant-table.ant-table-small .ant-table-expanded-row-fixed{margin:-8px}.ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin:-8px -8px -8px 25px}.ant-table-small .ant-table-thead>tr>th{background-color:#fafafa}.ant-table-small .ant-table-selection-column{width:46px;min-width:46px}.ant-table.ant-table-bordered>.ant-table-title{border:1px solid #f0f0f0;border-bottom:0}.ant-table.ant-table-bordered>.ant-table-container{border:1px solid #f0f0f0;border-right:0;border-bottom:0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>th{border-right:1px solid #f0f0f0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr:not(:last-child)>th{border-bottom:1px solid #f0f0f0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>th:before{background-color:initial!important}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>.ant-table-cell-fix-right-first:after{border-right:1px solid #f0f0f0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-16px -17px}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td>.ant-table-expanded-row-fixed:after{position:absolute;top:0;right:1px;bottom:0;border-right:1px solid #f0f0f0;content:""}.ant-table.ant-table-bordered.ant-table-scroll-horizontal>.ant-table-container>.ant-table-body>table>tbody>tr.ant-table-expanded-row>td,.ant-table.ant-table-bordered.ant-table-scroll-horizontal>.ant-table-container>.ant-table-body>table>tbody>tr.ant-table-placeholder>td{border-right:0}.ant-table.ant-table-bordered.ant-table-middle>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered.ant-table-middle>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-12px -9px}.ant-table.ant-table-bordered.ant-table-small>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered.ant-table-small>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-8px -9px}.ant-table.ant-table-bordered>.ant-table-footer{border:1px solid #f0f0f0;border-top:0}.ant-table-cell .ant-table-container:first-child{border-top:0}.ant-table-cell-scrollbar{box-shadow:0 1px 0 1px #fafafa}.ant-table-wrapper{clear:both;max-width:100%}.ant-table-wrapper:before{display:table;content:""}.ant-table-wrapper:after{display:table;clear:both;content:""}.ant-table{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;font-size:14px;background:#fff;border-radius:2px}.ant-table table{width:100%;text-align:left;border-radius:2px 2px 0 0;border-collapse:initial;border-spacing:0}.ant-table-tbody>tr>td,.ant-table-thead>tr>th,.ant-table tfoot>tr>td,.ant-table tfoot>tr>th{position:relative;padding:16px;overflow-wrap:break-word}.ant-table-cell-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.ant-table-cell-ellipsis.ant-table-cell-fix-left-last,.ant-table-cell-ellipsis.ant-table-cell-fix-right-first{overflow:visible}.ant-table-cell-ellipsis.ant-table-cell-fix-left-last .ant-table-cell-content,.ant-table-cell-ellipsis.ant-table-cell-fix-right-first .ant-table-cell-content{display:block;overflow:hidden;text-overflow:ellipsis}.ant-table-cell-ellipsis .ant-table-column-title{overflow:hidden;text-overflow:ellipsis;word-break:keep-all}.ant-table-title{padding:16px}.ant-table-footer{padding:16px;color:rgba(0,0,0,.85);background:#fafafa}.ant-table-thead>tr>th{position:relative;color:rgba(0,0,0,.85);font-weight:500;text-align:left;background:#fafafa;border-bottom:1px solid #f0f0f0;transition:background .3s ease}.ant-table-thead>tr>th[colspan]:not([colspan="1"]){text-align:center}.ant-table-thead>tr>th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan]):before{position:absolute;top:50%;right:0;width:1px;height:1.6em;background-color:rgba(0,0,0,.06);transform:translateY(-50%);transition:background-color .3s;content:""}.ant-table-thead>tr:not(:last-child)>th[colspan]{border-bottom:0}.ant-table-tbody>tr>td{border-bottom:1px solid #f0f0f0;transition:background .3s}.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table,.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table{margin:-16px -16px -16px 33px}.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td,.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td{border-bottom:0}.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:first-child,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:last-child,.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:first-child,.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:last-child{border-radius:0}.ant-table-tbody>tr.ant-table-row:hover>td{background:#fafafa}.ant-table-tbody>tr.ant-table-row-selected>td{background:#e6f7ff;border-color:rgba(0,0,0,.03)}.ant-table-tbody>tr.ant-table-row-selected:hover>td{background:#dcf4ff}.ant-table-summary{background:#fff}div.ant-table-summary{box-shadow:0 -1px 0 #f0f0f0}.ant-table-summary>tr>td,.ant-table-summary>tr>th{border-bottom:1px solid #f0f0f0}.ant-table-pagination.ant-pagination{margin:16px 0}.ant-table-pagination{display:flex;flex-wrap:wrap;grid-row-gap:8px;row-gap:8px}.ant-table-pagination>*{flex:none}.ant-table-pagination-left{justify-content:flex-start}.ant-table-pagination-center{justify-content:center}.ant-table-pagination-right{justify-content:flex-end}.ant-table-thead th.ant-table-column-has-sorters{cursor:pointer;transition:all .3s}.ant-table-thead th.ant-table-column-has-sorters:hover{background:rgba(0,0,0,.04)}.ant-table-thead th.ant-table-column-has-sorters:hover:before{background-color:initial!important}.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-left:hover,.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-right:hover,.ant-table-thead th.ant-table-column-sort{background:#f5f5f5}.ant-table-thead th.ant-table-column-sort:before{background-color:initial!important}td.ant-table-column-sort{background:#fafafa}.ant-table-column-title{position:relative;z-index:1;flex:1 1}.ant-table-column-sorters{display:flex;flex:auto;align-items:center;justify-content:space-between}.ant-table-column-sorters:after{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;content:""}.ant-table-column-sorter{color:#bfbfbf;font-size:0;transition:color .3s}.ant-table-column-sorter-inner{display:inline-flex;flex-direction:column;align-items:center}.ant-table-column-sorter-down,.ant-table-column-sorter-up{font-size:11px}.ant-table-column-sorter-down.active,.ant-table-column-sorter-up.active{color:#1890ff}.ant-table-column-sorter-up+.ant-table-column-sorter-down{margin-top:-.3em}.ant-table-column-sorters:hover .ant-table-column-sorter{color:#a6a6a6}.ant-table-filter-column{display:flex;justify-content:space-between}.ant-table-filter-trigger{position:relative;display:flex;align-items:center;margin:-4px -8px -4px 4px;padding:0 4px;color:#bfbfbf;font-size:12px;border-radius:2px;cursor:pointer;transition:all .3s}.ant-table-filter-trigger:hover{color:rgba(0,0,0,.45);background:rgba(0,0,0,.04)}.ant-table-filter-trigger.active{color:#1890ff}.ant-table-filter-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";min-width:120px;background-color:#fff;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.ant-table-filter-dropdown .ant-dropdown-menu{max-height:264px;overflow-x:hidden;border:0;box-shadow:none}.ant-table-filter-dropdown-submenu>ul{max-height:calc(100vh - 130px);overflow-x:hidden;overflow-y:auto}.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span,.ant-table-filter-dropdown .ant-checkbox-wrapper+span{padding-left:8px}.ant-table-filter-dropdown-btns{display:flex;justify-content:space-between;padding:7px 8px 7px 3px;overflow:hidden;background-color:inherit;border-top:1px solid #f0f0f0}.ant-table-selection-col{width:32px}.ant-table-bordered .ant-table-selection-col{width:50px}table tr td.ant-table-selection-column,table tr th.ant-table-selection-column{padding-right:8px;padding-left:8px;text-align:center}table tr td.ant-table-selection-column .ant-radio-wrapper,table tr th.ant-table-selection-column .ant-radio-wrapper{margin-right:0}table tr th.ant-table-selection-column:after{background-color:initial!important}.ant-table-selection{position:relative;display:inline-flex;flex-direction:column}.ant-table-selection-extra{position:absolute;top:0;z-index:1;cursor:pointer;transition:all .3s;-webkit-margin-start:100%;margin-inline-start:100%;-webkit-padding-start:4px;padding-inline-start:4px}.ant-table-selection-extra .anticon{color:#bfbfbf;font-size:10px}.ant-table-selection-extra .anticon:hover{color:#a6a6a6}.ant-table-expand-icon-col{width:48px}.ant-table-row-expand-icon-cell{text-align:center}.ant-table-row-indent{float:left;height:1px}.ant-table-row-expand-icon{color:#1890ff;text-decoration:none;cursor:pointer;transition:color .3s;position:relative;display:inline-flex;float:left;box-sizing:border-box;width:17px;height:17px;padding:0;color:inherit;line-height:17px;background:#fff;border:1px solid #f0f0f0;border-radius:2px;outline:none;transform:scale(.94117647);transition:all .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{color:#40a9ff}.ant-table-row-expand-icon:active{color:#096dd9}.ant-table-row-expand-icon:active,.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{border-color:currentColor}.ant-table-row-expand-icon:after,.ant-table-row-expand-icon:before{position:absolute;background:currentColor;transition:transform .3s ease-out;content:""}.ant-table-row-expand-icon:before{top:7px;right:3px;left:3px;height:1px}.ant-table-row-expand-icon:after{top:3px;bottom:3px;left:7px;width:1px;transform:rotate(90deg)}.ant-table-row-expand-icon-collapsed:before{transform:rotate(-180deg)}.ant-table-row-expand-icon-collapsed:after{transform:rotate(0deg)}.ant-table-row-expand-icon-spaced{background:transparent;border:0;visibility:hidden}.ant-table-row-expand-icon-spaced:after,.ant-table-row-expand-icon-spaced:before{display:none;content:none}.ant-table-row-indent+.ant-table-row-expand-icon{margin-top:2.5005px;margin-right:8px}tr.ant-table-expanded-row:hover>td,tr.ant-table-expanded-row>td{background:#fbfbfb}tr.ant-table-expanded-row .ant-descriptions-view{display:flex}tr.ant-table-expanded-row .ant-descriptions-view table{flex:auto;width:auto}.ant-table .ant-table-expanded-row-fixed{position:relative;margin:-16px;padding:16px}.ant-table-tbody>tr.ant-table-placeholder{text-align:center}.ant-table-empty .ant-table-tbody>tr.ant-table-placeholder{color:rgba(0,0,0,.25)}.ant-table-tbody>tr.ant-table-placeholder:hover>td{background:#fff}.ant-table-cell-fix-left,.ant-table-cell-fix-right{position:-webkit-sticky!important;position:sticky!important;z-index:2;background:#fff}.ant-table-cell-fix-left-first:after,.ant-table-cell-fix-left-last:after{position:absolute;top:0;right:0;bottom:-1px;width:30px;transform:translateX(100%);transition:box-shadow .3s;content:"";pointer-events:none}.ant-table-cell-fix-right-first:after,.ant-table-cell-fix-right-last:after{position:absolute;top:0;bottom:-1px;left:0;width:30px;transform:translateX(-100%);transition:box-shadow .3s;content:"";pointer-events:none}.ant-table .ant-table-container:after,.ant-table .ant-table-container:before{position:absolute;top:0;bottom:0;z-index:1;width:30px;transition:box-shadow .3s;content:"";pointer-events:none}.ant-table .ant-table-container:before{left:0}.ant-table .ant-table-container:after{right:0}.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container{position:relative}.ant-table-ping-left .ant-table-cell-fix-left-first:after,.ant-table-ping-left .ant-table-cell-fix-left-last:after,.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container:before{box-shadow:inset 10px 0 8px -8px rgba(0,0,0,.15)}.ant-table-ping-left .ant-table-cell-fix-left-last:before{background-color:initial!important}.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container{position:relative}.ant-table-ping-right .ant-table-cell-fix-right-first:after,.ant-table-ping-right .ant-table-cell-fix-right-last:after,.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container:after{box-shadow:inset -10px 0 8px -8px rgba(0,0,0,.15)}.ant-table-sticky-holder,.ant-table-sticky-scroll{position:-webkit-sticky;position:sticky;z-index:3}.ant-table-sticky-scroll{bottom:0;display:flex;align-items:center;background:#fff;border-top:1px solid #f0f0f0;opacity:.6}.ant-table-sticky-scroll:hover{transform-origin:center bottom}.ant-table-sticky-scroll-bar{height:8px;background-color:rgba(0,0,0,.35);border-radius:4px}.ant-table-sticky-scroll-bar-active,.ant-table-sticky-scroll-bar:hover{background-color:rgba(0,0,0,.8)}@media (-ms-high-contrast:none){.ant-table-ping-left .ant-table-cell-fix-left-last:after,.ant-table-ping-right .ant-table-cell-fix-right-first:after{box-shadow:none!important}}.ant-table-title{border-radius:2px 2px 0 0}.ant-table-title+.ant-table-container{border-top-left-radius:0;border-top-right-radius:0}.ant-table-title+.ant-table-container table>thead>tr:first-child th:first-child,.ant-table-title+.ant-table-container table>thead>tr:first-child th:last-child{border-radius:0}.ant-table-container{border-top-right-radius:2px}.ant-table-container,.ant-table-container table>thead>tr:first-child th:first-child{border-top-left-radius:2px}.ant-table-container table>thead>tr:first-child th:last-child{border-top-right-radius:2px}.ant-table-footer{border-radius:0 0 2px 2px}.ant-table-rtl,.ant-table-wrapper-rtl{direction:rtl}.ant-table-wrapper-rtl .ant-table table{text-align:right}.ant-table-wrapper-rtl .ant-table-thead>tr>th[colspan]:not([colspan="1"]){text-align:center}.ant-table-wrapper-rtl .ant-table-thead>tr>th{text-align:right}.ant-table-tbody>tr .ant-table-wrapper:only-child .ant-table.ant-table-rtl{margin:-16px 33px -16px -16px}.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-left{justify-content:flex-end}.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-right{justify-content:flex-start}.ant-table-wrapper-rtl .ant-table-column-sorter{margin-right:8px;margin-left:0}.ant-table-wrapper-rtl .ant-table-filter-column-title{padding:16px 16px 16px 2.3em}.ant-table-rtl .ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column-title{padding:0 0 0 2.3em}.ant-table-wrapper-rtl .ant-table-filter-trigger-container{right:auto;left:0}.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span,.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-dropdown-rtl .ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span,.ant-dropdown-rtl .ant-table-filter-dropdown .ant-checkbox-wrapper+span{padding-right:8px;padding-left:0}.ant-table-wrapper-rtl .ant-table-selection{text-align:center}.ant-table-wrapper-rtl .ant-table-row-expand-icon,.ant-table-wrapper-rtl .ant-table-row-indent{float:right}.ant-table-wrapper-rtl .ant-table-row-indent+.ant-table-row-expand-icon{margin-right:0;margin-left:8px}.ant-table-wrapper-rtl .ant-table-row-expand-icon:after{transform:rotate(-90deg)}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed:before{transform:rotate(180deg)}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed:after{transform:rotate(0deg)}.ant-timeline{box-sizing:border-box;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum","tnum";margin:0;padding:0;list-style:none}.ant-timeline-item{position:relative;margin:0;padding-bottom:20px;font-size:14px;list-style:none}.ant-timeline-item-tail{position:absolute;top:10px;left:4px;height:calc(100% - 10px);border-left:2px solid #f0f0f0}.ant-timeline-item-pending .ant-timeline-item-head{font-size:12px;background-color:initial}.ant-timeline-item-pending .ant-timeline-item-tail{display:none}.ant-timeline-item-head{position:absolute;width:10px;height:10px;background-color:#fff;border:2px solid transparent;border-radius:100px}.ant-timeline-item-head-blue{color:#1890ff;border-color:#1890ff}.ant-timeline-item-head-red{color:#ff4d4f;border-color:#ff4d4f}.ant-timeline-item-head-green{color:#52c41a;border-color:#52c41a}.ant-timeline-item-head-gray{color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-timeline-item-head-custom{position:absolute;top:5.5px;left:5px;width:auto;height:auto;margin-top:0;padding:3px 1px;line-height:1;text-align:center;border:0;border-radius:0;transform:translate(-50%,-50%)}.ant-timeline-item-content{position:relative;top:-7.001px;margin:0 0 0 26px;word-break:break-word}.ant-timeline-item-last>.ant-timeline-item-tail{display:none}.ant-timeline-item-last>.ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-tail{left:50%}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head{margin-left:-4px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom{margin-left:1px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content{left:calc(50% - 4px);width:calc(50% - 14px);text-align:left}.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:calc(50% - 12px);margin:0;text-align:right}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail{left:calc(100% - 6px)}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:calc(100% - 18px)}.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail{display:block;height:calc(100% - 14px);border-left:2px dotted #f0f0f0}.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail{display:none}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{top:15px;display:block;height:calc(100% - 15px);border-left:2px dotted #f0f0f0}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-label .ant-timeline-item-label{position:absolute;top:-7.001px;width:calc(50% - 12px);text-align:right}.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{left:calc(50% + 14px);width:calc(50% - 14px);text-align:left}.ant-timeline-rtl{direction:rtl}.ant-timeline-rtl .ant-timeline-item-tail{right:4px;left:auto;border-right:2px solid #f0f0f0;border-left:none}.ant-timeline-rtl .ant-timeline-item-head-custom{right:5px;left:auto;transform:translate(50%,-50%)}.ant-timeline-rtl .ant-timeline-item-content{margin:0 18px 0 0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-tail{right:50%;left:auto}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head{margin-right:-4px;margin-left:0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom{margin-right:1px;margin-left:0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content{right:calc(50% - 4px);left:auto;text-align:right}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{text-align:left}.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail{right:0;left:auto}.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:100%;margin-right:18px;text-align:right}.ant-timeline-rtl.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{border-right:2px dotted #f0f0f0;border-left:none}.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-label{text-align:left}.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{right:calc(50% + 14px);text-align:right}.ant-transfer-customize-list .ant-transfer-list{flex:1 1 50%;width:auto;height:auto;min-height:200px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small{border:0;border-radius:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th{background:#fafafa}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:1px solid #f0f0f0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body{margin:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination{margin:16px 0 4px}.ant-transfer-customize-list .ant-input[disabled]{background-color:initial}.ant-transfer{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;display:flex;align-items:stretch}.ant-transfer-disabled .ant-transfer-list{background:#f5f5f5}.ant-transfer-list{display:flex;flex-direction:column;width:180px;height:200px;border:1px solid #d9d9d9;border-radius:2px}.ant-transfer-list-with-pagination{width:250px;height:auto}.ant-transfer-list-search{padding-right:24px;padding-left:8px}.ant-transfer-list-search-action{position:absolute;top:12px;right:12px;bottom:12px;width:28px;color:rgba(0,0,0,.25);line-height:32px;text-align:center}.ant-transfer-list-search-action .anticon{color:rgba(0,0,0,.25);transition:all .3s}.ant-transfer-list-search-action .anticon:hover{color:rgba(0,0,0,.45)}span.ant-transfer-list-search-action{pointer-events:none}.ant-transfer-list-header{display:flex;flex:none;align-items:center;height:40px;padding:8px 12px 9px;color:rgba(0,0,0,.85);background:#fff;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-transfer-list-header>:not(:last-child){margin-right:4px}.ant-transfer-list-header>*{flex:none}.ant-transfer-list-header-title{flex:auto;overflow:hidden;white-space:nowrap;text-align:right;text-overflow:ellipsis}.ant-transfer-list-header-dropdown{font-size:10px;transform:translateY(10%);cursor:pointer}.ant-transfer-list-header-dropdown[disabled]{cursor:not-allowed}.ant-transfer-list-body{display:flex;flex:auto;flex-direction:column;overflow:hidden;font-size:14px}.ant-transfer-list-body-search-wrapper{position:relative;flex:none;padding:12px}.ant-transfer-list-content{flex:auto;margin:0;padding:0;overflow:auto;list-style:none}.ant-transfer-list-content-item{display:flex;align-items:center;min-height:32px;padding:6px 12px;line-height:20px;transition:all .3s}.ant-transfer-list-content-item>:not(:last-child){margin-right:8px}.ant-transfer-list-content-item>*{flex:none}.ant-transfer-list-content-item-text{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-transfer-list-content-item-remove{color:#1890ff;text-decoration:none;outline:none;cursor:pointer;transition:color .3s;position:relative;color:#d9d9d9}.ant-transfer-list-content-item-remove:focus,.ant-transfer-list-content-item-remove:hover{color:#40a9ff}.ant-transfer-list-content-item-remove:active{color:#096dd9}.ant-transfer-list-content-item-remove:after{position:absolute;top:-6px;right:-50%;bottom:-6px;left:-50%;content:""}.ant-transfer-list-content-item-remove:hover{color:#40a9ff}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#f5f5f5;cursor:pointer}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled).ant-transfer-list-content-item-checked:hover{background-color:#dcf4ff}.ant-transfer-list-content-show-remove .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background:transparent;cursor:default}.ant-transfer-list-content-item-checked{background-color:#e6f7ff}.ant-transfer-list-content-item-disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-transfer-list-pagination{padding:8px 0;text-align:right;border-top:1px solid #f0f0f0}.ant-transfer-list-body-not-found{flex:none;width:100%;margin:auto 0;color:rgba(0,0,0,.25);text-align:center}.ant-transfer-list-footer{border-top:1px solid #f0f0f0}.ant-transfer-operation{display:flex;flex:none;flex-direction:column;align-self:center;margin:0 8px;vertical-align:middle}.ant-transfer-operation .ant-btn{display:block}.ant-transfer-operation .ant-btn:first-child{margin-bottom:4px}.ant-transfer-operation .ant-btn .anticon{font-size:12px}.ant-transfer .ant-empty-image{max-height:-2px}.ant-transfer-rtl{direction:rtl}.ant-transfer-rtl .ant-transfer-list-search{padding-right:8px;padding-left:24px}.ant-transfer-rtl .ant-transfer-list-search-action{right:auto;left:12px}.ant-transfer-rtl .ant-transfer-list-header>:not(:last-child){margin-right:0;margin-left:4px}.ant-transfer-rtl .ant-transfer-list-header{right:0;left:auto}.ant-transfer-rtl .ant-transfer-list-header-title{text-align:left}.ant-transfer-rtl .ant-transfer-list-content-item>:not(:last-child){margin-right:0;margin-left:8px}.ant-transfer-rtl .ant-transfer-list-pagination{text-align:left}.ant-transfer-rtl .ant-transfer-list-footer{right:0;left:auto}.ant-select-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-select-tree-checkbox-input:focus+.ant-select-tree-checkbox-inner,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner{border-color:#1890ff}.ant-select-tree-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;content:""}.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox:after,.ant-select-tree-checkbox:hover:after{visibility:visible}.ant-select-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:initial;transition:all .3s}.ant-select-tree-checkbox-inner:after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-select-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-select-tree-checkbox-disabled{cursor:not-allowed}.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input{cursor:not-allowed}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{border-color:#f5f5f5;border-collapse:initial;-webkit-animation-name:none;animation-name:none}.ant-select-tree-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-select-tree-checkbox-disabled:hover:after,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-disabled:after{visibility:hidden}.ant-select-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-select-tree-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:"\a0"}.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-select-tree-checkbox-wrapper+.ant-select-tree-checkbox-wrapper{margin-left:8px}.ant-select-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-select-tree-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-block}.ant-select-tree-checkbox-group-item{margin-right:8px}.ant-select-tree-checkbox-group-item:last-child{margin-right:0}.ant-select-tree-checkbox-group-item+.ant-select-tree-checkbox-group-item{margin-left:0}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-tree-select-dropdown{padding:8px 4px 0}.ant-tree-select-dropdown-rtl{direction:rtl}.ant-tree-select-dropdown .ant-select-tree{border-radius:0}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner{align-items:stretch}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode{padding-bottom:8px}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{flex:auto}.ant-select-tree{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";background:#fff;border-radius:2px;transition:background-color .3s}.ant-select-tree-focused:not(:hover):not(.ant-select-tree-active-focused){background:#e6f7ff}.ant-select-tree-list-holder-inner{align-items:flex-start}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner{align-items:stretch}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-node-content-wrapper{flex:auto}.ant-select-tree .ant-select-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px;outline:none}.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper:hover{background:transparent}.ant-select-tree .ant-select-tree-treenode-active .ant-select-tree-node-content-wrapper{background:#f5f5f5}.ant-select-tree .ant-select-tree-treenode:not(.ant-select-tree .ant-select-tree-treenode-disabled).filter-node .ant-select-tree-title{color:inherit;font-weight:500}.ant-select-tree-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-tree-indent-unit{display:inline-block;width:24px}.ant-select-tree-switcher{position:relative;flex:none;align-self:stretch;width:24px;margin:0;line-height:24px;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-tree-switcher .ant-select-tree-switcher-icon,.ant-select-tree-switcher .ant-tree-switcher-icon{display:inline-block;font-size:10px;vertical-align:initial}.ant-select-tree-switcher .ant-select-tree-switcher-icon svg,.ant-select-tree-switcher .ant-tree-switcher-icon svg{transition:transform .3s}.ant-select-tree-switcher-noop{cursor:default}.ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(-90deg)}.ant-select-tree-switcher-loading-icon{color:#1890ff}.ant-select-tree-switcher-leaf-line{position:relative;z-index:1;display:inline-block;width:100%;height:100%}.ant-select-tree-switcher-leaf-line:before{position:absolute;top:0;bottom:-4px;margin-left:-1px;border-left:1px solid #d9d9d9;content:" "}.ant-select-tree-switcher-leaf-line:after{position:absolute;width:10px;height:14px;margin-left:-1px;border-bottom:1px solid #d9d9d9;content:" "}.ant-select-tree-checkbox{top:auto;margin:4px 8px 0 0}.ant-select-tree .ant-select-tree-node-content-wrapper{position:relative;z-index:auto;min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:transparent;border-radius:2px;cursor:pointer;transition:all .3s,border 0s,line-height 0s,box-shadow 0s}.ant-select-tree .ant-select-tree-node-content-wrapper:hover{background-color:#f5f5f5}.ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected{background-color:#bae7ff}.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top}.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle:empty{display:none}.ant-select-tree-unselectable .ant-select-tree-node-content-wrapper:hover{background-color:initial}.ant-select-tree-node-content-wrapper[draggable=true]{line-height:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-select-tree-node-content-wrapper[draggable=true] .ant-tree-drop-indicator{position:absolute;z-index:1;height:2px;background-color:#1890ff;border-radius:1px;pointer-events:none}.ant-select-tree-node-content-wrapper[draggable=true] .ant-tree-drop-indicator:after{position:absolute;top:-3px;left:-6px;width:8px;height:8px;background-color:initial;border:2px solid #1890ff;border-radius:50%;content:""}.ant-select-tree .ant-select-tree-treenode.drop-container>[draggable]{box-shadow:0 0 0 2px #1890ff}.ant-select-tree-show-line .ant-select-tree-indent-unit{position:relative;height:100%}.ant-select-tree-show-line .ant-select-tree-indent-unit:before{position:absolute;top:0;right:12px;bottom:-4px;border-right:1px solid #d9d9d9;content:""}.ant-select-tree-show-line .ant-select-tree-indent-unit-end:before{display:none}.ant-select-tree-show-line .ant-select-tree-switcher{background:#fff}.ant-select-tree-show-line .ant-select-tree-switcher-line-icon{vertical-align:-.225em}.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(90deg)}.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher-loading-icon{transform:scaleY(-1)}@-webkit-keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line:before{top:auto!important;bottom:auto!important;height:14px!important}.ant-tree.ant-tree-directory .ant-tree-treenode{position:relative}.ant-tree.ant-tree-directory .ant-tree-treenode:before{position:absolute;top:0;right:0;bottom:4px;left:0;transition:background-color .3s;content:"";pointer-events:none}.ant-tree.ant-tree-directory .ant-tree-treenode:hover:before{background:#f5f5f5}.ant-tree.ant-tree-directory .ant-tree-treenode>*{z-index:1}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher{transition:color .3s}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper{border-radius:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected{color:#fff;background:transparent}.ant-tree.ant-tree-directory .ant-tree-treenode-selected:before,.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover:before{background:#1890ff}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher{color:#fff}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper{color:#fff;background:transparent}.ant-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-tree-checkbox-input:focus+.ant-tree-checkbox-inner,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,.ant-tree-checkbox:hover .ant-tree-checkbox-inner{border-color:#1890ff}.ant-tree-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;-webkit-animation:antCheckboxEffect .36s ease-in-out;animation:antCheckboxEffect .36s ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;content:""}.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox:after,.ant-tree-checkbox:hover:after{visibility:visible}.ant-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:initial;transition:all .3s}.ant-tree-checkbox-inner:after{position:absolute;top:50%;left:22%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-tree-checkbox-disabled{cursor:not-allowed}.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{border-color:rgba(0,0,0,.25);-webkit-animation-name:none;animation-name:none}.ant-tree-checkbox-disabled .ant-tree-checkbox-input{cursor:not-allowed}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{border-color:#f5f5f5;border-collapse:initial;-webkit-animation-name:none;animation-name:none}.ant-tree-checkbox-disabled+span{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-tree-checkbox-disabled:hover:after,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled:after{visibility:hidden}.ant-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-tree-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:"\a0"}.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-tree-checkbox-wrapper+.ant-tree-checkbox-wrapper{margin-left:8px}.ant-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-tree-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";display:inline-block}.ant-tree-checkbox-group-item{margin-right:8px}.ant-tree-checkbox-group-item:last-child{margin-right:0}.ant-tree-checkbox-group-item+.ant-tree-checkbox-group-item{margin-left:0}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{background-color:rgba(0,0,0,.25);border-color:rgba(0,0,0,.25)}.ant-tree{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";background:#fff;border-radius:2px;transition:background-color .3s}.ant-tree-focused:not(:hover):not(.ant-tree-active-focused){background:#e6f7ff}.ant-tree-list-holder-inner{align-items:flex-start}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner{align-items:stretch}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper{flex:auto}.ant-tree .ant-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px;outline:none}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper{background:#f5f5f5}.ant-tree .ant-tree-treenode:not(.ant-tree .ant-tree-treenode-disabled).filter-node .ant-tree-title{color:inherit;font-weight:500}.ant-tree-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-tree-indent-unit{display:inline-block;width:24px}.ant-tree-switcher{position:relative;flex:none;align-self:stretch;width:24px;margin:0;line-height:24px;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-tree-switcher .ant-select-tree-switcher-icon,.ant-tree-switcher .ant-tree-switcher-icon{display:inline-block;font-size:10px;vertical-align:initial}.ant-tree-switcher .ant-select-tree-switcher-icon svg,.ant-tree-switcher .ant-tree-switcher-icon svg{transition:transform .3s}.ant-tree-switcher-noop{cursor:default}.ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(-90deg)}.ant-tree-switcher-loading-icon{color:#1890ff}.ant-tree-switcher-leaf-line{position:relative;z-index:1;display:inline-block;width:100%;height:100%}.ant-tree-switcher-leaf-line:before{position:absolute;top:0;bottom:-4px;margin-left:-1px;border-left:1px solid #d9d9d9;content:" "}.ant-tree-switcher-leaf-line:after{position:absolute;width:10px;height:14px;margin-left:-1px;border-bottom:1px solid #d9d9d9;content:" "}.ant-tree-checkbox{top:auto;margin:4px 8px 0 0}.ant-tree .ant-tree-node-content-wrapper{position:relative;z-index:auto;min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:transparent;border-radius:2px;cursor:pointer;transition:all .3s,border 0s,line-height 0s,box-shadow 0s}.ant-tree .ant-tree-node-content-wrapper:hover{background-color:#f5f5f5}.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:#bae7ff}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty{display:none}.ant-tree-unselectable .ant-tree-node-content-wrapper:hover{background-color:initial}.ant-tree-node-content-wrapper[draggable=true]{line-height:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-tree-node-content-wrapper[draggable=true] .ant-tree-drop-indicator{position:absolute;z-index:1;height:2px;background-color:#1890ff;border-radius:1px;pointer-events:none}.ant-tree-node-content-wrapper[draggable=true] .ant-tree-drop-indicator:after{position:absolute;top:-3px;left:-6px;width:8px;height:8px;background-color:initial;border:2px solid #1890ff;border-radius:50%;content:""}.ant-tree .ant-tree-treenode.drop-container>[draggable]{box-shadow:0 0 0 2px #1890ff}.ant-tree-show-line .ant-tree-indent-unit{position:relative;height:100%}.ant-tree-show-line .ant-tree-indent-unit:before{position:absolute;top:0;right:12px;bottom:-4px;border-right:1px solid #d9d9d9;content:""}.ant-tree-show-line .ant-tree-indent-unit-end:before{display:none}.ant-tree-show-line .ant-tree-switcher{background:#fff}.ant-tree-show-line .ant-tree-switcher-line-icon{vertical-align:-.225em}.ant-tree-rtl{direction:rtl}.ant-tree-rtl .ant-tree-node-content-wrapper[draggable=true] .ant-tree-drop-indicator:after{right:-6px;left:unset}.ant-tree .ant-tree-treenode-rtl{direction:rtl}.ant-tree-rtl .ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(90deg)}.ant-tree-rtl.ant-tree-show-line .ant-tree-indent-unit:before{right:auto;left:-13px;border-right:none;border-left:1px solid #d9d9d9}.ant-tree-rtl.ant-tree-checkbox,.ant-tree-select-dropdown-rtl .ant-select-tree-checkbox{margin:4px 0 0 8px}.ant-typography{color:rgba(0,0,0,.85);overflow-wrap:break-word}.ant-typography.ant-typography-secondary{color:rgba(0,0,0,.45)}.ant-typography.ant-typography-success{color:#52c41a}.ant-typography.ant-typography-warning{color:#faad14}.ant-typography.ant-typography-danger{color:#ff4d4f}a.ant-typography.ant-typography-danger:active,a.ant-typography.ant-typography-danger:focus,a.ant-typography.ant-typography-danger:hover{color:#ff7875}.ant-typography.ant-typography-disabled{color:rgba(0,0,0,.25);cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ant-typography p,div.ant-typography{margin-bottom:1em}.ant-typography h1,h1.ant-typography{margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:600;font-size:38px;line-height:1.23}.ant-typography h2,h2.ant-typography{margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:600;font-size:30px;line-height:1.35}.ant-typography h3,h3.ant-typography{margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:600;font-size:24px;line-height:1.35}.ant-typography h4,h4.ant-typography{margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:600;font-size:20px;line-height:1.4}.ant-typography h5,h5.ant-typography{margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:600;font-size:16px;line-height:1.5}.ant-typography+h1.ant-typography,.ant-typography+h2.ant-typography,.ant-typography+h3.ant-typography,.ant-typography+h4.ant-typography,.ant-typography+h5.ant-typography,.ant-typography div+h1,.ant-typography div+h2,.ant-typography div+h3,.ant-typography div+h4,.ant-typography div+h5,.ant-typography h1+h1,.ant-typography h1+h2,.ant-typography h1+h3,.ant-typography h1+h4,.ant-typography h1+h5,.ant-typography h2+h1,.ant-typography h2+h2,.ant-typography h2+h3,.ant-typography h2+h4,.ant-typography h2+h5,.ant-typography h3+h1,.ant-typography h3+h2,.ant-typography h3+h3,.ant-typography h3+h4,.ant-typography h3+h5,.ant-typography h4+h1,.ant-typography h4+h2,.ant-typography h4+h3,.ant-typography h4+h4,.ant-typography h4+h5,.ant-typography h5+h1,.ant-typography h5+h2,.ant-typography h5+h3,.ant-typography h5+h4,.ant-typography h5+h5,.ant-typography li+h1,.ant-typography li+h2,.ant-typography li+h3,.ant-typography li+h4,.ant-typography li+h5,.ant-typography p+h1,.ant-typography p+h2,.ant-typography p+h3,.ant-typography p+h4,.ant-typography p+h5,.ant-typography ul+h1,.ant-typography ul+h2,.ant-typography ul+h3,.ant-typography ul+h4,.ant-typography ul+h5{margin-top:1.2em}a.ant-typography-ellipsis,span.ant-typography-ellipsis{display:inline-block}.ant-typography a,a.ant-typography{color:#1890ff;outline:none;cursor:pointer;transition:color .3s;text-decoration:none}.ant-typography a:focus,.ant-typography a:hover,a.ant-typography:focus,a.ant-typography:hover{color:#40a9ff}.ant-typography a:active,a.ant-typography:active{color:#096dd9}.ant-typography a:active,.ant-typography a:hover,a.ant-typography:active,a.ant-typography:hover{text-decoration:none}.ant-typography a.ant-typography-disabled,.ant-typography a[disabled],a.ant-typography.ant-typography-disabled,a.ant-typography[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed}.ant-typography a.ant-typography-disabled:active,.ant-typography a.ant-typography-disabled:hover,.ant-typography a[disabled]:active,.ant-typography a[disabled]:hover,a.ant-typography.ant-typography-disabled:active,a.ant-typography.ant-typography-disabled:hover,a.ant-typography[disabled]:active,a.ant-typography[disabled]:hover{color:rgba(0,0,0,.25)}.ant-typography a.ant-typography-disabled:active,.ant-typography a[disabled]:active,a.ant-typography.ant-typography-disabled:active,a.ant-typography[disabled]:active{pointer-events:none}.ant-typography code{margin:0 .2em;padding:.2em .4em .1em;font-size:85%;background:hsla(0,0%,58.8%,.1);border:1px solid hsla(0,0%,39.2%,.2);border-radius:3px}.ant-typography kbd{margin:0 .2em;padding:.15em .4em .1em;font-size:90%;background:hsla(0,0%,58.8%,.06);border:solid hsla(0,0%,39.2%,.2);border-width:1px 1px 2px;border-radius:3px}.ant-typography mark{padding:0;background-color:#ffe58f}.ant-typography ins,.ant-typography u{text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.ant-typography del,.ant-typography s{text-decoration:line-through}.ant-typography strong{font-weight:600}.ant-typography-copy,.ant-typography-edit,.ant-typography-expand{color:#1890ff;text-decoration:none;outline:none;cursor:pointer;transition:color .3s;margin-left:4px}.ant-typography-copy:focus,.ant-typography-copy:hover,.ant-typography-edit:focus,.ant-typography-edit:hover,.ant-typography-expand:focus,.ant-typography-expand:hover{color:#40a9ff}.ant-typography-copy:active,.ant-typography-edit:active,.ant-typography-expand:active{color:#096dd9}.ant-typography-copy-success,.ant-typography-copy-success:focus,.ant-typography-copy-success:hover{color:#52c41a}.ant-typography-edit-content{position:relative}div.ant-typography-edit-content{left:-12px;margin-top:-5px;margin-bottom:calc(1em - 5px)}.ant-typography-edit-content-confirm{position:absolute;right:10px;bottom:8px;color:rgba(0,0,0,.45);pointer-events:none}.ant-typography-edit-content textarea{-moz-transition:none}.ant-typography ol,.ant-typography ul{margin:0 0 1em;padding:0}.ant-typography ol li,.ant-typography ul li{margin:0 0 0 20px;padding:0 0 0 4px}.ant-typography ul{list-style-type:circle}.ant-typography ul ul{list-style-type:disc}.ant-typography ol{list-style-type:decimal}.ant-typography blockquote,.ant-typography pre{margin:1em 0}.ant-typography pre{padding:.4em .6em;white-space:pre-wrap;word-wrap:break-word;background:hsla(0,0%,58.8%,.1);border:1px solid hsla(0,0%,39.2%,.2);border-radius:3px}.ant-typography pre code{display:inline;margin:0;padding:0;font-size:inherit;font-family:inherit;background:transparent;border:0}.ant-typography blockquote{padding:0 0 0 .6em;border-left:4px solid hsla(0,0%,39.2%,.2);opacity:.85}.ant-typography-single-line{white-space:nowrap}.ant-typography-ellipsis-single-line{overflow:hidden;text-overflow:ellipsis}a.ant-typography-ellipsis-single-line,span.ant-typography-ellipsis-single-line{vertical-align:bottom}.ant-typography-ellipsis-multiple-line{display:-webkit-box;overflow:hidden;-webkit-line-clamp:3; + /*! autoprefixer: ignore next */-webkit-box-orient:vertical}.ant-typography-rtl{direction:rtl}.ant-typography-rtl .ant-typography-copy,.ant-typography-rtl .ant-typography-edit,.ant-typography-rtl .ant-typography-expand{margin-right:4px;margin-left:0}.ant-typography-rtl .ant-typography-expand{float:left}div.ant-typography-edit-content.ant-typography-rtl{right:-12px;left:auto}.ant-typography-rtl .ant-typography-edit-content-confirm{right:auto;left:10px}.ant-typography-rtl.ant-typography ol li,.ant-typography-rtl.ant-typography ul li{margin:0 20px 0 0;padding:0 4px 0 0}.ant-upload{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum","tnum";outline:0}.ant-upload p{margin:0}.ant-upload-btn{display:block;width:100%;outline:none}.ant-upload input[type=file]{cursor:pointer}.ant-upload.ant-upload-select{display:inline-block}.ant-upload.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-select-picture-card{width:104px;height:104px;margin-right:8px;margin-bottom:8px;text-align:center;vertical-align:top;background-color:#fafafa;border:1px dashed #d9d9d9;border-radius:2px;cursor:pointer;transition:border-color .3s}.ant-upload.ant-upload-select-picture-card>.ant-upload{display:flex;align-items:center;justify-content:center;height:100%;text-align:center}.ant-upload.ant-upload-select-picture-card:hover{border-color:#1890ff}.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover{border-color:#d9d9d9}.ant-upload.ant-upload-drag{position:relative;width:100%;height:100%;text-align:center;background:#fafafa;border:1px dashed #d9d9d9;border-radius:2px;cursor:pointer;transition:border-color .3s}.ant-upload.ant-upload-drag .ant-upload{padding:16px 0}.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled){border-color:#096dd9}.ant-upload.ant-upload-drag.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-drag .ant-upload-btn{display:table;height:100%}.ant-upload.ant-upload-drag .ant-upload-drag-container{display:table-cell;vertical-align:middle}.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover{border-color:#40a9ff}.ant-upload.ant-upload-drag p.ant-upload-drag-icon{margin-bottom:20px}.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon{color:#40a9ff;font-size:48px}.ant-upload.ant-upload-drag p.ant-upload-text{margin:0 0 4px;color:rgba(0,0,0,.85);font-size:16px}.ant-upload.ant-upload-drag p.ant-upload-hint{color:rgba(0,0,0,.45);font-size:14px}.ant-upload.ant-upload-drag .anticon-plus{color:rgba(0,0,0,.25);font-size:30px;transition:all .3s}.ant-upload.ant-upload-drag .anticon-plus:hover,.ant-upload.ant-upload-drag:hover .anticon-plus{color:rgba(0,0,0,.45)}.ant-upload-picture-card-wrapper{display:inline-block;width:100%}.ant-upload-picture-card-wrapper:before{display:table;content:""}.ant-upload-picture-card-wrapper:after{display:table;clear:both;content:""}.ant-upload-list{box-sizing:border-box;margin:0;padding:0;color:rgba(0,0,0,.85);font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum","tnum";line-height:1.5715}.ant-upload-list:after,.ant-upload-list:before{display:table;content:""}.ant-upload-list:after{clear:both}.ant-upload-list-item{position:relative;height:22.001px;margin-top:8px;font-size:14px}.ant-upload-list-item-name{display:inline-block;width:100%;padding-left:22px;overflow:hidden;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis}.ant-upload-list-item-card-actions{position:absolute;right:0}.ant-upload-list-item-card-actions-btn{opacity:0}.ant-upload-list-item-card-actions-btn.ant-btn-sm{height:20px;line-height:1}.ant-upload-list-item-card-actions.picture{top:22px;line-height:0}.ant-upload-list-item-card-actions-btn:focus,.ant-upload-list-item-card-actions.picture .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-card-actions .anticon{color:rgba(0,0,0,.45)}.ant-upload-list-item-info{height:100%;padding:0 4px;transition:background-color .3s}.ant-upload-list-item-info>span{display:block;width:100%;height:100%}.ant-upload-list-item-info .ant-upload-text-icon .anticon,.ant-upload-list-item-info .anticon-loading .anticon{position:absolute;top:5px;color:rgba(0,0,0,.45);font-size:14px}.ant-upload-list-item .anticon-close{position:absolute;top:6px;right:4px;color:rgba(0,0,0,.45);font-size:10px;line-height:0;cursor:pointer;opacity:0;transition:all .3s}.ant-upload-list-item .anticon-close:hover{color:rgba(0,0,0,.85)}.ant-upload-list-item:hover .ant-upload-list-item-info{background-color:#f5f5f5}.ant-upload-list-item:hover .ant-upload-list-item-card-actions-btn,.ant-upload-list-item:hover .anticon-close{opacity:1}.ant-upload-list-item-error,.ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon,.ant-upload-list-item-error .ant-upload-list-item-name,.ant-upload-list-item-error .ant-upload-text-icon>.anticon{color:#ff4d4f}.ant-upload-list-item-error .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-progress{position:absolute;bottom:-12px;width:100%;padding-left:26px;font-size:14px;line-height:0}.ant-upload-list-picture-card .ant-upload-list-item,.ant-upload-list-picture .ant-upload-list-item{position:relative;height:66px;padding:8px;border:1px solid #d9d9d9;border-radius:2px}.ant-upload-list-picture-card .ant-upload-list-item:hover,.ant-upload-list-picture .ant-upload-list-item:hover{background:transparent}.ant-upload-list-picture-card .ant-upload-list-item-error,.ant-upload-list-picture .ant-upload-list-item-error{border-color:#ff4d4f}.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info,.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info{background:transparent}.ant-upload-list-picture-card .ant-upload-list-item-uploading,.ant-upload-list-picture .ant-upload-list-item-uploading{border-style:dashed}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-list-picture .ant-upload-list-item-thumbnail{width:48px;height:48px;line-height:54px;text-align:center;opacity:.8}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail .anticon,.ant-upload-list-picture .ant-upload-list-item-thumbnail .anticon{font-size:26px}.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#e6f7ff"],.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#e6f7ff"]{fill:#fff2f0}.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#1890ff"],.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#1890ff"]{fill:#ff4d4f}.ant-upload-list-picture-card .ant-upload-list-item-icon,.ant-upload-list-picture .ant-upload-list-item-icon{position:absolute;top:50%;left:50%;font-size:26px;transform:translate(-50%,-50%)}.ant-upload-list-picture-card .ant-upload-list-item-icon .anticon,.ant-upload-list-picture .ant-upload-list-item-icon .anticon{font-size:26px}.ant-upload-list-picture-card .ant-upload-list-item-image,.ant-upload-list-picture .ant-upload-list-item-image{max-width:100%}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img,.ant-upload-list-picture .ant-upload-list-item-thumbnail img{display:block;width:48px;height:48px;overflow:hidden}.ant-upload-list-picture-card .ant-upload-list-item-name,.ant-upload-list-picture .ant-upload-list-item-name{display:inline-block;box-sizing:border-box;max-width:100%;margin:0 0 0 8px;padding-right:8px;padding-left:48px;overflow:hidden;line-height:44px;white-space:nowrap;text-overflow:ellipsis;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name,.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name{line-height:28px}.ant-upload-list-picture-card .ant-upload-list-item-progress,.ant-upload-list-picture .ant-upload-list-item-progress{bottom:14px;width:calc(100% - 24px);margin-top:0;padding-left:56px}.ant-upload-list-picture-card .anticon-close,.ant-upload-list-picture .anticon-close{position:absolute;top:8px;right:8px;line-height:1;opacity:1}.ant-upload-list-picture-card-container{display:inline-block;width:104px;height:104px;margin:0 8px 8px 0;vertical-align:top}.ant-upload-list-picture-card.ant-upload-list:after{display:none}.ant-upload-list-picture-card .ant-upload-list-item{height:100%;margin:0}.ant-upload-list-picture-card .ant-upload-list-item-info{position:relative;height:100%;overflow:hidden}.ant-upload-list-picture-card .ant-upload-list-item-info:before{position:absolute;z-index:1;width:100%;height:100%;background-color:rgba(0,0,0,.5);opacity:0;transition:all .3s;content:" "}.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info:before{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-actions{position:absolute;top:50%;left:50%;z-index:10;white-space:nowrap;transform:translate(-50%,-50%);opacity:0;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye{z-index:10;width:16px;margin:0 4px;color:hsla(0,0%,100%,.85);font-size:16px;cursor:pointer;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover{color:#fff}.ant-upload-list-picture-card .ant-upload-list-item-actions:hover,.ant-upload-list-picture-card .ant-upload-list-item-info:hover+.ant-upload-list-item-actions{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{position:static;display:block;width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.ant-upload-list-picture-card .ant-upload-list-item-name{display:none;margin:8px 0 0;padding:0;line-height:1.5715;text-align:center}.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{position:absolute;bottom:10px;display:block}.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item{background-color:#fafafa}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info{height:auto}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info:before{display:none}.ant-upload-list-picture-card .ant-upload-list-item-progress{bottom:32px;width:calc(100% - 14px);padding-left:0}.ant-upload-list-picture-container,.ant-upload-list-text-container{transition:opacity .3s,height .3s}.ant-upload-list-picture-container:before,.ant-upload-list-text-container:before{display:table;width:0;height:0;content:""}.ant-upload-list-picture-container .ant-upload-span,.ant-upload-list-text-container .ant-upload-span{display:block;flex:auto}.ant-upload-list-picture .ant-upload-span,.ant-upload-list-text .ant-upload-span{display:flex;align-items:center}.ant-upload-list-picture .ant-upload-span>*,.ant-upload-list-text .ant-upload-span>*{flex:none}.ant-upload-list-picture .ant-upload-list-item-name,.ant-upload-list-text .ant-upload-list-item-name{flex:auto;padding:0 8px}.ant-upload-list-picture .ant-upload-list-item-card-actions,.ant-upload-list-text .ant-upload-list-item-card-actions,.ant-upload-list-text .ant-upload-text-icon .anticon{position:static}.ant-upload-list .ant-upload-animate-inline-appear,.ant-upload-list .ant-upload-animate-inline-enter,.ant-upload-list .ant-upload-animate-inline-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:cubic-bezier(.78,.14,.15,.86);animation-fill-mode:cubic-bezier(.78,.14,.15,.86)}.ant-upload-list .ant-upload-animate-inline-appear,.ant-upload-list .ant-upload-animate-inline-enter{-webkit-animation-name:uploadAnimateInlineIn;animation-name:uploadAnimateInlineIn}.ant-upload-list .ant-upload-animate-inline-leave{-webkit-animation-name:uploadAnimateInlineOut;animation-name:uploadAnimateInlineOut}@-webkit-keyframes uploadAnimateInlineIn{0%{width:0;height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateInlineIn{0%{width:0;height:0;margin:0;padding:0;opacity:0}}@-webkit-keyframes uploadAnimateInlineOut{to{width:0;height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateInlineOut{to{width:0;height:0;margin:0;padding:0;opacity:0}}.ant-upload-rtl{direction:rtl}.ant-upload-rtl.ant-upload.ant-upload-select-picture-card{margin-right:auto;margin-left:8px}.ant-upload-list-rtl{direction:rtl}.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1{padding-right:22px;padding-left:14px}.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2{padding-right:22px;padding-left:28px}.ant-upload-list-rtl .ant-upload-list-item-name{padding-right:22px;padding-left:0}.ant-upload-list-rtl .ant-upload-list-item-name-icon-count-1{padding-left:14px}.ant-upload-list-rtl .ant-upload-list-item-card-actions{right:auto;left:0}.ant-upload-list-rtl .ant-upload-list-item-card-actions .anticon{padding-right:0;padding-left:5px}.ant-upload-list-rtl .ant-upload-list-item-info{padding:0 4px 0 12px}.ant-upload-list-rtl .ant-upload-list-item .anticon-close{right:auto;left:4px}.ant-upload-list-rtl .ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon{padding-right:0;padding-left:5px}.ant-upload-list-rtl .ant-upload-list-item-progress{padding-right:26px;padding-left:0}.ant-upload-list-picture-card .ant-upload-list-item-info,.ant-upload-list-picture .ant-upload-list-item-info{padding:0}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-thumbnail{right:8px;left:auto}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-icon,.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-icon{right:50%;left:auto;transform:translate(50%,-50%)}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name,.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name{margin:0 8px 0 0;padding-right:48px;padding-left:8px}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1,.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1{padding-right:48px;padding-left:18px}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2,.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2{padding-right:48px;padding-left:36px}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-progress,.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-progress{padding-right:0;padding-left:0}.ant-upload-list-rtl.ant-upload-list-picture-card .anticon-close,.ant-upload-list-rtl.ant-upload-list-picture .anticon-close{right:auto;left:8px}.ant-upload-list-rtl .ant-upload-list-picture-card-container{margin:0 0 8px 8px}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-actions{right:50%;left:auto;transform:translate(50%,-50%)}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{margin:8px 0 0;padding:0} +/*# sourceMappingURL=2.cd26dbc7.chunk.css.map */ \ No newline at end of file diff --git a/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css.map b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css.map new file mode 100644 index 00000000..8455d741 --- /dev/null +++ b/iExec-SNCF-APP-ORACLE/GH_Page/train-pronostics-ui/static/css/2.cd26dbc7.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["antd.css","webpack://antd/components/style/core/base.less","webpack://antd/components/style/index.less","webpack://antd/components/style/color/bezierEasing.less","webpack://antd/components/style/mixins/size.less","webpack://antd/components/style/core/global.less","webpack://antd/components/style/mixins/clearfix.less","webpack://antd/components/style/mixins/iconfont.less","webpack://antd/components/style/core/iconfont.less","webpack://antd/components/style/mixins/motion.less","webpack://antd/components/style/core/motion/fade.less","webpack://antd/components/style/core/motion/move.less","webpack://antd/components/style/core/motion/other.less","webpack://antd/components/style/core/motion/slide.less","webpack://antd/components/style/core/motion/zoom.less","webpack://antd/components/style/core/motion.less","webpack://antd/components/affix/style/index.less","webpack://antd/components/style/mixins/reset.less","webpack://antd/components/alert/style/index.less","webpack://antd/components/alert/style/rtl.less","webpack://antd/components/style/color/tinyColor.less","webpack://antd/components/anchor/style/index.less","webpack://antd/components/anchor/style/rtl.less","webpack://antd/components/auto-complete/style/index.less","webpack://antd/components/select/style/single.less","webpack://antd/components/select/style/index.less","webpack://antd/components/select/style/multiple.less","webpack://antd/components/input/style/mixin.less","webpack://antd/components/select/style/rtl.less","webpack://antd/components/empty/style/index.less","webpack://antd/components/empty/style/rtl.less","webpack://antd/components/avatar/style/index.less","webpack://antd/components/avatar/style/group.less","webpack://antd/components/avatar/style/rtl.less","webpack://antd/components/popover/style/index.less","webpack://antd/components/popover/style/rtl.less","webpack://antd/components/back-top/style/index.less","webpack://antd/components/back-top/style/responsive.less","webpack://antd/components/badge/style/index.less","webpack://antd/components/badge/style/ribbon.less","webpack://antd/components/badge/style/rtl.less","webpack://antd/components/breadcrumb/style/index.less","webpack://antd/components/breadcrumb/style/rtl.less","webpack://antd/components/menu/style/status.less","webpack://antd/components/menu/style/index.less","webpack://antd/components/menu/style/light.less","webpack://antd/components/menu/style/dark.less","webpack://antd/components/menu/style/rtl.less","webpack://antd/components/tooltip/style/index.less","webpack://antd/components/tooltip/style/rtl.less","webpack://antd/components/dropdown/style/status.less","webpack://antd/components/dropdown/style/index.less","webpack://antd/components/dropdown/style/rtl.less","webpack://antd/components/button/style/index.less","webpack://antd/components/button/style/mixin.less","webpack://antd/components/button/style/rtl.less","webpack://antd/components/calendar/style/index.less","webpack://antd/components/calendar/style/rtl.less","webpack://antd/components/radio/style/index.less","webpack://antd/components/radio/style/rtl.less","webpack://antd/components/date-picker/style/index.less","webpack://antd/components/style/mixins/compatibility.less","webpack://antd/components/date-picker/style/panel.less","webpack://antd/components/date-picker/style/rtl.less","webpack://antd/components/tag/style/index.less","webpack://antd/components/tag/style/rtl.less","webpack://antd/components/card/style/index.less","webpack://antd/components/card/style/size.less","webpack://antd/components/tabs/style/size.less","webpack://antd/components/tabs/style/index.less","webpack://antd/components/tabs/style/rtl.less","webpack://antd/components/tabs/style/position.less","webpack://antd/components/tabs/style/dropdown.less","webpack://antd/components/tabs/style/card.less","webpack://antd/components/grid/style/index.less","webpack://antd/components/grid/style/mixin.less","webpack://antd/components/grid/style/rtl.less","webpack://antd/components/carousel/style/index.less","webpack://antd/components/carousel/style/rtl.less","webpack://antd/components/cascader/style/index.less","webpack://antd/components/cascader/style/rtl.less","webpack://antd/components/input/style/affix.less","webpack://antd/components/input/style/index.less","webpack://antd/components/input/style/rtl.less","webpack://antd/components/input/style/allow-clear.less","webpack://antd/components/input/style/search-input.less","webpack://antd/components/input/style/IE11.less","webpack://antd/components/checkbox/style/mixin.less","webpack://antd/components/checkbox/style/index.less","webpack://antd/components/checkbox/style/rtl.less","webpack://antd/components/collapse/style/index.less","webpack://antd/components/collapse/style/rtl.less","webpack://antd/components/comment/style/index.less","webpack://antd/components/comment/style/rtl.less","webpack://antd/components/descriptions/style/index.less","webpack://antd/components/descriptions/style/rtl.less","webpack://antd/components/divider/style/index.less","webpack://antd/components/divider/style/rtl.less","webpack://antd/components/drawer/style/drawer.less","webpack://antd/components/drawer/style/index.less","webpack://antd/components/drawer/style/rtl.less","webpack://antd/components/form/style/components.less","webpack://antd/components/form/style/index.less","webpack://antd/components/form/style/inline.less","webpack://antd/components/form/style/horizontal.less","webpack://antd/components/form/style/vertical.less","webpack://antd/components/form/style/rtl.less","webpack://antd/components/form/style/status.less","webpack://antd/components/form/style/mixin.less","webpack://antd/components/image/style/index.less","webpack://antd/components/style/mixins/box.less","webpack://antd/components/style/mixins/modal-mask.less","webpack://antd/components/input-number/style/index.less","webpack://antd/components/input-number/style/rtl.less","webpack://antd/components/layout/style/index.less","webpack://antd/components/layout/style/light.less","webpack://antd/components/layout/style/rtl.less","webpack://antd/components/list/style/index.less","webpack://antd/components/list/style/bordered.less","webpack://antd/components/list/style/responsive.less","webpack://antd/components/list/style/rtl.less","webpack://antd/components/spin/style/index.less","webpack://antd/components/spin/style/rtl.less","webpack://antd/components/pagination/style/index.less","webpack://antd/components/pagination/style/rtl.less","webpack://antd/components/mentions/style/index.less","webpack://antd/components/mentions/style/rtl.less","webpack://antd/components/message/style/index.less","webpack://antd/components/message/style/rtl.less","webpack://antd/components/modal/style/modal.less","webpack://antd/components/modal/style/index.less","webpack://antd/components/modal/style/confirm.less","webpack://antd/components/modal/style/rtl.less","webpack://antd/components/notification/style/index.less","webpack://antd/components/notification/style/rtl.less","webpack://antd/components/page-header/style/index.less","webpack://antd/components/style/mixins/operation-unit.less","webpack://antd/components/page-header/style/rtl.less","webpack://antd/components/popconfirm/style/index.less","webpack://antd/components/progress/style/index.less","webpack://antd/components/progress/style/rtl.less","webpack://antd/components/rate/style/index.less","webpack://antd/components/rate/style/rtl.less","webpack://antd/components/style/color/colorPalette.less","webpack://antd/components/result/style/index.less","webpack://antd/components/result/style/rtl.less","webpack://antd/components/skeleton/style/index.less","webpack://antd/components/skeleton/style/rtl.less","webpack://antd/components/slider/style/index.less","webpack://antd/components/slider/style/rtl.less","webpack://antd/components/space/style/index.less","webpack://antd/components/space/style/rtl.less","webpack://antd/components/statistic/style/index.less","webpack://antd/components/statistic/style/rtl.less","webpack://antd/components/steps/style/index.less","webpack://antd/components/steps/style/custom-icon.less","webpack://antd/components/steps/style/small.less","webpack://antd/components/steps/style/vertical.less","webpack://antd/components/steps/style/label-placement.less","webpack://antd/components/steps/style/progress-dot.less","webpack://antd/components/steps/style/nav.less","webpack://antd/components/steps/style/rtl.less","webpack://antd/components/steps/style/progress.less","webpack://antd/components/switch/style/index.less","webpack://antd/components/switch/style/rtl.less","webpack://antd/components/table/style/size.less","webpack://antd/components/table/style/index.less","webpack://antd/components/table/style/bordered.less","webpack://antd/components/table/style/radius.less","webpack://antd/components/table/style/rtl.less","webpack://antd/components/timeline/style/index.less","webpack://antd/components/timeline/style/rtl.less","webpack://antd/components/transfer/style/customize.less","webpack://antd/components/transfer/style/index.less","webpack://antd/components/transfer/style/rtl.less","webpack://antd/components/tree-select/style/index.less","webpack://antd/components/tree/style/mixin.less","webpack://antd/components/tree/style/index.less","webpack://antd/components/tree/style/directory.less","webpack://antd/components/tree/style/rtl.less","webpack://antd/components/typography/style/index.less","webpack://antd/components/style/mixins/typography.less","webpack://antd/components/typography/style/rtl.less","webpack://antd/components/upload/style/index.less","webpack://antd/components/upload/style/rtl.less"],"names":[],"mappings":"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CACA,STgfF,CS9eA,GACE,uBAAA,CACA,oBAAA,CACA,STgfF,CACF,CS1fA,yBACE,GACE,0BAAA,CACA,oBAAA,CACA,STgfF,CS9eA,GACE,uBAAA,CACA,oBAAA,CACA,STgfF,CACF,CS7eA,kCACE,GACE,uBAAA,CACA,oBAAA,CACA,ST+eF,CS7eA,GACE,0BAAA,CACA,oBAAA,CACA,ST+eF,CACF,CSzfA,0BACE,GACE,uBAAA,CACA,oBAAA,CACA,ST+eF,CS7eA,GACE,0BAAA,CACA,oBAAA,CACA,ST+eF,CACF,CS5eA,iCACE,GACE,2BAAA,CACA,oBAAA,CACA,ST8eF,CS5eA,GACE,uBAAA,CACA,oBAAA,CACA,ST8eF,CACF,CSxfA,yBACE,GACE,2BAAA,CACA,oBAAA,CACA,ST8eF,CS5eA,GACE,uBAAA,CACA,oBAAA,CACA,ST8eF,CACF,CS3eA,kCACE,GACE,uBAAA,CACA,oBAAA,CACA,ST6eF,CS3eA,GACE,2BAAA,CACA,oBAAA,CACA,ST6eF,CACF,CSvfA,0BACE,GACE,uBAAA,CACA,oBAAA,CACA,ST6eF,CS3eA,GACE,2BAAA,CACA,oBAAA,CACA,ST6eF,CACF,CS1eA,kCACE,GACE,0BAAA,CACA,oBAAA,CACA,ST4eF,CS1eA,GACE,uBAAA,CACA,oBAAA,CACA,ST4eF,CACF,CStfA,0BACE,GACE,0BAAA,CACA,oBAAA,CACA,ST4eF,CS1eA,GACE,uBAAA,CACA,oBAAA,CACA,ST4eF,CACF,CSzeA,mCACE,GACE,uBAAA,CACA,oBAAA,CACA,ST2eF,CSzeA,GACE,0BAAA,CACA,oBAAA,CACA,ST2eF,CACF,CSrfA,2BACE,GACE,uBAAA,CACA,oBAAA,CACA,ST2eF,CSzeA,GACE,0BAAA,CACA,oBAAA,CACA,ST2eF,CACF,CSxeA,+BACE,GACE,2BAAA,CACA,oBAAA,CACA,ST0eF,CSxeA,GACE,uBAAA,CACA,oBAAA,CACA,ST0eF,CACF,CSpfA,uBACE,GACE,2BAAA,CACA,oBAAA,CACA,ST0eF,CSxeA,GACE,uBAAA,CACA,oBAAA,CACA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,6BAAA,CACA,gCAAA,CACA,0BAAA,CACA,UF0TR,CErTI,mHAGE,OAAA,CACA,QFuTN,CxCzjBC,6xB0CiRK,kBFiTN,CxClkBC,qJ0CsRK,yBF+SN,CxCrkBC,mJ0C0RK,yBF8SN,CExSM,8QACE,iBAAA,CACA,KAAA,CACA,QAAA,CACA,UAAA,CACA,kBAAA,CACA,UF2SR,CxCjlBC,wI0C4SK,UAAA,CACA,MFwSN,CxCrlBC,sI0CgTK,OAAA,CACA,SFwSN,CEpSI,+DACE,SFsSN,CEpSI,6DACE,QFsSN,CElSI,qeAKE,QAAA,CACA,8BAAA,CACA,0BAAA,CACA,6BFoSN,CEhSI,ydAKE,SAAA,CACA,+BAAA,CACA,2BAAA,CACA,8BFkSN,CE9RI,0BACE,mBFgSN,CEjSI,iDAII,qBAAA,CACA,sBFgSR,CE7RM,iCACE,kBF+RR,CxC7nBC,8E0CkWK,4BF8RN,CExQE,kLAKI,YFyQN,CE9QE,8LASI,aF2QN,CxC5oBC,sS0CsYO,kBF4QR,CEvQE,8CAEI,WFwQN,CEnQE,mBACE,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CACA,cAAA,CACA,gBAAA,CACA,iBAAA,CACA,mCFqQJ,CxC5pBC,qC0C0ZK,4BFqQN,CElQI,yBACE,cAAA,CACA,gBAAA,CACA,eFoQN,CElQM,0CACE,+BFoQR,CE/PE,gBACE,eFiQJ,CE9PE,sBACE,aFgQJ,CE9PI,4BACE,aFgQN,CE7PI,6BACE,aF+PN,CE5PI,oDACE,qBAAA,CACA,kBF8PN,CErPE,gDAEI,aFsPN,CExPE,iDAMI,YFqPN,CEhPE,4HAQI,aF6ON,CErPE,8IAYI,UF8ON,CE1PE,oMAgBI,SAAA,CACA,8BAAA,CACA,yBF+ON,CEjQE,ocA2BI,UAAA,CACA,+BAAA,CACA,yBFkPN,CxC5tBC,gQ0C6eO,SAAA,CACA,8BAAA,CACA,yBFoPR,CE9OE,wCAEI,gBF+ON,CxCtuBC,4M0C+fO,gCF4OR,CExOI,8BAEI,yBFyOR,CEtOM,oCACE,kBFwOR,CErOM,oFAEE,kBFuOR,CxCrvBC,8H0CihBS,wBFwOV,CxCzvBC,4L0CqhBS,iBFwOV,CEjPM,kIAa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wDJ,CtD1EC,kBuDqBG,QDwDJ,CtD7EC,YuDOG,aAAA,CACA,qBAAA,CACA,sBDyEJ,CtDlFC,iBuDYG,iBDyEJ,CtDrFC,iBuDeG,kBDyEJ,CtDxFC,mBuDkBG,wBDyEJ,CtD3FC,kBuDqBG,QDyEJ,CtD9FC,YuDOG,aAAA,CACA,cAAA,CACA,eD0FJ,CtDnGC,iBuDYG,UD0FJ,CtDtGC,iBuDeG,WD0FJ,CtDzGC,mBuDkBG,iBD0FJ,CtD5GC,kBuDqBG,QD0FJ,CtD/GC,YuDOG,aAAA,CACA,qBAAA,CACA,sBD2GJ,CtDpHC,iBuDYG,iBD2GJ,CtDvHC,iBuDeG,kBD2GJ,CtD1HC,mBuDkBG,wBD2GJ,CtD7HC,kBuDqBG,QD2GJ,CtDhIC,YuDOG,aAAA,CACA,qBAAA,CACA,sBD4HJ,CtDrIC,iBuDYG,iBD4HJ,CtDxIC,iBuDeG,kBD4HJ,CtD3IC,mBuDkBG,wBD4HJ,CtD9IC,kBuDqBG,QD4HJ,CtDjJC,YuDOG,aAAA,CACA,YAAA,CACA,aD6IJ,CtDtJC,iBuDYG,QD6IJ,CtDzJC,iBuDeG,SD6IJ,CtD5JC,mBuDkBG,eD6IJ,CtD/JC,kBuDqBG,QD6IJ,CtDlKC,YuDOG,aAAA,CACA,qBAAA,CACA,sBD8JJ,CtDvKC,iBuDYG,iBD8JJ,CtD1KC,iBuDeG,kBD8JJ,CtD7KC,mBuDkBG,wBD8JJ,CtDhLC,kBuDqBG,QD8JJ,CtDnLC,YuDOG,aAAA,CACA,qBAAA,CACA,sBD+KJ,CtDxLC,iBuDYG,iBD+KJ,CtD3LC,iBuDeG,kBD+KJ,CtD9LC,mBuDkBG,wBD+KJ,CtDjMC,kBuDqBG,QD+KJ,CtDpMC,YuDOG,aAAA,CACA,cAAA,CACA,eDgMJ,CtDzMC,iBuDYG,UDgMJ,CtD5MC,iBuDeG,WDgMJ,CtD/MC,mBuDkBG,iBDgMJ,CtDlNC,kBuDqBG,QDgMJ,CtDrNC,YuDOG,aAAA,CACA,qBAAA,CACA,sBDiNJ,CtD1NC,iBuDYG,iBDiNJ,CtD7NC,iBuDeG,kBDiNJ,CtDhOC,mBuDkBG,wBDiNJ,CtDnOC,kBuDqBG,QDiNJ,CtDtOC,YuDOG,aAAA,CACA,qBAAA,CACA,sBDkOJ,CtD3OC,iBuDYG,iBDkOJ,CtD9OC,iBuDeG,kBDkOJ,CtDjPC,mBuDkBG,wBDkOJ,CtDpPC,kBuDqBG,QDkOJ,CtDvPC,YuDOG,aAAA,CACA,YAAA,CACA,aDmPJ,CtD5PC,iBuDYG,QDmPJ,CtD/PC,iBuDeG,SDmPJ,CtDlQC,mBuDkBG,eDmPJ,CtDrQC,kBuDqBG,QDmPJ,CtDxQC,YuDOG,aAAA,CACA,qBAAA,CACA,sBDoQJ,CtD7QC,iBuDYG,iBDoQJ,CtDhRC,iBuDeG,kBDoQJ,CtDnRC,mBuDkBG,wBDoQJ,CtDtRC,kBuDqBG,QDoQJ,CtDzRC,YuDOG,aAAA,CACA,qBAAA,CACA,sBDqRJ,CtD9RC,iBuDYG,iBDqRJ,CtDjSC,iBuDeG,kBDqRJ,CtDpSC,mBuDkBG,wBDqRJ,CtDvSC,kBuDqBG,QDqRJ,CtD1SC,WuDOG,aAAA,CACA,cAAA,CACA,eDsSJ,CtD/SC,gBuDYG,UDsSJ,CtDlTC,gBuDeG,WDsSJ,CtDrTC,kBuDkBG,iBDsSJ,CtDxTC,iBuDqBG,ODsSJ,CtD3TC,WuDOG,aAAA,CACA,qBAAA,CACA,sBDuTJ,CtDhUC,gBuDYG,iBDuTJ,CtDnUC,gBuDeG,kBDuTJ,CtDtUC,kBuDkBG,wBDuTJ,CtDzUC,iBuDqBG,ODuTJ,CtD5UC,WuDOG,aAAA,CACA,qBAAA,CACA,sBDwUJ,CtDjVC,gBuDYG,iBDwUJ,CtDpVC,gBuDeG,kBDwUJ,CtDvVC,kBuDkBG,wBDwUJ,CtD1VC,iBuDqBG,ODwUJ,CtD7VC,WuDOG,aAAA,CACA,YAAA,CACA,aDyVJ,CtDlWC,gBuDYG,QDyVJ,CtDrWC,gBuDeG,SDyVJ,CtDxWC,kBuDkBG,eDyVJ,CtD3WC,iBuDqBG,ODyVJ,CtD9WC,WuDOG,aAAA,CACA,qBAAA,CACA,sBD0WJ,CtDnXC,gBuDYG,iBD0WJ,CtDtXC,gBuDeG,kBD0WJ,CtDzXC,kBuDkBG,wBD0WJ,CtD5XC,iBuDqBG,OD0WJ,CtD/XC,WuDOG,aAAA,CACA,qBAAA,CACA,sBD2XJ,CtDpYC,gBuDYG,iBD2XJ,CtDvYC,gBuDeG,kBD2XJ,CtD1YC,kBuDkBG,wBD2XJ,CtD7YC,iBuDqBG,OD2XJ,CtDhZC,WuDOG,aAAA,CACA,cAAA,CACA,eD4YJ,CtDrZC,gBuDYG,UD4YJ,CtDxZC,gBuDeG,WD4YJ,CtD3ZC,kBuDkBG,iBD4YJ,CtD9ZC,iBuDqBG,OD4YJ,CtDjaC,WuDOG,aAAA,CACA,oBAAA,CACA,qBD6ZJ,CtDtaC,gBuDYG,gBD6ZJ,CtDzaC,gBuDeG,iBD6ZJ,CtD5aC,kBuDkBG,uBD6ZJ,CtD/aC,iBuDqBG,OD6ZJ,CtDlbC,WuDOG,aAAA,CACA,oBAAA,CACA,qBD8aJ,CtDvbC,gBuDYG,gBD8aJ,CtD1bC,gBuDeG,iBD8aJ,CtD7bC,kBuDkBG,uBD8aJ,CtDhcC,iBuDqBG,OD8aJ,CtDncC,WuD4BG,YD0aJ,CtDtcC,kBuD2CG,aD0aJ,CtDrdC,iBuD8CG,OD0aJ,CtDxdC,8BwDgEK,cFuaN,CtDveC,4BwDcK,iBAAA,CACA,SF4dN,CtD3eC,4BwDsBK,UAAA,CACA,gBFwdN,CtD/eC,8BwD8BK,wBAAA,CACA,aFodN,CtDnfC,4BwDcK,iBAAA,CACA,SFweN,CtDvfC,4BwDsBK,UAAA,CACA,gBFoeN,CtD3fC,8BwD8BK,wBAAA,CACA,aFgeN,CtD/fC,4BwDcK,WAAA,CACA,SFofN,CtDngBC,4BwDsBK,UAAA,CACA,UFgfN,CtDvgBC,8BwD8BK,kBAAA,CACA,aF4eN,CtD3gBC,4BwDcK,kBAAA,CACA,SFggBN,CtD/gBC,4BwDsBK,UAAA,CACA,iBF4fN,CtDnhBC,8BwD8BK,yBAAA,CACA,aFwfN,CtDvhBC,4BwDcK,kBAAA,CACA,SF4gBN,CtD3hBC,4BwDsBK,UAAA,CACA,iBFwgBN,CtD/hBC,8BwD8BK,yBAAA,CACA,aFogBN,CtDniBC,4BwDcK,SAAA,CACA,SFwhBN,CtDviBC,4BwDsBK,UAAA,CACA,QFohBN,CtD3iBC,8BwD8BK,gBAAA,CACA,aFghBN,CtD/iBC,4BwDcK,kBAAA,CACA,SFoiBN,CtDnjBC,4BwDsBK,UAAA,CACA,iBFgiBN,CtDvjBC,8BwD8BK,yBAAA,CACA,aF4hBN,CtD3jBC,4BwDcK,kBAAA,CACA,SFgjBN,CtD/jBC,4BwDsBK,UAAA,CACA,iBF4iBN,CtDnkBC,8BwD8BK,yBAAA,CACA,aFwiBN,CtDvkBC,4BwDcK,WAAA,CACA,SF4jBN,CtD3kBC,4BwDsBK,UAAA,CACA,UFwjBN,CtD/kBC,8BwD8BK,kBAAA,CACA,aFojBN,CtDnlBC,6BwDcK,kBAAA,CACA,SFwkBN,CtDvlBC,6BwDsBK,UAAA,CACA,iBFokBN,CtD3lBC,+BwD8BK,yBAAA,CACA,aFgkBN,CtD/lBC,6BwDcK,kBAAA,CACA,SFolBN,CtDnmBC,6BwDsBK,UAAA,CACA,iBFglBN,CtDvmBC,+BwD8BK,yBAAA,CACA,aF4kBN,CtD3mBC,6BwDcK,SAAA,CACA,SFgmBN,CtD/mBC,6BwDsBK,UAAA,CACA,QF4lBN,CtDnnBC,+BwD8BK,gBAAA,CACA,aFwlBN,CtDvnBC,6BwDcK,kBAAA,CACA,SF4mBN,CtD3nBC,6BwDsBK,UAAA,CACA,iBFwmBN,CtD/nBC,+BwD8BK,yBAAA,CACA,aFomBN,CtDnoBC,6BwDcK,kBAAA,CACA,SFwnBN,CtDvoBC,6BwDsBK,UAAA,CACA,iBFonBN,CtD3oBC,+BwD8BK,yBAAA,CACA,aFgnBN,CtD/oBC,6BwDcK,WAAA,CACA,SFooBN,CtDnpBC,6BwDsBK,UAAA,CACA,UFgoBN,CtDvpBC,+BwD8BK,kBAAA,CACA,aF4nBN,CtD3pBC,6BwDcK,kBAAA,CACA,SFgpBN,CtD/pBC,6BwDsBK,UAAA,CACA,iBF4oBN,CtDnqBC,+BwD8BK,yBAAA,CACA,aFwoBN,CtDvqBC,6BwDcK,kBAAA,CACA,SF4pBN,CtD3qBC,6BwDsBK,UAAA,CACA,iBFwpBN,CtD/qBC,+BwD8BK,yBAAA,CACA,aFopBN,CtDnrBC,6BwDcK,SAAA,CACA,SFwqBN,CtDvrBC,6BwDsBK,UAAA,CACA,QFoqBN,CtD3rBC,+BwD8BK,gBAAA,CACA,aFgqBN,CtD/rBC,6BwDcK,kBAAA,CACA,SForBN,CtDnsBC,6BwDsBK,UAAA,CACA,iBFgrBN,CtDvsBC,+BwD8BK,yBAAA,CACA,aF4qBN,CtD3sBC,6BwDcK,kBAAA,CACA,SFgsBN,CtD/sBC,6BwDsBK,UAAA,CACA,iBF4rBN,CtDntBC,+BwD8BK,yBAAA,CACA,aFwrBN,CtDvtBC,6BwDcK,WAAA,CACA,SF4sBN,CtD3tBC,6BwDsBK,UAAA,CACA,UFwsBN,CtD/tBC,+BwD8BK,kBAAA,CACA,aFosBN,CtDnuBC,6BwDcK,kBAAA,CACA,SFwtBN,CtDvuBC,6BwDsBK,UAAA,CACA,iBFotBN,CtD3uBC,+BwD8BK,yBAAA,CACA,aFgtBN,CtD/uBC,6BwDcK,kBAAA,CACA,SFouBN,CtDnvBC,6BwDsBK,UAAA,CACA,iBFguBN,CtDvvBC,+BwD8BK,yBAAA,CACA,aF4tBN,CtD3vBC,6BwDcK,UAAA,CACA,SFgvBN,CtD/vBC,6BwDsBK,UAAA,CACA,SF4uBN,CtDnwBC,+BwD8BK,iBAAA,CACA,aFwuBN,CtDvwBC,euDOG,aAAA,CACA,aAAA,CACA,cDmwBJ,CtD5wBC,oBuDYG,SDmwBJ,CtD/wBC,oBuDeG,UDmwBJ,CtDlxBC,sBuDkBG,gBDmwBJ,CtDrxBC,qBuDqBG,QDmwBJ,CtDxxBC,euDOG,aAAA,CACA,qBAAA,CACA,sBDoxBJ,CtD7xBC,oBuDYG,iBDoxBJ,CtDhyBC,oBuDeG,kBDoxBJ,CtDnyBC,sBuDkBG,wBDoxBJ,CtDtyBC,qBuDqBG,QDoxBJ,CtDzyBC,euDOG,aAAA,CACA,qBAAA,CACA,sBDqyBJ,CtD9yBC,oBuDYG,iBDqyBJ,CtDjzBC,oBuDeG,kBDqyBJ,CtDpzBC,sBuDkBG,wBDqyBJ,CtDvzBC,qBuDqBG,QDqyBJ,CtD1zBC,euDOG,aAAA,CACA,cAAA,CACA,eDszBJ,CtD/zBC,oBuDYG,UDszBJ,CtDl0BC,oBuDeG,WDszBJ,CtDr0BC,sBuDkBG,iBDszBJ,CtDx0BC,qBuDqBG,QDszBJ,CtD30BC,euDOG,aAAA,CACA,qBAAA,CACA,sBDu0BJ,CtDh1BC,oBuDYG,iBDu0BJ,CtDn1BC,oBuDeG,kBDu0BJ,CtDt1BC,sBuDkBG,wBDu0BJ,CtDz1BC,qBuDqBG,QDu0BJ,CtD51BC,euDOG,aAAA,CACA,qBAAA,CACA,sBDw1BJ,CtDj2BC,oBuDYG,iBDw1BJ,CtDp2BC,oBuDeG,kBDw1BJ,CtDv2BC,sBuDkBG,wBDw1BJ,CtD12BC,qBuDqBG,QDw1BJ,CtD72BC,euDOG,aAAA,CACA,YAAA,CACA,aDy2BJ,CtDl3BC,oBuDYG,QDy2BJ,CtDr3BC,oBuDeG,SDy2BJ,CtDx3BC,sBuDkBG,eDy2BJ,CtD33BC,qBuDqBG,QDy2BJ,CtD93BC,euDOG,aAAA,CACA,qBAAA,CACA,sBD03BJ,CtDn4BC,oBuDYG,iBD03BJ,CtDt4BC,oBuDeG,kBD03BJ,CtDz4BC,sBuDkBG,wBD03BJ,CtD54BC,qBuDqBG,QD03BJ,CtD/4BC,euDOG,aAAA,CACA,qBAAA,CACA,sBD24BJ,CtDp5BC,oBuDYG,iBD24BJ,CtDv5BC,oBuDeG,kBD24BJ,CtD15BC,sBuDkBG,wBD24BJ,CtD75BC,qBuDqBG,QD24BJ,CtDh6BC,euDOG,aAAA,CACA,cAAA,CACA,eD45BJ,CtDr6BC,oBuDYG,UD45BJ,CtDx6BC,oBuDeG,WD45BJ,CtD36BC,sBuDkBG,iBD45BJ,CtD96BC,qBuDqBG,QD45BJ,CtDj7BC,euDOG,aAAA,CACA,qBAAA,CACA,sBD66BJ,CtDt7BC,oBuDYG,iBD66BJ,CtDz7BC,oBuDeG,kBD66BJ,CtD57BC,sBuDkBG,wBD66BJ,CtD/7BC,qBuDqBG,QD66BJ,CtDl8BC,euDOG,aAAA,CACA,qBAAA,CACA,sBD87BJ,CtDv8BC,oBuDYG,iBD87BJ,CtD18BC,oBuDeG,kBD87BJ,CtD78BC,sBuDkBG,wBD87BJ,CtDh9BC,qBuDqBG,QD87BJ,CtDn9BC,euDOG,aAAA,CACA,YAAA,CACA,aD+8BJ,CtDx9BC,oBuDYG,QD+8BJ,CtD39BC,oBuDeG,SD+8BJ,CtD99BC,sBuDkBG,eD+8BJ,CtDj+BC,qBuDqBG,QD+8BJ,CtDp+BC,euDOG,aAAA,CACA,qBAAA,CACA,sBDg+BJ,CtDz+BC,oBuDYG,iBDg+BJ,CtD5+BC,oBuDeG,kBDg+BJ,CtD/+BC,sBuDkBG,wBDg+BJ,CtDl/BC,qBuDqBG,QDg+BJ,CtDr/BC,euDOG,aAAA,CACA,qBAAA,CACA,sBDi/BJ,CtD1/BC,oBuDYG,iBDi/BJ,CtD7/BC,oBuDeG,kBDi/BJ,CtDhgCC,sBuDkBG,wBDi/BJ,CtDngCC,qBuDqBG,QDi/BJ,CtDtgCC,cuDOG,aAAA,CACA,cAAA,CACA,eDkgCJ,CtD3gCC,mBuDYG,UDkgCJ,CtD9gCC,mBuDeG,WDkgCJ,CtDjhCC,qBuDkBG,iBDkgCJ,CtDphCC,oBuDqBG,ODkgCJ,CtDvhCC,cuDOG,aAAA,CACA,qBAAA,CACA,sBDmhCJ,CtD5hCC,mBuDYG,iBDmhCJ,CtD/hCC,mBuDeG,kBDmhCJ,CtDliCC,qBuDkBG,wBDmhCJ,CtDriCC,oBuDqBG,ODmhCJ,CtDxiCC,cuDOG,aAAA,CACA,qBAAA,CACA,sBDoiCJ,CtD7iCC,mBuDYG,iBDoiCJ,CtDhjCC,mBuDeG,kBDoiCJ,CtDnjCC,qBuDkBG,wBDoiCJ,CtDtjCC,oBuDqBG,ODoiCJ,CtDzjCC,cuDOG,aAAA,CACA,YAAA,CACA,aDqjCJ,CtD9jCC,mBuDYG,QDqjCJ,CtDjkCC,mBuDeG,SDqjCJ,CtDpkCC,qBuDkBG,eDqjCJ,CtDvkCC,oBuDqBG,ODqjCJ,CtD1kCC,cuDOG,aAAA,CACA,qBAAA,CACA,sBDskCJ,CtD/kCC,mBuDYG,iBDskCJ,CtDllCC,mBuDeG,kBDskCJ,CtDrlCC,qBuDkBG,wBDskCJ,CtDxlCC,oBuDqBG,ODskCJ,CtD3lCC,cuDOG,aAAA,CACA,qBAAA,CACA,sBDulCJ,CtDhmCC,mBuDYG,iBDulCJ,CtDnmCC,mBuDeG,kBDulCJ,CtDtmCC,qBuDkBG,wBDulCJ,CtDzmCC,oBuDqBG,ODulCJ,CtD5mCC,cuDOG,aAAA,CACA,cAAA,CACA,eDwmCJ,CtDjnCC,mBuDYG,UDwmCJ,CtDpnCC,mBuDeG,WDwmCJ,CtDvnCC,qBuDkBG,iBDwmCJ,CtD1nCC,oBuDqBG,ODwmCJ,CtD7nCC,cuDOG,aAAA,CACA,oBAAA,CACA,qBDynCJ,CtDloCC,mBuDYG,gBDynCJ,CtDroCC,mBuDeG,iBDynCJ,CtDxoCC,qBuDkBG,uBDynCJ,CtD3oCC,oBuDqBG,ODynCJ,CtD9oCC,cuDOG,aAAA,CACA,oBAAA,CACA,qBD0oCJ,CtDnpCC,mBuDYG,gBD0oCJ,CtDtpCC,mBuDeG,iBD0oCJ,CtDzpCC,qBuDkBG,uBD0oCJ,CtD5pCC,oBuDqBG,OD0oCJ,CtD/pCC,cuD4BG,YDsoCJ,CtDlqCC,gBuD+BG,SDsoCJ,CtDrqCC,gBuDkCG,UDsoCJ,CtDxqCC,mBuDqCG,SDsoCJ,CtD3qCC,mBuDwCG,UDsoCJ,CtD9qCC,qBuD2CG,aDsoCJ,CtDjrCC,oBuD8CG,ODsoCJ,CtDprCC,4BwDwCK,UF+oCN,CtDvrCC,4BwD8CK,SF4oCN,CtD1rCC,+BwDoDK,UFyoCN,CtD7rCC,+BwD0DK,SFsoCN,CtDhsCC,iCwDgEK,cFmoCN,CtDnsCC,+BwDcK,iBAAA,CACA,SFwrCN,CtDvsCC,+BwDsBK,UAAA,CACA,gBForCN,CtD3sCC,iCwD8BK,wBAAA,CACA,aFgrCN,CtD/sCC,+BwDcK,iBAAA,CACA,SFosCN,CtDntCC,+BwDsBK,UAAA,CACA,gBFgsCN,CtDvtCC,iCwD8BK,wBAAA,CACA,aF4rCN,CtD3tCC,+BwDcK,WAAA,CACA,SFgtCN,CtD/tCC,+BwDsBK,UAAA,CACA,UF4sCN,CtDnuCC,iCwD8BK,kBAAA,CACA,aFwsCN,CtDvuCC,+BwDcK,kBAAA,CACA,SF4tCN,CtD3uCC,+BwDsBK,UAAA,CACA,iBFwtCN,CtD/uCC,iCwD8BK,yBAAA,CACA,aFotCN,CtDnvCC,+BwDcK,kBAAA,CACA,SFwuCN,CtDvvCC,+BwDsBK,UAAA,CACA,iBFouCN,CtD3vCC,iCwD8BK,yBAAA,CACA,aFguCN,CtD/vCC,+BwDcK,SAAA,CACA,SFovCN,CtDnwCC,+BwDsBK,UAAA,CACA,QFgvCN,CtDvwCC,iCwD8BK,gBAAA,CACA,aF4uCN,CtD3wCC,+BwDcK,kBAAA,CACA,SFgwCN,CtD/wCC,+BwDsBK,UAAA,CACA,iBF4vCN,CtDnxCC,iCwD8BK,yBAAA,CACA,aFwvCN,CtDvxCC,+BwDcK,kBAAA,CACA,SF4wCN,CtD3xCC,+BwDsBK,UAAA,CACA,iBFwwCN,CtD/xCC,iCwD8BK,yBAAA,CACA,aFowCN,CtDnyCC,+BwDcK,WAAA,CACA,SFwxCN,CtDvyCC,+BwDsBK,UAAA,CACA,UFoxCN,CtD3yCC,iCwD8BK,kBAAA,CACA,aFgxCN,CtD/yCC,gCwDcK,kBAAA,CACA,SFoyCN,CtDnzCC,gCwDsBK,UAAA,CACA,iBFgyCN,CtDvzCC,kCwD8BK,yBAAA,CACA,aF4xCN,CtD3zCC,gCwDcK,kBAAA,CACA,SFgzCN,CtD/zCC,gCwDsBK,UAAA,CACA,iBF4yCN,CtDn0CC,kCwD8BK,yBAAA,CACA,aFwyCN,CtDv0CC,gCwDcK,SAAA,CACA,SF4zCN,CtD30CC,gCwDsBK,UAAA,CACA,QFwzCN,CtD/0CC,kCwD8BK,gBAAA,CACA,aFozCN,CtDn1CC,gCwDcK,kBAAA,CACA,SFw0CN,CtDv1CC,gCwDsBK,UAAA,CACA,iBFo0CN,CtD31CC,kCwD8BK,yBAAA,CACA,aFg0CN,CtD/1CC,gCwDcK,kBAAA,CACA,SFo1CN,CtDn2CC,gCwDsBK,UAAA,CACA,iBFg1CN,CtDv2CC,kCwD8BK,yBAAA,CACA,aF40CN,CtD32CC,gCwDcK,WAAA,CACA,SFg2CN,CtD/2CC,gCwDsBK,UAAA,CACA,UF41CN,CtDn3CC,kCwD8BK,kBAAA,CACA,aFw1CN,CtDv3CC,gCwDcK,kBAAA,CACA,SF42CN,CtD33CC,gCwDsBK,UAAA,CACA,iBFw2CN,CtD/3CC,kCwD8BK,yBAAA,CACA,aFo2CN,CtDn4CC,gCwDcK,kBAAA,CACA,SFw3CN,CtDv4CC,gCwDsBK,UAAA,CACA,iBFo3CN,CtD34CC,kCwD8BK,yBAAA,CACA,aFg3CN,CtD/4CC,gCwDcK,SAAA,CACA,SFo4CN,CtDn5CC,gCwDsBK,UAAA,CACA,QFg4CN,CtDv5CC,kCwD8BK,gBAAA,CACA,aF43CN,CtD35CC,gCwDcK,kBAAA,CACA,SFg5CN,CtD/5CC,gCwDsBK,UAAA,CACA,iBF44CN,CtDn6CC,kCwD8BK,yBAAA,CACA,aFw4CN,CtDv6CC,gCwDcK,kBAAA,CACA,SF45CN,CtD36CC,gCwDsBK,UAAA,CACA,iBFw5CN,CtD/6CC,kCwD8BK,yBAAA,CACA,aFo5CN,CtDn7CC,gCwDcK,WAAA,CACA,SFw6CN,CtDv7CC,gCwDsBK,UAAA,CACA,UFo6CN,CtD37CC,kCwD8BK,kBAAA,CACA,aFg6CN,CtD/7CC,gCwDcK,kBAAA,CACA,SFo7CN,CtDn8CC,gCwDsBK,UAAA,CACA,iBFg7CN,CtDv8CC,kCwD8BK,yBAAA,CACA,aF46CN,CtD38CC,gCwDcK,kBAAA,CACA,SFg8CN,CtD/8CC,gCwDsBK,UAAA,CACA,iBF47CN,CtDn9CC,kCwD8BK,yBAAA,CACA,aFw7CN,CtDv9CC,gCwDcK,UAAA,CACA,SF48CN,CtD39CC,gCwDsBK,UAAA,CACA,SFw8CN,CtD/9CC,kCwD8BK,iBAAA,CACA,aFo8CN,CAl5CA,yBtDjFC,euDOG,aAAA,CACA,aAAA,CACA,cDg+CF,CtDz+CD,oBuDYG,SDg+CF,CtD5+CD,oBuDeG,UDg+CF,CtD/+CD,sBuDkBG,gBDg+CF,CtDl/CD,qBuDqBG,QDg+CF,CtDr/CD,euDOG,aAAA,CACA,qBAAA,CACA,sBDi/CF,CtD1/CD,oBuDYG,iBDi/CF,CtD7/CD,oBuDeG,kBDi/CF,CtDhgDD,sBuDkBG,wBDi/CF,CtDngDD,qBuDqBG,QDi/CF,CtDtgDD,euDOG,aAAA,CACA,qBAAA,CACA,sBDkgDF,CtD3gDD,oBuDYG,iBDkgDF,CtD9gDD,oBuDeG,kBDkgDF,CtDjhDD,sBuDkBG,wBDkgDF,CtDphDD,qBuDqBG,QDkgDF,CtDvhDD,euDOG,aAAA,CACA,cAAA,CACA,eDmhDF,CtD5hDD,oBuDYG,UDmhDF,CtD/hDD,oBuDeG,WDmhDF,CtDliDD,sBuDkBG,iBDmhDF,CtDriDD,qBuDqBG,QDmhDF,CtDxiDD,euDOG,aAAA,CACA,qBAAA,CACA,sBDoiDF,CtD7iDD,oBuDYG,iBDoiDF,CtDhjDD,oBuDeG,kBDoiDF,CtDnjDD,sBuDkBG,wBDoiDF,CtDtjDD,qBuDqBG,QDoiDF,CtDzjDD,euDOG,aAAA,CACA,qBAAA,CACA,sBDqjDF,CtD9jDD,oBuDYG,iBDqjDF,CtDjkDD,oBuDeG,kBDqjDF,CtDpkDD,sBuDkBG,wBDqjDF,CtDvkDD,qBuDqBG,QDqjDF,CtD1kDD,euDOG,aAAA,CACA,YAAA,CACA,aDskDF,CtD/kDD,oBuDYG,QDskDF,CtDllDD,oBuDeG,SDskDF,CtDrlDD,sBuDkBG,eDskDF,CtDxlDD,qBuDqBG,QDskDF,CtD3lDD,euDOG,aAAA,CACA,qBAAA,CACA,sBDulDF,CtDhmDD,oBuDYG,iBDulDF,CtDnmDD,oBuDeG,kBDulDF,CtDtmDD,sBuDkBG,wBDulDF,CtDzmDD,qBuDqBG,QDulDF,CtD5mDD,euDOG,aAAA,CACA,qBAAA,CACA,sBDwmDF,CtDjnDD,oBuDYG,iBDwmDF,CtDpnDD,oBuDeG,kBDwmDF,CtDvnDD,sBuDkBG,wBDwmDF,CtD1nDD,qBuDqBG,QDwmDF,CtD7nDD,euDOG,aAAA,CACA,cAAA,CACA,eDynDF,CtDloDD,oBuDYG,UDynDF,CtDroDD,oBuDeG,WDynDF,CtDxoDD,sBuDkBG,iBDynDF,CtD3oDD,qBuDqBG,QDynDF,CtD9oDD,euDOG,aAAA,CACA,qBAAA,CACA,sBD0oDF,CtDnpDD,oBuDYG,iBD0oDF,CtDtpDD,oBuDeG,kBD0oDF,CtDzpDD,sBuDkBG,wBD0oDF,CtD5pDD,qBuDqBG,QD0oDF,CtD/pDD,euDOG,aAAA,CACA,qBAAA,CACA,sBD2pDF,CtDpqDD,oBuDYG,iBD2pDF,CtDvqDD,oBuDeG,kBD2pDF,CtD1qDD,sBuDkBG,wBD2pDF,CtD7qDD,qBuDqBG,QD2pDF,CtDhrDD,euDOG,aAAA,CACA,YAAA,CACA,aD4qDF,CtDrrDD,oBuDYG,QD4qDF,CtDxrDD,oBuDeG,SD4qDF,CtD3rDD,sBuDkBG,eD4qDF,CtD9rDD,qBuDqBG,QD4qDF,CtDjsDD,euDOG,aAAA,CACA,qBAAA,CACA,sBD6rDF,CtDtsDD,oBuDYG,iBD6rDF,CtDzsDD,oBuDeG,kBD6rDF,CtD5sDD,sBuDkBG,wBD6rDF,CtD/sDD,qBuDqBG,QD6rDF,CtDltDD,euDOG,aAAA,CACA,qBAAA,CACA,sBD8sDF,CtDvtDD,oBuDYG,iBD8sDF,CtD1tDD,oBuDeG,kBD8sDF,CtD7tDD,sBuDkBG,wBD8sDF,CtDhuDD,qBuDqBG,QD8sDF,CtDnuDD,cuDOG,aAAA,CACA,cAAA,CACA,eD+tDF,CtDxuDD,mBuDYG,UD+tDF,CtD3uDD,mBuDeG,WD+tDF,CtD9uDD,qBuDkBG,iBD+tDF,CtDjvDD,oBuDqBG,OD+tDF,CtDpvDD,cuDOG,aAAA,CACA,qBAAA,CACA,sBDgvDF,CtDzvDD,mBuDYG,iBDgvDF,CtD5vDD,mBuDeG,kBDgvDF,CtD/vDD,qBuDkBG,wBDgvDF,CtDlwDD,oBuDqBG,ODgvDF,CtDrwDD,cuDOG,aAAA,CACA,qBAAA,CACA,sBDiwDF,CtD1wDD,mBuDYG,iBDiwDF,CtD7wDD,mBuDeG,kBDiwDF,CtDhxDD,qBuDkBG,wBDiwDF,CtDnxDD,oBuDqBG,ODiwDF,CtDtxDD,cuDOG,aAAA,CACA,YAAA,CACA,aDkxDF,CtD3xDD,mBuDYG,QDkxDF,CtD9xDD,mBuDeG,SDkxDF,CtDjyDD,qBuDkBG,eDkxDF,CtDpyDD,oBuDqBG,ODkxDF,CtDvyDD,cuDOG,aAAA,CACA,qBAAA,CACA,sBDmyDF,CtD5yDD,mBuDYG,iBDmyDF,CtD/yDD,mBuDeG,kBDmyDF,CtDlzDD,qBuDkBG,wBDmyDF,CtDrzDD,oBuDqBG,ODmyDF,CtDxzDD,cuDOG,aAAA,CACA,qBAAA,CACA,sBDozDF,CtD7zDD,mBuDYG,iBDozDF,CtDh0DD,mBuDeG,kBDozDF,CtDn0DD,qBuDkBG,wBDozDF,CtDt0DD,oBuDqBG,ODozDF,CtDz0DD,cuDOG,aAAA,CACA,cAAA,CACA,eDq0DF,CtD90DD,mBuDYG,UDq0DF,CtDj1DD,mBuDeG,WDq0DF,CtDp1DD,qBuDkBG,iBDq0DF,CtDv1DD,oBuDqBG,ODq0DF,CtD11DD,cuDOG,aAAA,CACA,oBAAA,CACA,qBDs1DF,CtD/1DD,mBuDYG,gBDs1DF,CtDl2DD,mBuDeG,iBDs1DF,CtDr2DD,qBuDkBG,uBDs1DF,CtDx2DD,oBuDqBG,ODs1DF,CtD32DD,cuDOG,aAAA,CACA,oBAAA,CACA,qBDu2DF,CtDh3DD,mBuDYG,gBDu2DF,CtDn3DD,mBuDeG,iBDu2DF,CtDt3DD,qBuDkBG,uBDu2DF,CtDz3DD,oBuDqBG,ODu2DF,CtD53DD,cuD4BG,YDm2DF,CtD/3DD,gBuD+BG,SDm2DF,CtDl4DD,gBuDkCG,UDm2DF,CtDr4DD,mBuDqCG,SDm2DF,CtDx4DD,mBuDwCG,UDm2DF,CtD34DD,qBuD2CG,aDm2DF,CtD94DD,oBuD8CG,ODm2DF,CtDj5DD,4BwDwCK,UF42DJ,CtDp5DD,4BwD8CK,SFy2DJ,CtDv5DD,+BwDoDK,UFs2DJ,CtD15DD,+BwD0DK,SFm2DJ,CtD75DD,iCwDgEK,cFg2DJ,CtDh6DD,+BwDcK,iBAAA,CACA,SFq5DJ,CtDp6DD,+BwDsBK,UAAA,CACA,gBFi5DJ,CtDx6DD,iCwD8BK,wBAAA,CACA,aF64DJ,CtD56DD,+BwDcK,iBAAA,CACA,SFi6DJ,CtDh7DD,+BwDsBK,UAAA,CACA,gBF65DJ,CtDp7DD,iCwD8BK,wBAAA,CACA,aFy5DJ,CtDx7DD,+BwDcK,WAAA,CACA,SF66DJ,CtD57DD,+BwDsBK,UAAA,CACA,UFy6DJ,CtDh8DD,iCwD8BK,kBAAA,CACA,aFq6DJ,CtDp8DD,+BwDcK,kBAAA,CACA,SFy7DJ,CtDx8DD,+BwDsBK,UAAA,CACA,iBFq7DJ,CtD58DD,iCwD8BK,yBAAA,CACA,aFi7DJ,CtDh9DD,+BwDcK,kBAAA,CACA,SFq8DJ,CtDp9DD,+BwDsBK,UAAA,CACA,iBFi8DJ,CtDx9DD,iCwD8BK,yBAAA,CACA,aF67DJ,CtD59DD,+BwDcK,SAAA,CACA,SFi9DJ,CtDh+DD,+BwDsBK,UAAA,CACA,QF68DJ,CtDp+DD,iCwD8BK,gBAAA,CACA,aFy8DJ,CtDx+DD,+BwDcK,kBAAA,CACA,SF69DJ,CtD5+DD,+BwDsBK,UAAA,CACA,iBFy9DJ,CtDh/DD,iCwD8BK,yBAAA,CACA,aFq9DJ,CtDp/DD,+BwDcK,kBAAA,CACA,SFy+DJ,CtDx/DD,+BwDsBK,UAAA,CACA,iBFq+DJ,CtD5/DD,iCwD8BK,yBAAA,CACA,aFi+DJ,CtDhgED,+BwDcK,WAAA,CACA,SFq/DJ,CtDpgED,+BwDsBK,UAAA,CACA,UFi/DJ,CtDxgED,iCwD8BK,kBAAA,CACA,aF6+DJ,CtD5gED,gCwDcK,kBAAA,CACA,SFigEJ,CtDhhED,gCwDsBK,UAAA,CACA,iBF6/DJ,CtDphED,kCwD8BK,yBAAA,CACA,aFy/DJ,CtDxhED,gCwDcK,kBAAA,CACA,SF6gEJ,CtD5hED,gCwDsBK,UAAA,CACA,iBFygEJ,CtDhiED,kCwD8BK,yBAAA,CACA,aFqgEJ,CtDpiED,gCwDcK,SAAA,CACA,SFyhEJ,CtDxiED,gCwDsBK,UAAA,CACA,QFqhEJ,CtD5iED,kCwD8BK,gBAAA,CACA,aFihEJ,CtDhjED,gCwDcK,kBAAA,CACA,SFqiEJ,CtDpjED,gCwDsBK,UAAA,CACA,iBFiiEJ,CtDxjED,kCwD8BK,yBAAA,CACA,aF6hEJ,CtD5jED,gCwDcK,kBAAA,CACA,SFijEJ,CtDhkED,gCwDsBK,UAAA,CACA,iBF6iEJ,CtDpkED,kCwD8BK,yBAAA,CACA,aFyiEJ,CtDxkED,gCwDcK,WAAA,CACA,SF6jEJ,CtD5kED,gCwDsBK,UAAA,CACA,UFyjEJ,CtDhlED,kCwD8BK,kBAAA,CACA,aFqjEJ,CtDplED,gCwDcK,kBAAA,CACA,SFykEJ,CtDxlED,gCwDsBK,UAAA,CACA,iBFqkEJ,CtD5lED,kCwD8BK,yBAAA,CACA,aFikEJ,CtDhmED,gCwDcK,kBAAA,CACA,SFqlEJ,CtDpmED,gCwDsBK,UAAA,CACA,iBFilEJ,CtDxmED,kCwD8BK,yBAAA,CACA,aF6kEJ,CtD5mED,gCwDcK,SAAA,CACA,SFimEJ,CtDhnED,gCwDsBK,UAAA,CACA,QF6lEJ,CtDpnED,kCwD8BK,gBAAA,CACA,aFylEJ,CtDxnED,gCwDcK,kBAAA,CACA,SF6mEJ,CtD5nED,gCwDsBK,UAAA,CACA,iBFymEJ,CtDhoED,kCwD8BK,yBAAA,CACA,aFqmEJ,CtDpoED,gCwDcK,kBAAA,CACA,SFynEJ,CtDxoED,gCwDsBK,UAAA,CACA,iBFqnEJ,CtD5oED,kCwD8BK,yBAAA,CACA,aFinEJ,CtDhpED,gCwDcK,WAAA,CACA,SFqoEJ,CtDppED,gCwDsBK,UAAA,CACA,UFioEJ,CtDxpED,kCwD8BK,kBAAA,CACA,aF6nEJ,CtD5pED,gCwDcK,kBAAA,CACA,SFipEJ,CtDhqED,gCwDsBK,UAAA,CACA,iBF6oEJ,CtDpqED,kCwD8BK,yBAAA,CACA,aFyoEJ,CtDxqED,gCwDcK,kBAAA,CACA,SF6pEJ,CtD5qED,gCwDsBK,UAAA,CACA,iBFypEJ,CtDhrED,kCwD8BK,yBAAA,CACA,aFqpEJ,CtDprED,gCwDcK,UAAA,CACA,SFyqEJ,CtDxrED,gCwDsBK,UAAA,CACA,SFqqEJ,CtD5rED,kCwD8BK,iBAAA,CACA,aFiqEJ,CACF,CAxmEA,yBtDzFC,euDOG,aAAA,CACA,aAAA,CACA,cD8rEF,CtDvsED,oBuDYG,SD8rEF,CtD1sED,oBuDeG,UD8rEF,CtD7sED,sBuDkBG,gBD8rEF,CtDhtED,qBuDqBG,QD8rEF,CtDntED,euDOG,aAAA,CACA,qBAAA,CACA,sBD+sEF,CtDxtED,oBuDYG,iBD+sEF,CtD3tED,oBuDeG,kBD+sEF,CtD9tED,sBuDkBG,wBD+sEF,CtDjuED,qBuDqBG,QD+sEF,CtDpuED,euDOG,aAAA,CACA,qBAAA,CACA,sBDguEF,CtDzuED,oBuDYG,iBDguEF,CtD5uED,oBuDeG,kBDguEF,CtD/uED,sBuDkBG,wBDguEF,CtDlvED,qBuDqBG,QDguEF,CtDrvED,euDOG,aAAA,CACA,cAAA,CACA,eDivEF,CtD1vED,oBuDYG,UDivEF,CtD7vED,oBuDeG,WDivEF,CtDhwED,sBuDkBG,iBDivEF,CtDnwED,qBuDqBG,QDivEF,CtDtwED,euDOG,aAAA,CACA,qBAAA,CACA,sBDkwEF,CtD3wED,oBuDYG,iBDkwEF,CtD9wED,oBuDeG,kBDkwEF,CtDjxED,sBuDkBG,wBDkwEF,CtDpxED,qBuDqBG,QDkwEF,CtDvxED,euDOG,aAAA,CACA,qBAAA,CACA,sBDmxEF,CtD5xED,oBuDYG,iBDmxEF,CtD/xED,oBuDeG,kBDmxEF,CtDlyED,sBuDkBG,wBDmxEF,CtDryED,qBuDqBG,QDmxEF,CtDxyED,euDOG,aAAA,CACA,YAAA,CACA,aDoyEF,CtD7yED,oBuDYG,QDoyEF,CtDhzED,oBuDeG,SDoyEF,CtDnzED,sBuDkBG,eDoyEF,CtDtzED,qBuDqBG,QDoyEF,CtDzzED,euDOG,aAAA,CACA,qBAAA,CACA,sBDqzEF,CtD9zED,oBuDYG,iBDqzEF,CtDj0ED,oBuDeG,kBDqzEF,CtDp0ED,sBuDkBG,wBDqzEF,CtDv0ED,qBuDqBG,QDqzEF,CtD10ED,euDOG,aAAA,CACA,qBAAA,CACA,sBDs0EF,CtD/0ED,oBuDYG,iBDs0EF,CtDl1ED,oBuDeG,kBDs0EF,CtDr1ED,sBuDkBG,wBDs0EF,CtDx1ED,qBuDqBG,QDs0EF,CtD31ED,euDOG,aAAA,CACA,cAAA,CACA,eDu1EF,CtDh2ED,oBuDYG,UDu1EF,CtDn2ED,oBuDeG,WDu1EF,CtDt2ED,sBuDkBG,iBDu1EF,CtDz2ED,qBuDqBG,QDu1EF,CtD52ED,euDOG,aAAA,CACA,qBAAA,CACA,sBDw2EF,CtDj3ED,oBuDYG,iBDw2EF,CtDp3ED,oBuDeG,kBDw2EF,CtDv3ED,sBuDkBG,wBDw2EF,CtD13ED,qBuDqBG,QDw2EF,CtD73ED,euDOG,aAAA,CACA,qBAAA,CACA,sBDy3EF,CtDl4ED,oBuDYG,iBDy3EF,CtDr4ED,oBuDeG,kBDy3EF,CtDx4ED,sBuDkBG,wBDy3EF,CtD34ED,qBuDqBG,QDy3EF,CtD94ED,euDOG,aAAA,CACA,YAAA,CACA,aD04EF,CtDn5ED,oBuDYG,QD04EF,CtDt5ED,oBuDeG,SD04EF,CtDz5ED,sBuDkBG,eD04EF,CtD55ED,qBuDqBG,QD04EF,CtD/5ED,euDOG,aAAA,CACA,qBAAA,CACA,sBD25EF,CtDp6ED,oBuDYG,iBD25EF,CtDv6ED,oBuDeG,kBD25EF,CtD16ED,sBuDkBG,wBD25EF,CtD76ED,qBuDqBG,QD25EF,CtDh7ED,euDOG,aAAA,CACA,qBAAA,CACA,sBD46EF,CtDr7ED,oBuDYG,iBD46EF,CtDx7ED,oBuDeG,kBD46EF,CtD37ED,sBuDkBG,wBD46EF,CtD97ED,qBuDqBG,QD46EF,CtDj8ED,cuDOG,aAAA,CACA,cAAA,CACA,eD67EF,CtDt8ED,mBuDYG,UD67EF,CtDz8ED,mBuDeG,WD67EF,CtD58ED,qBuDkBG,iBD67EF,CtD/8ED,oBuDqBG,OD67EF,CtDl9ED,cuDOG,aAAA,CACA,qBAAA,CACA,sBD88EF,CtDv9ED,mBuDYG,iBD88EF,CtD19ED,mBuDeG,kBD88EF,CtD79ED,qBuDkBG,wBD88EF,CtDh+ED,oBuDqBG,OD88EF,CtDn+ED,cuDOG,aAAA,CACA,qBAAA,CACA,sBD+9EF,CtDx+ED,mBuDYG,iBD+9EF,CtD3+ED,mBuDeG,kBD+9EF,CtD9+ED,qBuDkBG,wBD+9EF,CtDj/ED,oBuDqBG,OD+9EF,CtDp/ED,cuDOG,aAAA,CACA,YAAA,CACA,aDg/EF,CtDz/ED,mBuDYG,QDg/EF,CtD5/ED,mBuDeG,SDg/EF,CtD//ED,qBuDkBG,eDg/EF,CtDlgFD,oBuDqBG,ODg/EF,CtDrgFD,cuDOG,aAAA,CACA,qBAAA,CACA,sBDigFF,CtD1gFD,mBuDYG,iBDigFF,CtD7gFD,mBuDeG,kBDigFF,CtDhhFD,qBuDkBG,wBDigFF,CtDnhFD,oBuDqBG,ODigFF,CtDthFD,cuDOG,aAAA,CACA,qBAAA,CACA,sBDkhFF,CtD3hFD,mBuDYG,iBDkhFF,CtD9hFD,mBuDeG,kBDkhFF,CtDjiFD,qBuDkBG,wBDkhFF,CtDpiFD,oBuDqBG,ODkhFF,CtDviFD,cuDOG,aAAA,CACA,cAAA,CACA,eDmiFF,CtD5iFD,mBuDYG,UDmiFF,CtD/iFD,mBuDeG,WDmiFF,CtDljFD,qBuDkBG,iBDmiFF,CtDrjFD,oBuDqBG,ODmiFF,CtDxjFD,cuDOG,aAAA,CACA,oBAAA,CACA,qBDojFF,CtD7jFD,mBuDYG,gBDojFF,CtDhkFD,mBuDeG,iBDojFF,CtDnkFD,qBuDkBG,uBDojFF,CtDtkFD,oBuDqBG,ODojFF,CtDzkFD,cuDOG,aAAA,CACA,oBAAA,CACA,qBDqkFF,CtD9kFD,mBuDYG,gBDqkFF,CtDjlFD,mBuDeG,iBDqkFF,CtDplFD,qBuDkBG,uBDqkFF,CtDvlFD,oBuDqBG,ODqkFF,CtD1lFD,cuD4BG,YDikFF,CtD7lFD,gBuD+BG,SDikFF,CtDhmFD,gBuDkCG,UDikFF,CtDnmFD,mBuDqCG,SDikFF,CtDtmFD,mBuDwCG,UDikFF,CtDzmFD,qBuD2CG,aDikFF,CtD5mFD,oBuD8CG,ODikFF,CtD/mFD,4BwDwCK,UF0kFJ,CtDlnFD,4BwD8CK,SFukFJ,CtDrnFD,+BwDoDK,UFokFJ,CtDxnFD,+BwD0DK,SFikFJ,CtD3nFD,iCwDgEK,cF8jFJ,CtD9nFD,+BwDcK,iBAAA,CACA,SFmnFJ,CtDloFD,+BwDsBK,UAAA,CACA,gBF+mFJ,CtDtoFD,iCwD8BK,wBAAA,CACA,aF2mFJ,CtD1oFD,+BwDcK,iBAAA,CACA,SF+nFJ,CtD9oFD,+BwDsBK,UAAA,CACA,gBF2nFJ,CtDlpFD,iCwD8BK,wBAAA,CACA,aFunFJ,CtDtpFD,+BwDcK,WAAA,CACA,SF2oFJ,CtD1pFD,+BwDsBK,UAAA,CACA,UFuoFJ,CtD9pFD,iCwD8BK,kBAAA,CACA,aFmoFJ,CtDlqFD,+BwDcK,kBAAA,CACA,SFupFJ,CtDtqFD,+BwDsBK,UAAA,CACA,iBFmpFJ,CtD1qFD,iCwD8BK,yBAAA,CACA,aF+oFJ,CtD9qFD,+BwDcK,kBAAA,CACA,SFmqFJ,CtDlrFD,+BwDsBK,UAAA,CACA,iBF+pFJ,CtDtrFD,iCwD8BK,yBAAA,CACA,aF2pFJ,CtD1rFD,+BwDcK,SAAA,CACA,SF+qFJ,CtD9rFD,+BwDsBK,UAAA,CACA,QF2qFJ,CtDlsFD,iCwD8BK,gBAAA,CACA,aFuqFJ,CtDtsFD,+BwDcK,kBAAA,CACA,SF2rFJ,CtD1sFD,+BwDsBK,UAAA,CACA,iBFurFJ,CtD9sFD,iCwD8BK,yBAAA,CACA,aFmrFJ,CtDltFD,+BwDcK,kBAAA,CACA,SFusFJ,CtDttFD,+BwDsBK,UAAA,CACA,iBFmsFJ,CtD1tFD,iCwD8BK,yBAAA,CACA,aF+rFJ,CtD9tFD,+BwDcK,WAAA,CACA,SFmtFJ,CtDluFD,+BwDsBK,UAAA,CACA,UF+sFJ,CtDtuFD,iCwD8BK,kBAAA,CACA,aF2sFJ,CtD1uFD,gCwDcK,kBAAA,CACA,SF+tFJ,CtD9uFD,gCwDsBK,UAAA,CACA,iBF2tFJ,CtDlvFD,kCwD8BK,yBAAA,CACA,aFutFJ,CtDtvFD,gCwDcK,kBAAA,CACA,SF2uFJ,CtD1vFD,gCwDsBK,UAAA,CACA,iBFuuFJ,CtD9vFD,kCwD8BK,yBAAA,CACA,aFmuFJ,CtDlwFD,gCwDcK,SAAA,CACA,SFuvFJ,CtDtwFD,gCwDsBK,UAAA,CACA,QFmvFJ,CtD1wFD,kCwD8BK,gBAAA,CACA,aF+uFJ,CtD9wFD,gCwDcK,kBAAA,CACA,SFmwFJ,CtDlxFD,gCwDsBK,UAAA,CACA,iBF+vFJ,CtDtxFD,kCwD8BK,yBAAA,CACA,aF2vFJ,CtD1xFD,gCwDcK,kBAAA,CACA,SF+wFJ,CtD9xFD,gCwDsBK,UAAA,CACA,iBF2wFJ,CtDlyFD,kCwD8BK,yBAAA,CACA,aFuwFJ,CtDtyFD,gCwDcK,WAAA,CACA,SF2xFJ,CtD1yFD,gCwDsBK,UAAA,CACA,UFuxFJ,CtD9yFD,kCwD8BK,kBAAA,CACA,aFmxFJ,CtDlzFD,gCwDcK,kBAAA,CACA,SFuyFJ,CtDtzFD,gCwDsBK,UAAA,CACA,iBFmyFJ,CtD1zFD,kCwD8BK,yBAAA,CACA,aF+xFJ,CtD9zFD,gCwDcK,kBAAA,CACA,SFmzFJ,CtDl0FD,gCwDsBK,UAAA,CACA,iBF+yFJ,CtDt0FD,kCwD8BK,yBAAA,CACA,aF2yFJ,CtD10FD,gCwDcK,SAAA,CACA,SF+zFJ,CtD90FD,gCwDsBK,UAAA,CACA,QF2zFJ,CtDl1FD,kCwD8BK,gBAAA,CACA,aFuzFJ,CtDt1FD,gCwDcK,kBAAA,CACA,SF20FJ,CtD11FD,gCwDsBK,UAAA,CACA,iBFu0FJ,CtD91FD,kCwD8BK,yBAAA,CACA,aFm0FJ,CtDl2FD,gCwDcK,kBAAA,CACA,SFu1FJ,CtDt2FD,gCwDsBK,UAAA,CACA,iBFm1FJ,CtD12FD,kCwD8BK,yBAAA,CACA,aF+0FJ,CtD92FD,gCwDcK,WAAA,CACA,SFm2FJ,CtDl3FD,gCwDsBK,UAAA,CACA,UF+1FJ,CtDt3FD,kCwD8BK,kBAAA,CACA,aF21FJ,CtD13FD,gCwDcK,kBAAA,CACA,SF+2FJ,CtD93FD,gCwDsBK,UAAA,CACA,iBF22FJ,CtDl4FD,kCwD8BK,yBAAA,CACA,aFu2FJ,CtDt4FD,gCwDcK,kBAAA,CACA,SF23FJ,CtD14FD,gCwDsBK,UAAA,CACA,iBFu3FJ,CtD94FD,kCwD8BK,yBAAA,CACA,aFm3FJ,CtDl5FD,gCwDcK,UAAA,CACA,SFu4FJ,CtDt5FD,gCwDsBK,UAAA,CACA,SFm4FJ,CtD15FD,kCwD8BK,iBAAA,CACA,aF+3FJ,CACF,CA9zFA,yBtDjGC,euDOG,aAAA,CACA,aAAA,CACA,cD45FF,CtDr6FD,oBuDYG,SD45FF,CtDx6FD,oBuDeG,UD45FF,CtD36FD,sBuDkBG,gBD45FF,CtD96FD,qBuDqBG,QD45FF,CtDj7FD,euDOG,aAAA,CACA,qBAAA,CACA,sBD66FF,CtDt7FD,oBuDYG,iBD66FF,CtDz7FD,oBuDeG,kBD66FF,CtD57FD,sBuDkBG,wBD66FF,CtD/7FD,qBuDqBG,QD66FF,CtDl8FD,euDOG,aAAA,CACA,qBAAA,CACA,sBD87FF,CtDv8FD,oBuDYG,iBD87FF,CtD18FD,oBuDeG,kBD87FF,CtD78FD,sBuDkBG,wBD87FF,CtDh9FD,qBuDqBG,QD87FF,CtDn9FD,euDOG,aAAA,CACA,cAAA,CACA,eD+8FF,CtDx9FD,oBuDYG,UD+8FF,CtD39FD,oBuDeG,WD+8FF,CtD99FD,sBuDkBG,iBD+8FF,CtDj+FD,qBuDqBG,QD+8FF,CtDp+FD,euDOG,aAAA,CACA,qBAAA,CACA,sBDg+FF,CtDz+FD,oBuDYG,iBDg+FF,CtD5+FD,oBuDeG,kBDg+FF,CtD/+FD,sBuDkBG,wBDg+FF,CtDl/FD,qBuDqBG,QDg+FF,CtDr/FD,euDOG,aAAA,CACA,qBAAA,CACA,sBDi/FF,CtD1/FD,oBuDYG,iBDi/FF,CtD7/FD,oBuDeG,kBDi/FF,CtDhgGD,sBuDkBG,wBDi/FF,CtDngGD,qBuDqBG,QDi/FF,CtDtgGD,euDOG,aAAA,CACA,YAAA,CACA,aDkgGF,CtD3gGD,oBuDYG,QDkgGF,CtD9gGD,oBuDeG,SDkgGF,CtDjhGD,sBuDkBG,eDkgGF,CtDphGD,qBuDqBG,QDkgGF,CtDvhGD,euDOG,aAAA,CACA,qBAAA,CACA,sBDmhGF,CtD5hGD,oBuDYG,iBDmhGF,CtD/hGD,oBuDeG,kBDmhGF,CtDliGD,sBuDkBG,wBDmhGF,CtDriGD,qBuDqBG,QDmhGF,CtDxiGD,euDOG,aAAA,CACA,qBAAA,CACA,sBDoiGF,CtD7iGD,oBuDYG,iBDoiGF,CtDhjGD,oBuDeG,kBDoiGF,CtDnjGD,sBuDkBG,wBDoiGF,CtDtjGD,qBuDqBG,QDoiGF,CtDzjGD,euDOG,aAAA,CACA,cAAA,CACA,eDqjGF,CtD9jGD,oBuDYG,UDqjGF,CtDjkGD,oBuDeG,WDqjGF,CtDpkGD,sBuDkBG,iBDqjGF,CtDvkGD,qBuDqBG,QDqjGF,CtD1kGD,euDOG,aAAA,CACA,qBAAA,CACA,sBDskGF,CtD/kGD,oBuDYG,iBDskGF,CtDllGD,oBuDeG,kBDskGF,CtDrlGD,sBuDkBG,wBDskGF,CtDxlGD,qBuDqBG,QDskGF,CtD3lGD,euDOG,aAAA,CACA,qBAAA,CACA,sBDulGF,CtDhmGD,oBuDYG,iBDulGF,CtDnmGD,oBuDeG,kBDulGF,CtDtmGD,sBuDkBG,wBDulGF,CtDzmGD,qBuDqBG,QDulGF,CtD5mGD,euDOG,aAAA,CACA,YAAA,CACA,aDwmGF,CtDjnGD,oBuDYG,QDwmGF,CtDpnGD,oBuDeG,SDwmGF,CtDvnGD,sBuDkBG,eDwmGF,CtD1nGD,qBuDqBG,QDwmGF,CtD7nGD,euDOG,aAAA,CACA,qBAAA,CACA,sBDynGF,CtDloGD,oBuDYG,iBDynGF,CtDroGD,oBuDeG,kBDynGF,CtDxoGD,sBuDkBG,wBDynGF,CtD3oGD,qBuDqBG,QDynGF,CtD9oGD,euDOG,aAAA,CACA,qBAAA,CACA,sBD0oGF,CtDnpGD,oBuDYG,iBD0oGF,CtDtpGD,oBuDeG,kBD0oGF,CtDzpGD,sBuDkBG,wBD0oGF,CtD5pGD,qBuDqBG,QD0oGF,CtD/pGD,cuDOG,aAAA,CACA,cAAA,CACA,eD2pGF,CtDpqGD,mBuDYG,UD2pGF,CtDvqGD,mBuDeG,WD2pGF,CtD1qGD,qBuDkBG,iBD2pGF,CtD7qGD,oBuDqBG,OD2pGF,CtDhrGD,cuDOG,aAAA,CACA,qBAAA,CACA,sBD4qGF,CtDrrGD,mBuDYG,iBD4qGF,CtDxrGD,mBuDeG,kBD4qGF,CtD3rGD,qBuDkBG,wBD4qGF,CtD9rGD,oBuDqBG,OD4qGF,CtDjsGD,cuDOG,aAAA,CACA,qBAAA,CACA,sBD6rGF,CtDtsGD,mBuDYG,iBD6rGF,CtDzsGD,mBuDeG,kBD6rGF,CtD5sGD,qBuDkBG,wBD6rGF,CtD/sGD,oBuDqBG,OD6rGF,CtDltGD,cuDOG,aAAA,CACA,YAAA,CACA,aD8sGF,CtDvtGD,mBuDYG,QD8sGF,CtD1tGD,mBuDeG,SD8sGF,CtD7tGD,qBuDkBG,eD8sGF,CtDhuGD,oBuDqBG,OD8sGF,CtDnuGD,cuDOG,aAAA,CACA,qBAAA,CACA,sBD+tGF,CtDxuGD,mBuDYG,iBD+tGF,CtD3uGD,mBuDeG,kBD+tGF,CtD9uGD,qBuDkBG,wBD+tGF,CtDjvGD,oBuDqBG,OD+tGF,CtDpvGD,cuDOG,aAAA,CACA,qBAAA,CACA,sBDgvGF,CtDzvGD,mBuDYG,iBDgvGF,CtD5vGD,mBuDeG,kBDgvGF,CtD/vGD,qBuDkBG,wBDgvGF,CtDlwGD,oBuDqBG,ODgvGF,CtDrwGD,cuDOG,aAAA,CACA,cAAA,CACA,eDiwGF,CtD1wGD,mBuDYG,UDiwGF,CtD7wGD,mBuDeG,WDiwGF,CtDhxGD,qBuDkBG,iBDiwGF,CtDnxGD,oBuDqBG,ODiwGF,CtDtxGD,cuDOG,aAAA,CACA,oBAAA,CACA,qBDkxGF,CtD3xGD,mBuDYG,gBDkxGF,CtD9xGD,mBuDeG,iBDkxGF,CtDjyGD,qBuDkBG,uBDkxGF,CtDpyGD,oBuDqBG,ODkxGF,CtDvyGD,cuDOG,aAAA,CACA,oBAAA,CACA,qBDmyGF,CtD5yGD,mBuDYG,gBDmyGF,CtD/yGD,mBuDeG,iBDmyGF,CtDlzGD,qBuDkBG,uBDmyGF,CtDrzGD,oBuDqBG,ODmyGF,CtDxzGD,cuD4BG,YD+xGF,CtD3zGD,gBuD+BG,SD+xGF,CtD9zGD,gBuDkCG,UD+xGF,CtDj0GD,mBuDqCG,SD+xGF,CtDp0GD,mBuDwCG,UD+xGF,CtDv0GD,qBuD2CG,aD+xGF,CtD10GD,oBuD8CG,OD+xGF,CtD70GD,4BwDwCK,UFwyGJ,CtDh1GD,4BwD8CK,SFqyGJ,CtDn1GD,+BwDoDK,UFkyGJ,CtDt1GD,+BwD0DK,SF+xGJ,CtDz1GD,iCwDgEK,cF4xGJ,CtD51GD,+BwDcK,iBAAA,CACA,SFi1GJ,CtDh2GD,+BwDsBK,UAAA,CACA,gBF60GJ,CtDp2GD,iCwD8BK,wBAAA,CACA,aFy0GJ,CtDx2GD,+BwDcK,iBAAA,CACA,SF61GJ,CtD52GD,+BwDsBK,UAAA,CACA,gBFy1GJ,CtDh3GD,iCwD8BK,wBAAA,CACA,aFq1GJ,CtDp3GD,+BwDcK,WAAA,CACA,SFy2GJ,CtDx3GD,+BwDsBK,UAAA,CACA,UFq2GJ,CtD53GD,iCwD8BK,kBAAA,CACA,aFi2GJ,CtDh4GD,+BwDcK,kBAAA,CACA,SFq3GJ,CtDp4GD,+BwDsBK,UAAA,CACA,iBFi3GJ,CtDx4GD,iCwD8BK,yBAAA,CACA,aF62GJ,CtD54GD,+BwDcK,kBAAA,CACA,SFi4GJ,CtDh5GD,+BwDsBK,UAAA,CACA,iBF63GJ,CtDp5GD,iCwD8BK,yBAAA,CACA,aFy3GJ,CtDx5GD,+BwDcK,SAAA,CACA,SF64GJ,CtD55GD,+BwDsBK,UAAA,CACA,QFy4GJ,CtDh6GD,iCwD8BK,gBAAA,CACA,aFq4GJ,CtDp6GD,+BwDcK,kBAAA,CACA,SFy5GJ,CtDx6GD,+BwDsBK,UAAA,CACA,iBFq5GJ,CtD56GD,iCwD8BK,yBAAA,CACA,aFi5GJ,CtDh7GD,+BwDcK,kBAAA,CACA,SFq6GJ,CtDp7GD,+BwDsBK,UAAA,CACA,iBFi6GJ,CtDx7GD,iCwD8BK,yBAAA,CACA,aF65GJ,CtD57GD,+BwDcK,WAAA,CACA,SFi7GJ,CtDh8GD,+BwDsBK,UAAA,CACA,UF66GJ,CtDp8GD,iCwD8BK,kBAAA,CACA,aFy6GJ,CtDx8GD,gCwDcK,kBAAA,CACA,SF67GJ,CtD58GD,gCwDsBK,UAAA,CACA,iBFy7GJ,CtDh9GD,kCwD8BK,yBAAA,CACA,aFq7GJ,CtDp9GD,gCwDcK,kBAAA,CACA,SFy8GJ,CtDx9GD,gCwDsBK,UAAA,CACA,iBFq8GJ,CtD59GD,kCwD8BK,yBAAA,CACA,aFi8GJ,CtDh+GD,gCwDcK,SAAA,CACA,SFq9GJ,CtDp+GD,gCwDsBK,UAAA,CACA,QFi9GJ,CtDx+GD,kCwD8BK,gBAAA,CACA,aF68GJ,CtD5+GD,gCwDcK,kBAAA,CACA,SFi+GJ,CtDh/GD,gCwDsBK,UAAA,CACA,iBF69GJ,CtDp/GD,kCwD8BK,yBAAA,CACA,aFy9GJ,CtDx/GD,gCwDcK,kBAAA,CACA,SF6+GJ,CtD5/GD,gCwDsBK,UAAA,CACA,iBFy+GJ,CtDhgHD,kCwD8BK,yBAAA,CACA,aFq+GJ,CtDpgHD,gCwDcK,WAAA,CACA,SFy/GJ,CtDxgHD,gCwDsBK,UAAA,CACA,UFq/GJ,CtD5gHD,kCwD8BK,kBAAA,CACA,aFi/GJ,CtDhhHD,gCwDcK,kBAAA,CACA,SFqgHJ,CtDphHD,gCwDsBK,UAAA,CACA,iBFigHJ,CtDxhHD,kCwD8BK,yBAAA,CACA,aF6/GJ,CtD5hHD,gCwDcK,kBAAA,CACA,SFihHJ,CtDhiHD,gCwDsBK,UAAA,CACA,iBF6gHJ,CtDpiHD,kCwD8BK,yBAAA,CACA,aFygHJ,CtDxiHD,gCwDcK,SAAA,CACA,SF6hHJ,CtD5iHD,gCwDsBK,UAAA,CACA,QFyhHJ,CtDhjHD,kCwD8BK,gBAAA,CACA,aFqhHJ,CtDpjHD,gCwDcK,kBAAA,CACA,SFyiHJ,CtDxjHD,gCwDsBK,UAAA,CACA,iBFqiHJ,CtD5jHD,kCwD8BK,yBAAA,CACA,aFiiHJ,CtDhkHD,gCwDcK,kBAAA,CACA,SFqjHJ,CtDpkHD,gCwDsBK,UAAA,CACA,iBFijHJ,CtDxkHD,kCwD8BK,yBAAA,CACA,aF6iHJ,CtD5kHD,gCwDcK,WAAA,CACA,SFikHJ,CtDhlHD,gCwDsBK,UAAA,CACA,UF6jHJ,CtDplHD,kCwD8BK,kBAAA,CACA,aFyjHJ,CtDxlHD,gCwDcK,kBAAA,CACA,SF6kHJ,CtD5lHD,gCwDsBK,UAAA,CACA,iBFykHJ,CtDhmHD,kCwD8BK,yBAAA,CACA,aFqkHJ,CtDpmHD,gCwDcK,kBAAA,CACA,SFylHJ,CtDxmHD,gCwDsBK,UAAA,CACA,iBFqlHJ,CtD5mHD,kCwD8BK,yBAAA,CACA,aFilHJ,CtDhnHD,gCwDcK,UAAA,CACA,SFqmHJ,CtDpnHD,gCwDsBK,UAAA,CACA,SFimHJ,CtDxnHD,kCwD8BK,iBAAA,CACA,aF6lHJ,CACF,CAphHA,0BtDzGC,euDOG,aAAA,CACA,aAAA,CACA,cD0nHF,CtDnoHD,oBuDYG,SD0nHF,CtDtoHD,oBuDeG,UD0nHF,CtDzoHD,sBuDkBG,gBD0nHF,CtD5oHD,qBuDqBG,QD0nHF,CtD/oHD,euDOG,aAAA,CACA,qBAAA,CACA,sBD2oHF,CtDppHD,oBuDYG,iBD2oHF,CtDvpHD,oBuDeG,kBD2oHF,CtD1pHD,sBuDkBG,wBD2oHF,CtD7pHD,qBuDqBG,QD2oHF,CtDhqHD,euDOG,aAAA,CACA,qBAAA,CACA,sBD4pHF,CtDrqHD,oBuDYG,iBD4pHF,CtDxqHD,oBuDeG,kBD4pHF,CtD3qHD,sBuDkBG,wBD4pHF,CtD9qHD,qBuDqBG,QD4pHF,CtDjrHD,euDOG,aAAA,CACA,cAAA,CACA,eD6qHF,CtDtrHD,oBuDYG,UD6qHF,CtDzrHD,oBuDeG,WD6qHF,CtD5rHD,sBuDkBG,iBD6qHF,CtD/rHD,qBuDqBG,QD6qHF,CtDlsHD,euDOG,aAAA,CACA,qBAAA,CACA,sBD8rHF,CtDvsHD,oBuDYG,iBD8rHF,CtD1sHD,oBuDeG,kBD8rHF,CtD7sHD,sBuDkBG,wBD8rHF,CtDhtHD,qBuDqBG,QD8rHF,CtDntHD,euDOG,aAAA,CACA,qBAAA,CACA,sBD+sHF,CtDxtHD,oBuDYG,iBD+sHF,CtD3tHD,oBuDeG,kBD+sHF,CtD9tHD,sBuDkBG,wBD+sHF,CtDjuHD,qBuDqBG,QD+sHF,CtDpuHD,euDOG,aAAA,CACA,YAAA,CACA,aDguHF,CtDzuHD,oBuDYG,QDguHF,CtD5uHD,oBuDeG,SDguHF,CtD/uHD,sBuDkBG,eDguHF,CtDlvHD,qBuDqBG,QDguHF,CtDrvHD,euDOG,aAAA,CACA,qBAAA,CACA,sBDivHF,CtD1vHD,oBuDYG,iBDivHF,CtD7vHD,oBuDeG,kBDivHF,CtDhwHD,sBuDkBG,wBDivHF,CtDnwHD,qBuDqBG,QDivHF,CtDtwHD,euDOG,aAAA,CACA,qBAAA,CACA,sBDkwHF,CtD3wHD,oBuDYG,iBDkwHF,CtD9wHD,oBuDeG,kBDkwHF,CtDjxHD,sBuDkBG,wBDkwHF,CtDpxHD,qBuDqBG,QDkwHF,CtDvxHD,euDOG,aAAA,CACA,cAAA,CACA,eDmxHF,CtD5xHD,oBuDYG,UDmxHF,CtD/xHD,oBuDeG,WDmxHF,CtDlyHD,sBuDkBG,iBDmxHF,CtDryHD,qBuDqBG,QDmxHF,CtDxyHD,euDOG,aAAA,CACA,qBAAA,CACA,sBDoyHF,CtD7yHD,oBuDYG,iBDoyHF,CtDhzHD,oBuDeG,kBDoyHF,CtDnzHD,sBuDkBG,wBDoyHF,CtDtzHD,qBuDqBG,QDoyHF,CtDzzHD,euDOG,aAAA,CACA,qBAAA,CACA,sBDqzHF,CtD9zHD,oBuDYG,iBDqzHF,CtDj0HD,oBuDeG,kBDqzHF,CtDp0HD,sBuDkBG,wBDqzHF,CtDv0HD,qBuDqBG,QDqzHF,CtD10HD,euDOG,aAAA,CACA,YAAA,CACA,aDs0HF,CtD/0HD,oBuDYG,QDs0HF,CtDl1HD,oBuDeG,SDs0HF,CtDr1HD,sBuDkBG,eDs0HF,CtDx1HD,qBuDqBG,QDs0HF,CtD31HD,euDOG,aAAA,CACA,qBAAA,CACA,sBDu1HF,CtDh2HD,oBuDYG,iBDu1HF,CtDn2HD,oBuDeG,kBDu1HF,CtDt2HD,sBuDkBG,wBDu1HF,CtDz2HD,qBuDqBG,QDu1HF,CtD52HD,euDOG,aAAA,CACA,qBAAA,CACA,sBDw2HF,CtDj3HD,oBuDYG,iBDw2HF,CtDp3HD,oBuDeG,kBDw2HF,CtDv3HD,sBuDkBG,wBDw2HF,CtD13HD,qBuDqBG,QDw2HF,CtD73HD,cuDOG,aAAA,CACA,cAAA,CACA,eDy3HF,CtDl4HD,mBuDYG,UDy3HF,CtDr4HD,mBuDeG,WDy3HF,CtDx4HD,qBuDkBG,iBDy3HF,CtD34HD,oBuDqBG,ODy3HF,CtD94HD,cuDOG,aAAA,CACA,qBAAA,CACA,sBD04HF,CtDn5HD,mBuDYG,iBD04HF,CtDt5HD,mBuDeG,kBD04HF,CtDz5HD,qBuDkBG,wBD04HF,CtD55HD,oBuDqBG,OD04HF,CtD/5HD,cuDOG,aAAA,CACA,qBAAA,CACA,sBD25HF,CtDp6HD,mBuDYG,iBD25HF,CtDv6HD,mBuDeG,kBD25HF,CtD16HD,qBuDkBG,wBD25HF,CtD76HD,oBuDqBG,OD25HF,CtDh7HD,cuDOG,aAAA,CACA,YAAA,CACA,aD46HF,CtDr7HD,mBuDYG,QD46HF,CtDx7HD,mBuDeG,SD46HF,CtD37HD,qBuDkBG,eD46HF,CtD97HD,oBuDqBG,OD46HF,CtDj8HD,cuDOG,aAAA,CACA,qBAAA,CACA,sBD67HF,CtDt8HD,mBuDYG,iBD67HF,CtDz8HD,mBuDeG,kBD67HF,CtD58HD,qBuDkBG,wBD67HF,CtD/8HD,oBuDqBG,OD67HF,CtDl9HD,cuDOG,aAAA,CACA,qBAAA,CACA,sBD88HF,CtDv9HD,mBuDYG,iBD88HF,CtD19HD,mBuDeG,kBD88HF,CtD79HD,qBuDkBG,wBD88HF,CtDh+HD,oBuDqBG,OD88HF,CtDn+HD,cuDOG,aAAA,CACA,cAAA,CACA,eD+9HF,CtDx+HD,mBuDYG,UD+9HF,CtD3+HD,mBuDeG,WD+9HF,CtD9+HD,qBuDkBG,iBD+9HF,CtDj/HD,oBuDqBG,OD+9HF,CtDp/HD,cuDOG,aAAA,CACA,oBAAA,CACA,qBDg/HF,CtDz/HD,mBuDYG,gBDg/HF,CtD5/HD,mBuDeG,iBDg/HF,CtD//HD,qBuDkBG,uBDg/HF,CtDlgID,oBuDqBG,ODg/HF,CtDrgID,cuDOG,aAAA,CACA,oBAAA,CACA,qBDigIF,CtD1gID,mBuDYG,gBDigIF,CtD7gID,mBuDeG,iBDigIF,CtDhhID,qBuDkBG,uBDigIF,CtDnhID,oBuDqBG,ODigIF,CtDthID,cuD4BG,YD6/HF,CtDzhID,gBuD+BG,SD6/HF,CtD5hID,gBuDkCG,UD6/HF,CtD/hID,mBuDqCG,SD6/HF,CtDliID,mBuDwCG,UD6/HF,CtDriID,qBuD2CG,aD6/HF,CtDxiID,oBuD8CG,OD6/HF,CtD3iID,4BwDwCK,UFsgIJ,CtD9iID,4BwD8CK,SFmgIJ,CtDjjID,+BwDoDK,UFggIJ,CtDpjID,+BwD0DK,SF6/HJ,CtDvjID,iCwDgEK,cF0/HJ,CtD1jID,+BwDcK,iBAAA,CACA,SF+iIJ,CtD9jID,+BwDsBK,UAAA,CACA,gBF2iIJ,CtDlkID,iCwD8BK,wBAAA,CACA,aFuiIJ,CtDtkID,+BwDcK,iBAAA,CACA,SF2jIJ,CtD1kID,+BwDsBK,UAAA,CACA,gBFujIJ,CtD9kID,iCwD8BK,wBAAA,CACA,aFmjIJ,CtDllID,+BwDcK,WAAA,CACA,SFukIJ,CtDtlID,+BwDsBK,UAAA,CACA,UFmkIJ,CtD1lID,iCwD8BK,kBAAA,CACA,aF+jIJ,CtD9lID,+BwDcK,kBAAA,CACA,SFmlIJ,CtDlmID,+BwDsBK,UAAA,CACA,iBF+kIJ,CtDtmID,iCwD8BK,yBAAA,CACA,aF2kIJ,CtD1mID,+BwDcK,kBAAA,CACA,SF+lIJ,CtD9mID,+BwDsBK,UAAA,CACA,iBF2lIJ,CtDlnID,iCwD8BK,yBAAA,CACA,aFulIJ,CtDtnID,+BwDcK,SAAA,CACA,SF2mIJ,CtD1nID,+BwDsBK,UAAA,CACA,QFumIJ,CtD9nID,iCwD8BK,gBAAA,CACA,aFmmIJ,CtDloID,+BwDcK,kBAAA,CACA,SFunIJ,CtDtoID,+BwDsBK,UAAA,CACA,iBFmnIJ,CtD1oID,iCwD8BK,yBAAA,CACA,aF+mIJ,CtD9oID,+BwDcK,kBAAA,CACA,SFmoIJ,CtDlpID,+BwDsBK,UAAA,CACA,iBF+nIJ,CtDtpID,iCwD8BK,yBAAA,CACA,aF2nIJ,CtD1pID,+BwDcK,WAAA,CACA,SF+oIJ,CtD9pID,+BwDsBK,UAAA,CACA,UF2oIJ,CtDlqID,iCwD8BK,kBAAA,CACA,aFuoIJ,CtDtqID,gCwDcK,kBAAA,CACA,SF2pIJ,CtD1qID,gCwDsBK,UAAA,CACA,iBFupIJ,CtD9qID,kCwD8BK,yBAAA,CACA,aFmpIJ,CtDlrID,gCwDcK,kBAAA,CACA,SFuqIJ,CtDtrID,gCwDsBK,UAAA,CACA,iBFmqIJ,CtD1rID,kCwD8BK,yBAAA,CACA,aF+pIJ,CtD9rID,gCwDcK,SAAA,CACA,SFmrIJ,CtDlsID,gCwDsBK,UAAA,CACA,QF+qIJ,CtDtsID,kCwD8BK,gBAAA,CACA,aF2qIJ,CtD1sID,gCwDcK,kBAAA,CACA,SF+rIJ,CtD9sID,gCwDsBK,UAAA,CACA,iBF2rIJ,CtDltID,kCwD8BK,yBAAA,CACA,aFurIJ,CtDttID,gCwDcK,kBAAA,CACA,SF2sIJ,CtD1tID,gCwDsBK,UAAA,CACA,iBFusIJ,CtD9tID,kCwD8BK,yBAAA,CACA,aFmsIJ,CtDluID,gCwDcK,WAAA,CACA,SFutIJ,CtDtuID,gCwDsBK,UAAA,CACA,UFmtIJ,CtD1uID,kCwD8BK,kBAAA,CACA,aF+sIJ,CtD9uID,gCwDcK,kBAAA,CACA,SFmuIJ,CtDlvID,gCwDsBK,UAAA,CACA,iBF+tIJ,CtDtvID,kCwD8BK,yBAAA,CACA,aF2tIJ,CtD1vID,gCwDcK,kBAAA,CACA,SF+uIJ,CtD9vID,gCwDsBK,UAAA,CACA,iBF2uIJ,CtDlwID,kCwD8BK,yBAAA,CACA,aFuuIJ,CtDtwID,gCwDcK,SAAA,CACA,SF2vIJ,CtD1wID,gCwDsBK,UAAA,CACA,QFuvIJ,CtD9wID,kCwD8BK,gBAAA,CACA,aFmvIJ,CtDlxID,gCwDcK,kBAAA,CACA,SFuwIJ,CtDtxID,gCwDsBK,UAAA,CACA,iBFmwIJ,CtD1xID,kCwD8BK,yBAAA,CACA,aF+vIJ,CtD9xID,gCwDcK,kBAAA,CACA,SFmxIJ,CtDlyID,gCwDsBK,UAAA,CACA,iBF+wIJ,CtDtyID,kCwD8BK,yBAAA,CACA,aF2wIJ,CtD1yID,gCwDcK,WAAA,CACA,SF+xIJ,CtD9yID,gCwDsBK,UAAA,CACA,UF2xIJ,CtDlzID,kCwD8BK,kBAAA,CACA,aFuxIJ,CtDtzID,gCwDcK,kBAAA,CACA,SF2yIJ,CtD1zID,gCwDsBK,UAAA,CACA,iBFuyIJ,CtD9zID,kCwD8BK,yBAAA,CACA,aFmyIJ,CtDl0ID,gCwDcK,kBAAA,CACA,SFuzIJ,CtDt0ID,gCwDsBK,UAAA,CACA,iBFmzIJ,CtD10ID,kCwD8BK,yBAAA,CACA,aF+yIJ,CtD90ID,gCwDcK,UAAA,CACA,SFm0IJ,CtDl1ID,gCwDsBK,UAAA,CACA,SF+zIJ,CtDt1ID,kCwD8BK,iBAAA,CACA,aF2zIJ,CACF,CA1uIA,0BtDjHC,gBuDOG,aAAA,CACA,aAAA,CACA,cDw1IF,CtDj2ID,qBuDYG,SDw1IF,CtDp2ID,qBuDeG,UDw1IF,CtDv2ID,uBuDkBG,gBDw1IF,CtD12ID,sBuDqBG,QDw1IF,CtD72ID,gBuDOG,aAAA,CACA,qBAAA,CACA,sBDy2IF,CtDl3ID,qBuDYG,iBDy2IF,CtDr3ID,qBuDeG,kBDy2IF,CtDx3ID,uBuDkBG,wBDy2IF,CtD33ID,sBuDqBG,QDy2IF,CtD93ID,gBuDOG,aAAA,CACA,qBAAA,CACA,sBD03IF,CtDn4ID,qBuDYG,iBD03IF,CtDt4ID,qBuDeG,kBD03IF,CtDz4ID,uBuDkBG,wBD03IF,CtD54ID,sBuDqBG,QD03IF,CtD/4ID,gBuDOG,aAAA,CACA,cAAA,CACA,eD24IF,CtDp5ID,qBuDYG,UD24IF,CtDv5ID,qBuDeG,WD24IF,CtD15ID,uBuDkBG,iBD24IF,CtD75ID,sBuDqBG,QD24IF,CtDh6ID,gBuDOG,aAAA,CACA,qBAAA,CACA,sBD45IF,CtDr6ID,qBuDYG,iBD45IF,CtDx6ID,qBuDeG,kBD45IF,CtD36ID,uBuDkBG,wBD45IF,CtD96ID,sBuDqBG,QD45IF,CtDj7ID,gBuDOG,aAAA,CACA,qBAAA,CACA,sBD66IF,CtDt7ID,qBuDYG,iBD66IF,CtDz7ID,qBuDeG,kBD66IF,CtD57ID,uBuDkBG,wBD66IF,CtD/7ID,sBuDqBG,QD66IF,CtDl8ID,gBuDOG,aAAA,CACA,YAAA,CACA,aD87IF,CtDv8ID,qBuDYG,QD87IF,CtD18ID,qBuDeG,SD87IF,CtD78ID,uBuDkBG,eD87IF,CtDh9ID,sBuDqBG,QD87IF,CtDn9ID,gBuDOG,aAAA,CACA,qBAAA,CACA,sBD+8IF,CtDx9ID,qBuDYG,iBD+8IF,CtD39ID,qBuDeG,kBD+8IF,CtD99ID,uBuDkBG,wBD+8IF,CtDj+ID,sBuDqBG,QD+8IF,CtDp+ID,gBuDOG,aAAA,CACA,qBAAA,CACA,sBDg+IF,CtDz+ID,qBuDYG,iBDg+IF,CtD5+ID,qBuDeG,kBDg+IF,CtD/+ID,uBuDkBG,wBDg+IF,CtDl/ID,sBuDqBG,QDg+IF,CtDr/ID,gBuDOG,aAAA,CACA,cAAA,CACA,eDi/IF,CtD1/ID,qBuDYG,UDi/IF,CtD7/ID,qBuDeG,WDi/IF,CtDhgJD,uBuDkBG,iBDi/IF,CtDngJD,sBuDqBG,QDi/IF,CtDtgJD,gBuDOG,aAAA,CACA,qBAAA,CACA,sBDkgJF,CtD3gJD,qBuDYG,iBDkgJF,CtD9gJD,qBuDeG,kBDkgJF,CtDjhJD,uBuDkBG,wBDkgJF,CtDphJD,sBuDqBG,QDkgJF,CtDvhJD,gBuDOG,aAAA,CACA,qBAAA,CACA,sBDmhJF,CtD5hJD,qBuDYG,iBDmhJF,CtD/hJD,qBuDeG,kBDmhJF,CtDliJD,uBuDkBG,wBDmhJF,CtDriJD,sBuDqBG,QDmhJF,CtDxiJD,gBuDOG,aAAA,CACA,YAAA,CACA,aDoiJF,CtD7iJD,qBuDYG,QDoiJF,CtDhjJD,qBuDeG,SDoiJF,CtDnjJD,uBuDkBG,eDoiJF,CtDtjJD,sBuDqBG,QDoiJF,CtDzjJD,gBuDOG,aAAA,CACA,qBAAA,CACA,sBDqjJF,CtD9jJD,qBuDYG,iBDqjJF,CtDjkJD,qBuDeG,kBDqjJF,CtDpkJD,uBuDkBG,wBDqjJF,CtDvkJD,sBuDqBG,QDqjJF,CtD1kJD,gBuDOG,aAAA,CACA,qBAAA,CACA,sBDskJF,CtD/kJD,qBuDYG,iBDskJF,CtDllJD,qBuDeG,kBDskJF,CtDrlJD,uBuDkBG,wBDskJF,CtDxlJD,sBuDqBG,QDskJF,CtD3lJD,euDOG,aAAA,CACA,cAAA,CACA,eDulJF,CtDhmJD,oBuDYG,UDulJF,CtDnmJD,oBuDeG,WDulJF,CtDtmJD,sBuDkBG,iBDulJF,CtDzmJD,qBuDqBG,ODulJF,CtD5mJD,euDOG,aAAA,CACA,qBAAA,CACA,sBDwmJF,CtDjnJD,oBuDYG,iBDwmJF,CtDpnJD,oBuDeG,kBDwmJF,CtDvnJD,sBuDkBG,wBDwmJF,CtD1nJD,qBuDqBG,ODwmJF,CtD7nJD,euDOG,aAAA,CACA,qBAAA,CACA,sBDynJF,CtDloJD,oBuDYG,iBDynJF,CtDroJD,oBuDeG,kBDynJF,CtDxoJD,sBuDkBG,wBDynJF,CtD3oJD,qBuDqBG,ODynJF,CtD9oJD,euDOG,aAAA,CACA,YAAA,CACA,aD0oJF,CtDnpJD,oBuDYG,QD0oJF,CtDtpJD,oBuDeG,SD0oJF,CtDzpJD,sBuDkBG,eD0oJF,CtD5pJD,qBuDqBG,OD0oJF,CtD/pJD,euDOG,aAAA,CACA,qBAAA,CACA,sBD2pJF,CtDpqJD,oBuDYG,iBD2pJF,CtDvqJD,oBuDeG,kBD2pJF,CtD1qJD,sBuDkBG,wBD2pJF,CtD7qJD,qBuDqBG,OD2pJF,CtDhrJD,euDOG,aAAA,CACA,qBAAA,CACA,sBD4qJF,CtDrrJD,oBuDYG,iBD4qJF,CtDxrJD,oBuDeG,kBD4qJF,CtD3rJD,sBuDkBG,wBD4qJF,CtD9rJD,qBuDqBG,OD4qJF,CtDjsJD,euDOG,aAAA,CACA,cAAA,CACA,eD6rJF,CtDtsJD,oBuDYG,UD6rJF,CtDzsJD,oBuDeG,WD6rJF,CtD5sJD,sBuDkBG,iBD6rJF,CtD/sJD,qBuDqBG,OD6rJF,CtDltJD,euDOG,aAAA,CACA,oBAAA,CACA,qBD8sJF,CtDvtJD,oBuDYG,gBD8sJF,CtD1tJD,oBuDeG,iBD8sJF,CtD7tJD,sBuDkBG,uBD8sJF,CtDhuJD,qBuDqBG,OD8sJF,CtDnuJD,euDOG,aAAA,CACA,oBAAA,CACA,qBD+tJF,CtDxuJD,oBuDYG,gBD+tJF,CtD3uJD,oBuDeG,iBD+tJF,CtD9uJD,sBuDkBG,uBD+tJF,CtDjvJD,qBuDqBG,OD+tJF,CtDpvJD,euD4BG,YD2tJF,CtDvvJD,gBuD+BG,SD2tJF,CtD1vJD,gBuDkCG,UD2tJF,CtD7vJD,oBuDqCG,SD2tJF,CtDhwJD,oBuDwCG,UD2tJF,CtDnwJD,sBuD2CG,aD2tJF,CtDtwJD,qBuD8CG,OD2tJF,CtDzwJD,4BwDwCK,UFouJJ,CtD5wJD,4BwD8CK,SFiuJJ,CtD/wJD,gCwDoDK,UF8tJJ,CtDlxJD,gCwD0DK,SF2tJJ,CtDrxJD,kCwDgEK,cFwtJJ,CtDxxJD,gCwDcK,iBAAA,CACA,SF6wJJ,CtD5xJD,gCwDsBK,UAAA,CACA,gBFywJJ,CtDhyJD,kCwD8BK,wBAAA,CACA,aFqwJJ,CtDpyJD,gCwDcK,iBAAA,CACA,SFyxJJ,CtDxyJD,gCwDsBK,UAAA,CACA,gBFqxJJ,CtD5yJD,kCwD8BK,wBAAA,CACA,aFixJJ,CtDhzJD,gCwDcK,WAAA,CACA,SFqyJJ,CtDpzJD,gCwDsBK,UAAA,CACA,UFiyJJ,CtDxzJD,kCwD8BK,kBAAA,CACA,aF6xJJ,CtD5zJD,gCwDcK,kBAAA,CACA,SFizJJ,CtDh0JD,gCwDsBK,UAAA,CACA,iBF6yJJ,CtDp0JD,kCwD8BK,yBAAA,CACA,aFyyJJ,CtDx0JD,gCwDcK,kBAAA,CACA,SF6zJJ,CtD50JD,gCwDsBK,UAAA,CACA,iBFyzJJ,CtDh1JD,kCwD8BK,yBAAA,CACA,aFqzJJ,CtDp1JD,gCwDcK,SAAA,CACA,SFy0JJ,CtDx1JD,gCwDsBK,UAAA,CACA,QFq0JJ,CtD51JD,kCwD8BK,gBAAA,CACA,aFi0JJ,CtDh2JD,gCwDcK,kBAAA,CACA,SFq1JJ,CtDp2JD,gCwDsBK,UAAA,CACA,iBFi1JJ,CtDx2JD,kCwD8BK,yBAAA,CACA,aF60JJ,CtD52JD,gCwDcK,kBAAA,CACA,SFi2JJ,CtDh3JD,gCwDsBK,UAAA,CACA,iBF61JJ,CtDp3JD,kCwD8BK,yBAAA,CACA,aFy1JJ,CtDx3JD,gCwDcK,WAAA,CACA,SF62JJ,CtD53JD,gCwDsBK,UAAA,CACA,UFy2JJ,CtDh4JD,kCwD8BK,kBAAA,CACA,aFq2JJ,CtDp4JD,iCwDcK,kBAAA,CACA,SFy3JJ,CtDx4JD,iCwDsBK,UAAA,CACA,iBFq3JJ,CtD54JD,mCwD8BK,yBAAA,CACA,aFi3JJ,CtDh5JD,iCwDcK,kBAAA,CACA,SFq4JJ,CtDp5JD,iCwDsBK,UAAA,CACA,iBFi4JJ,CtDx5JD,mCwD8BK,yBAAA,CACA,aF63JJ,CtD55JD,iCwDcK,SAAA,CACA,SFi5JJ,CtDh6JD,iCwDsBK,UAAA,CACA,QF64JJ,CtDp6JD,mCwD8BK,gBAAA,CACA,aFy4JJ,CtDx6JD,iCwDcK,kBAAA,CACA,SF65JJ,CtD56JD,iCwDsBK,UAAA,CACA,iBFy5JJ,CtDh7JD,mCwD8BK,yBAAA,CACA,aFq5JJ,CtDp7JD,iCwDcK,kBAAA,CACA,SFy6JJ,CtDx7JD,iCwDsBK,UAAA,CACA,iBFq6JJ,CtD57JD,mCwD8BK,yBAAA,CACA,aFi6JJ,CtDh8JD,iCwDcK,WAAA,CACA,SFq7JJ,CtDp8JD,iCwDsBK,UAAA,CACA,UFi7JJ,CtDx8JD,mCwD8BK,kBAAA,CACA,aF66JJ,CtD58JD,iCwDcK,kBAAA,CACA,SFi8JJ,CtDh9JD,iCwDsBK,UAAA,CACA,iBF67JJ,CtDp9JD,mCwD8BK,yBAAA,CACA,aFy7JJ,CtDx9JD,iCwDcK,kBAAA,CACA,SF68JJ,CtD59JD,iCwDsBK,UAAA,CACA,iBFy8JJ,CtDh+JD,mCwD8BK,yBAAA,CACA,aFq8JJ,CtDp+JD,iCwDcK,SAAA,CACA,SFy9JJ,CtDx+JD,iCwDsBK,UAAA,CACA,QFq9JJ,CtD5+JD,mCwD8BK,gBAAA,CACA,aFi9JJ,CtDh/JD,iCwDcK,kBAAA,CACA,SFq+JJ,CtDp/JD,iCwDsBK,UAAA,CACA,iBFi+JJ,CtDx/JD,mCwD8BK,yBAAA,CACA,aF69JJ,CtD5/JD,iCwDcK,kBAAA,CACA,SFi/JJ,CtDhgKD,iCwDsBK,UAAA,CACA,iBF6+JJ,CtDpgKD,mCwD8BK,yBAAA,CACA,aFy+JJ,CtDxgKD,iCwDcK,WAAA,CACA,SF6/JJ,CtD5gKD,iCwDsBK,UAAA,CACA,UFy/JJ,CtDhhKD,mCwD8BK,kBAAA,CACA,aFq/JJ,CtDphKD,iCwDcK,kBAAA,CACA,SFygKJ,CtDxhKD,iCwDsBK,UAAA,CACA,iBFqgKJ,CtD5hKD,mCwD8BK,yBAAA,CACA,aFigKJ,CtDhiKD,iCwDcK,kBAAA,CACA,SFqhKJ,CtDpiKD,iCwDsBK,UAAA,CACA,iBFihKJ,CtDxiKD,mCwD8BK,yBAAA,CACA,aF6gKJ,CtD5iKD,iCwDcK,UAAA,CACA,SFiiKJ,CtDhjKD,iCwDsBK,UAAA,CACA,SF6hKJ,CtDpjKD,mCwD8BK,iBAAA,CACA,aFyhKJ,CACF,CErjKE,aACE,aF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A,4BuDkIN,C9D5ZC,6EO4RO,0BAAA,CACA,6BuDmIR,CvD9HE,yCACE,auDgIJ,C5E/ZE,gDACE,aAAA,CACA,U4EiaJ,C5E/ZE,+CAEE,aAAA,CACA,UAAA,CACA,U4EgaJ,CvDnIM,0PACE,sBuDuIR,CvDjIQ,whBACE,SuD0IV,CvDrII,2CACE,oBAAA,CACA,UAAA,CACA,kBAAA,CACA,euDuIN,C9DjcC,6HOkUK,mBuDqIN,CvDlII,2DACE,iBAAA,CACA,sBuDoIN,CvDzKE,oDA0CI,UuDkIN,C9D9cC,8SOoVK,sBAAA,CACA,euDgIN,C9DrdC,gxBOsWK,SuDiIN,C9DveC,2TO6WK,0BAAA,CACA,6BuDgIN,C9D9eC,0TOqXK,sBAAA,CACA,2BAAA,CACA,8BuD+HN,C9DtfC,8EO4XK,kBuD6HN,CvDvNE,2FA8FI,gBuD4HN,C9D5fC,yROyYS,euDyHV,C9DlgBC,gIO6YS,yBuDwHV,CAzfE,oGC6EE,yBDgbJ,C9DzgBC,wD+D8FK,8BAAA,CACA,aD8aN,C9D7gBC,uD+DqGK,cAAA,CACA,6BD2aN,C9DjhBC,iM+DoHO,yBDoaR,C9DxhBC,+E+D0HO,yBDiaR,C9D3hBC,+E+DkIO,cAAA,CACA,gBAAA,CACA,qBD4ZR,C9DhiBC,2Y+D6IO,yBDyZR,C9DtiBC,uf+DuJO,qBAAA,CACA,yBDsZR,CC/aE,mGA8BI,iBAAA,CACA,aDoZN,C9DljBC,oI+DoKS,yBDiZV,CAtiBI,yBACE,oBAAA,CACA,UAAA,CACA,gBAAA,CACA,kBAwiBN,CApiBE,yBACE,qBAAA,CACA,cAAA,CACA,kBAsiBJ,CApiBI,+BACE,qBAsiBN,CAliBE,uBACE,WAoiBJ,C9DtkBC,oC8DqCK,WAoiBN,C9DzkBC,oC8DwCK,WAAA,CACA,eAAA,CACA,kBAoiBN,CA/hBI,qCACE,WAAA,CACA,qBAAA,CACA,kBAAA,CACA,wBAAA,CACA,mBAiiBN,CG5kBI,sEAEE,oBH8kBN,CGhlBI,kNAKI,yBH+kBR,C9D7lBC,2CiEoBG,eH4kBJ,C9DhmBC,gCiE0BG,kBHykBJ,C9DnmBC,qEiE+BK,SAAA,CACA,SAAA,CACA,Q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CAAA,CACA,SAAA,CACA,wBAAA,CACA,gDAAA,CACA,mBCxCJ,CD4CI,yBACE,qGC1CN,CDgDI,8BACE,eC9CN,CDmDA,oCACE,GACE,SCjDF,CDmDA,GACE,SCjDF,CACF,CD2CA,4BACE,GACE,SCjDF,CDmDA,GACE,SCjDF,CACF,CCxME,gBACE,aD0MJ,C/EhNC,kCgFWK,UAAA,CACA,MDwMN,C/EpNC,+DiFQG,WCDJ,ClFPC,2BiFaG,sBCHJ,ClFVC,2CiFgBG,kBCHJ,ClFbC,qEiFqBG,UAAA,CACA,WCJJ,ClFlBC,qEiF4BG,oBAAA,CACA,eAAA,CACA,eAAA,CACA,qBAAA,CACA,cCNJ,CDQI,6FACE,aCLN,ClF9BC,yEiFyCG,aCPJ,ClFlCC,oHiF8CG,aCRJ,ClFtCC,gDiFmDK,eCVN,CDYI,8CACE,SCVN,ClF5CC,+DiF4DG,UCZJ,ClFhDC,kMiFoEG,UCdJ,ClFtDC,iBmFGC,YAAA,CACA,cDsDF,ClF1DC,gCmFOG,SAAA,CACA,gBAAA,CACA,iBAAA,CACA,eDsDJ,CCpDI,0CACE,kBDsDN,ClFnEC,4GmFkBK,oBAAA,CACA,kBDqDN,ClFxEC,qDmFuBK,SDoDN,ClF3EC,2GmF+BK,oBDkDN,ClFjFC,0CoFIG,WFgFJ,ClFpFC,4CoFOG,QFgFJ,ClFvFC,kCqFuCG,qBHmDJ,CGjDI,8CACE,WHmDN,ClF7FC,2GqFOC,eAAA,CACA,kBAAA,CACA,kBAAA,CACA,eH2FF,ClFrGC,6HqFaG,QH6FJ,CG3FI,+IACE,YH+FN,ClF/GC,kJsFsLG,gBJlEJ,CG9DA,yBrFtDC,oCqFOC,eAAA,CACA,kBAAA,CACA,kBAAA,CACA,eHiHA,ClF3HD,0CqFaG,QHiHF,CG/GE,gDACE,YHiHJ,ClFjID,iDsFsLG,gBJlDF,ClFpID,yBqF2BK,cH4GJ,ClFvID,8FqF8BO,aAAA,CACA,cH6GN,ClF5ID,mCqFOC,eAAA,CACA,kBAAA,CACA,kBAAA,CACA,eHwIA,ClFlJD,yCqFaG,QHwIF,CGtIE,+CACE,YHwIJ,ClFxJD,gDsFsLG,gBJ3BF,CACF,CG/FA,yBrF7DC,mCqFOC,eAAA,CACA,kBAAA,CACA,kBAAA,CACA,eHyJA,ClFnKD,yCqFaG,QHyJF,CGvJE,+CACE,YHyJJ,ClFzKD,gDsFsLG,gBJVF,CACF,CG1GA,yBrFnEC,mCqFOC,eAAA,CACA,kBAAA,CACA,kBAAA,CACA,eH0KA,ClFpLD,yCqFaG,QH0KF,CGxKE,+CACE,YH0KJ,ClF1LD,gDsFsLG,gBJOF,CACF,CGrHA,0BrFzEC,mCqFOC,eAAA,CACA,kBAAA,CACA,kBAAA,CACA,eH2LA,ClFrMD,yCqFaG,QH2LF,CGzLE,+CACE,YH2LJ,ClF3MD,gDsFsLG,gBJwBF,CACF,CGhIA,0BrF/EC,mCqFOC,eAAA,CACA,kBAAA,CACA,kBAAA,CACA,eH4MA,ClFtND,yCqFaG,QH4MF,CG1ME,+CACE,YH4MJ,ClF5ND,gDsFsLG,gBJyCF,CACF,CKrNI,mDACE,aL2NN,CKxNI,qDACE,aL0NN,CKtNE,uCAGI,kBLsNN,CKzNE,uEAQM,kBLoNR,CK5NE,oGAeM,ULgNR,CK/NE,wCAqBI,gBL6MN,CKlOE,kSA+BI,ULyMN,CKxOE,uLAqCI,kBLuMN,CKlMM,uDACE,iBLoMR,CKlMM,uDACE,ULoMR,CK3LM,sFACE,oBLgMR,CK7LM,8CACE,oBL+LR,CKzLM,4UAMI,iBAAA,CACA,OAAA,CACA,OAAA,CACA,SAAA,CACA,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,iBAAA,CACA,kBAAA,CACA,0DAAA,CAAA,kDAAA,CACA,mBLyLV,ClFjSC,mFuFiHK,aAAA,CACA,4CAAA,CAAA,oCLmLN,CK9KE,gDCnHE,aNoSJ,CM/RI,gUAEE,qBAAA,CACA,oBNmSN,CKxLE,gahFjGE,oBAAA,CAEF,gCAAA,CACA,SAAA,CACA,wC2EoSF,CKvME,6CC7FE,aNuSJ,CK1ME,kDCzFE,aAAA,CACA,oBNsSJ,CK9ME,yCCpFE,aNqSJ,ClFxUC,mFuF2HK,aAAA,CACA,4CAAA,CAAA,oCLgNN,CKrNE,uHAWM,qBAAA,CACA,8BL6MR,ClFhVC,iROsBG,oBAAA,CAEF,gCAAA,CACA,SAAA,CACA,wC2E6TF,CKhOE,oFAuBI,qBAAA,CA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","file":"2.cd26dbc7.chunk.css","sourcesContent":["/*!\n * \n * antd v4.16.5\n * \n * Copyright 2015-present, Alipay, Inc.\n * All rights reserved.\n * \n */\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n[class^=ant-]::-ms-clear,\n[class*= ant-]::-ms-clear,\n[class^=ant-] input::-ms-clear,\n[class*= ant-] input::-ms-clear,\n[class^=ant-] input::-ms-reveal,\n[class*= ant-] input::-ms-reveal {\n display: none;\n}\n/* stylelint-disable at-rule-no-unknown */\nhtml,\nbody {\n width: 100%;\n height: 100%;\n}\ninput::-ms-clear,\ninput::-ms-reveal {\n display: none;\n}\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n@-ms-viewport {\n width: device-width;\n}\nbody {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n font-variant: tabular-nums;\n line-height: 1.5715;\n background-color: #fff;\n font-feature-settings: 'tnum';\n}\n[tabindex='-1']:focus {\n outline: none !important;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n}\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n border-bottom: 0;\n cursor: help;\n}\naddress {\n margin-bottom: 1em;\n font-style: normal;\n line-height: inherit;\n}\ninput[type='text'],\ninput[type='password'],\ninput[type='number'],\ntextarea {\n -webkit-appearance: none;\n}\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1em;\n}\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\ndt {\n font-weight: 500;\n}\ndd {\n margin-bottom: 0.5em;\n margin-left: 0;\n}\nblockquote {\n margin: 0 0 1em;\n}\ndfn {\n font-style: italic;\n}\nb,\nstrong {\n font-weight: bolder;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\na {\n color: #1890ff;\n text-decoration: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n -webkit-text-decoration-skip: objects;\n}\na:hover {\n color: #40a9ff;\n}\na:active {\n color: #096dd9;\n}\na:active,\na:hover {\n text-decoration: none;\n outline: 0;\n}\na:focus {\n text-decoration: none;\n outline: 0;\n}\na[disabled] {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\npre,\ncode,\nkbd,\nsamp {\n font-size: 1em;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\npre {\n margin-top: 0;\n margin-bottom: 1em;\n overflow: auto;\n}\nfigure {\n margin: 0 0 1em;\n}\nimg {\n vertical-align: middle;\n border-style: none;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\na,\narea,\nbutton,\n[role='button'],\ninput:not([type='range']),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\ntable {\n border-collapse: collapse;\n}\ncaption {\n padding-top: 0.75em;\n padding-bottom: 0.3em;\n color: rgba(0, 0, 0, 0.45);\n text-align: left;\n caption-side: bottom;\n}\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\nbutton,\ninput {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n -webkit-appearance: listbox;\n}\ntextarea {\n overflow: auto;\n resize: vertical;\n}\nfieldset {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: 0.5em;\n padding: 0;\n color: inherit;\n font-size: 1.5em;\n line-height: inherit;\n white-space: normal;\n}\nprogress {\n vertical-align: baseline;\n}\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n[type='search'] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\noutput {\n display: inline-block;\n}\nsummary {\n display: list-item;\n}\ntemplate {\n display: none;\n}\n[hidden] {\n display: none !important;\n}\nmark {\n padding: 0.2em;\n background-color: #feffe6;\n}\n::-moz-selection {\n color: #fff;\n background: #1890ff;\n}\n::selection {\n color: #fff;\n background: #1890ff;\n}\n.clearfix::before {\n display: table;\n content: '';\n}\n.clearfix::after {\n display: table;\n clear: both;\n content: '';\n}\n.anticon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.anticon > * {\n line-height: 1;\n}\n.anticon svg {\n display: inline-block;\n}\n.anticon::before {\n display: none;\n}\n.anticon .anticon-icon {\n display: block;\n}\n.anticon[tabindex] {\n cursor: pointer;\n}\n.anticon-spin::before {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n.anticon-spin {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n.ant-fade-enter,\n.ant-fade-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-fade-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-fade-enter.ant-fade-enter-active,\n.ant-fade-appear.ant-fade-appear-active {\n -webkit-animation-name: antFadeIn;\n animation-name: antFadeIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-fade-leave.ant-fade-leave-active {\n -webkit-animation-name: antFadeOut;\n animation-name: antFadeOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-fade-enter,\n.ant-fade-appear {\n opacity: 0;\n -webkit-animation-timing-function: linear;\n animation-timing-function: linear;\n}\n.ant-fade-leave {\n -webkit-animation-timing-function: linear;\n animation-timing-function: linear;\n}\n@-webkit-keyframes antFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes antFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes antFadeOut {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes antFadeOut {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n.ant-move-up-enter,\n.ant-move-up-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-move-up-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-move-up-enter.ant-move-up-enter-active,\n.ant-move-up-appear.ant-move-up-appear-active {\n -webkit-animation-name: antMoveUpIn;\n animation-name: antMoveUpIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-move-up-leave.ant-move-up-leave-active {\n -webkit-animation-name: antMoveUpOut;\n animation-name: antMoveUpOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-up-enter,\n.ant-move-up-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-up-leave {\n -webkit-animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-down-enter,\n.ant-move-down-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-move-down-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-move-down-enter.ant-move-down-enter-active,\n.ant-move-down-appear.ant-move-down-appear-active {\n -webkit-animation-name: antMoveDownIn;\n animation-name: antMoveDownIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-move-down-leave.ant-move-down-leave-active {\n -webkit-animation-name: antMoveDownOut;\n animation-name: antMoveDownOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-down-enter,\n.ant-move-down-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-down-leave {\n -webkit-animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-left-enter,\n.ant-move-left-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-move-left-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-move-left-enter.ant-move-left-enter-active,\n.ant-move-left-appear.ant-move-left-appear-active {\n -webkit-animation-name: antMoveLeftIn;\n animation-name: antMoveLeftIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-move-left-leave.ant-move-left-leave-active {\n -webkit-animation-name: antMoveLeftOut;\n animation-name: antMoveLeftOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-left-enter,\n.ant-move-left-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-left-leave {\n -webkit-animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-right-enter,\n.ant-move-right-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-move-right-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-move-right-enter.ant-move-right-enter-active,\n.ant-move-right-appear.ant-move-right-appear-active {\n -webkit-animation-name: antMoveRightIn;\n animation-name: antMoveRightIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-move-right-leave.ant-move-right-leave-active {\n -webkit-animation-name: antMoveRightOut;\n animation-name: antMoveRightOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-right-enter,\n.ant-move-right-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-right-leave {\n -webkit-animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n@-webkit-keyframes antMoveDownIn {\n 0% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveDownIn {\n 0% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@-webkit-keyframes antMoveDownOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveDownOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@-webkit-keyframes antMoveLeftIn {\n 0% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveLeftIn {\n 0% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@-webkit-keyframes antMoveLeftOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveLeftOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@-webkit-keyframes antMoveRightIn {\n 0% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveRightIn {\n 0% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@-webkit-keyframes antMoveRightOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveRightOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@-webkit-keyframes antMoveUpIn {\n 0% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveUpIn {\n 0% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@-webkit-keyframes antMoveUpOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveUpOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@-webkit-keyframes loadingCircle {\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes loadingCircle {\n 100% {\n transform: rotate(360deg);\n }\n}\n[ant-click-animating='true'],\n[ant-click-animating-without-extra-node='true'] {\n position: relative;\n}\nhtml {\n --antd-wave-shadow-color: #1890ff;\n --scroll-bar: 0;\n}\n[ant-click-animating-without-extra-node='true']::after,\n.ant-click-animating-node {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n border-radius: inherit;\n box-shadow: 0 0 0 0 #1890ff;\n box-shadow: 0 0 0 0 var(--antd-wave-shadow-color);\n opacity: 0.2;\n -webkit-animation: fadeEffect 2s cubic-bezier(0.08, 0.82, 0.17, 1), waveEffect 0.4s cubic-bezier(0.08, 0.82, 0.17, 1);\n animation: fadeEffect 2s cubic-bezier(0.08, 0.82, 0.17, 1), waveEffect 0.4s cubic-bezier(0.08, 0.82, 0.17, 1);\n -webkit-animation-fill-mode: forwards;\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n@-webkit-keyframes waveEffect {\n 100% {\n box-shadow: 0 0 0 #1890ff;\n box-shadow: 0 0 0 6px var(--antd-wave-shadow-color);\n }\n}\n@keyframes waveEffect {\n 100% {\n box-shadow: 0 0 0 #1890ff;\n box-shadow: 0 0 0 6px var(--antd-wave-shadow-color);\n }\n}\n@-webkit-keyframes fadeEffect {\n 100% {\n opacity: 0;\n }\n}\n@keyframes fadeEffect {\n 100% {\n opacity: 0;\n }\n}\n.ant-slide-up-enter,\n.ant-slide-up-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-slide-up-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-slide-up-enter.ant-slide-up-enter-active,\n.ant-slide-up-appear.ant-slide-up-appear-active {\n -webkit-animation-name: antSlideUpIn;\n animation-name: antSlideUpIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-slide-up-leave.ant-slide-up-leave-active {\n -webkit-animation-name: antSlideUpOut;\n animation-name: antSlideUpOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-up-enter,\n.ant-slide-up-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-up-leave {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-down-enter,\n.ant-slide-down-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-slide-down-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-slide-down-enter.ant-slide-down-enter-active,\n.ant-slide-down-appear.ant-slide-down-appear-active {\n -webkit-animation-name: antSlideDownIn;\n animation-name: antSlideDownIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-slide-down-leave.ant-slide-down-leave-active {\n -webkit-animation-name: antSlideDownOut;\n animation-name: antSlideDownOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-down-enter,\n.ant-slide-down-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-down-leave {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-left-enter,\n.ant-slide-left-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-slide-left-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-slide-left-enter.ant-slide-left-enter-active,\n.ant-slide-left-appear.ant-slide-left-appear-active {\n -webkit-animation-name: antSlideLeftIn;\n animation-name: antSlideLeftIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-slide-left-leave.ant-slide-left-leave-active {\n -webkit-animation-name: antSlideLeftOut;\n animation-name: antSlideLeftOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-left-enter,\n.ant-slide-left-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-left-leave {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-right-enter,\n.ant-slide-right-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-slide-right-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-slide-right-enter.ant-slide-right-enter-active,\n.ant-slide-right-appear.ant-slide-right-appear-active {\n -webkit-animation-name: antSlideRightIn;\n animation-name: antSlideRightIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-slide-right-leave.ant-slide-right-leave-active {\n -webkit-animation-name: antSlideRightOut;\n animation-name: antSlideRightOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-right-enter,\n.ant-slide-right-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-right-leave {\n -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n@-webkit-keyframes antSlideUpIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideUpIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@-webkit-keyframes antSlideUpOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideUpOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@-webkit-keyframes antSlideDownIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n}\n@keyframes antSlideDownIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n}\n@-webkit-keyframes antSlideDownOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n}\n@keyframes antSlideDownOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n}\n@-webkit-keyframes antSlideLeftIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideLeftIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@-webkit-keyframes antSlideLeftOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideLeftOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@-webkit-keyframes antSlideRightIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideRightIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n}\n@-webkit-keyframes antSlideRightOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideRightOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n}\n.ant-zoom-enter,\n.ant-zoom-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-enter.ant-zoom-enter-active,\n.ant-zoom-appear.ant-zoom-appear-active {\n -webkit-animation-name: antZoomIn;\n animation-name: antZoomIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-zoom-leave.ant-zoom-leave-active {\n -webkit-animation-name: antZoomOut;\n animation-name: antZoomOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-enter,\n.ant-zoom-appear {\n transform: scale(0);\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-enter-prepare,\n.ant-zoom-appear-prepare {\n transform: none;\n}\n.ant-zoom-leave {\n -webkit-animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-big-enter,\n.ant-zoom-big-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-big-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-big-enter.ant-zoom-big-enter-active,\n.ant-zoom-big-appear.ant-zoom-big-appear-active {\n -webkit-animation-name: antZoomBigIn;\n animation-name: antZoomBigIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-zoom-big-leave.ant-zoom-big-leave-active {\n -webkit-animation-name: antZoomBigOut;\n animation-name: antZoomBigOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-big-enter,\n.ant-zoom-big-appear {\n transform: scale(0);\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-big-enter-prepare,\n.ant-zoom-big-appear-prepare {\n transform: none;\n}\n.ant-zoom-big-leave {\n -webkit-animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-appear {\n -webkit-animation-duration: 0.1s;\n animation-duration: 0.1s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-big-fast-leave {\n -webkit-animation-duration: 0.1s;\n animation-duration: 0.1s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active,\n.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active {\n -webkit-animation-name: antZoomBigIn;\n animation-name: antZoomBigIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active {\n -webkit-animation-name: antZoomBigOut;\n animation-name: antZoomBigOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-appear {\n transform: scale(0);\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-big-fast-enter-prepare,\n.ant-zoom-big-fast-appear-prepare {\n transform: none;\n}\n.ant-zoom-big-fast-leave {\n -webkit-animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-up-enter,\n.ant-zoom-up-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-up-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-up-enter.ant-zoom-up-enter-active,\n.ant-zoom-up-appear.ant-zoom-up-appear-active {\n -webkit-animation-name: antZoomUpIn;\n animation-name: antZoomUpIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-zoom-up-leave.ant-zoom-up-leave-active {\n -webkit-animation-name: antZoomUpOut;\n animation-name: antZoomUpOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-up-enter,\n.ant-zoom-up-appear {\n transform: scale(0);\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-up-enter-prepare,\n.ant-zoom-up-appear-prepare {\n transform: none;\n}\n.ant-zoom-up-leave {\n -webkit-animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-down-enter,\n.ant-zoom-down-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-down-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-down-enter.ant-zoom-down-enter-active,\n.ant-zoom-down-appear.ant-zoom-down-appear-active {\n -webkit-animation-name: antZoomDownIn;\n animation-name: antZoomDownIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-zoom-down-leave.ant-zoom-down-leave-active {\n -webkit-animation-name: antZoomDownOut;\n animation-name: antZoomDownOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-down-enter,\n.ant-zoom-down-appear {\n transform: scale(0);\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-down-enter-prepare,\n.ant-zoom-down-appear-prepare {\n transform: none;\n}\n.ant-zoom-down-leave {\n -webkit-animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-left-enter,\n.ant-zoom-left-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-left-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-left-enter.ant-zoom-left-enter-active,\n.ant-zoom-left-appear.ant-zoom-left-appear-active {\n -webkit-animation-name: antZoomLeftIn;\n animation-name: antZoomLeftIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-zoom-left-leave.ant-zoom-left-leave-active {\n -webkit-animation-name: antZoomLeftOut;\n animation-name: antZoomLeftOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-left-enter,\n.ant-zoom-left-appear {\n transform: scale(0);\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-left-enter-prepare,\n.ant-zoom-left-appear-prepare {\n transform: none;\n}\n.ant-zoom-left-leave {\n -webkit-animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-right-enter,\n.ant-zoom-right-appear {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-right-leave {\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-zoom-right-enter.ant-zoom-right-enter-active,\n.ant-zoom-right-appear.ant-zoom-right-appear-active {\n -webkit-animation-name: antZoomRightIn;\n animation-name: antZoomRightIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-zoom-right-leave.ant-zoom-right-leave-active {\n -webkit-animation-name: antZoomRightOut;\n animation-name: antZoomRightOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-right-enter,\n.ant-zoom-right-appear {\n transform: scale(0);\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-right-enter-prepare,\n.ant-zoom-right-appear-prepare {\n transform: none;\n}\n.ant-zoom-right-leave {\n -webkit-animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n@-webkit-keyframes antZoomIn {\n 0% {\n transform: scale(0.2);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes antZoomIn {\n 0% {\n transform: scale(0.2);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@-webkit-keyframes antZoomOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.2);\n opacity: 0;\n }\n}\n@keyframes antZoomOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.2);\n opacity: 0;\n }\n}\n@-webkit-keyframes antZoomBigIn {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes antZoomBigIn {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@-webkit-keyframes antZoomBigOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.8);\n opacity: 0;\n }\n}\n@keyframes antZoomBigOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.8);\n opacity: 0;\n }\n}\n@-webkit-keyframes antZoomUpIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n}\n@keyframes antZoomUpIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n}\n@-webkit-keyframes antZoomUpOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n}\n@keyframes antZoomUpOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n}\n@-webkit-keyframes antZoomLeftIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n}\n@keyframes antZoomLeftIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n}\n@-webkit-keyframes antZoomLeftOut {\n 0% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n}\n@keyframes antZoomLeftOut {\n 0% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n}\n@-webkit-keyframes antZoomRightIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n}\n@keyframes antZoomRightIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n}\n@-webkit-keyframes antZoomRightOut {\n 0% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n}\n@keyframes antZoomRightOut {\n 0% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n}\n@-webkit-keyframes antZoomDownIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n}\n@keyframes antZoomDownIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n}\n@-webkit-keyframes antZoomDownOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n}\n@keyframes antZoomDownOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n}\n.ant-motion-collapse-legacy {\n overflow: hidden;\n}\n.ant-motion-collapse-legacy-active {\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n.ant-motion-collapse {\n overflow: hidden;\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-affix {\n position: fixed;\n z-index: 10;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-alert {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px 15px;\n word-wrap: break-word;\n border-radius: 2px;\n}\n.ant-alert-content {\n flex: 1;\n min-width: 0;\n}\n.ant-alert-icon {\n margin-right: 8px;\n}\n.ant-alert-description {\n display: none;\n font-size: 14px;\n line-height: 22px;\n}\n.ant-alert-success {\n background-color: #f6ffed;\n border: 1px solid #b7eb8f;\n}\n.ant-alert-success .ant-alert-icon {\n color: #52c41a;\n}\n.ant-alert-info {\n background-color: #e6f7ff;\n border: 1px solid #91d5ff;\n}\n.ant-alert-info .ant-alert-icon {\n color: #1890ff;\n}\n.ant-alert-warning {\n background-color: #fffbe6;\n border: 1px solid #ffe58f;\n}\n.ant-alert-warning .ant-alert-icon {\n color: #faad14;\n}\n.ant-alert-error {\n background-color: #fff2f0;\n border: 1px solid #ffccc7;\n}\n.ant-alert-error .ant-alert-icon {\n color: #ff4d4f;\n}\n.ant-alert-error .ant-alert-description > pre {\n margin: 0;\n padding: 0;\n}\n.ant-alert-action {\n margin-left: 8px;\n}\n.ant-alert-close-icon {\n margin-left: 8px;\n padding: 0;\n overflow: hidden;\n font-size: 12px;\n line-height: 12px;\n background-color: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n}\n.ant-alert-close-icon .anticon-close {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-alert-close-icon .anticon-close:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-alert-close-text {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-alert-close-text:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-alert-with-description {\n align-items: flex-start;\n padding: 15px 15px 15px 24px;\n}\n.ant-alert-with-description.ant-alert-no-icon {\n padding: 15px 15px;\n}\n.ant-alert-with-description .ant-alert-icon {\n margin-right: 15px;\n font-size: 24px;\n}\n.ant-alert-with-description .ant-alert-message {\n display: block;\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n}\n.ant-alert-message {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-alert-with-description .ant-alert-description {\n display: block;\n}\n.ant-alert.ant-alert-motion-leave {\n overflow: hidden;\n opacity: 1;\n transition: max-height 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), opacity 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), padding-top 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), padding-bottom 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), margin-bottom 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-alert.ant-alert-motion-leave-active {\n max-height: 0;\n margin-bottom: 0 !important;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n}\n.ant-alert-banner {\n margin-bottom: 0;\n border: 0;\n border-radius: 0;\n}\n.ant-alert.ant-alert-rtl {\n direction: rtl;\n}\n.ant-alert-rtl.ant-alert.ant-alert-no-icon {\n padding: 8px 15px;\n}\n.ant-alert-rtl .ant-alert-icon {\n margin-right: auto;\n margin-left: 8px;\n}\n.ant-alert-rtl .ant-alert-action {\n margin-right: 8px;\n margin-left: auto;\n}\n.ant-alert-rtl .ant-alert-close-icon {\n margin-right: 8px;\n margin-left: auto;\n}\n.ant-alert-rtl.ant-alert-with-description .ant-alert-icon {\n margin-right: auto;\n margin-left: 15px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-anchor {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n padding-left: 2px;\n}\n.ant-anchor-wrapper {\n margin-left: -4px;\n padding-left: 4px;\n overflow: auto;\n background-color: transparent;\n}\n.ant-anchor-ink {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n}\n.ant-anchor-ink::before {\n position: relative;\n display: block;\n width: 2px;\n height: 100%;\n margin: 0 auto;\n background-color: #f0f0f0;\n content: ' ';\n}\n.ant-anchor-ink-ball {\n position: absolute;\n left: 50%;\n display: none;\n width: 8px;\n height: 8px;\n background-color: #fff;\n border: 2px solid #1890ff;\n border-radius: 8px;\n transform: translateX(-50%);\n transition: top 0.3s ease-in-out;\n}\n.ant-anchor-ink-ball.visible {\n display: inline-block;\n}\n.ant-anchor.fixed .ant-anchor-ink .ant-anchor-ink-ball {\n display: none;\n}\n.ant-anchor-link {\n padding: 7px 0 7px 16px;\n line-height: 1.143;\n}\n.ant-anchor-link-title {\n position: relative;\n display: block;\n margin-bottom: 6px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n}\n.ant-anchor-link-title:only-child {\n margin-bottom: 0;\n}\n.ant-anchor-link-active > .ant-anchor-link-title {\n color: #1890ff;\n}\n.ant-anchor-link .ant-anchor-link {\n padding-top: 5px;\n padding-bottom: 5px;\n}\n.ant-anchor-rtl {\n direction: rtl;\n}\n.ant-anchor-rtl.ant-anchor-wrapper {\n margin-right: -4px;\n margin-left: 0;\n padding-right: 4px;\n padding-left: 0;\n}\n.ant-anchor-rtl .ant-anchor-ink {\n right: 0;\n left: auto;\n}\n.ant-anchor-rtl .ant-anchor-ink-ball {\n right: 50%;\n left: 0;\n transform: translateX(50%);\n}\n.ant-anchor-rtl .ant-anchor-link {\n padding: 7px 16px 7px 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-select-auto-complete {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-select-auto-complete .ant-select-clear {\n right: 13px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-select-single .ant-select-selector {\n display: flex;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-search {\n position: absolute;\n top: 0;\n right: 11px;\n bottom: 0;\n left: 11px;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-search-input {\n width: 100%;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-item,\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n padding: 0;\n line-height: 30px;\n transition: all 0.3s;\n}\n@supports (-moz-appearance: meterbar) {\n .ant-select-single .ant-select-selector .ant-select-selection-item,\n .ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n line-height: 30px;\n }\n}\n.ant-select-single .ant-select-selector .ant-select-selection-item {\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n pointer-events: none;\n}\n.ant-select-single .ant-select-selector::after,\n.ant-select-single .ant-select-selector .ant-select-selection-item::after,\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder::after {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\n.ant-select-single.ant-select-show-arrow .ant-select-selection-search {\n right: 25px;\n}\n.ant-select-single.ant-select-show-arrow .ant-select-selection-item,\n.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 18px;\n}\n.ant-select-single.ant-select-open .ant-select-selection-item {\n color: #bfbfbf;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n width: 100%;\n height: 32px;\n padding: 0 11px;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input {\n height: 30px;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector::after {\n line-height: 30px;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector::after {\n display: none;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-search {\n position: static;\n width: 100%;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder {\n position: absolute;\n right: 0;\n left: 0;\n padding: 0 11px;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder::after {\n display: none;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector {\n height: 40px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector::after,\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder {\n line-height: 38px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input {\n height: 38px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector {\n height: 24px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector::after,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder {\n line-height: 22px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input {\n height: 22px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selection-search {\n right: 7px;\n left: 7px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector {\n padding: 0 7px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search {\n right: 28px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 21px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector {\n padding: 0 11px;\n}\n/**\n * Do not merge `height` & `line-height` under style with `selection` & `search`,\n * since chrome may update to redesign with its align logic.\n */\n.ant-select-selection-overflow {\n position: relative;\n display: flex;\n flex: auto;\n flex-wrap: wrap;\n max-width: 100%;\n}\n.ant-select-selection-overflow-item {\n flex: none;\n align-self: center;\n max-width: 100%;\n}\n.ant-select-multiple .ant-select-selector {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n padding: 1px 4px;\n}\n.ant-select-show-search.ant-select-multiple .ant-select-selector {\n cursor: text;\n}\n.ant-select-disabled.ant-select-multiple .ant-select-selector {\n background: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-select-multiple .ant-select-selector::after {\n display: inline-block;\n width: 0;\n margin: 2px 0;\n line-height: 24px;\n content: '\\a0';\n}\n.ant-select-multiple.ant-select-show-arrow .ant-select-selector,\n.ant-select-multiple.ant-select-allow-clear .ant-select-selector {\n padding-right: 24px;\n}\n.ant-select-multiple .ant-select-selection-item {\n position: relative;\n display: flex;\n flex: none;\n box-sizing: border-box;\n max-width: 100%;\n height: 24px;\n margin-top: 2px;\n margin-bottom: 2px;\n line-height: 22px;\n background: #f5f5f5;\n border: 1px solid #f0f0f0;\n border-radius: 2px;\n cursor: default;\n transition: font-size 0.3s, line-height 0.3s, height 0.3s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-margin-end: 4px;\n margin-inline-end: 4px;\n -webkit-padding-start: 8px;\n padding-inline-start: 8px;\n -webkit-padding-end: 4px;\n padding-inline-end: 4px;\n}\n.ant-select-disabled.ant-select-multiple .ant-select-selection-item {\n color: #bfbfbf;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-select-multiple .ant-select-selection-item-content {\n display: inline-block;\n margin-right: 4px;\n overflow: hidden;\n white-space: pre;\n text-overflow: ellipsis;\n}\n.ant-select-multiple .ant-select-selection-item-remove {\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n font-weight: bold;\n font-size: 10px;\n line-height: inherit;\n cursor: pointer;\n}\n.ant-select-multiple .ant-select-selection-item-remove > * {\n line-height: 1;\n}\n.ant-select-multiple .ant-select-selection-item-remove svg {\n display: inline-block;\n}\n.ant-select-multiple .ant-select-selection-item-remove::before {\n display: none;\n}\n.ant-select-multiple .ant-select-selection-item-remove .ant-select-multiple .ant-select-selection-item-remove-icon {\n display: block;\n}\n.ant-select-multiple .ant-select-selection-item-remove > .anticon {\n vertical-align: -0.2em;\n}\n.ant-select-multiple .ant-select-selection-item-remove:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-select-multiple .ant-select-selection-overflow-item + .ant-select-selection-overflow-item .ant-select-selection-search {\n -webkit-margin-start: 0;\n margin-inline-start: 0;\n}\n.ant-select-multiple .ant-select-selection-search {\n position: relative;\n max-width: 100%;\n margin-top: 2px;\n margin-bottom: 2px;\n -webkit-margin-start: 7px;\n margin-inline-start: 7px;\n}\n.ant-select-multiple .ant-select-selection-search-input,\n.ant-select-multiple .ant-select-selection-search-mirror {\n height: 24px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 24px;\n transition: all 0.3s;\n}\n.ant-select-multiple .ant-select-selection-search-input {\n width: 100%;\n min-width: 4.1px;\n}\n.ant-select-multiple .ant-select-selection-search-mirror {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 999;\n white-space: pre;\n visibility: hidden;\n}\n.ant-select-multiple .ant-select-selection-placeholder {\n position: absolute;\n top: 50%;\n right: 11px;\n left: 11px;\n transform: translateY(-50%);\n transition: all 0.3s;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selector::after {\n line-height: 32px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-item {\n height: 32px;\n line-height: 30px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-search {\n height: 32px;\n line-height: 32px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-search-input,\n.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror {\n height: 32px;\n line-height: 30px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selector::after {\n line-height: 16px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-item {\n height: 16px;\n line-height: 14px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search {\n height: 16px;\n line-height: 16px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search-input,\n.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror {\n height: 16px;\n line-height: 14px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder {\n left: 7px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search {\n -webkit-margin-start: 3px;\n margin-inline-start: 3px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-item {\n height: 32px;\n line-height: 32px;\n}\n.ant-select-disabled .ant-select-selection-item-remove {\n display: none;\n}\n/* Reset search input style */\n.ant-select {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n cursor: pointer;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n position: relative;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: pointer;\n}\n.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n cursor: text;\n}\n.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: auto;\n}\n.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-select-multiple.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background: #f5f5f5;\n}\n.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: not-allowed;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input {\n margin: 0;\n padding: 0;\n background: transparent;\n border: none;\n outline: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button {\n display: none;\n -webkit-appearance: none;\n}\n.ant-select:not(.ant-select-disabled):hover .ant-select-selector {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-select-selection-item {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-select-selection-item *::-ms-backdrop,\n .ant-select-selection-item {\n flex: auto;\n }\n}\n.ant-select-selection-placeholder {\n flex: 1;\n overflow: hidden;\n color: #bfbfbf;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-select-selection-placeholder *::-ms-backdrop,\n .ant-select-selection-placeholder {\n flex: auto;\n }\n}\n.ant-select-arrow {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n position: absolute;\n top: 53%;\n right: 11px;\n width: 12px;\n height: 12px;\n margin-top: -6px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n line-height: 1;\n text-align: center;\n pointer-events: none;\n}\n.ant-select-arrow > * {\n line-height: 1;\n}\n.ant-select-arrow svg {\n display: inline-block;\n}\n.ant-select-arrow::before {\n display: none;\n}\n.ant-select-arrow .ant-select-arrow-icon {\n display: block;\n}\n.ant-select-arrow .anticon {\n vertical-align: top;\n transition: transform 0.3s;\n}\n.ant-select-arrow .anticon > svg {\n vertical-align: top;\n}\n.ant-select-arrow .anticon:not(.ant-select-suffix) {\n pointer-events: auto;\n}\n.ant-select-disabled .ant-select-arrow {\n cursor: not-allowed;\n}\n.ant-select-clear {\n position: absolute;\n top: 50%;\n right: 11px;\n z-index: 1;\n display: inline-block;\n width: 12px;\n height: 12px;\n margin-top: -6px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n background: #fff;\n cursor: pointer;\n opacity: 0;\n transition: color 0.3s ease, opacity 0.15s ease;\n text-rendering: auto;\n}\n.ant-select-clear::before {\n display: block;\n}\n.ant-select-clear:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-select:hover .ant-select-clear {\n opacity: 1;\n}\n.ant-select-dropdown {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n box-sizing: border-box;\n padding: 4px 0;\n overflow: hidden;\n font-size: 14px;\n font-variant: initial;\n background-color: #fff;\n border-radius: 2px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-bottomLeft,\n.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-bottomLeft {\n -webkit-animation-name: antSlideUpIn;\n animation-name: antSlideUpIn;\n}\n.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-topLeft,\n.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-topLeft {\n -webkit-animation-name: antSlideDownIn;\n animation-name: antSlideDownIn;\n}\n.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-bottomLeft {\n -webkit-animation-name: antSlideUpOut;\n animation-name: antSlideUpOut;\n}\n.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-topLeft {\n -webkit-animation-name: antSlideDownOut;\n animation-name: antSlideDownOut;\n}\n.ant-select-dropdown-hidden {\n display: none;\n}\n.ant-select-dropdown-empty {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-select-item-empty {\n position: relative;\n display: block;\n min-height: 32px;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-select-item {\n position: relative;\n display: block;\n min-height: 32px;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-select-item-group {\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n cursor: default;\n}\n.ant-select-item-option {\n display: flex;\n}\n.ant-select-item-option-content {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-select-item-option-state {\n flex: none;\n}\n.ant-select-item-option-active:not(.ant-select-item-option-disabled) {\n background-color: #f5f5f5;\n}\n.ant-select-item-option-selected:not(.ant-select-item-option-disabled) {\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n background-color: #e6f7ff;\n}\n.ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-state {\n color: #1890ff;\n}\n.ant-select-item-option-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-item-option-grouped {\n padding-left: 24px;\n}\n.ant-select-lg {\n font-size: 16px;\n}\n.ant-select-borderless .ant-select-selector {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n}\n.ant-select-rtl {\n direction: rtl;\n}\n.ant-select-rtl .ant-select-arrow {\n right: initial;\n left: 11px;\n}\n.ant-select-rtl .ant-select-clear {\n right: initial;\n left: 11px;\n}\n.ant-select-dropdown-rtl {\n direction: rtl;\n}\n.ant-select-dropdown-rtl .ant-select-item-option-grouped {\n padding-right: 24px;\n padding-left: 12px;\n}\n.ant-select-rtl.ant-select-multiple.ant-select-show-arrow .ant-select-selector,\n.ant-select-rtl.ant-select-multiple.ant-select-allow-clear .ant-select-selector {\n padding-right: 4px;\n padding-left: 24px;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-item {\n text-align: right;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-item-content {\n margin-right: 0;\n margin-left: 4px;\n text-align: right;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-search-mirror {\n right: 0;\n left: auto;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-placeholder {\n right: 11px;\n left: auto;\n}\n.ant-select-rtl.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder {\n right: 7px;\n}\n.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-item,\n.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n right: 0;\n left: 9px;\n text-align: right;\n}\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-search {\n right: 11px;\n left: 25px;\n}\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-item,\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 0;\n padding-left: 18px;\n}\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search {\n right: 6px;\n}\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 0;\n padding-left: 21px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-empty {\n margin: 0 8px;\n font-size: 14px;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-empty-image {\n height: 100px;\n margin-bottom: 8px;\n}\n.ant-empty-image img {\n height: 100%;\n}\n.ant-empty-image svg {\n height: 100%;\n margin: auto;\n}\n.ant-empty-footer {\n margin-top: 16px;\n}\n.ant-empty-normal {\n margin: 32px 0;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-empty-normal .ant-empty-image {\n height: 40px;\n}\n.ant-empty-small {\n margin: 8px 0;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-empty-small .ant-empty-image {\n height: 35px;\n}\n.ant-empty-img-default-ellipse {\n fill: #f5f5f5;\n fill-opacity: 0.8;\n}\n.ant-empty-img-default-path-1 {\n fill: #aeb8c2;\n}\n.ant-empty-img-default-path-2 {\n fill: url(#linearGradient-1);\n}\n.ant-empty-img-default-path-3 {\n fill: #f5f5f7;\n}\n.ant-empty-img-default-path-4 {\n fill: #dce0e6;\n}\n.ant-empty-img-default-path-5 {\n fill: #dce0e6;\n}\n.ant-empty-img-default-g {\n fill: #fff;\n}\n.ant-empty-img-simple-ellipse {\n fill: #f5f5f5;\n}\n.ant-empty-img-simple-g {\n stroke: #d9d9d9;\n}\n.ant-empty-img-simple-path {\n fill: #fafafa;\n}\n.ant-empty-rtl {\n direction: rtl;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-avatar {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n overflow: hidden;\n color: #fff;\n white-space: nowrap;\n text-align: center;\n vertical-align: middle;\n background: #ccc;\n width: 32px;\n height: 32px;\n line-height: 32px;\n border-radius: 50%;\n}\n.ant-avatar-image {\n background: transparent;\n}\n.ant-avatar .ant-image-img {\n display: block;\n}\n.ant-avatar-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar.ant-avatar-icon {\n font-size: 18px;\n}\n.ant-avatar.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n border-radius: 50%;\n}\n.ant-avatar-lg-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar-lg.ant-avatar-icon {\n font-size: 24px;\n}\n.ant-avatar-lg.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 50%;\n}\n.ant-avatar-sm-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar-sm.ant-avatar-icon {\n font-size: 14px;\n}\n.ant-avatar-sm.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-square {\n border-radius: 2px;\n}\n.ant-avatar > img {\n display: block;\n width: 100%;\n height: 100%;\n -o-object-fit: cover;\n object-fit: cover;\n}\n.ant-avatar-group {\n display: inline-flex;\n}\n.ant-avatar-group .ant-avatar {\n border: 1px solid #fff;\n}\n.ant-avatar-group .ant-avatar:not(:first-child) {\n margin-left: -8px;\n}\n.ant-avatar-group-popover .ant-avatar + .ant-avatar {\n margin-left: 3px;\n}\n.ant-avatar-group-rtl .ant-avatar:not(:first-child) {\n margin-right: -8px;\n margin-left: 0;\n}\n.ant-avatar-group-popover.ant-popover-rtl .ant-avatar + .ant-avatar {\n margin-right: 3px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-popover {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1030;\n font-weight: normal;\n white-space: normal;\n text-align: left;\n cursor: auto;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n}\n.ant-popover::after {\n position: absolute;\n background: rgba(255, 255, 255, 0.01);\n content: '';\n}\n.ant-popover-hidden {\n display: none;\n}\n.ant-popover-placement-top,\n.ant-popover-placement-topLeft,\n.ant-popover-placement-topRight {\n padding-bottom: 10px;\n}\n.ant-popover-placement-right,\n.ant-popover-placement-rightTop,\n.ant-popover-placement-rightBottom {\n padding-left: 10px;\n}\n.ant-popover-placement-bottom,\n.ant-popover-placement-bottomLeft,\n.ant-popover-placement-bottomRight {\n padding-top: 10px;\n}\n.ant-popover-placement-left,\n.ant-popover-placement-leftTop,\n.ant-popover-placement-leftBottom {\n padding-right: 10px;\n}\n.ant-popover-inner {\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n box-shadow: 0 0 8px rgba(0, 0, 0, 0.15) \\9;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .ant-popover {\n /* IE10+ */\n }\n .ant-popover-inner {\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n }\n}\n.ant-popover-title {\n min-width: 177px;\n min-height: 32px;\n margin: 0;\n padding: 5px 16px 4px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-popover-inner-content {\n padding: 12px 16px;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-popover-message {\n position: relative;\n padding: 4px 0 12px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-popover-message > .anticon {\n position: absolute;\n top: 8.0005px;\n color: #faad14;\n font-size: 14px;\n}\n.ant-popover-message-title {\n padding-left: 22px;\n}\n.ant-popover-buttons {\n margin-bottom: 4px;\n text-align: right;\n}\n.ant-popover-buttons button {\n margin-left: 8px;\n}\n.ant-popover-arrow {\n position: absolute;\n display: block;\n width: 8.48528137px;\n height: 8.48528137px;\n background: transparent;\n border-style: solid;\n border-width: 4.24264069px;\n transform: rotate(45deg);\n}\n.ant-popover-placement-top > .ant-popover-content > .ant-popover-arrow,\n.ant-popover-placement-topLeft > .ant-popover-content > .ant-popover-arrow,\n.ant-popover-placement-topRight > .ant-popover-content > .ant-popover-arrow {\n bottom: 6.2px;\n border-top-color: transparent;\n border-right-color: #fff;\n border-bottom-color: #fff;\n border-left-color: transparent;\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n}\n.ant-popover-placement-top > .ant-popover-content > .ant-popover-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n.ant-popover-placement-topLeft > .ant-popover-content > .ant-popover-arrow {\n left: 16px;\n}\n.ant-popover-placement-topRight > .ant-popover-content > .ant-popover-arrow {\n right: 16px;\n}\n.ant-popover-placement-right > .ant-popover-content > .ant-popover-arrow,\n.ant-popover-placement-rightTop > .ant-popover-content > .ant-popover-arrow,\n.ant-popover-placement-rightBottom > .ant-popover-content > .ant-popover-arrow {\n left: 6px;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: #fff;\n border-left-color: #fff;\n box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07);\n}\n.ant-popover-placement-right > .ant-popover-content > .ant-popover-arrow {\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n}\n.ant-popover-placement-rightTop > .ant-popover-content > .ant-popover-arrow {\n top: 12px;\n}\n.ant-popover-placement-rightBottom > .ant-popover-content > .ant-popover-arrow {\n bottom: 12px;\n}\n.ant-popover-placement-bottom > .ant-popover-content > .ant-popover-arrow,\n.ant-popover-placement-bottomLeft > .ant-popover-content > .ant-popover-arrow,\n.ant-popover-placement-bottomRight > .ant-popover-content > .ant-popover-arrow {\n top: 6px;\n border-top-color: #fff;\n border-right-color: transparent;\n border-bottom-color: transparent;\n border-left-color: #fff;\n box-shadow: -2px -2px 5px rgba(0, 0, 0, 0.06);\n}\n.ant-popover-placement-bottom > .ant-popover-content > .ant-popover-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n.ant-popover-placement-bottomLeft > .ant-popover-content > .ant-popover-arrow {\n left: 16px;\n}\n.ant-popover-placement-bottomRight > .ant-popover-content > .ant-popover-arrow {\n right: 16px;\n}\n.ant-popover-placement-left > .ant-popover-content > .ant-popover-arrow,\n.ant-popover-placement-leftTop > .ant-popover-content > .ant-popover-arrow,\n.ant-popover-placement-leftBottom > .ant-popover-content > .ant-popover-arrow {\n right: 6px;\n border-top-color: #fff;\n border-right-color: #fff;\n border-bottom-color: transparent;\n border-left-color: transparent;\n box-shadow: 3px -3px 7px rgba(0, 0, 0, 0.07);\n}\n.ant-popover-placement-left > .ant-popover-content > .ant-popover-arrow {\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n}\n.ant-popover-placement-leftTop > .ant-popover-content > .ant-popover-arrow {\n top: 12px;\n}\n.ant-popover-placement-leftBottom > .ant-popover-content > .ant-popover-arrow {\n bottom: 12px;\n}\n.ant-popover-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-popover-rtl .ant-popover-message-title {\n padding-right: 22px;\n padding-left: 16px;\n}\n.ant-popover-rtl .ant-popover-buttons {\n text-align: left;\n}\n.ant-popover-rtl .ant-popover-buttons button {\n margin-right: 8px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-back-top {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n right: 100px;\n bottom: 50px;\n z-index: 10;\n width: 40px;\n height: 40px;\n cursor: pointer;\n}\n.ant-back-top:empty {\n display: none;\n}\n.ant-back-top-rtl {\n right: auto;\n left: 100px;\n direction: rtl;\n}\n.ant-back-top-content {\n width: 40px;\n height: 40px;\n overflow: hidden;\n color: #fff;\n text-align: center;\n background-color: rgba(0, 0, 0, 0.45);\n border-radius: 20px;\n transition: all 0.3s;\n}\n.ant-back-top-content:hover {\n background-color: rgba(0, 0, 0, 0.85);\n transition: all 0.3s;\n}\n.ant-back-top-icon {\n font-size: 24px;\n line-height: 40px;\n}\n@media screen and (max-width: 768px) {\n .ant-back-top {\n right: 60px;\n }\n}\n@media screen and (max-width: 480px) {\n .ant-back-top {\n right: 20px;\n }\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-badge {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n line-height: 1;\n}\n.ant-badge-count {\n z-index: auto;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n color: #fff;\n font-weight: normal;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n text-align: center;\n background: #ff4d4f;\n border-radius: 10px;\n box-shadow: 0 0 0 1px #fff;\n}\n.ant-badge-count a,\n.ant-badge-count a:hover {\n color: #fff;\n}\n.ant-badge-count-sm {\n min-width: 14px;\n height: 14px;\n padding: 0;\n font-size: 12px;\n line-height: 14px;\n border-radius: 7px;\n}\n.ant-badge-multiple-words {\n padding: 0 8px;\n}\n.ant-badge-dot {\n z-index: auto;\n width: 6px;\n min-width: 6px;\n height: 6px;\n background: #ff4d4f;\n border-radius: 100%;\n box-shadow: 0 0 0 1px #fff;\n}\n.ant-badge-count,\n.ant-badge-dot,\n.ant-badge .ant-scroll-number-custom-component {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n transform-origin: 100% 0%;\n}\n.ant-badge-count.anticon-spin,\n.ant-badge-dot.anticon-spin,\n.ant-badge .ant-scroll-number-custom-component.anticon-spin {\n -webkit-animation: antBadgeLoadingCircle 1s infinite linear;\n animation: antBadgeLoadingCircle 1s infinite linear;\n}\n.ant-badge-status {\n line-height: inherit;\n vertical-align: baseline;\n}\n.ant-badge-status-dot {\n position: relative;\n top: -1px;\n display: inline-block;\n width: 6px;\n height: 6px;\n vertical-align: middle;\n border-radius: 50%;\n}\n.ant-badge-status-success {\n background-color: #52c41a;\n}\n.ant-badge-status-processing {\n position: relative;\n background-color: #1890ff;\n}\n.ant-badge-status-processing::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #1890ff;\n border-radius: 50%;\n -webkit-animation: antStatusProcessing 1.2s infinite ease-in-out;\n animation: antStatusProcessing 1.2s infinite ease-in-out;\n content: '';\n}\n.ant-badge-status-default {\n background-color: #d9d9d9;\n}\n.ant-badge-status-error {\n background-color: #ff4d4f;\n}\n.ant-badge-status-warning {\n background-color: #faad14;\n}\n.ant-badge-status-pink {\n background: #eb2f96;\n}\n.ant-badge-status-magenta {\n background: #eb2f96;\n}\n.ant-badge-status-red {\n background: #f5222d;\n}\n.ant-badge-status-volcano {\n background: #fa541c;\n}\n.ant-badge-status-orange {\n background: #fa8c16;\n}\n.ant-badge-status-yellow {\n background: #fadb14;\n}\n.ant-badge-status-gold {\n background: #faad14;\n}\n.ant-badge-status-cyan {\n background: #13c2c2;\n}\n.ant-badge-status-lime {\n background: #a0d911;\n}\n.ant-badge-status-green {\n background: #52c41a;\n}\n.ant-badge-status-blue {\n background: #1890ff;\n}\n.ant-badge-status-geekblue {\n background: #2f54eb;\n}\n.ant-badge-status-purple {\n background: #722ed1;\n}\n.ant-badge-status-text {\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-badge-zoom-appear,\n.ant-badge-zoom-enter {\n -webkit-animation: antZoomBadgeIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n animation: antZoomBadgeIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n}\n.ant-badge-zoom-leave {\n -webkit-animation: antZoomBadgeOut 0.3s cubic-bezier(0.71, -0.46, 0.88, 0.6);\n animation: antZoomBadgeOut 0.3s cubic-bezier(0.71, -0.46, 0.88, 0.6);\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n}\n.ant-badge-not-a-wrapper .ant-badge-zoom-appear,\n.ant-badge-not-a-wrapper .ant-badge-zoom-enter {\n -webkit-animation: antNoWrapperZoomBadgeIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n animation: antNoWrapperZoomBadgeIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n}\n.ant-badge-not-a-wrapper .ant-badge-zoom-leave {\n -webkit-animation: antNoWrapperZoomBadgeOut 0.3s cubic-bezier(0.71, -0.46, 0.88, 0.6);\n animation: antNoWrapperZoomBadgeOut 0.3s cubic-bezier(0.71, -0.46, 0.88, 0.6);\n}\n.ant-badge-not-a-wrapper:not(.ant-badge-status) {\n vertical-align: middle;\n}\n.ant-badge-not-a-wrapper .ant-scroll-number-custom-component {\n transform: none;\n}\n.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,\n.ant-badge-not-a-wrapper .ant-scroll-number {\n position: relative;\n top: auto;\n display: block;\n transform-origin: 50% 50%;\n}\n.ant-badge-not-a-wrapper .ant-badge-count {\n transform: none;\n}\n@-webkit-keyframes antStatusProcessing {\n 0% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n 100% {\n transform: scale(2.4);\n opacity: 0;\n }\n}\n@keyframes antStatusProcessing {\n 0% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n 100% {\n transform: scale(2.4);\n opacity: 0;\n }\n}\n.ant-scroll-number {\n overflow: hidden;\n}\n.ant-scroll-number-only {\n position: relative;\n display: inline-block;\n height: 20px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n -webkit-transform-style: preserve-3d;\n -webkit-backface-visibility: hidden;\n}\n.ant-scroll-number-only > p.ant-scroll-number-only-unit {\n height: 20px;\n margin: 0;\n -webkit-transform-style: preserve-3d;\n -webkit-backface-visibility: hidden;\n}\n.ant-scroll-number-symbol {\n vertical-align: top;\n}\n@-webkit-keyframes antZoomBadgeIn {\n 0% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(50%, -50%);\n }\n}\n@keyframes antZoomBadgeIn {\n 0% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(50%, -50%);\n }\n}\n@-webkit-keyframes antZoomBadgeOut {\n 0% {\n transform: scale(1) translate(50%, -50%);\n }\n 100% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n}\n@keyframes antZoomBadgeOut {\n 0% {\n transform: scale(1) translate(50%, -50%);\n }\n 100% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n}\n@-webkit-keyframes antNoWrapperZoomBadgeIn {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes antNoWrapperZoomBadgeIn {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n }\n}\n@-webkit-keyframes antNoWrapperZoomBadgeOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n opacity: 0;\n }\n}\n@keyframes antNoWrapperZoomBadgeOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n opacity: 0;\n }\n}\n@-webkit-keyframes antBadgeLoadingCircle {\n 0% {\n transform-origin: 50%;\n }\n 100% {\n transform: translate(50%, -50%) rotate(360deg);\n transform-origin: 50%;\n }\n}\n@keyframes antBadgeLoadingCircle {\n 0% {\n transform-origin: 50%;\n }\n 100% {\n transform: translate(50%, -50%) rotate(360deg);\n transform-origin: 50%;\n }\n}\n.ant-ribbon-wrapper {\n position: relative;\n}\n.ant-ribbon {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 8px;\n height: 22px;\n padding: 0 8px;\n color: #fff;\n line-height: 22px;\n white-space: nowrap;\n background-color: #1890ff;\n border-radius: 2px;\n}\n.ant-ribbon-text {\n color: #fff;\n}\n.ant-ribbon-corner {\n position: absolute;\n top: 100%;\n width: 8px;\n height: 8px;\n color: currentColor;\n border: 4px solid;\n transform: scaleY(0.75);\n transform-origin: top;\n}\n.ant-ribbon-corner::after {\n position: absolute;\n top: -4px;\n left: -4px;\n width: inherit;\n height: inherit;\n color: rgba(0, 0, 0, 0.25);\n border: inherit;\n content: '';\n}\n.ant-ribbon-color-pink {\n color: #eb2f96;\n background: #eb2f96;\n}\n.ant-ribbon-color-magenta {\n color: #eb2f96;\n background: #eb2f96;\n}\n.ant-ribbon-color-red {\n color: #f5222d;\n background: #f5222d;\n}\n.ant-ribbon-color-volcano {\n color: #fa541c;\n background: #fa541c;\n}\n.ant-ribbon-color-orange {\n color: #fa8c16;\n background: #fa8c16;\n}\n.ant-ribbon-color-yellow {\n color: #fadb14;\n background: #fadb14;\n}\n.ant-ribbon-color-gold {\n color: #faad14;\n background: #faad14;\n}\n.ant-ribbon-color-cyan {\n color: #13c2c2;\n background: #13c2c2;\n}\n.ant-ribbon-color-lime {\n color: #a0d911;\n background: #a0d911;\n}\n.ant-ribbon-color-green {\n color: #52c41a;\n background: #52c41a;\n}\n.ant-ribbon-color-blue {\n color: #1890ff;\n background: #1890ff;\n}\n.ant-ribbon-color-geekblue {\n color: #2f54eb;\n background: #2f54eb;\n}\n.ant-ribbon-color-purple {\n color: #722ed1;\n background: #722ed1;\n}\n.ant-ribbon.ant-ribbon-placement-end {\n right: -8px;\n border-bottom-right-radius: 0;\n}\n.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner {\n right: 0;\n border-color: currentColor transparent transparent currentColor;\n}\n.ant-ribbon.ant-ribbon-placement-start {\n left: -8px;\n border-bottom-left-radius: 0;\n}\n.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner {\n left: 0;\n border-color: currentColor currentColor transparent transparent;\n}\n.ant-badge-rtl {\n direction: rtl;\n}\n.ant-badge-rtl .ant-badge-count,\n.ant-badge-rtl .ant-badge-dot,\n.ant-badge-rtl .ant-badge .ant-scroll-number-custom-component {\n right: auto;\n left: 0;\n direction: ltr;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n}\n.ant-badge-rtl.ant-badge .ant-scroll-number-custom-component {\n right: auto;\n left: 0;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n}\n.ant-badge-rtl .ant-badge-status-text {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-badge-rtl .ant-badge-zoom-appear,\n.ant-badge-rtl .ant-badge-zoom-enter {\n -webkit-animation-name: antZoomBadgeInRtl;\n animation-name: antZoomBadgeInRtl;\n}\n.ant-badge-rtl .ant-badge-zoom-leave {\n -webkit-animation-name: antZoomBadgeOutRtl;\n animation-name: antZoomBadgeOutRtl;\n}\n.ant-badge-not-a-wrapper .ant-badge-count {\n transform: none;\n}\n.ant-ribbon-rtl {\n direction: rtl;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end {\n right: unset;\n left: -8px;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 0;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner {\n right: unset;\n left: 0;\n border-color: currentColor currentColor transparent transparent;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner::after {\n border-color: currentColor currentColor transparent transparent;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start {\n right: -8px;\n left: unset;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 2px;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner {\n right: 0;\n left: unset;\n border-color: currentColor transparent transparent currentColor;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner::after {\n border-color: currentColor transparent transparent currentColor;\n}\n@-webkit-keyframes antZoomBadgeInRtl {\n 0% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(-50%, -50%);\n }\n}\n@keyframes antZoomBadgeInRtl {\n 0% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(-50%, -50%);\n }\n}\n@-webkit-keyframes antZoomBadgeOutRtl {\n 0% {\n transform: scale(1) translate(-50%, -50%);\n }\n 100% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n}\n@keyframes antZoomBadgeOutRtl {\n 0% {\n transform: scale(1) translate(-50%, -50%);\n }\n 100% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-breadcrumb {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-breadcrumb .anticon {\n font-size: 14px;\n}\n.ant-breadcrumb a {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-breadcrumb a:hover {\n color: #40a9ff;\n}\n.ant-breadcrumb > span:last-child {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-breadcrumb > span:last-child a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-breadcrumb > span:last-child .ant-breadcrumb-separator {\n display: none;\n}\n.ant-breadcrumb-separator {\n margin: 0 8px;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-breadcrumb-link > .anticon + span,\n.ant-breadcrumb-link > .anticon + a {\n margin-left: 4px;\n}\n.ant-breadcrumb-overlay-link > .anticon {\n margin-left: 4px;\n}\n.ant-breadcrumb-rtl {\n direction: rtl;\n}\n.ant-breadcrumb-rtl::before {\n display: table;\n content: '';\n}\n.ant-breadcrumb-rtl::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-breadcrumb-rtl > span {\n float: right;\n}\n.ant-breadcrumb-rtl .ant-breadcrumb-link > .anticon + span,\n.ant-breadcrumb-rtl .ant-breadcrumb-link > .anticon + a {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link > .anticon {\n margin-right: 4px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-menu-item-danger.ant-menu-item {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item:hover,\n.ant-menu-item-danger.ant-menu-item-active {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item:active {\n background: #fff1f0;\n}\n.ant-menu-item-danger.ant-menu-item-selected {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item-selected > a,\n.ant-menu-item-danger.ant-menu-item-selected > a:hover {\n color: #ff4d4f;\n}\n.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {\n background-color: #fff1f0;\n}\n.ant-menu-inline .ant-menu-item-danger.ant-menu-item::after {\n border-right-color: #ff4d4f;\n}\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item,\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover,\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item > a {\n color: #ff4d4f;\n}\n.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {\n color: #fff;\n background-color: #ff4d4f;\n}\n.ant-menu {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n margin-bottom: 0;\n padding-left: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 0;\n text-align: left;\n list-style: none;\n background: #fff;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n transition: background 0.3s, width 0.3s cubic-bezier(0.2, 0, 0, 1) 0s;\n}\n.ant-menu::before {\n display: table;\n content: '';\n}\n.ant-menu::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-menu.ant-menu-root:focus-visible {\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-menu ul,\n.ant-menu ol {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-menu-overflow {\n display: flex;\n}\n.ant-menu-overflow-item {\n flex: none;\n}\n.ant-menu-hidden,\n.ant-menu-submenu-hidden {\n display: none;\n}\n.ant-menu-item-group-title {\n height: 1.5715;\n padding: 8px 16px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n transition: all 0.3s;\n}\n.ant-menu-horizontal .ant-menu-submenu {\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu,\n.ant-menu-submenu-inline {\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.15s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-selected {\n color: #1890ff;\n}\n.ant-menu-item:active,\n.ant-menu-submenu-title:active {\n background: #e6f7ff;\n}\n.ant-menu-submenu .ant-menu-sub {\n cursor: initial;\n transition: background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-item a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-item a:hover {\n color: #1890ff;\n}\n.ant-menu-item a::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: transparent;\n content: '';\n}\n.ant-menu-item > .ant-badge a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-item > .ant-badge a:hover {\n color: #1890ff;\n}\n.ant-menu-item-divider {\n height: 1px;\n overflow: hidden;\n line-height: 0;\n background-color: #f0f0f0;\n}\n.ant-menu-horizontal .ant-menu-item,\n.ant-menu-horizontal .ant-menu-submenu {\n margin-top: -1px;\n}\n.ant-menu-horizontal > .ant-menu-item:hover,\n.ant-menu-horizontal > .ant-menu-item-active,\n.ant-menu-horizontal > .ant-menu-submenu .ant-menu-submenu-title:hover {\n background-color: transparent;\n}\n.ant-menu-item-selected {\n color: #1890ff;\n}\n.ant-menu-item-selected a,\n.ant-menu-item-selected a:hover {\n color: #1890ff;\n}\n.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {\n background-color: #e6f7ff;\n}\n.ant-menu-inline,\n.ant-menu-vertical,\n.ant-menu-vertical-left {\n border-right: 1px solid #f0f0f0;\n}\n.ant-menu-vertical-right {\n border-left: 1px solid #f0f0f0;\n}\n.ant-menu-vertical.ant-menu-sub,\n.ant-menu-vertical-left.ant-menu-sub,\n.ant-menu-vertical-right.ant-menu-sub {\n min-width: 160px;\n max-height: calc(100vh - 100px);\n padding: 0;\n overflow: hidden;\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub:not([class*='-active']),\n.ant-menu-vertical-left.ant-menu-sub:not([class*='-active']),\n.ant-menu-vertical-right.ant-menu-sub:not([class*='-active']) {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.ant-menu-vertical.ant-menu-sub .ant-menu-item,\n.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,\n.ant-menu-vertical-right.ant-menu-sub .ant-menu-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub .ant-menu-item::after,\n.ant-menu-vertical-left.ant-menu-sub .ant-menu-item::after,\n.ant-menu-vertical-right.ant-menu-sub .ant-menu-item::after {\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical-left.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical-right.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-vertical-left.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-vertical-right.ant-menu-sub > .ant-menu-submenu {\n transform-origin: 0 0;\n}\n.ant-menu-horizontal.ant-menu-sub {\n min-width: 114px;\n}\n.ant-menu-horizontal .ant-menu-item,\n.ant-menu-horizontal .ant-menu-submenu-title {\n transition: border-color 0.3s, background 0.3s;\n}\n.ant-menu-item,\n.ant-menu-submenu-title {\n position: relative;\n display: block;\n margin: 0;\n padding: 0 20px;\n white-space: nowrap;\n cursor: pointer;\n transition: border-color 0.3s, background 0.3s, padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-item .ant-menu-item-icon,\n.ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu-item .anticon,\n.ant-menu-submenu-title .anticon {\n min-width: 14px;\n font-size: 14px;\n transition: font-size 0.15s cubic-bezier(0.215, 0.61, 0.355, 1), margin 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), color 0.3s;\n}\n.ant-menu-item .ant-menu-item-icon + span,\n.ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu-item .anticon + span,\n.ant-menu-submenu-title .anticon + span {\n margin-left: 10px;\n opacity: 1;\n transition: opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), margin 0.3s, color 0.3s;\n}\n.ant-menu-item .ant-menu-item-icon.svg,\n.ant-menu-submenu-title .ant-menu-item-icon.svg {\n vertical-align: -0.125em;\n}\n.ant-menu-item.ant-menu-item-only-child > .anticon,\n.ant-menu-submenu-title.ant-menu-item-only-child > .anticon,\n.ant-menu-item.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-submenu-title.ant-menu-item-only-child > .ant-menu-item-icon {\n margin-right: 0;\n}\n.ant-menu-item:focus-visible,\n.ant-menu-submenu-title:focus-visible {\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-menu > .ant-menu-item-divider {\n height: 1px;\n margin: 1px 0;\n padding: 0;\n overflow: hidden;\n line-height: 0;\n background-color: #f0f0f0;\n}\n.ant-menu-submenu-popup {\n position: absolute;\n z-index: 1050;\n background: transparent;\n border-radius: 2px;\n box-shadow: none;\n transform-origin: 0 0;\n}\n.ant-menu-submenu-popup::before {\n position: absolute;\n top: -7px;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n opacity: 0.0001;\n content: ' ';\n}\n.ant-menu-submenu-placement-rightTop::before {\n top: 0;\n left: -7px;\n}\n.ant-menu-submenu > .ant-menu {\n background-color: #fff;\n border-radius: 2px;\n}\n.ant-menu-submenu > .ant-menu-submenu-title::after {\n transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-popup > .ant-menu {\n background-color: #fff;\n}\n.ant-menu-submenu-expand-icon,\n.ant-menu-submenu-arrow {\n position: absolute;\n top: 50%;\n right: 16px;\n width: 10px;\n color: rgba(0, 0, 0, 0.85);\n transform: translateY(-50%);\n transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-arrow::before,\n.ant-menu-submenu-arrow::after {\n position: absolute;\n width: 6px;\n height: 1.5px;\n background-color: currentColor;\n border-radius: 2px;\n transition: background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), top 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n content: '';\n}\n.ant-menu-submenu-arrow::before {\n transform: rotate(45deg) translateY(-2.5px);\n}\n.ant-menu-submenu-arrow::after {\n transform: rotate(-45deg) translateY(2.5px);\n}\n.ant-menu-submenu:hover > .ant-menu-submenu-title > .ant-menu-submenu-expand-icon,\n.ant-menu-submenu:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n color: #1890ff;\n}\n.ant-menu-inline-collapsed .ant-menu-submenu-arrow::before,\n.ant-menu-submenu-inline .ant-menu-submenu-arrow::before {\n transform: rotate(-45deg) translateX(2.5px);\n}\n.ant-menu-inline-collapsed .ant-menu-submenu-arrow::after,\n.ant-menu-submenu-inline .ant-menu-submenu-arrow::after {\n transform: rotate(45deg) translateX(-2.5px);\n}\n.ant-menu-submenu-horizontal .ant-menu-submenu-arrow {\n display: none;\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n transform: translateY(-2px);\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n transform: rotate(-45deg) translateX(-2.5px);\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before {\n transform: rotate(45deg) translateX(2.5px);\n}\n.ant-menu-vertical .ant-menu-submenu-selected,\n.ant-menu-vertical-left .ant-menu-submenu-selected,\n.ant-menu-vertical-right .ant-menu-submenu-selected {\n color: #1890ff;\n}\n.ant-menu-horizontal {\n line-height: 46px;\n border: 0;\n border-bottom: 1px solid #f0f0f0;\n box-shadow: none;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu {\n margin-top: -1px;\n margin-bottom: 0;\n padding: 0 20px;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-active,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-active,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-open,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-open,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-selected,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected {\n color: #1890ff;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-active::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-active::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-open::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-open::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-selected::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected::after {\n border-bottom: 2px solid #1890ff;\n}\n.ant-menu-horizontal > .ant-menu-item,\n.ant-menu-horizontal > .ant-menu-submenu {\n position: relative;\n top: 1px;\n display: inline-block;\n vertical-align: bottom;\n}\n.ant-menu-horizontal > .ant-menu-item::after,\n.ant-menu-horizontal > .ant-menu-submenu::after {\n position: absolute;\n right: 20px;\n bottom: 0;\n left: 20px;\n border-bottom: 2px solid transparent;\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n content: '';\n}\n.ant-menu-horizontal > .ant-menu-submenu > .ant-menu-submenu-title {\n padding: 0;\n}\n.ant-menu-horizontal > .ant-menu-item a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-horizontal > .ant-menu-item a:hover {\n color: #1890ff;\n}\n.ant-menu-horizontal > .ant-menu-item a::before {\n bottom: -2px;\n}\n.ant-menu-horizontal > .ant-menu-item-selected a {\n color: #1890ff;\n}\n.ant-menu-horizontal::after {\n display: block;\n clear: both;\n height: 0;\n content: '\\20';\n}\n.ant-menu-vertical .ant-menu-item,\n.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-inline .ant-menu-item {\n position: relative;\n}\n.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-vertical-right .ant-menu-item::after,\n.ant-menu-inline .ant-menu-item::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 3px solid #1890ff;\n transform: scaleY(0.0001);\n opacity: 0;\n transition: transform 0.15s cubic-bezier(0.215, 0.61, 0.355, 1), opacity 0.15s cubic-bezier(0.215, 0.61, 0.355, 1);\n content: '';\n}\n.ant-menu-vertical .ant-menu-item,\n.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-inline .ant-menu-item,\n.ant-menu-vertical .ant-menu-submenu-title,\n.ant-menu-vertical-left .ant-menu-submenu-title,\n.ant-menu-vertical-right .ant-menu-submenu-title,\n.ant-menu-inline .ant-menu-submenu-title {\n height: 40px;\n margin-top: 4px;\n margin-bottom: 4px;\n padding: 0 16px;\n overflow: hidden;\n line-height: 40px;\n text-overflow: ellipsis;\n}\n.ant-menu-vertical .ant-menu-submenu,\n.ant-menu-vertical-left .ant-menu-submenu,\n.ant-menu-vertical-right .ant-menu-submenu,\n.ant-menu-inline .ant-menu-submenu {\n padding-bottom: 0.02px;\n}\n.ant-menu-vertical .ant-menu-item:not(:last-child),\n.ant-menu-vertical-left .ant-menu-item:not(:last-child),\n.ant-menu-vertical-right .ant-menu-item:not(:last-child),\n.ant-menu-inline .ant-menu-item:not(:last-child) {\n margin-bottom: 8px;\n}\n.ant-menu-vertical > .ant-menu-item,\n.ant-menu-vertical-left > .ant-menu-item,\n.ant-menu-vertical-right > .ant-menu-item,\n.ant-menu-inline > .ant-menu-item,\n.ant-menu-vertical > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-vertical-left > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-vertical-right > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title {\n height: 40px;\n line-height: 40px;\n}\n.ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,\n.ant-menu-vertical .ant-menu-submenu-title {\n padding-right: 34px;\n}\n.ant-menu-inline {\n width: 100%;\n}\n.ant-menu-inline .ant-menu-selected::after,\n.ant-menu-inline .ant-menu-item-selected::after {\n transform: scaleY(1);\n opacity: 1;\n transition: transform 0.15s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.15s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-inline .ant-menu-item,\n.ant-menu-inline .ant-menu-submenu-title {\n width: calc(100% + 1px);\n}\n.ant-menu-inline .ant-menu-item-group-list .ant-menu-submenu-title,\n.ant-menu-inline .ant-menu-submenu-title {\n padding-right: 34px;\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title {\n display: flex;\n align-items: center;\n transition: border-color 0.3s, background 0.3s, padding 0.1s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item > .ant-menu-title-content,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title > .ant-menu-title-content {\n flex: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item > *,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title > * {\n flex: none;\n}\n.ant-menu.ant-menu-inline-collapsed {\n width: 80px;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title {\n left: 0;\n padding: 0 calc(50% - 16px / 2);\n text-overflow: clip;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-submenu-arrow {\n opacity: 0;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .anticon {\n margin: 0;\n font-size: 16px;\n line-height: 40px;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .anticon + span {\n display: inline-block;\n opacity: 0;\n}\n.ant-menu.ant-menu-inline-collapsed .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed .anticon {\n display: inline-block;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip {\n pointer-events: none;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed-tooltip .anticon {\n display: none;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip a {\n color: rgba(255, 255, 255, 0.85);\n}\n.ant-menu.ant-menu-inline-collapsed .ant-menu-item-group-title {\n padding-right: 4px;\n padding-left: 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-menu-item-group-list {\n margin: 0;\n padding: 0;\n}\n.ant-menu-item-group-list .ant-menu-item,\n.ant-menu-item-group-list .ant-menu-submenu-title {\n padding: 0 16px 0 28px;\n}\n.ant-menu-root.ant-menu-vertical,\n.ant-menu-root.ant-menu-vertical-left,\n.ant-menu-root.ant-menu-vertical-right,\n.ant-menu-root.ant-menu-inline {\n box-shadow: none;\n}\n.ant-menu-root.ant-menu-inline-collapsed .ant-menu-item > .ant-menu-inline-collapsed-noicon,\n.ant-menu-root.ant-menu-inline-collapsed .ant-menu-submenu .ant-menu-submenu-title > .ant-menu-inline-collapsed-noicon {\n font-size: 16px;\n text-align: center;\n}\n.ant-menu-sub.ant-menu-inline {\n padding: 0;\n background: #fafafa;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n.ant-menu-sub.ant-menu-inline > .ant-menu-item,\n.ant-menu-sub.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title {\n height: 40px;\n line-height: 40px;\n list-style-position: inside;\n list-style-type: disc;\n}\n.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title {\n padding-left: 32px;\n}\n.ant-menu-item-disabled,\n.ant-menu-submenu-disabled {\n color: rgba(0, 0, 0, 0.25) !important;\n background: none;\n cursor: not-allowed;\n}\n.ant-menu-item-disabled::after,\n.ant-menu-submenu-disabled::after {\n border-color: transparent !important;\n}\n.ant-menu-item-disabled a,\n.ant-menu-submenu-disabled a {\n color: rgba(0, 0, 0, 0.25) !important;\n pointer-events: none;\n}\n.ant-menu-item-disabled > .ant-menu-submenu-title,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title {\n color: rgba(0, 0, 0, 0.25) !important;\n cursor: not-allowed;\n}\n.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n background: rgba(0, 0, 0, 0.25) !important;\n}\n.ant-layout-header .ant-menu {\n line-height: inherit;\n}\n.ant-menu-light .ant-menu-item:hover,\n.ant-menu-light .ant-menu-item-active,\n.ant-menu-light .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,\n.ant-menu-light .ant-menu-submenu-active,\n.ant-menu-light .ant-menu-submenu-title:hover {\n color: #1890ff;\n}\n.ant-menu.ant-menu-dark,\n.ant-menu-dark .ant-menu-sub,\n.ant-menu.ant-menu-dark .ant-menu-sub {\n color: rgba(255, 255, 255, 0.65);\n background: #001529;\n}\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow {\n opacity: 0.45;\n transition: all 0.3s;\n}\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::before {\n background: #fff;\n}\n.ant-menu-dark.ant-menu-submenu-popup {\n background: transparent;\n}\n.ant-menu-dark .ant-menu-inline.ant-menu-sub {\n background: #000c17;\n}\n.ant-menu-dark.ant-menu-horizontal {\n border-bottom: 0;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item,\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-submenu {\n top: 0;\n margin-top: 0;\n padding: 0 20px;\n border-color: #001529;\n border-bottom: 0;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item:hover {\n background-color: #1890ff;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item > a::before {\n bottom: 0;\n}\n.ant-menu-dark .ant-menu-item,\n.ant-menu-dark .ant-menu-item-group-title,\n.ant-menu-dark .ant-menu-item > a,\n.ant-menu-dark .ant-menu-item > span > a {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-menu-dark.ant-menu-inline,\n.ant-menu-dark.ant-menu-vertical,\n.ant-menu-dark.ant-menu-vertical-left,\n.ant-menu-dark.ant-menu-vertical-right {\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical-right .ant-menu-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical-right .ant-menu-item::after {\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item,\n.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title {\n width: 100%;\n}\n.ant-menu-dark .ant-menu-item:hover,\n.ant-menu-dark .ant-menu-item-active,\n.ant-menu-dark .ant-menu-submenu-active,\n.ant-menu-dark .ant-menu-submenu-open,\n.ant-menu-dark .ant-menu-submenu-selected,\n.ant-menu-dark .ant-menu-submenu-title:hover {\n color: #fff;\n background-color: transparent;\n}\n.ant-menu-dark .ant-menu-item:hover > a,\n.ant-menu-dark .ant-menu-item-active > a,\n.ant-menu-dark .ant-menu-submenu-active > a,\n.ant-menu-dark .ant-menu-submenu-open > a,\n.ant-menu-dark .ant-menu-submenu-selected > a,\n.ant-menu-dark .ant-menu-submenu-title:hover > a,\n.ant-menu-dark .ant-menu-item:hover > span > a,\n.ant-menu-dark .ant-menu-item-active > span > a,\n.ant-menu-dark .ant-menu-submenu-active > span > a,\n.ant-menu-dark .ant-menu-submenu-open > span > a,\n.ant-menu-dark .ant-menu-submenu-selected > span > a,\n.ant-menu-dark .ant-menu-submenu-title:hover > span > a {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n opacity: 1;\n}\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before {\n background: #fff;\n}\n.ant-menu-dark .ant-menu-item:hover {\n background-color: transparent;\n}\n.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected {\n background-color: #1890ff;\n}\n.ant-menu-dark .ant-menu-item-selected {\n color: #fff;\n border-right: 0;\n}\n.ant-menu-dark .ant-menu-item-selected::after {\n border-right: 0;\n}\n.ant-menu-dark .ant-menu-item-selected > a,\n.ant-menu-dark .ant-menu-item-selected > span > a,\n.ant-menu-dark .ant-menu-item-selected > a:hover,\n.ant-menu-dark .ant-menu-item-selected > span > a:hover {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon,\n.ant-menu-dark .ant-menu-item-selected .anticon {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon + span,\n.ant-menu-dark .ant-menu-item-selected .anticon + span {\n color: #fff;\n}\n.ant-menu.ant-menu-dark .ant-menu-item-selected,\n.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected {\n background-color: #1890ff;\n}\n.ant-menu-dark .ant-menu-item-disabled,\n.ant-menu-dark .ant-menu-submenu-disabled,\n.ant-menu-dark .ant-menu-item-disabled > a,\n.ant-menu-dark .ant-menu-submenu-disabled > a,\n.ant-menu-dark .ant-menu-item-disabled > span > a,\n.ant-menu-dark .ant-menu-submenu-disabled > span > a {\n color: rgba(255, 255, 255, 0.35) !important;\n opacity: 0.8;\n}\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title {\n color: rgba(255, 255, 255, 0.35) !important;\n}\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n background: rgba(255, 255, 255, 0.35) !important;\n}\n.ant-menu.ant-menu-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-menu-rtl .ant-menu-item-group-title {\n text-align: right;\n}\n.ant-menu-rtl.ant-menu-inline,\n.ant-menu-rtl.ant-menu-vertical {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-menu-rtl.ant-menu-dark.ant-menu-inline,\n.ant-menu-rtl.ant-menu-dark.ant-menu-vertical {\n border-left: none;\n}\n.ant-menu-rtl.ant-menu-vertical.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub > .ant-menu-submenu {\n transform-origin: top right;\n}\n.ant-menu-rtl .ant-menu-item .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-item .anticon,\n.ant-menu-rtl .ant-menu-submenu-title .anticon {\n margin-right: auto;\n margin-left: 10px;\n}\n.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child > .anticon,\n.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child > .anticon {\n margin-left: 0;\n}\n.ant-menu-submenu-rtl.ant-menu-submenu-popup {\n transform-origin: 100% 0;\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow {\n right: auto;\n left: 16px;\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow::before {\n transform: rotate(-45deg) translateY(-2px);\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow::after {\n transform: rotate(45deg) translateY(2px);\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-inline .ant-menu-item::after {\n right: auto;\n left: 0;\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-rtl.ant-menu-inline .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title {\n text-align: right;\n}\n.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title {\n padding-right: 0;\n padding-left: 34px;\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title {\n padding-right: 16px;\n padding-left: 34px;\n}\n.ant-menu-rtl.ant-menu-inline-collapsed.ant-menu-vertical .ant-menu-submenu-title {\n padding: 0 calc(50% - 16px / 2);\n}\n.ant-menu-rtl .ant-menu-item-group-list .ant-menu-item,\n.ant-menu-rtl .ant-menu-item-group-list .ant-menu-submenu-title {\n padding: 0 28px 0 16px;\n}\n.ant-menu-sub.ant-menu-inline {\n border: 0;\n}\n.ant-menu-rtl.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title {\n padding-right: 32px;\n padding-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-tooltip {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n z-index: 1070;\n display: block;\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 250px;\n visibility: visible;\n}\n.ant-tooltip-hidden {\n display: none;\n}\n.ant-tooltip-placement-top,\n.ant-tooltip-placement-topLeft,\n.ant-tooltip-placement-topRight {\n padding-bottom: 8px;\n}\n.ant-tooltip-placement-right,\n.ant-tooltip-placement-rightTop,\n.ant-tooltip-placement-rightBottom {\n padding-left: 8px;\n}\n.ant-tooltip-placement-bottom,\n.ant-tooltip-placement-bottomLeft,\n.ant-tooltip-placement-bottomRight {\n padding-top: 8px;\n}\n.ant-tooltip-placement-left,\n.ant-tooltip-placement-leftTop,\n.ant-tooltip-placement-leftBottom {\n padding-right: 8px;\n}\n.ant-tooltip-inner {\n min-width: 30px;\n min-height: 32px;\n padding: 6px 8px;\n color: #fff;\n text-align: left;\n text-decoration: none;\n word-wrap: break-word;\n background-color: rgba(0, 0, 0, 0.75);\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-tooltip-arrow {\n position: absolute;\n display: block;\n width: 13.07106781px;\n height: 13.07106781px;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n}\n.ant-tooltip-arrow-content {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n width: 5px;\n height: 5px;\n margin: auto;\n background-color: rgba(0, 0, 0, 0.75);\n content: '';\n pointer-events: auto;\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow,\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow,\n.ant-tooltip-placement-topRight .ant-tooltip-arrow {\n bottom: -5.07106781px;\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow-content,\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow-content,\n.ant-tooltip-placement-topRight .ant-tooltip-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateY(-6.53553391px) rotate(45deg);\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow {\n left: 50%;\n transform: translateX(-50%);\n}\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow {\n left: 13px;\n}\n.ant-tooltip-placement-topRight .ant-tooltip-arrow {\n right: 13px;\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow,\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow,\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow {\n left: -5.07106781px;\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow-content,\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow-content,\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content {\n box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(6.53553391px) rotate(45deg);\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow {\n top: 50%;\n transform: translateY(-50%);\n}\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow {\n top: 5px;\n}\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow {\n bottom: 5px;\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow,\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow,\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow {\n right: -5.07106781px;\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow-content,\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow-content,\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow-content {\n box-shadow: 3px -3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(-6.53553391px) rotate(45deg);\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow {\n top: 50%;\n transform: translateY(-50%);\n}\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow {\n top: 5px;\n}\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow {\n bottom: 5px;\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow,\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow {\n top: -5.07106781px;\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow-content,\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow-content,\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow-content {\n box-shadow: -3px -3px 7px rgba(0, 0, 0, 0.07);\n transform: translateY(6.53553391px) rotate(45deg);\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow {\n left: 50%;\n transform: translateX(-50%);\n}\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow {\n left: 13px;\n}\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow {\n right: 13px;\n}\n.ant-tooltip-pink .ant-tooltip-inner {\n background-color: #eb2f96;\n}\n.ant-tooltip-pink .ant-tooltip-arrow-content {\n background-color: #eb2f96;\n}\n.ant-tooltip-magenta .ant-tooltip-inner {\n background-color: #eb2f96;\n}\n.ant-tooltip-magenta .ant-tooltip-arrow-content {\n background-color: #eb2f96;\n}\n.ant-tooltip-red .ant-tooltip-inner {\n background-color: #f5222d;\n}\n.ant-tooltip-red .ant-tooltip-arrow-content {\n background-color: #f5222d;\n}\n.ant-tooltip-volcano .ant-tooltip-inner {\n background-color: #fa541c;\n}\n.ant-tooltip-volcano .ant-tooltip-arrow-content {\n background-color: #fa541c;\n}\n.ant-tooltip-orange .ant-tooltip-inner {\n background-color: #fa8c16;\n}\n.ant-tooltip-orange .ant-tooltip-arrow-content {\n background-color: #fa8c16;\n}\n.ant-tooltip-yellow .ant-tooltip-inner {\n background-color: #fadb14;\n}\n.ant-tooltip-yellow .ant-tooltip-arrow-content {\n background-color: #fadb14;\n}\n.ant-tooltip-gold .ant-tooltip-inner {\n background-color: #faad14;\n}\n.ant-tooltip-gold .ant-tooltip-arrow-content {\n background-color: #faad14;\n}\n.ant-tooltip-cyan .ant-tooltip-inner {\n background-color: #13c2c2;\n}\n.ant-tooltip-cyan .ant-tooltip-arrow-content {\n background-color: #13c2c2;\n}\n.ant-tooltip-lime .ant-tooltip-inner {\n background-color: #a0d911;\n}\n.ant-tooltip-lime .ant-tooltip-arrow-content {\n background-color: #a0d911;\n}\n.ant-tooltip-green .ant-tooltip-inner {\n background-color: #52c41a;\n}\n.ant-tooltip-green .ant-tooltip-arrow-content {\n background-color: #52c41a;\n}\n.ant-tooltip-blue .ant-tooltip-inner {\n background-color: #1890ff;\n}\n.ant-tooltip-blue .ant-tooltip-arrow-content {\n background-color: #1890ff;\n}\n.ant-tooltip-geekblue .ant-tooltip-inner {\n background-color: #2f54eb;\n}\n.ant-tooltip-geekblue .ant-tooltip-arrow-content {\n background-color: #2f54eb;\n}\n.ant-tooltip-purple .ant-tooltip-inner {\n background-color: #722ed1;\n}\n.ant-tooltip-purple .ant-tooltip-arrow-content {\n background-color: #722ed1;\n}\n.ant-tooltip-rtl {\n direction: rtl;\n}\n.ant-tooltip-rtl .ant-tooltip-inner {\n text-align: right;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-dropdown-menu-item.ant-dropdown-menu-item-danger {\n color: #ff4d4f;\n}\n.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover {\n color: #fff;\n background-color: #ff4d4f;\n}\n.ant-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n display: block;\n}\n.ant-dropdown::before {\n position: absolute;\n top: -4px;\n right: 0;\n bottom: -4px;\n left: -7px;\n z-index: -9999;\n opacity: 0.0001;\n content: ' ';\n}\n.ant-dropdown-wrap {\n position: relative;\n}\n.ant-dropdown-wrap .ant-btn > .anticon-down {\n font-size: 10px;\n}\n.ant-dropdown-wrap .anticon-down::before {\n transition: transform 0.2s;\n}\n.ant-dropdown-wrap-open .anticon-down::before {\n transform: rotate(180deg);\n}\n.ant-dropdown-hidden,\n.ant-dropdown-menu-hidden,\n.ant-dropdown-menu-submenu-hidden {\n display: none;\n}\n.ant-dropdown-show-arrow.ant-dropdown-placement-topCenter,\n.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,\n.ant-dropdown-show-arrow.ant-dropdown-placement-topRight {\n padding-bottom: 10px;\n}\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottomCenter,\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight {\n padding-top: 10px;\n}\n.ant-dropdown-arrow {\n position: absolute;\n z-index: 1;\n display: block;\n width: 8.48528137px;\n height: 8.48528137px;\n background: transparent;\n border-style: solid;\n border-width: 4.24264069px;\n transform: rotate(45deg);\n}\n.ant-dropdown-placement-topCenter > .ant-dropdown-arrow,\n.ant-dropdown-placement-topLeft > .ant-dropdown-arrow,\n.ant-dropdown-placement-topRight > .ant-dropdown-arrow {\n bottom: 6.2px;\n border-top-color: transparent;\n border-right-color: #fff;\n border-bottom-color: #fff;\n border-left-color: transparent;\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n}\n.ant-dropdown-placement-topCenter > .ant-dropdown-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n.ant-dropdown-placement-topLeft > .ant-dropdown-arrow {\n left: 16px;\n}\n.ant-dropdown-placement-topRight > .ant-dropdown-arrow {\n right: 16px;\n}\n.ant-dropdown-placement-bottomCenter > .ant-dropdown-arrow,\n.ant-dropdown-placement-bottomLeft > .ant-dropdown-arrow,\n.ant-dropdown-placement-bottomRight > .ant-dropdown-arrow {\n top: 6px;\n border-top-color: #fff;\n border-right-color: transparent;\n border-bottom-color: transparent;\n border-left-color: #fff;\n box-shadow: -2px -2px 5px rgba(0, 0, 0, 0.06);\n}\n.ant-dropdown-placement-bottomCenter > .ant-dropdown-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n.ant-dropdown-placement-bottomLeft > .ant-dropdown-arrow {\n left: 16px;\n}\n.ant-dropdown-placement-bottomRight > .ant-dropdown-arrow {\n right: 16px;\n}\n.ant-dropdown-menu {\n position: relative;\n margin: 0;\n padding: 4px 0;\n text-align: left;\n list-style-type: none;\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 2px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-dropdown-menu-item-group-title {\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.45);\n transition: all 0.3s;\n}\n.ant-dropdown-menu-submenu-popup {\n position: absolute;\n z-index: 1050;\n background: transparent;\n box-shadow: none;\n transform-origin: 0 0;\n}\n.ant-dropdown-menu-submenu-popup ul,\n.ant-dropdown-menu-submenu-popup li {\n list-style: none;\n}\n.ant-dropdown-menu-submenu-popup ul {\n margin-right: 0.3em;\n margin-left: 0.3em;\n}\n.ant-dropdown-menu-item {\n position: relative;\n display: flex;\n align-items: center;\n}\n.ant-dropdown-menu-item-icon {\n min-width: 12px;\n margin-right: 8px;\n font-size: 12px;\n}\n.ant-dropdown-menu-title-content {\n flex: auto;\n}\n.ant-dropdown-menu-title-content > a {\n color: inherit;\n transition: all 0.3s;\n}\n.ant-dropdown-menu-title-content > a:hover {\n color: inherit;\n}\n.ant-dropdown-menu-title-content > a::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n content: '';\n}\n.ant-dropdown-menu-item,\n.ant-dropdown-menu-submenu-title {\n clear: both;\n margin: 0;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n white-space: nowrap;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-dropdown-menu-item-selected,\n.ant-dropdown-menu-submenu-title-selected {\n color: #1890ff;\n background-color: #e6f7ff;\n}\n.ant-dropdown-menu-item:hover,\n.ant-dropdown-menu-submenu-title:hover {\n background-color: #f5f5f5;\n}\n.ant-dropdown-menu-item-disabled,\n.ant-dropdown-menu-submenu-title-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-dropdown-menu-item-disabled:hover,\n.ant-dropdown-menu-submenu-title-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-dropdown-menu-item-disabled a,\n.ant-dropdown-menu-submenu-title-disabled a {\n pointer-events: none;\n}\n.ant-dropdown-menu-item-divider,\n.ant-dropdown-menu-submenu-title-divider {\n height: 1px;\n margin: 4px 0;\n overflow: hidden;\n line-height: 0;\n background-color: #f0f0f0;\n}\n.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,\n.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon {\n position: absolute;\n right: 8px;\n}\n.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,\n.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon {\n margin-right: 0 !important;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n font-style: normal;\n}\n.ant-dropdown-menu-item-group-list {\n margin: 0 8px;\n padding: 0;\n list-style: none;\n}\n.ant-dropdown-menu-submenu-title {\n padding-right: 24px;\n}\n.ant-dropdown-menu-submenu-vertical {\n position: relative;\n}\n.ant-dropdown-menu-submenu-vertical > .ant-dropdown-menu {\n position: absolute;\n top: 0;\n left: 100%;\n min-width: 100%;\n margin-left: 4px;\n transform-origin: 0 0;\n}\n.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,\n.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title {\n color: #1890ff;\n}\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomCenter,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomCenter,\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight {\n -webkit-animation-name: antSlideUpIn;\n animation-name: antSlideUpIn;\n}\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topCenter,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topCenter,\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topRight,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topRight {\n -webkit-animation-name: antSlideDownIn;\n animation-name: antSlideDownIn;\n}\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomCenter,\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomRight {\n -webkit-animation-name: antSlideUpOut;\n animation-name: antSlideUpOut;\n}\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topCenter,\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topRight {\n -webkit-animation-name: antSlideDownOut;\n animation-name: antSlideDownOut;\n}\n.ant-dropdown-trigger > .anticon.anticon-down,\n.ant-dropdown-link > .anticon.anticon-down,\n.ant-dropdown-button > .anticon.anticon-down {\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-dropdown-button {\n white-space: nowrap;\n}\n.ant-dropdown-button.ant-btn-group > .ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only) {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-dropdown-menu-dark,\n.ant-dropdown-menu-dark .ant-dropdown-menu {\n background: #001529;\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a .ant-dropdown-menu-submenu-arrow::after {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a:hover {\n color: #fff;\n background: transparent;\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected > a {\n color: #fff;\n background: #1890ff;\n}\n.ant-dropdown-rtl {\n direction: rtl;\n}\n.ant-dropdown-rtl.ant-dropdown::before {\n right: -7px;\n left: 0;\n}\n.ant-dropdown-menu.ant-dropdown-menu-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item-group-title {\n direction: rtl;\n text-align: right;\n}\n.ant-dropdown-menu-submenu-popup.ant-dropdown-menu-submenu-rtl {\n transform-origin: 100% 0;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup ul,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup li {\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title {\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-item > span > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title > span > .anticon:first-child {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow {\n right: auto;\n left: 8px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon {\n margin-left: 0 !important;\n transform: scaleX(-1);\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title {\n padding-right: 12px;\n padding-left: 24px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-vertical > .ant-dropdown-menu {\n right: 100%;\n left: 0;\n margin-right: 4px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-btn {\n line-height: 1.5715;\n position: relative;\n display: inline-block;\n font-weight: 400;\n white-space: nowrap;\n text-align: center;\n background-image: none;\n border: 1px solid transparent;\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n touch-action: manipulation;\n height: 32px;\n padding: 4px 15px;\n font-size: 14px;\n border-radius: 2px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-color: #d9d9d9;\n}\n.ant-btn > .anticon {\n line-height: 1;\n}\n.ant-btn,\n.ant-btn:active,\n.ant-btn:focus {\n outline: 0;\n}\n.ant-btn:not([disabled]):hover {\n text-decoration: none;\n}\n.ant-btn:not([disabled]):active {\n outline: 0;\n box-shadow: none;\n}\n.ant-btn[disabled] {\n cursor: not-allowed;\n}\n.ant-btn[disabled] > * {\n pointer-events: none;\n}\n.ant-btn-lg {\n height: 40px;\n padding: 6.4px 15px;\n font-size: 16px;\n border-radius: 2px;\n}\n.ant-btn-sm {\n height: 24px;\n padding: 0px 7px;\n font-size: 14px;\n border-radius: 2px;\n}\n.ant-btn > a:only-child {\n color: currentColor;\n}\n.ant-btn > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:hover,\n.ant-btn:focus {\n color: #40a9ff;\n background: #fff;\n border-color: #40a9ff;\n}\n.ant-btn:hover > a:only-child,\n.ant-btn:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn:hover > a:only-child::after,\n.ant-btn:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:active {\n color: #096dd9;\n background: #fff;\n border-color: #096dd9;\n}\n.ant-btn:active > a:only-child {\n color: currentColor;\n}\n.ant-btn:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn[disabled],\n.ant-btn[disabled]:hover,\n.ant-btn[disabled]:focus,\n.ant-btn[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn[disabled] > a:only-child,\n.ant-btn[disabled]:hover > a:only-child,\n.ant-btn[disabled]:focus > a:only-child,\n.ant-btn[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn[disabled] > a:only-child::after,\n.ant-btn[disabled]:hover > a:only-child::after,\n.ant-btn[disabled]:focus > a:only-child::after,\n.ant-btn[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:hover,\n.ant-btn:focus,\n.ant-btn:active {\n text-decoration: none;\n background: #fff;\n}\n.ant-btn > span {\n display: inline-block;\n}\n.ant-btn-primary {\n color: #fff;\n background: #1890ff;\n border-color: #1890ff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-primary > a:only-child {\n color: currentColor;\n}\n.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary:hover,\n.ant-btn-primary:focus {\n color: #fff;\n background: #40a9ff;\n border-color: #40a9ff;\n}\n.ant-btn-primary:hover > a:only-child,\n.ant-btn-primary:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary:active {\n color: #fff;\n background: #096dd9;\n border-color: #096dd9;\n}\n.ant-btn-primary:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary[disabled],\n.ant-btn-primary[disabled]:hover,\n.ant-btn-primary[disabled]:focus,\n.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-primary[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child) {\n border-right-color: #40a9ff;\n border-left-color: #40a9ff;\n}\n.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled {\n border-color: #d9d9d9;\n}\n.ant-btn-group .ant-btn-primary:first-child:not(:last-child) {\n border-right-color: #40a9ff;\n}\n.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled] {\n border-right-color: #d9d9d9;\n}\n.ant-btn-group .ant-btn-primary:last-child:not(:first-child),\n.ant-btn-group .ant-btn-primary + .ant-btn-primary {\n border-left-color: #40a9ff;\n}\n.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],\n.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] {\n border-left-color: #d9d9d9;\n}\n.ant-btn-ghost {\n color: rgba(0, 0, 0, 0.85);\n background: transparent;\n border-color: #d9d9d9;\n}\n.ant-btn-ghost > a:only-child {\n color: currentColor;\n}\n.ant-btn-ghost > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost:hover,\n.ant-btn-ghost:focus {\n color: #40a9ff;\n background: transparent;\n border-color: #40a9ff;\n}\n.ant-btn-ghost:hover > a:only-child,\n.ant-btn-ghost:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-ghost:hover > a:only-child::after,\n.ant-btn-ghost:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost:active {\n color: #096dd9;\n background: transparent;\n border-color: #096dd9;\n}\n.ant-btn-ghost:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-ghost:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost[disabled],\n.ant-btn-ghost[disabled]:hover,\n.ant-btn-ghost[disabled]:focus,\n.ant-btn-ghost[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-ghost[disabled] > a:only-child,\n.ant-btn-ghost[disabled]:hover > a:only-child,\n.ant-btn-ghost[disabled]:focus > a:only-child,\n.ant-btn-ghost[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-ghost[disabled] > a:only-child::after,\n.ant-btn-ghost[disabled]:hover > a:only-child::after,\n.ant-btn-ghost[disabled]:focus > a:only-child::after,\n.ant-btn-ghost[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-color: #d9d9d9;\n border-style: dashed;\n}\n.ant-btn-dashed > a:only-child {\n color: currentColor;\n}\n.ant-btn-dashed > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed:hover,\n.ant-btn-dashed:focus {\n color: #40a9ff;\n background: #fff;\n border-color: #40a9ff;\n}\n.ant-btn-dashed:hover > a:only-child,\n.ant-btn-dashed:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-dashed:hover > a:only-child::after,\n.ant-btn-dashed:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed:active {\n color: #096dd9;\n background: #fff;\n border-color: #096dd9;\n}\n.ant-btn-dashed:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dashed:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed[disabled],\n.ant-btn-dashed[disabled]:hover,\n.ant-btn-dashed[disabled]:focus,\n.ant-btn-dashed[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dashed[disabled] > a:only-child,\n.ant-btn-dashed[disabled]:hover > a:only-child,\n.ant-btn-dashed[disabled]:focus > a:only-child,\n.ant-btn-dashed[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dashed[disabled] > a:only-child::after,\n.ant-btn-dashed[disabled]:hover > a:only-child::after,\n.ant-btn-dashed[disabled]:focus > a:only-child::after,\n.ant-btn-dashed[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger {\n color: #fff;\n background: #ff4d4f;\n border-color: #ff4d4f;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-danger > a:only-child {\n color: currentColor;\n}\n.ant-btn-danger > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger:hover,\n.ant-btn-danger:focus {\n color: #fff;\n background: #ff7875;\n border-color: #ff7875;\n}\n.ant-btn-danger:hover > a:only-child,\n.ant-btn-danger:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-danger:hover > a:only-child::after,\n.ant-btn-danger:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger:active {\n color: #fff;\n background: #d9363e;\n border-color: #d9363e;\n}\n.ant-btn-danger:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-danger:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger[disabled],\n.ant-btn-danger[disabled]:hover,\n.ant-btn-danger[disabled]:focus,\n.ant-btn-danger[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-danger[disabled] > a:only-child,\n.ant-btn-danger[disabled]:hover > a:only-child,\n.ant-btn-danger[disabled]:focus > a:only-child,\n.ant-btn-danger[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-danger[disabled] > a:only-child::after,\n.ant-btn-danger[disabled]:hover > a:only-child::after,\n.ant-btn-danger[disabled]:focus > a:only-child::after,\n.ant-btn-danger[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link {\n color: #1890ff;\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n}\n.ant-btn-link > a:only-child {\n color: currentColor;\n}\n.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:hover,\n.ant-btn-link:focus {\n color: #40a9ff;\n background: transparent;\n border-color: #40a9ff;\n}\n.ant-btn-link:hover > a:only-child,\n.ant-btn-link:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-link:hover > a:only-child::after,\n.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:active {\n color: #096dd9;\n background: transparent;\n border-color: #096dd9;\n}\n.ant-btn-link:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link[disabled],\n.ant-btn-link[disabled]:hover,\n.ant-btn-link[disabled]:focus,\n.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-link[disabled] > a:only-child,\n.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-link[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:hover {\n background: transparent;\n}\n.ant-btn-link:hover,\n.ant-btn-link:focus,\n.ant-btn-link:active {\n border-color: transparent;\n}\n.ant-btn-link[disabled],\n.ant-btn-link[disabled]:hover,\n.ant-btn-link[disabled]:focus,\n.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border-color: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-link[disabled] > a:only-child,\n.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-link[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text {\n color: rgba(0, 0, 0, 0.85);\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n}\n.ant-btn-text > a:only-child {\n color: currentColor;\n}\n.ant-btn-text > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:hover,\n.ant-btn-text:focus {\n color: #40a9ff;\n background: transparent;\n border-color: #40a9ff;\n}\n.ant-btn-text:hover > a:only-child,\n.ant-btn-text:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-text:hover > a:only-child::after,\n.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:active {\n color: #096dd9;\n background: transparent;\n border-color: #096dd9;\n}\n.ant-btn-text:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text[disabled],\n.ant-btn-text[disabled]:hover,\n.ant-btn-text[disabled]:focus,\n.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-text[disabled] > a:only-child,\n.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-text[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:hover,\n.ant-btn-text:focus {\n color: rgba(0, 0, 0, 0.85);\n background: rgba(0, 0, 0, 0.018);\n border-color: transparent;\n}\n.ant-btn-text:active {\n color: rgba(0, 0, 0, 0.85);\n background: rgba(0, 0, 0, 0.028);\n border-color: transparent;\n}\n.ant-btn-text[disabled],\n.ant-btn-text[disabled]:hover,\n.ant-btn-text[disabled]:focus,\n.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border-color: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-text[disabled] > a:only-child,\n.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-text[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous {\n color: #ff4d4f;\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-btn-dangerous > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous:hover,\n.ant-btn-dangerous:focus {\n color: #ff7875;\n background: #fff;\n border-color: #ff7875;\n}\n.ant-btn-dangerous:hover > a:only-child,\n.ant-btn-dangerous:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous:hover > a:only-child::after,\n.ant-btn-dangerous:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous:active {\n color: #d9363e;\n background: #fff;\n border-color: #d9363e;\n}\n.ant-btn-dangerous:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous[disabled],\n.ant-btn-dangerous[disabled]:hover,\n.ant-btn-dangerous[disabled]:focus,\n.ant-btn-dangerous[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous[disabled] > a:only-child,\n.ant-btn-dangerous[disabled]:hover > a:only-child,\n.ant-btn-dangerous[disabled]:focus > a:only-child,\n.ant-btn-dangerous[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous[disabled] > a:only-child::after,\n.ant-btn-dangerous[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary {\n color: #fff;\n background: #ff4d4f;\n border-color: #ff4d4f;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-dangerous.ant-btn-primary > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary:hover,\n.ant-btn-dangerous.ant-btn-primary:focus {\n color: #fff;\n background: #ff7875;\n border-color: #ff7875;\n}\n.ant-btn-dangerous.ant-btn-primary:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-primary:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary:active {\n color: #fff;\n background: #d9363e;\n border-color: #d9363e;\n}\n.ant-btn-dangerous.ant-btn-primary:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary[disabled],\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link {\n color: #ff4d4f;\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-dangerous.ant-btn-link:focus {\n color: #40a9ff;\n background: transparent;\n border-color: #40a9ff;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:active {\n color: #096dd9;\n background: transparent;\n border-color: #096dd9;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-dangerous.ant-btn-link:focus {\n color: #ff7875;\n background: transparent;\n border-color: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:active {\n color: #d9363e;\n background: transparent;\n border-color: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border-color: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text {\n color: #ff4d4f;\n background: transparent;\n border-color: transparent;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-text > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:hover,\n.ant-btn-dangerous.ant-btn-text:focus {\n color: #40a9ff;\n background: transparent;\n border-color: #40a9ff;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:active {\n color: #096dd9;\n background: transparent;\n border-color: #096dd9;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text[disabled],\n.ant-btn-dangerous.ant-btn-text[disabled]:hover,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus,\n.ant-btn-dangerous.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:hover,\n.ant-btn-dangerous.ant-btn-text:focus {\n color: #ff7875;\n background: rgba(0, 0, 0, 0.018);\n border-color: transparent;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:active {\n color: #d9363e;\n background: rgba(0, 0, 0, 0.028);\n border-color: transparent;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text[disabled],\n.ant-btn-dangerous.ant-btn-text[disabled]:hover,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus,\n.ant-btn-dangerous.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border-color: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-icon-only {\n width: 32px;\n height: 32px;\n padding: 2.4px 0;\n font-size: 16px;\n border-radius: 2px;\n vertical-align: -1px;\n}\n.ant-btn-icon-only > * {\n font-size: 16px;\n}\n.ant-btn-icon-only.ant-btn-lg {\n width: 40px;\n height: 40px;\n padding: 4.9px 0;\n font-size: 18px;\n border-radius: 2px;\n}\n.ant-btn-icon-only.ant-btn-lg > * {\n font-size: 18px;\n}\n.ant-btn-icon-only.ant-btn-sm {\n width: 24px;\n height: 24px;\n padding: 0px 0;\n font-size: 14px;\n border-radius: 2px;\n}\n.ant-btn-icon-only.ant-btn-sm > * {\n font-size: 14px;\n}\n.ant-btn-round {\n height: 32px;\n padding: 4px 16px;\n font-size: 14px;\n border-radius: 32px;\n}\n.ant-btn-round.ant-btn-lg {\n height: 40px;\n padding: 6.4px 20px;\n font-size: 16px;\n border-radius: 40px;\n}\n.ant-btn-round.ant-btn-sm {\n height: 24px;\n padding: 0px 12px;\n font-size: 14px;\n border-radius: 24px;\n}\n.ant-btn-round.ant-btn-icon-only {\n width: auto;\n}\n.ant-btn-circle {\n min-width: 32px;\n padding-right: 0;\n padding-left: 0;\n text-align: center;\n border-radius: 50%;\n}\n.ant-btn-circle.ant-btn-lg {\n min-width: 40px;\n border-radius: 50%;\n}\n.ant-btn-circle.ant-btn-sm {\n min-width: 24px;\n border-radius: 50%;\n}\n.ant-btn::before {\n position: absolute;\n top: -1px;\n right: -1px;\n bottom: -1px;\n left: -1px;\n z-index: 1;\n display: none;\n background: #fff;\n border-radius: inherit;\n opacity: 0.35;\n transition: opacity 0.2s;\n content: '';\n pointer-events: none;\n}\n.ant-btn .anticon {\n transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-btn .anticon.anticon-plus > svg,\n.ant-btn .anticon.anticon-minus > svg {\n shape-rendering: optimizeSpeed;\n}\n.ant-btn.ant-btn-loading {\n position: relative;\n}\n.ant-btn.ant-btn-loading:not([disabled]) {\n pointer-events: none;\n}\n.ant-btn.ant-btn-loading::before {\n display: block;\n}\n.ant-btn > .ant-btn-loading-icon {\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-btn > .ant-btn-loading-icon .anticon {\n padding-right: 8px;\n -webkit-animation: none;\n animation: none;\n}\n.ant-btn > .ant-btn-loading-icon .anticon svg {\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n.ant-btn > .ant-btn-loading-icon:only-child .anticon {\n padding-right: 0;\n}\n.ant-btn-group {\n position: relative;\n display: inline-flex;\n}\n.ant-btn-group > .ant-btn,\n.ant-btn-group > span > .ant-btn {\n position: relative;\n}\n.ant-btn-group > .ant-btn:hover,\n.ant-btn-group > span > .ant-btn:hover,\n.ant-btn-group > .ant-btn:focus,\n.ant-btn-group > span > .ant-btn:focus,\n.ant-btn-group > .ant-btn:active,\n.ant-btn-group > span > .ant-btn:active {\n z-index: 2;\n}\n.ant-btn-group > .ant-btn[disabled],\n.ant-btn-group > span > .ant-btn[disabled] {\n z-index: 0;\n}\n.ant-btn-group .ant-btn-icon-only {\n font-size: 14px;\n}\n.ant-btn-group-lg > .ant-btn,\n.ant-btn-group-lg > span > .ant-btn {\n height: 40px;\n padding: 6.4px 15px;\n font-size: 16px;\n border-radius: 0;\n}\n.ant-btn-group-lg .ant-btn.ant-btn-icon-only {\n width: 40px;\n height: 40px;\n padding-right: 0;\n padding-left: 0;\n}\n.ant-btn-group-sm > .ant-btn,\n.ant-btn-group-sm > span > .ant-btn {\n height: 24px;\n padding: 0px 7px;\n font-size: 14px;\n border-radius: 0;\n}\n.ant-btn-group-sm > .ant-btn > .anticon,\n.ant-btn-group-sm > span > .ant-btn > .anticon {\n font-size: 14px;\n}\n.ant-btn-group-sm .ant-btn.ant-btn-icon-only {\n width: 24px;\n height: 24px;\n padding-right: 0;\n padding-left: 0;\n}\n.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn + .ant-btn-group,\n.ant-btn-group span + .ant-btn,\n.ant-btn-group .ant-btn + span,\n.ant-btn-group > span + span,\n.ant-btn-group + .ant-btn,\n.ant-btn-group + .ant-btn-group {\n margin-left: -1px;\n}\n.ant-btn-group .ant-btn-primary + .ant-btn:not(.ant-btn-primary):not([disabled]) {\n border-left-color: transparent;\n}\n.ant-btn-group .ant-btn {\n border-radius: 0;\n}\n.ant-btn-group > .ant-btn:first-child,\n.ant-btn-group > span:first-child > .ant-btn {\n margin-left: 0;\n}\n.ant-btn-group > .ant-btn:only-child {\n border-radius: 2px;\n}\n.ant-btn-group > span:only-child > .ant-btn {\n border-radius: 2px;\n}\n.ant-btn-group > .ant-btn:first-child:not(:last-child),\n.ant-btn-group > span:first-child:not(:last-child) > .ant-btn {\n border-top-left-radius: 2px;\n border-bottom-left-radius: 2px;\n}\n.ant-btn-group > .ant-btn:last-child:not(:first-child),\n.ant-btn-group > span:last-child:not(:first-child) > .ant-btn {\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n}\n.ant-btn-group-sm > .ant-btn:only-child {\n border-radius: 2px;\n}\n.ant-btn-group-sm > span:only-child > .ant-btn {\n border-radius: 2px;\n}\n.ant-btn-group-sm > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn {\n border-top-left-radius: 2px;\n border-bottom-left-radius: 2px;\n}\n.ant-btn-group-sm > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn {\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n}\n.ant-btn-group > .ant-btn-group {\n float: left;\n}\n.ant-btn-group > .ant-btn-group:not(:first-child):not(:last-child) > .ant-btn {\n border-radius: 0;\n}\n.ant-btn-group > .ant-btn-group:first-child:not(:last-child) > .ant-btn:last-child {\n padding-right: 8px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-group > .ant-btn-group:last-child:not(:first-child) > .ant-btn:first-child {\n padding-left: 8px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-rtl.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn-rtl.ant-btn + .ant-btn-group,\n.ant-btn-rtl.ant-btn-group span + .ant-btn,\n.ant-btn-rtl.ant-btn-group .ant-btn + span,\n.ant-btn-rtl.ant-btn-group > span + span,\n.ant-btn-rtl.ant-btn-group + .ant-btn,\n.ant-btn-rtl.ant-btn-group + .ant-btn-group,\n.ant-btn-group-rtl.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn-group-rtl.ant-btn + .ant-btn-group,\n.ant-btn-group-rtl.ant-btn-group span + .ant-btn,\n.ant-btn-group-rtl.ant-btn-group .ant-btn + span,\n.ant-btn-group-rtl.ant-btn-group > span + span,\n.ant-btn-group-rtl.ant-btn-group + .ant-btn,\n.ant-btn-group-rtl.ant-btn-group + .ant-btn-group {\n margin-right: -1px;\n margin-left: auto;\n}\n.ant-btn-group.ant-btn-group-rtl {\n direction: rtl;\n}\n.ant-btn-group-rtl.ant-btn-group > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-rtl.ant-btn-group > span:first-child:not(:last-child) > .ant-btn {\n border-top-left-radius: 0;\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 0;\n}\n.ant-btn-group-rtl.ant-btn-group > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group > span:last-child:not(:first-child) > .ant-btn {\n border-top-left-radius: 2px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 2px;\n}\n.ant-btn-group-rtl.ant-btn-group-sm > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-rtl.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn {\n border-top-left-radius: 0;\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 0;\n}\n.ant-btn-group-rtl.ant-btn-group-sm > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn {\n border-top-left-radius: 2px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 2px;\n}\n.ant-btn:focus > span,\n.ant-btn:active > span {\n position: relative;\n}\n.ant-btn > .anticon + span,\n.ant-btn > span + .anticon {\n margin-left: 8px;\n}\n.ant-btn-background-ghost {\n color: #fff;\n background: transparent !important;\n border-color: #fff;\n}\n.ant-btn-background-ghost.ant-btn-primary {\n color: #1890ff;\n background: transparent;\n border-color: #1890ff;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-primary > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary:hover,\n.ant-btn-background-ghost.ant-btn-primary:focus {\n color: #40a9ff;\n background: transparent;\n border-color: #40a9ff;\n}\n.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary:active {\n color: #096dd9;\n background: transparent;\n border-color: #096dd9;\n}\n.ant-btn-background-ghost.ant-btn-primary:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled],\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger {\n color: #ff4d4f;\n background: transparent;\n border-color: #ff4d4f;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-danger > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-danger > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger:hover,\n.ant-btn-background-ghost.ant-btn-danger:focus {\n color: #ff7875;\n background: transparent;\n border-color: #ff7875;\n}\n.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger:active {\n color: #d9363e;\n background: transparent;\n border-color: #d9363e;\n}\n.ant-btn-background-ghost.ant-btn-danger:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-danger:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled],\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous {\n color: #ff4d4f;\n background: transparent;\n border-color: #ff4d4f;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover,\n.ant-btn-background-ghost.ant-btn-dangerous:focus {\n color: #ff7875;\n background: transparent;\n border-color: #ff7875;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active {\n color: #d9363e;\n background: transparent;\n border-color: #d9363e;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled],\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link {\n color: #ff4d4f;\n background: transparent;\n border-color: transparent;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus {\n color: #ff7875;\n background: transparent;\n border-color: transparent;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active {\n color: #d9363e;\n background: transparent;\n border-color: transparent;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentColor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-two-chinese-chars::first-letter {\n letter-spacing: 0.34em;\n}\n.ant-btn-two-chinese-chars > *:not(.anticon) {\n margin-right: -0.34em;\n letter-spacing: 0.34em;\n}\n.ant-btn-block {\n width: 100%;\n}\n.ant-btn:empty {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\na.ant-btn {\n padding-top: 0.01px !important;\n line-height: 30px;\n}\na.ant-btn-lg {\n line-height: 38px;\n}\na.ant-btn-sm {\n line-height: 22px;\n}\n.ant-btn-rtl {\n direction: rtl;\n}\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary {\n border-right-color: #40a9ff;\n border-left-color: #d9d9d9;\n}\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] {\n border-right-color: #d9d9d9;\n border-left-color: #40a9ff;\n}\n.ant-btn-rtl.ant-btn > .ant-btn-loading-icon .anticon {\n padding-right: 0;\n padding-left: 8px;\n}\n.ant-btn > .ant-btn-loading-icon:only-child .anticon {\n padding-right: 0;\n padding-left: 0;\n}\n.ant-btn-rtl.ant-btn > .anticon + span,\n.ant-btn-rtl.ant-btn > span + .anticon {\n margin-right: 8px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-picker-calendar {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n}\n.ant-picker-calendar-header {\n display: flex;\n justify-content: flex-end;\n padding: 12px 0;\n}\n.ant-picker-calendar-header .ant-picker-calendar-year-select {\n min-width: 80px;\n}\n.ant-picker-calendar-header .ant-picker-calendar-month-select {\n min-width: 70px;\n margin-left: 8px;\n}\n.ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n margin-left: 8px;\n}\n.ant-picker-calendar .ant-picker-panel {\n background: #fff;\n border: 0;\n border-top: 1px solid #f0f0f0;\n border-radius: 0;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-month-panel,\n.ant-picker-calendar .ant-picker-panel .ant-picker-date-panel {\n width: auto;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-body {\n padding: 8px 0;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-content {\n width: 100%;\n}\n.ant-picker-calendar-mini {\n border-radius: 2px;\n}\n.ant-picker-calendar-mini .ant-picker-calendar-header {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-picker-calendar-mini .ant-picker-panel {\n border-radius: 0 0 2px 2px;\n}\n.ant-picker-calendar-mini .ant-picker-content {\n height: 256px;\n}\n.ant-picker-calendar-mini .ant-picker-content th {\n height: auto;\n padding: 0;\n line-height: 18px;\n}\n.ant-picker-calendar-full .ant-picker-panel {\n display: block;\n width: 100%;\n text-align: right;\n background: #fff;\n border: 0;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body td {\n padding: 0;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th {\n height: auto;\n padding: 0 12px 5px 0;\n line-height: 18px;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell::before {\n display: none;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:hover .ant-picker-calendar-date {\n background: #f5f5f5;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell .ant-picker-calendar-date-today::before {\n display: none;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today {\n background: #e6f7ff;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today .ant-picker-calendar-date-value {\n color: #1890ff;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date {\n display: block;\n width: auto;\n height: auto;\n margin: 0 4px;\n padding: 4px 8px 0;\n border: 0;\n border-top: 2px solid #f0f0f0;\n border-radius: 0;\n transition: background 0.3s;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-value {\n line-height: 24px;\n transition: color 0.3s;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content {\n position: static;\n width: auto;\n height: 86px;\n overflow-y: auto;\n color: rgba(0, 0, 0, 0.85);\n line-height: 1.5715;\n text-align: left;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today {\n border-color: #1890ff;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today .ant-picker-calendar-date-value {\n color: rgba(0, 0, 0, 0.85);\n}\n@media only screen and (max-width: 480px) {\n .ant-picker-calendar-header {\n display: block;\n }\n .ant-picker-calendar-header .ant-picker-calendar-year-select {\n width: 50%;\n }\n .ant-picker-calendar-header .ant-picker-calendar-month-select {\n width: calc(50% - 8px);\n }\n .ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n width: 100%;\n margin-top: 8px;\n margin-left: 0;\n }\n .ant-picker-calendar-header .ant-picker-calendar-mode-switch > label {\n width: 50%;\n text-align: center;\n }\n}\n.ant-picker-calendar-rtl {\n direction: rtl;\n}\n.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-month-select {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel {\n text-align: left;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th {\n padding: 0 0 5px 12px;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content {\n text-align: right;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-radio-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n font-size: 0;\n line-height: unset;\n}\n.ant-radio-group .ant-badge-count {\n z-index: 1;\n}\n.ant-radio-group > .ant-badge:not(:first-child) > .ant-radio-button-wrapper {\n border-left: none;\n}\n.ant-radio-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-flex;\n align-items: baseline;\n margin-right: 8px;\n cursor: pointer;\n}\n.ant-radio-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-radio {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n display: inline-block;\n outline: none;\n cursor: pointer;\n}\n.ant-radio-wrapper:hover .ant-radio,\n.ant-radio:hover .ant-radio-inner,\n.ant-radio-input:focus + .ant-radio-inner {\n border-color: #1890ff;\n}\n.ant-radio-input:focus + .ant-radio-inner {\n box-shadow: 0 0 0 3px rgba(24, 144, 255, 0.08);\n}\n.ant-radio-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #1890ff;\n border-radius: 50%;\n visibility: hidden;\n -webkit-animation: antRadioEffect 0.36s ease-in-out;\n animation: antRadioEffect 0.36s ease-in-out;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n content: '';\n}\n.ant-radio:hover::after,\n.ant-radio-wrapper:hover .ant-radio::after {\n visibility: visible;\n}\n.ant-radio-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n background-color: #fff;\n border-color: #d9d9d9;\n border-style: solid;\n border-width: 1px;\n border-radius: 50%;\n transition: all 0.3s;\n}\n.ant-radio-inner::after {\n position: absolute;\n top: 3px;\n left: 3px;\n display: block;\n width: 8px;\n height: 8px;\n background-color: #1890ff;\n border-top: 0;\n border-left: 0;\n border-radius: 8px;\n transform: scale(0);\n opacity: 0;\n transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n content: ' ';\n}\n.ant-radio-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n cursor: pointer;\n opacity: 0;\n}\n.ant-radio-checked .ant-radio-inner {\n border-color: #1890ff;\n}\n.ant-radio-checked .ant-radio-inner::after {\n transform: scale(1);\n opacity: 1;\n transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-radio-disabled {\n cursor: not-allowed;\n}\n.ant-radio-disabled .ant-radio-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n cursor: not-allowed;\n}\n.ant-radio-disabled .ant-radio-inner::after {\n background-color: rgba(0, 0, 0, 0.2);\n}\n.ant-radio-disabled .ant-radio-input {\n cursor: not-allowed;\n}\n.ant-radio-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\nspan.ant-radio + * {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-radio-button-wrapper {\n position: relative;\n display: inline-block;\n height: 32px;\n margin: 0;\n padding: 0 15px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 30px;\n background: #fff;\n border: 1px solid #d9d9d9;\n border-top-width: 1.02px;\n border-left-width: 0;\n cursor: pointer;\n transition: color 0.3s, background 0.3s, border-color 0.3s, box-shadow 0.3s;\n}\n.ant-radio-button-wrapper a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-radio-button-wrapper > .ant-radio-button {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n}\n.ant-radio-group-large .ant-radio-button-wrapper {\n height: 40px;\n font-size: 16px;\n line-height: 38px;\n}\n.ant-radio-group-small .ant-radio-button-wrapper {\n height: 24px;\n padding: 0 7px;\n line-height: 22px;\n}\n.ant-radio-button-wrapper:not(:first-child)::before {\n position: absolute;\n top: -1px;\n left: -1px;\n display: block;\n box-sizing: content-box;\n width: 1px;\n height: 100%;\n padding: 1px 0;\n background-color: #d9d9d9;\n transition: background-color 0.3s;\n content: '';\n}\n.ant-radio-button-wrapper:first-child {\n border-left: 1px solid #d9d9d9;\n border-radius: 2px 0 0 2px;\n}\n.ant-radio-button-wrapper:last-child {\n border-radius: 0 2px 2px 0;\n}\n.ant-radio-button-wrapper:first-child:last-child {\n border-radius: 2px;\n}\n.ant-radio-button-wrapper:hover {\n position: relative;\n color: #1890ff;\n}\n.ant-radio-button-wrapper:focus-within {\n box-shadow: 0 0 0 3px rgba(24, 144, 255, 0.08);\n}\n.ant-radio-button-wrapper .ant-radio-inner,\n.ant-radio-button-wrapper input[type='checkbox'],\n.ant-radio-button-wrapper input[type='radio'] {\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: none;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {\n z-index: 1;\n color: #1890ff;\n background: #fff;\n border-color: #1890ff;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {\n background-color: #1890ff;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child {\n border-color: #1890ff;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover {\n color: #40a9ff;\n border-color: #40a9ff;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before {\n background-color: #40a9ff;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {\n color: #096dd9;\n border-color: #096dd9;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active::before {\n background-color: #096dd9;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {\n box-shadow: 0 0 0 3px rgba(24, 144, 255, 0.08);\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {\n color: #fff;\n background: #1890ff;\n border-color: #1890ff;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover {\n color: #fff;\n background: #40a9ff;\n border-color: #40a9ff;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {\n color: #fff;\n background: #096dd9;\n border-color: #096dd9;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {\n box-shadow: 0 0 0 3px rgba(24, 144, 255, 0.08);\n}\n.ant-radio-button-wrapper-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-radio-button-wrapper-disabled:first-child,\n.ant-radio-button-wrapper-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n}\n.ant-radio-button-wrapper-disabled:first-child {\n border-left-color: #d9d9d9;\n}\n.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked {\n color: rgba(0, 0, 0, 0.25);\n background-color: #e6e6e6;\n border-color: #d9d9d9;\n box-shadow: none;\n}\n@-webkit-keyframes antRadioEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n@keyframes antRadioEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-radio-group.ant-radio-group-rtl {\n direction: rtl;\n}\n.ant-radio-wrapper.ant-radio-wrapper-rtl {\n margin-right: 0;\n margin-left: 8px;\n direction: rtl;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl {\n border-right-width: 0;\n border-left-width: 1px;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:not(:first-child)::before {\n right: -1px;\n left: 0;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:first-child {\n border-right: 1px solid #d9d9d9;\n border-radius: 0 2px 2px 0;\n}\n.ant-radio-button-wrapper-checked:not([class*=' ant-radio-button-wrapper-disabled']).ant-radio-button-wrapper:first-child {\n border-right-color: #40a9ff;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:last-child {\n border-radius: 2px 0 0 2px;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper-disabled:first-child {\n border-right-color: #d9d9d9;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-picker {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n padding: 4px 11px 4px;\n position: relative;\n display: inline-flex;\n align-items: center;\n background: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: border 0.3s, box-shadow 0.3s;\n}\n.ant-picker:hover,\n.ant-picker-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-picker-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-picker.ant-picker-disabled {\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-picker.ant-picker-disabled .ant-picker-suffix {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-picker.ant-picker-borderless {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n}\n.ant-picker-input {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n}\n.ant-picker-input > input {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s;\n flex: auto;\n min-width: 1px;\n height: auto;\n padding: 0;\n background: transparent;\n border: 0;\n}\n.ant-picker-input > input::-moz-placeholder {\n opacity: 1;\n}\n.ant-picker-input > input:-ms-input-placeholder {\n color: #bfbfbf;\n}\n.ant-picker-input > input::placeholder {\n color: #bfbfbf;\n}\n.ant-picker-input > input:-moz-placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-picker-input > input:-ms-input-placeholder {\n text-overflow: ellipsis;\n}\n.ant-picker-input > input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-picker-input > input:hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-picker-input > input:focus,\n.ant-picker-input > input-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-picker-input > input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-picker-input > input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-picker-input > input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-picker-input > input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-picker-input > input-borderless,\n.ant-picker-input > input-borderless:hover,\n.ant-picker-input > input-borderless:focus,\n.ant-picker-input > input-borderless-focused,\n.ant-picker-input > input-borderless-disabled,\n.ant-picker-input > input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-picker-input > input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-picker-input > input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-picker-input > input-sm {\n padding: 0px 7px;\n}\n.ant-picker-input > input:focus {\n box-shadow: none;\n}\n.ant-picker-input > input[disabled] {\n background: transparent;\n}\n.ant-picker-input:hover .ant-picker-clear {\n opacity: 1;\n}\n.ant-picker-input-placeholder > input {\n color: #bfbfbf;\n}\n.ant-picker-large {\n padding: 6.5px 11px 6.5px;\n}\n.ant-picker-large .ant-picker-input > input {\n font-size: 16px;\n}\n.ant-picker-small {\n padding: 0px 7px 0px;\n}\n.ant-picker-suffix {\n align-self: center;\n margin-left: 4px;\n color: rgba(0, 0, 0, 0.25);\n line-height: 1;\n pointer-events: none;\n}\n.ant-picker-suffix > * {\n vertical-align: top;\n}\n.ant-picker-clear {\n position: absolute;\n top: 50%;\n right: 0;\n color: rgba(0, 0, 0, 0.25);\n line-height: 1;\n background: #fff;\n transform: translateY(-50%);\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.3s, color 0.3s;\n}\n.ant-picker-clear > * {\n vertical-align: top;\n}\n.ant-picker-clear:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-picker-separator {\n position: relative;\n display: inline-block;\n width: 1em;\n height: 16px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 16px;\n vertical-align: top;\n cursor: default;\n}\n.ant-picker-focused .ant-picker-separator {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-picker-disabled .ant-picker-range-separator .ant-picker-separator {\n cursor: not-allowed;\n}\n.ant-picker-range {\n position: relative;\n display: inline-flex;\n}\n.ant-picker-range .ant-picker-clear {\n right: 11px;\n}\n.ant-picker-range:hover .ant-picker-clear {\n opacity: 1;\n}\n.ant-picker-range .ant-picker-active-bar {\n bottom: -1px;\n height: 2px;\n margin-left: 11px;\n background: #1890ff;\n opacity: 0;\n transition: all 0.3s ease-out;\n pointer-events: none;\n}\n.ant-picker-range.ant-picker-focused .ant-picker-active-bar {\n opacity: 1;\n}\n.ant-picker-range-separator {\n align-items: center;\n padding: 0 8px;\n line-height: 1;\n}\n.ant-picker-range.ant-picker-small .ant-picker-clear {\n right: 7px;\n}\n.ant-picker-range.ant-picker-small .ant-picker-active-bar {\n margin-left: 7px;\n}\n.ant-picker-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n z-index: 1050;\n}\n.ant-picker-dropdown-hidden {\n display: none;\n}\n.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow {\n top: 1.66666667px;\n display: block;\n transform: rotate(-45deg);\n}\n.ant-picker-dropdown-placement-topLeft .ant-picker-range-arrow {\n bottom: 1.66666667px;\n display: block;\n transform: rotate(135deg);\n}\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topRight,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topRight {\n -webkit-animation-name: antSlideDownIn;\n animation-name: antSlideDownIn;\n}\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomRight,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomRight {\n -webkit-animation-name: antSlideUpIn;\n animation-name: antSlideUpIn;\n}\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topRight {\n -webkit-animation-name: antSlideDownOut;\n animation-name: antSlideDownOut;\n}\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomRight {\n -webkit-animation-name: antSlideUpOut;\n animation-name: antSlideUpOut;\n}\n.ant-picker-dropdown-range {\n padding: 6.66666667px 0;\n}\n.ant-picker-dropdown-range-hidden {\n display: none;\n}\n.ant-picker-dropdown .ant-picker-panel > .ant-picker-time-panel {\n padding-top: 4px;\n}\n.ant-picker-ranges {\n margin-bottom: 0;\n padding: 4px 12px;\n overflow: hidden;\n line-height: 34px;\n text-align: left;\n list-style: none;\n}\n.ant-picker-ranges > li {\n display: inline-block;\n}\n.ant-picker-ranges .ant-picker-preset > .ant-tag-blue {\n color: #1890ff;\n background: #e6f7ff;\n border-color: #91d5ff;\n cursor: pointer;\n}\n.ant-picker-ranges .ant-picker-ok {\n float: right;\n margin-left: 8px;\n}\n.ant-picker-range-wrapper {\n display: flex;\n}\n.ant-picker-range-arrow {\n position: absolute;\n z-index: 1;\n display: none;\n width: 10px;\n height: 10px;\n margin-left: 16.5px;\n box-shadow: 2px -2px 6px rgba(0, 0, 0, 0.06);\n transition: left 0.3s ease-out;\n}\n.ant-picker-range-arrow::after {\n position: absolute;\n top: 1px;\n right: 1px;\n width: 10px;\n height: 10px;\n border: 5px solid #f0f0f0;\n border-color: #fff #fff transparent transparent;\n content: '';\n}\n.ant-picker-panel-container {\n overflow: hidden;\n vertical-align: top;\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n transition: margin 0.3s;\n}\n.ant-picker-panel-container .ant-picker-panels {\n display: inline-flex;\n flex-wrap: nowrap;\n direction: ltr;\n}\n.ant-picker-panel-container .ant-picker-panel {\n vertical-align: top;\n background: transparent;\n border-width: 0 0 1px 0;\n border-radius: 0;\n}\n.ant-picker-panel-container .ant-picker-panel-focused {\n border-color: #f0f0f0;\n}\n.ant-picker-panel {\n display: inline-flex;\n flex-direction: column;\n text-align: center;\n background: #fff;\n border: 1px solid #f0f0f0;\n border-radius: 2px;\n outline: none;\n}\n.ant-picker-panel-focused {\n border-color: #1890ff;\n}\n.ant-picker-decade-panel,\n.ant-picker-year-panel,\n.ant-picker-quarter-panel,\n.ant-picker-month-panel,\n.ant-picker-week-panel,\n.ant-picker-date-panel,\n.ant-picker-time-panel {\n display: flex;\n flex-direction: column;\n width: 280px;\n}\n.ant-picker-header {\n display: flex;\n padding: 0 8px;\n color: rgba(0, 0, 0, 0.85);\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-picker-header > * {\n flex: none;\n}\n.ant-picker-header button {\n padding: 0;\n color: rgba(0, 0, 0, 0.25);\n line-height: 40px;\n background: transparent;\n border: 0;\n cursor: pointer;\n transition: color 0.3s;\n}\n.ant-picker-header > button {\n min-width: 1.6em;\n font-size: 14px;\n}\n.ant-picker-header > button:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-picker-header-view {\n flex: auto;\n font-weight: 500;\n line-height: 40px;\n}\n.ant-picker-header-view button {\n color: inherit;\n font-weight: inherit;\n}\n.ant-picker-header-view button:not(:first-child) {\n margin-left: 8px;\n}\n.ant-picker-header-view button:hover {\n color: #1890ff;\n}\n.ant-picker-prev-icon,\n.ant-picker-next-icon,\n.ant-picker-super-prev-icon,\n.ant-picker-super-next-icon {\n position: relative;\n display: inline-block;\n width: 7px;\n height: 7px;\n}\n.ant-picker-prev-icon::before,\n.ant-picker-next-icon::before,\n.ant-picker-super-prev-icon::before,\n.ant-picker-super-next-icon::before {\n position: absolute;\n top: 0;\n left: 0;\n display: inline-block;\n width: 7px;\n height: 7px;\n border: 0 solid currentColor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n}\n.ant-picker-super-prev-icon::after,\n.ant-picker-super-next-icon::after {\n position: absolute;\n top: 4px;\n left: 4px;\n display: inline-block;\n width: 7px;\n height: 7px;\n border: 0 solid currentColor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n}\n.ant-picker-prev-icon,\n.ant-picker-super-prev-icon {\n transform: rotate(-45deg);\n}\n.ant-picker-next-icon,\n.ant-picker-super-next-icon {\n transform: rotate(135deg);\n}\n.ant-picker-content {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n}\n.ant-picker-content th,\n.ant-picker-content td {\n position: relative;\n min-width: 24px;\n font-weight: 400;\n}\n.ant-picker-content th {\n height: 30px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 30px;\n}\n.ant-picker-cell {\n padding: 3px 0;\n color: rgba(0, 0, 0, 0.25);\n cursor: pointer;\n}\n.ant-picker-cell-in-view {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-picker-cell-disabled {\n cursor: not-allowed;\n}\n.ant-picker-cell::before {\n position: absolute;\n top: 50%;\n right: 0;\n left: 0;\n z-index: 1;\n height: 24px;\n transform: translateY(-50%);\n content: '';\n}\n.ant-picker-cell .ant-picker-cell-inner {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 2px;\n transition: background 0.3s, border 0.3s;\n}\n.ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,\n.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner {\n background: #f5f5f5;\n}\n.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n border: 1px solid #1890ff;\n border-radius: 2px;\n content: '';\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range {\n position: relative;\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range::before {\n background: #e6f7ff;\n}\n.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,\n.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,\n.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner {\n color: #fff;\n background: #1890ff;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before {\n background: #e6f7ff;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start::before {\n left: 50%;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-end::before {\n right: 50%;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after {\n position: absolute;\n top: 50%;\n z-index: 0;\n height: 24px;\n border-top: 1px dashed #7ec1ff;\n border-bottom: 1px dashed #7ec1ff;\n transform: translateY(-50%);\n content: '';\n}\n.ant-picker-cell-range-hover-start::after,\n.ant-picker-cell-range-hover-end::after,\n.ant-picker-cell-range-hover::after {\n right: 0;\n left: 2px;\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end::before,\n.ant-picker-panel > :not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before,\n.ant-picker-panel > :not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before {\n background: #cbe6ff;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner {\n border-radius: 2px 0 0 2px;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner {\n border-radius: 0 2px 2px 0;\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after,\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: -1;\n background: #cbe6ff;\n content: '';\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after {\n right: -6px;\n left: 0;\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n right: 0;\n left: -6px;\n}\n.ant-picker-cell-range-hover.ant-picker-cell-range-start::after {\n right: 50%;\n}\n.ant-picker-cell-range-hover.ant-picker-cell-range-end::after {\n left: 50%;\n}\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after,\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,\n.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after {\n left: 6px;\n border-left: 1px dashed #7ec1ff;\n border-top-left-radius: 2px;\n border-bottom-left-radius: 2px;\n}\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after,\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,\n.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after {\n right: 6px;\n border-right: 1px dashed #7ec1ff;\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n}\n.ant-picker-cell-disabled {\n pointer-events: none;\n}\n.ant-picker-cell-disabled .ant-picker-cell-inner {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n}\n.ant-picker-cell-disabled::before {\n background: #f5f5f5;\n}\n.ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner::before {\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-picker-decade-panel .ant-picker-content,\n.ant-picker-year-panel .ant-picker-content,\n.ant-picker-quarter-panel .ant-picker-content,\n.ant-picker-month-panel .ant-picker-content {\n height: 264px;\n}\n.ant-picker-decade-panel .ant-picker-cell-inner,\n.ant-picker-year-panel .ant-picker-cell-inner,\n.ant-picker-quarter-panel .ant-picker-cell-inner,\n.ant-picker-month-panel .ant-picker-cell-inner {\n padding: 0 8px;\n}\n.ant-picker-decade-panel .ant-picker-cell-disabled .ant-picker-cell-inner,\n.ant-picker-year-panel .ant-picker-cell-disabled .ant-picker-cell-inner,\n.ant-picker-quarter-panel .ant-picker-cell-disabled .ant-picker-cell-inner,\n.ant-picker-month-panel .ant-picker-cell-disabled .ant-picker-cell-inner {\n background: #f5f5f5;\n}\n.ant-picker-quarter-panel .ant-picker-content {\n height: 56px;\n}\n.ant-picker-footer {\n width: -webkit-min-content;\n width: -moz-min-content;\n width: min-content;\n min-width: 100%;\n line-height: 38px;\n text-align: center;\n border-bottom: 1px solid transparent;\n}\n.ant-picker-panel .ant-picker-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-picker-footer-extra {\n padding: 0 12px;\n line-height: 38px;\n text-align: left;\n}\n.ant-picker-footer-extra:not(:last-child) {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-picker-now {\n text-align: left;\n}\n.ant-picker-today-btn {\n color: #1890ff;\n}\n.ant-picker-today-btn:hover {\n color: #40a9ff;\n}\n.ant-picker-today-btn:active {\n color: #096dd9;\n}\n.ant-picker-today-btn.ant-picker-today-btn-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-picker-decade-panel .ant-picker-cell-inner {\n padding: 0 4px;\n}\n.ant-picker-decade-panel .ant-picker-cell::before {\n display: none;\n}\n.ant-picker-year-panel .ant-picker-body,\n.ant-picker-quarter-panel .ant-picker-body,\n.ant-picker-month-panel .ant-picker-body {\n padding: 0 8px;\n}\n.ant-picker-year-panel .ant-picker-cell-inner,\n.ant-picker-quarter-panel .ant-picker-cell-inner,\n.ant-picker-month-panel .ant-picker-cell-inner {\n width: 60px;\n}\n.ant-picker-year-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-month-panel .ant-picker-cell-range-hover-start::after {\n left: 14px;\n border-left: 1px dashed #7ec1ff;\n border-radius: 2px 0 0 2px;\n}\n.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-start::after {\n right: 14px;\n border-right: 1px dashed #7ec1ff;\n border-radius: 0 2px 2px 0;\n}\n.ant-picker-year-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-month-panel .ant-picker-cell-range-hover-end::after {\n right: 14px;\n border-right: 1px dashed #7ec1ff;\n border-radius: 0 2px 2px 0;\n}\n.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-end::after {\n left: 14px;\n border-left: 1px dashed #7ec1ff;\n border-radius: 2px 0 0 2px;\n}\n.ant-picker-week-panel .ant-picker-body {\n padding: 8px 12px;\n}\n.ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner,\n.ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n.ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner {\n background: transparent !important;\n}\n.ant-picker-week-panel-row td {\n transition: background 0.3s;\n}\n.ant-picker-week-panel-row:hover td {\n background: #f5f5f5;\n}\n.ant-picker-week-panel-row-selected td,\n.ant-picker-week-panel-row-selected:hover td {\n background: #1890ff;\n}\n.ant-picker-week-panel-row-selected td.ant-picker-cell-week,\n.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week {\n color: rgba(255, 255, 255, 0.5);\n}\n.ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner::before,\n.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner::before {\n border-color: #fff;\n}\n.ant-picker-week-panel-row-selected td .ant-picker-cell-inner,\n.ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner {\n color: #fff;\n}\n.ant-picker-date-panel .ant-picker-body {\n padding: 8px 12px;\n}\n.ant-picker-date-panel .ant-picker-content {\n width: 252px;\n}\n.ant-picker-date-panel .ant-picker-content th {\n width: 36px;\n}\n.ant-picker-datetime-panel {\n display: flex;\n}\n.ant-picker-datetime-panel .ant-picker-time-panel {\n border-left: 1px solid #f0f0f0;\n}\n.ant-picker-datetime-panel .ant-picker-date-panel,\n.ant-picker-datetime-panel .ant-picker-time-panel {\n transition: opacity 0.3s;\n}\n.ant-picker-datetime-panel-active .ant-picker-date-panel,\n.ant-picker-datetime-panel-active .ant-picker-time-panel {\n opacity: 0.3;\n}\n.ant-picker-datetime-panel-active .ant-picker-date-panel-active,\n.ant-picker-datetime-panel-active .ant-picker-time-panel-active {\n opacity: 1;\n}\n.ant-picker-time-panel {\n width: auto;\n min-width: auto;\n}\n.ant-picker-time-panel .ant-picker-content {\n display: flex;\n flex: auto;\n height: 224px;\n}\n.ant-picker-time-panel-column {\n flex: 1 0 auto;\n width: 56px;\n margin: 0;\n padding: 0;\n overflow-y: hidden;\n text-align: left;\n list-style: none;\n transition: background 0.3s;\n}\n.ant-picker-time-panel-column::after {\n display: block;\n height: 196px;\n content: '';\n}\n.ant-picker-datetime-panel .ant-picker-time-panel-column::after {\n height: 198px;\n}\n.ant-picker-time-panel-column:not(:first-child) {\n border-left: 1px solid #f0f0f0;\n}\n.ant-picker-time-panel-column-active {\n background: rgba(230, 247, 255, 0.2);\n}\n.ant-picker-time-panel-column:hover {\n overflow-y: auto;\n}\n.ant-picker-time-panel-column > li {\n margin: 0;\n padding: 0;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner {\n display: block;\n width: 100%;\n height: 28px;\n margin: 0;\n padding: 0 0 0 14px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 28px;\n border-radius: 0;\n cursor: pointer;\n transition: background 0.3s;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover {\n background: #f5f5f5;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner {\n background: #e6f7ff;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n cursor: not-allowed;\n}\n/* stylelint-disable-next-line */\n_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,\n:root .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,\n_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell,\n:root .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell {\n padding: 21px 0;\n}\n.ant-picker-rtl {\n direction: rtl;\n}\n.ant-picker-rtl .ant-picker-suffix {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-picker-rtl .ant-picker-clear {\n right: auto;\n left: 0;\n}\n.ant-picker-rtl .ant-picker-separator {\n transform: rotate(180deg);\n}\n.ant-picker-panel-rtl .ant-picker-header-view button:not(:first-child) {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-rtl.ant-picker-range .ant-picker-clear {\n right: auto;\n left: 11px;\n}\n.ant-picker-rtl.ant-picker-range .ant-picker-active-bar {\n margin-right: 11px;\n margin-left: 0;\n}\n.ant-picker-rtl.ant-picker-range.ant-picker-small .ant-picker-active-bar {\n margin-right: 7px;\n}\n.ant-picker-dropdown-rtl .ant-picker-ranges {\n text-align: right;\n}\n.ant-picker-dropdown-rtl .ant-picker-ranges .ant-picker-ok {\n float: left;\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-panel-rtl {\n direction: rtl;\n}\n.ant-picker-panel-rtl .ant-picker-prev-icon,\n.ant-picker-panel-rtl .ant-picker-super-prev-icon {\n transform: rotate(135deg);\n}\n.ant-picker-panel-rtl .ant-picker-next-icon,\n.ant-picker-panel-rtl .ant-picker-super-next-icon {\n transform: rotate(-45deg);\n}\n.ant-picker-cell .ant-picker-cell-inner {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 2px;\n transition: background 0.3s, border 0.3s;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start::before {\n right: 50%;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end::before {\n right: 0;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-end::before {\n right: 50%;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after {\n right: 0;\n left: -6px;\n}\n.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n right: -6px;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-start::after {\n right: 0;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-end::after {\n right: 50%;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner {\n border-radius: 0 2px 2px 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner {\n border-radius: 2px 0 0 2px;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):first-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after {\n right: 6px;\n left: 0;\n border-right: 1px dashed #7ec1ff;\n border-left: none;\n border-top-left-radius: 0;\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 0;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):last-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after {\n right: 0;\n left: 6px;\n border-right: none;\n border-left: 1px dashed #7ec1ff;\n border-top-left-radius: 2px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 2px;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-end.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-start.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-start:last-child::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-end:first-child::after {\n right: 6px;\n left: 6px;\n border-right: 1px dashed #7ec1ff;\n border-left: 1px dashed #7ec1ff;\n border-radius: 2px;\n}\n.ant-picker-dropdown-rtl .ant-picker-footer-extra {\n direction: rtl;\n text-align: right;\n}\n.ant-picker-panel-rtl .ant-picker-time-panel {\n direction: ltr;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-tag {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n height: auto;\n margin-right: 8px;\n padding: 0 7px;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n background: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n opacity: 1;\n transition: all 0.3s;\n}\n.ant-tag,\n.ant-tag a,\n.ant-tag a:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tag > a:first-child:last-child {\n display: inline-block;\n margin: 0 -8px;\n padding: 0 8px;\n}\n.ant-tag-close-icon {\n margin-left: 3px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tag-close-icon:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tag-has-color {\n border-color: transparent;\n}\n.ant-tag-has-color,\n.ant-tag-has-color a,\n.ant-tag-has-color a:hover,\n.ant-tag-has-color .anticon-close,\n.ant-tag-has-color .anticon-close:hover {\n color: #fff;\n}\n.ant-tag-checkable {\n background-color: transparent;\n border-color: transparent;\n cursor: pointer;\n}\n.ant-tag-checkable:not(.ant-tag-checkable-checked):hover {\n color: #1890ff;\n}\n.ant-tag-checkable:active,\n.ant-tag-checkable-checked {\n color: #fff;\n}\n.ant-tag-checkable-checked {\n background-color: #1890ff;\n}\n.ant-tag-checkable:active {\n background-color: #096dd9;\n}\n.ant-tag-hidden {\n display: none;\n}\n.ant-tag-pink {\n color: #c41d7f;\n background: #fff0f6;\n border-color: #ffadd2;\n}\n.ant-tag-pink-inverse {\n color: #fff;\n background: #eb2f96;\n border-color: #eb2f96;\n}\n.ant-tag-magenta {\n color: #c41d7f;\n background: #fff0f6;\n border-color: #ffadd2;\n}\n.ant-tag-magenta-inverse {\n color: #fff;\n background: #eb2f96;\n border-color: #eb2f96;\n}\n.ant-tag-red {\n color: #cf1322;\n background: #fff1f0;\n border-color: #ffa39e;\n}\n.ant-tag-red-inverse {\n color: #fff;\n background: #f5222d;\n border-color: #f5222d;\n}\n.ant-tag-volcano {\n color: #d4380d;\n background: #fff2e8;\n border-color: #ffbb96;\n}\n.ant-tag-volcano-inverse {\n color: #fff;\n background: #fa541c;\n border-color: #fa541c;\n}\n.ant-tag-orange {\n color: #d46b08;\n background: #fff7e6;\n border-color: #ffd591;\n}\n.ant-tag-orange-inverse {\n color: #fff;\n background: #fa8c16;\n border-color: #fa8c16;\n}\n.ant-tag-yellow {\n color: #d4b106;\n background: #feffe6;\n border-color: #fffb8f;\n}\n.ant-tag-yellow-inverse {\n color: #fff;\n background: #fadb14;\n border-color: #fadb14;\n}\n.ant-tag-gold {\n color: #d48806;\n background: #fffbe6;\n border-color: #ffe58f;\n}\n.ant-tag-gold-inverse {\n color: #fff;\n background: #faad14;\n border-color: #faad14;\n}\n.ant-tag-cyan {\n color: #08979c;\n background: #e6fffb;\n border-color: #87e8de;\n}\n.ant-tag-cyan-inverse {\n color: #fff;\n background: #13c2c2;\n border-color: #13c2c2;\n}\n.ant-tag-lime {\n color: #7cb305;\n background: #fcffe6;\n border-color: #eaff8f;\n}\n.ant-tag-lime-inverse {\n color: #fff;\n background: #a0d911;\n border-color: #a0d911;\n}\n.ant-tag-green {\n color: #389e0d;\n background: #f6ffed;\n border-color: #b7eb8f;\n}\n.ant-tag-green-inverse {\n color: #fff;\n background: #52c41a;\n border-color: #52c41a;\n}\n.ant-tag-blue {\n color: #096dd9;\n background: #e6f7ff;\n border-color: #91d5ff;\n}\n.ant-tag-blue-inverse {\n color: #fff;\n background: #1890ff;\n border-color: #1890ff;\n}\n.ant-tag-geekblue {\n color: #1d39c4;\n background: #f0f5ff;\n border-color: #adc6ff;\n}\n.ant-tag-geekblue-inverse {\n color: #fff;\n background: #2f54eb;\n border-color: #2f54eb;\n}\n.ant-tag-purple {\n color: #531dab;\n background: #f9f0ff;\n border-color: #d3adf7;\n}\n.ant-tag-purple-inverse {\n color: #fff;\n background: #722ed1;\n border-color: #722ed1;\n}\n.ant-tag-success {\n color: #52c41a;\n background: #f6ffed;\n border-color: #b7eb8f;\n}\n.ant-tag-processing {\n color: #1890ff;\n background: #e6f7ff;\n border-color: #91d5ff;\n}\n.ant-tag-error {\n color: #f5222d;\n background: #fff1f0;\n border-color: #ffa39e;\n}\n.ant-tag-warning {\n color: #fa8c16;\n background: #fff7e6;\n border-color: #ffd591;\n}\n.ant-tag > .anticon + span,\n.ant-tag > span + .anticon {\n margin-left: 7px;\n}\n.ant-tag.ant-tag-rtl {\n margin-right: 0;\n margin-left: 8px;\n direction: rtl;\n text-align: right;\n}\n.ant-tag-rtl .ant-tag-close-icon {\n margin-right: 3px;\n margin-left: 0;\n}\n.ant-tag-rtl.ant-tag > .anticon + span,\n.ant-tag-rtl.ant-tag > span + .anticon {\n margin-right: 7px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-card {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n background: #fff;\n border-radius: 2px;\n}\n.ant-card-rtl {\n direction: rtl;\n}\n.ant-card-hoverable {\n cursor: pointer;\n transition: box-shadow 0.3s, border-color 0.3s;\n}\n.ant-card-hoverable:hover {\n border-color: transparent;\n box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);\n}\n.ant-card-bordered {\n border: 1px solid #f0f0f0;\n}\n.ant-card-head {\n min-height: 48px;\n margin-bottom: -1px;\n padding: 0 24px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n background: transparent;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 2px 2px 0 0;\n}\n.ant-card-head::before {\n display: table;\n content: '';\n}\n.ant-card-head::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-head-wrapper {\n display: flex;\n align-items: center;\n}\n.ant-card-head-title {\n display: inline-block;\n flex: 1;\n padding: 16px 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-card-head-title > .ant-typography,\n.ant-card-head-title > .ant-typography-edit-content {\n left: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n.ant-card-head .ant-tabs {\n clear: both;\n margin-bottom: -17px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-card-head .ant-tabs-bar {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-card-extra {\n float: right;\n margin-left: auto;\n padding: 16px 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-card-rtl .ant-card-extra {\n margin-right: auto;\n margin-left: 0;\n}\n.ant-card-body {\n padding: 24px;\n}\n.ant-card-body::before {\n display: table;\n content: '';\n}\n.ant-card-body::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body {\n margin: -1px 0 0 -1px;\n padding: 0;\n}\n.ant-card-grid {\n float: left;\n width: 33.33%;\n padding: 24px;\n border: 0;\n border-radius: 0;\n box-shadow: 1px 0 0 0 #f0f0f0, 0 1px 0 0 #f0f0f0, 1px 1px 0 0 #f0f0f0, 1px 0 0 0 #f0f0f0 inset, 0 1px 0 0 #f0f0f0 inset;\n transition: all 0.3s;\n}\n.ant-card-rtl .ant-card-grid {\n float: right;\n}\n.ant-card-grid-hoverable:hover {\n position: relative;\n z-index: 1;\n box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);\n}\n.ant-card-contain-tabs > .ant-card-head .ant-card-head-title {\n min-height: 32px;\n padding-bottom: 0;\n}\n.ant-card-contain-tabs > .ant-card-head .ant-card-extra {\n padding-bottom: 0;\n}\n.ant-card-bordered .ant-card-cover {\n margin-top: -1px;\n margin-right: -1px;\n margin-left: -1px;\n}\n.ant-card-cover > * {\n display: block;\n width: 100%;\n}\n.ant-card-cover img {\n border-radius: 2px 2px 0 0;\n}\n.ant-card-actions {\n margin: 0;\n padding: 0;\n list-style: none;\n background: #fff;\n border-top: 1px solid #f0f0f0;\n}\n.ant-card-actions::before {\n display: table;\n content: '';\n}\n.ant-card-actions::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-actions > li {\n float: left;\n margin: 12px 0;\n color: rgba(0, 0, 0, 0.45);\n text-align: center;\n}\n.ant-card-rtl .ant-card-actions > li {\n float: right;\n}\n.ant-card-actions > li > span {\n position: relative;\n display: block;\n min-width: 32px;\n font-size: 14px;\n line-height: 1.5715;\n cursor: pointer;\n}\n.ant-card-actions > li > span:hover {\n color: #1890ff;\n transition: color 0.3s;\n}\n.ant-card-actions > li > span a:not(.ant-btn),\n.ant-card-actions > li > span > .anticon {\n display: inline-block;\n width: 100%;\n color: rgba(0, 0, 0, 0.45);\n line-height: 22px;\n transition: color 0.3s;\n}\n.ant-card-actions > li > span a:not(.ant-btn):hover,\n.ant-card-actions > li > span > .anticon:hover {\n color: #1890ff;\n}\n.ant-card-actions > li > span > .anticon {\n font-size: 16px;\n line-height: 22px;\n}\n.ant-card-actions > li:not(:last-child) {\n border-right: 1px solid #f0f0f0;\n}\n.ant-card-rtl .ant-card-actions > li:not(:last-child) {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-card-type-inner .ant-card-head {\n padding: 0 24px;\n background: #fafafa;\n}\n.ant-card-type-inner .ant-card-head-title {\n padding: 12px 0;\n font-size: 14px;\n}\n.ant-card-type-inner .ant-card-body {\n padding: 16px 24px;\n}\n.ant-card-type-inner .ant-card-extra {\n padding: 13.5px 0;\n}\n.ant-card-meta {\n margin: -4px 0;\n}\n.ant-card-meta::before {\n display: table;\n content: '';\n}\n.ant-card-meta::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-meta-avatar {\n float: left;\n padding-right: 16px;\n}\n.ant-card-rtl .ant-card-meta-avatar {\n float: right;\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-card-meta-detail {\n overflow: hidden;\n}\n.ant-card-meta-detail > div:not(:last-child) {\n margin-bottom: 8px;\n}\n.ant-card-meta-title {\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-card-meta-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-card-loading {\n overflow: hidden;\n}\n.ant-card-loading .ant-card-body {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-card-loading-content p {\n margin: 0;\n}\n.ant-card-loading-block {\n height: 14px;\n margin: 4px 0;\n background: linear-gradient(90deg, rgba(207, 216, 220, 0.2), rgba(207, 216, 220, 0.4), rgba(207, 216, 220, 0.2));\n background-size: 600% 600%;\n border-radius: 2px;\n -webkit-animation: card-loading 1.4s ease infinite;\n animation: card-loading 1.4s ease infinite;\n}\n@-webkit-keyframes card-loading {\n 0%,\n 100% {\n background-position: 0 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n}\n@keyframes card-loading {\n 0%,\n 100% {\n background-position: 0 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n}\n.ant-card-small > .ant-card-head {\n min-height: 36px;\n padding: 0 12px;\n font-size: 14px;\n}\n.ant-card-small > .ant-card-head > .ant-card-head-wrapper > .ant-card-head-title {\n padding: 8px 0;\n}\n.ant-card-small > .ant-card-head > .ant-card-head-wrapper > .ant-card-extra {\n padding: 8px 0;\n font-size: 14px;\n}\n.ant-card-small > .ant-card-body {\n padding: 12px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-tabs-small > .ant-tabs-nav .ant-tabs-tab {\n padding: 8px 0;\n font-size: 14px;\n}\n.ant-tabs-large > .ant-tabs-nav .ant-tabs-tab {\n padding: 16px 0;\n font-size: 16px;\n}\n.ant-tabs-card.ant-tabs-small > .ant-tabs-nav .ant-tabs-tab {\n padding: 6px 16px;\n}\n.ant-tabs-card.ant-tabs-large > .ant-tabs-nav .ant-tabs-tab {\n padding: 7px 16px 6px;\n}\n.ant-tabs-rtl {\n direction: rtl;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab {\n margin: 0 0 0 32px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab:last-of-type {\n margin-left: 0;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove {\n margin-right: 8px;\n margin-left: -4px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon {\n margin: 0;\n}\n.ant-tabs-rtl.ant-tabs-left > .ant-tabs-nav {\n order: 1;\n}\n.ant-tabs-rtl.ant-tabs-left > .ant-tabs-content-holder {\n order: 0;\n}\n.ant-tabs-rtl.ant-tabs-right > .ant-tabs-nav {\n order: 0;\n}\n.ant-tabs-rtl.ant-tabs-right > .ant-tabs-content-holder {\n order: 1;\n}\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-right: 0;\n margin-left: 2px;\n}\n.ant-tabs-dropdown-rtl {\n direction: rtl;\n}\n.ant-tabs-dropdown-rtl .ant-tabs-dropdown-menu-item {\n text-align: right;\n}\n.ant-tabs-top,\n.ant-tabs-bottom {\n flex-direction: column;\n}\n.ant-tabs-top > .ant-tabs-nav,\n.ant-tabs-bottom > .ant-tabs-nav,\n.ant-tabs-top > div > .ant-tabs-nav,\n.ant-tabs-bottom > div > .ant-tabs-nav {\n margin: 0 0 16px 0;\n}\n.ant-tabs-top > .ant-tabs-nav::before,\n.ant-tabs-bottom > .ant-tabs-nav::before,\n.ant-tabs-top > div > .ant-tabs-nav::before,\n.ant-tabs-bottom > div > .ant-tabs-nav::before {\n position: absolute;\n right: 0;\n left: 0;\n border-bottom: 1px solid #f0f0f0;\n content: '';\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar {\n height: 2px;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar-animated {\n transition: width 0.3s, left 0.3s, right 0.3s;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n top: 0;\n bottom: 0;\n width: 30px;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::before {\n left: 0;\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n right: 0;\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before {\n opacity: 1;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after {\n opacity: 1;\n}\n.ant-tabs-top > .ant-tabs-nav::before,\n.ant-tabs-top > div > .ant-tabs-nav::before {\n bottom: 0;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar {\n bottom: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav,\n.ant-tabs-bottom > div > .ant-tabs-nav {\n order: 1;\n margin-top: 16px;\n margin-bottom: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav::before,\n.ant-tabs-bottom > div > .ant-tabs-nav::before {\n top: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar {\n top: 0;\n}\n.ant-tabs-bottom > .ant-tabs-content-holder,\n.ant-tabs-bottom > div > .ant-tabs-content-holder {\n order: 0;\n}\n.ant-tabs-left > .ant-tabs-nav,\n.ant-tabs-right > .ant-tabs-nav,\n.ant-tabs-left > div > .ant-tabs-nav,\n.ant-tabs-right > div > .ant-tabs-nav {\n flex-direction: column;\n min-width: 50px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab {\n padding: 8px 24px;\n text-align: center;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin: 16px 0 0 0;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap {\n flex-direction: column;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n right: 0;\n left: 0;\n height: 30px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::before {\n top: 0;\n box-shadow: inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n bottom: 0;\n box-shadow: inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before {\n opacity: 1;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after {\n opacity: 1;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar {\n width: 2px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar-animated {\n transition: height 0.3s, top 0.3s;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-operations {\n flex: 1 0 auto;\n flex-direction: column;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar {\n right: 0;\n}\n.ant-tabs-left > .ant-tabs-content-holder,\n.ant-tabs-left > div > .ant-tabs-content-holder {\n margin-left: -1px;\n border-left: 1px solid #f0f0f0;\n}\n.ant-tabs-left > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane,\n.ant-tabs-left > div > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane {\n padding-left: 24px;\n}\n.ant-tabs-right > .ant-tabs-nav,\n.ant-tabs-right > div > .ant-tabs-nav {\n order: 1;\n}\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar {\n left: 0;\n}\n.ant-tabs-right > .ant-tabs-content-holder,\n.ant-tabs-right > div > .ant-tabs-content-holder {\n order: 0;\n margin-right: -1px;\n border-right: 1px solid #f0f0f0;\n}\n.ant-tabs-right > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane,\n.ant-tabs-right > div > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane {\n padding-right: 24px;\n}\n.ant-tabs-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n display: block;\n}\n.ant-tabs-dropdown-hidden {\n display: none;\n}\n.ant-tabs-dropdown-menu {\n max-height: 200px;\n margin: 0;\n padding: 4px 0;\n overflow-x: hidden;\n overflow-y: auto;\n text-align: left;\n list-style-type: none;\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 2px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-tabs-dropdown-menu-item {\n min-width: 120px;\n margin: 0;\n padding: 5px 12px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tabs-dropdown-menu-item:hover {\n background: #f5f5f5;\n}\n.ant-tabs-dropdown-menu-item-disabled,\n.ant-tabs-dropdown-menu-item-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n cursor: not-allowed;\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-tab {\n margin: 0;\n padding: 8px 16px;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-tab-active {\n color: #1890ff;\n background: #fff;\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-ink-bar {\n visibility: hidden;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-left: 2px;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 2px 2px 0 0;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-bottom-color: #fff;\n}\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 0 0 2px 2px;\n}\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-top-color: #fff;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-top: 2px;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 2px 0 0 2px;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-right-color: #fff;\n}\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 0 2px 2px 0;\n}\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-left-color: #fff;\n}\n.ant-tabs {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: flex;\n overflow: hidden;\n}\n.ant-tabs > .ant-tabs-nav,\n.ant-tabs > div > .ant-tabs-nav {\n position: relative;\n display: flex;\n flex: none;\n align-items: center;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap {\n position: relative;\n display: inline-block;\n display: flex;\n flex: auto;\n align-self: stretch;\n overflow: hidden;\n white-space: nowrap;\n transform: translate(0);\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n position: absolute;\n z-index: 1;\n opacity: 0;\n transition: opacity 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-list {\n position: relative;\n display: flex;\n transition: transform 0.3s;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-operations {\n display: flex;\n align-self: stretch;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-operations-hidden,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-operations-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-more,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-more {\n position: relative;\n padding: 8px 16px;\n background: transparent;\n border: 0;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-more::after,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-more::after {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px;\n transform: translateY(100%);\n content: '';\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add {\n min-width: 40px;\n padding: 0 8px;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n border-radius: 2px 2px 0 0;\n outline: none;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:hover,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:hover {\n color: #40a9ff;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:active,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:active,\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:focus,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:focus {\n color: #096dd9;\n}\n.ant-tabs-extra-content {\n flex: none;\n}\n.ant-tabs-centered > .ant-tabs-nav .ant-tabs-nav-wrap:not([class*='ant-tabs-nav-wrap-ping']),\n.ant-tabs-centered > div > .ant-tabs-nav .ant-tabs-nav-wrap:not([class*='ant-tabs-nav-wrap-ping']) {\n justify-content: center;\n}\n.ant-tabs-ink-bar {\n position: absolute;\n background: #1890ff;\n pointer-events: none;\n}\n.ant-tabs-tab {\n position: relative;\n display: inline-flex;\n align-items: center;\n padding: 12px 0;\n font-size: 14px;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n}\n.ant-tabs-tab-btn:focus,\n.ant-tabs-tab-remove:focus,\n.ant-tabs-tab-btn:active,\n.ant-tabs-tab-remove:active {\n color: #096dd9;\n}\n.ant-tabs-tab-btn {\n outline: none;\n transition: all 0.3s;\n}\n.ant-tabs-tab-remove {\n flex: none;\n margin-right: -4px;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tabs-tab-remove:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tabs-tab:hover {\n color: #40a9ff;\n}\n.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {\n color: #1890ff;\n text-shadow: 0 0 0.25px currentColor;\n}\n.ant-tabs-tab.ant-tabs-tab-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:focus,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:active {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-tabs-tab .ant-tabs-tab-remove .anticon {\n margin: 0;\n}\n.ant-tabs-tab .anticon {\n margin-right: 12px;\n}\n.ant-tabs-tab + .ant-tabs-tab {\n margin: 0 0 0 32px;\n}\n.ant-tabs-content {\n display: flex;\n width: 100%;\n}\n.ant-tabs-content-holder {\n flex: auto;\n min-width: 0;\n min-height: 0;\n}\n.ant-tabs-content-animated {\n transition: margin 0.3s;\n}\n.ant-tabs-tabpane {\n flex: none;\n width: 100%;\n outline: none;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-row {\n display: flex;\n flex-flow: row wrap;\n}\n.ant-row::before,\n.ant-row::after {\n display: flex;\n}\n.ant-row-no-wrap {\n flex-wrap: nowrap;\n}\n.ant-row-start {\n justify-content: flex-start;\n}\n.ant-row-center {\n justify-content: center;\n}\n.ant-row-end {\n justify-content: flex-end;\n}\n.ant-row-space-between {\n justify-content: space-between;\n}\n.ant-row-space-around {\n justify-content: space-around;\n}\n.ant-row-top {\n align-items: flex-start;\n}\n.ant-row-middle {\n align-items: center;\n}\n.ant-row-bottom {\n align-items: flex-end;\n}\n.ant-col {\n position: relative;\n max-width: 100%;\n min-height: 1px;\n}\n.ant-col-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n}\n.ant-col-push-24 {\n left: 100%;\n}\n.ant-col-pull-24 {\n right: 100%;\n}\n.ant-col-offset-24 {\n margin-left: 100%;\n}\n.ant-col-order-24 {\n order: 24;\n}\n.ant-col-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n}\n.ant-col-push-23 {\n left: 95.83333333%;\n}\n.ant-col-pull-23 {\n right: 95.83333333%;\n}\n.ant-col-offset-23 {\n margin-left: 95.83333333%;\n}\n.ant-col-order-23 {\n order: 23;\n}\n.ant-col-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n}\n.ant-col-push-22 {\n left: 91.66666667%;\n}\n.ant-col-pull-22 {\n right: 91.66666667%;\n}\n.ant-col-offset-22 {\n margin-left: 91.66666667%;\n}\n.ant-col-order-22 {\n order: 22;\n}\n.ant-col-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n}\n.ant-col-push-21 {\n left: 87.5%;\n}\n.ant-col-pull-21 {\n right: 87.5%;\n}\n.ant-col-offset-21 {\n margin-left: 87.5%;\n}\n.ant-col-order-21 {\n order: 21;\n}\n.ant-col-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n}\n.ant-col-push-20 {\n left: 83.33333333%;\n}\n.ant-col-pull-20 {\n right: 83.33333333%;\n}\n.ant-col-offset-20 {\n margin-left: 83.33333333%;\n}\n.ant-col-order-20 {\n order: 20;\n}\n.ant-col-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n}\n.ant-col-push-19 {\n left: 79.16666667%;\n}\n.ant-col-pull-19 {\n right: 79.16666667%;\n}\n.ant-col-offset-19 {\n margin-left: 79.16666667%;\n}\n.ant-col-order-19 {\n order: 19;\n}\n.ant-col-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n}\n.ant-col-push-18 {\n left: 75%;\n}\n.ant-col-pull-18 {\n right: 75%;\n}\n.ant-col-offset-18 {\n margin-left: 75%;\n}\n.ant-col-order-18 {\n order: 18;\n}\n.ant-col-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n}\n.ant-col-push-17 {\n left: 70.83333333%;\n}\n.ant-col-pull-17 {\n right: 70.83333333%;\n}\n.ant-col-offset-17 {\n margin-left: 70.83333333%;\n}\n.ant-col-order-17 {\n order: 17;\n}\n.ant-col-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n}\n.ant-col-push-16 {\n left: 66.66666667%;\n}\n.ant-col-pull-16 {\n right: 66.66666667%;\n}\n.ant-col-offset-16 {\n margin-left: 66.66666667%;\n}\n.ant-col-order-16 {\n order: 16;\n}\n.ant-col-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n}\n.ant-col-push-15 {\n left: 62.5%;\n}\n.ant-col-pull-15 {\n right: 62.5%;\n}\n.ant-col-offset-15 {\n margin-left: 62.5%;\n}\n.ant-col-order-15 {\n order: 15;\n}\n.ant-col-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n}\n.ant-col-push-14 {\n left: 58.33333333%;\n}\n.ant-col-pull-14 {\n right: 58.33333333%;\n}\n.ant-col-offset-14 {\n margin-left: 58.33333333%;\n}\n.ant-col-order-14 {\n order: 14;\n}\n.ant-col-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n}\n.ant-col-push-13 {\n left: 54.16666667%;\n}\n.ant-col-pull-13 {\n right: 54.16666667%;\n}\n.ant-col-offset-13 {\n margin-left: 54.16666667%;\n}\n.ant-col-order-13 {\n order: 13;\n}\n.ant-col-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n}\n.ant-col-push-12 {\n left: 50%;\n}\n.ant-col-pull-12 {\n right: 50%;\n}\n.ant-col-offset-12 {\n margin-left: 50%;\n}\n.ant-col-order-12 {\n order: 12;\n}\n.ant-col-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n}\n.ant-col-push-11 {\n left: 45.83333333%;\n}\n.ant-col-pull-11 {\n right: 45.83333333%;\n}\n.ant-col-offset-11 {\n margin-left: 45.83333333%;\n}\n.ant-col-order-11 {\n order: 11;\n}\n.ant-col-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n}\n.ant-col-push-10 {\n left: 41.66666667%;\n}\n.ant-col-pull-10 {\n right: 41.66666667%;\n}\n.ant-col-offset-10 {\n margin-left: 41.66666667%;\n}\n.ant-col-order-10 {\n order: 10;\n}\n.ant-col-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n}\n.ant-col-push-9 {\n left: 37.5%;\n}\n.ant-col-pull-9 {\n right: 37.5%;\n}\n.ant-col-offset-9 {\n margin-left: 37.5%;\n}\n.ant-col-order-9 {\n order: 9;\n}\n.ant-col-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n}\n.ant-col-push-8 {\n left: 33.33333333%;\n}\n.ant-col-pull-8 {\n right: 33.33333333%;\n}\n.ant-col-offset-8 {\n margin-left: 33.33333333%;\n}\n.ant-col-order-8 {\n order: 8;\n}\n.ant-col-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n}\n.ant-col-push-7 {\n left: 29.16666667%;\n}\n.ant-col-pull-7 {\n right: 29.16666667%;\n}\n.ant-col-offset-7 {\n margin-left: 29.16666667%;\n}\n.ant-col-order-7 {\n order: 7;\n}\n.ant-col-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n}\n.ant-col-push-6 {\n left: 25%;\n}\n.ant-col-pull-6 {\n right: 25%;\n}\n.ant-col-offset-6 {\n margin-left: 25%;\n}\n.ant-col-order-6 {\n order: 6;\n}\n.ant-col-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n}\n.ant-col-push-5 {\n left: 20.83333333%;\n}\n.ant-col-pull-5 {\n right: 20.83333333%;\n}\n.ant-col-offset-5 {\n margin-left: 20.83333333%;\n}\n.ant-col-order-5 {\n order: 5;\n}\n.ant-col-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n}\n.ant-col-push-4 {\n left: 16.66666667%;\n}\n.ant-col-pull-4 {\n right: 16.66666667%;\n}\n.ant-col-offset-4 {\n margin-left: 16.66666667%;\n}\n.ant-col-order-4 {\n order: 4;\n}\n.ant-col-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n}\n.ant-col-push-3 {\n left: 12.5%;\n}\n.ant-col-pull-3 {\n right: 12.5%;\n}\n.ant-col-offset-3 {\n margin-left: 12.5%;\n}\n.ant-col-order-3 {\n order: 3;\n}\n.ant-col-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n}\n.ant-col-push-2 {\n left: 8.33333333%;\n}\n.ant-col-pull-2 {\n right: 8.33333333%;\n}\n.ant-col-offset-2 {\n margin-left: 8.33333333%;\n}\n.ant-col-order-2 {\n order: 2;\n}\n.ant-col-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n}\n.ant-col-push-1 {\n left: 4.16666667%;\n}\n.ant-col-pull-1 {\n right: 4.16666667%;\n}\n.ant-col-offset-1 {\n margin-left: 4.16666667%;\n}\n.ant-col-order-1 {\n order: 1;\n}\n.ant-col-0 {\n display: none;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-offset-0 {\n margin-left: 0;\n}\n.ant-col-order-0 {\n order: 0;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-offset-0.ant-col-rtl {\n margin-right: 0;\n}\n.ant-col-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n}\n.ant-col-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n}\n.ant-col-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n}\n.ant-col-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n}\n.ant-col-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n}\n.ant-col-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n}\n.ant-col-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n}\n.ant-col-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n}\n.ant-col-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n}\n.ant-col-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n}\n.ant-col-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n}\n.ant-col-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n}\n.ant-col-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n}\n.ant-col-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n}\n.ant-col-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n}\n.ant-col-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n}\n.ant-col-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n}\n.ant-col-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n}\n.ant-col-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n}\n.ant-col-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n}\n.ant-col-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n}\n.ant-col-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n}\n.ant-col-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n}\n.ant-col-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n}\n.ant-col-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n}\n.ant-col-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n}\n.ant-col-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n}\n.ant-col-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n}\n.ant-col-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n}\n.ant-col-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n}\n.ant-col-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n}\n.ant-col-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n}\n.ant-col-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n}\n.ant-col-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n}\n.ant-col-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n}\n.ant-col-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n}\n.ant-col-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n}\n.ant-col-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n}\n.ant-col-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n}\n.ant-col-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n}\n.ant-col-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n}\n.ant-col-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n}\n.ant-col-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n}\n.ant-col-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n}\n.ant-col-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n}\n.ant-col-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n}\n.ant-col-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n}\n.ant-col-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n}\n.ant-col-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n}\n.ant-col-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n}\n.ant-col-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n}\n.ant-col-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n}\n.ant-col-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n}\n.ant-col-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n}\n.ant-col-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n}\n.ant-col-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n}\n.ant-col-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n}\n.ant-col-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n}\n.ant-col-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n}\n.ant-col-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n}\n.ant-col-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n}\n.ant-col-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n}\n.ant-col-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n}\n.ant-col-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n}\n.ant-col-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n}\n.ant-col-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n}\n.ant-col-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n}\n.ant-col-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n}\n.ant-col-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n}\n.ant-col-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n}\n.ant-col-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n}\n.ant-col-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n}\n.ant-col-xs-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n}\n.ant-col-xs-push-24 {\n left: 100%;\n}\n.ant-col-xs-pull-24 {\n right: 100%;\n}\n.ant-col-xs-offset-24 {\n margin-left: 100%;\n}\n.ant-col-xs-order-24 {\n order: 24;\n}\n.ant-col-xs-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n}\n.ant-col-xs-push-23 {\n left: 95.83333333%;\n}\n.ant-col-xs-pull-23 {\n right: 95.83333333%;\n}\n.ant-col-xs-offset-23 {\n margin-left: 95.83333333%;\n}\n.ant-col-xs-order-23 {\n order: 23;\n}\n.ant-col-xs-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n}\n.ant-col-xs-push-22 {\n left: 91.66666667%;\n}\n.ant-col-xs-pull-22 {\n right: 91.66666667%;\n}\n.ant-col-xs-offset-22 {\n margin-left: 91.66666667%;\n}\n.ant-col-xs-order-22 {\n order: 22;\n}\n.ant-col-xs-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n}\n.ant-col-xs-push-21 {\n left: 87.5%;\n}\n.ant-col-xs-pull-21 {\n right: 87.5%;\n}\n.ant-col-xs-offset-21 {\n margin-left: 87.5%;\n}\n.ant-col-xs-order-21 {\n order: 21;\n}\n.ant-col-xs-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n}\n.ant-col-xs-push-20 {\n left: 83.33333333%;\n}\n.ant-col-xs-pull-20 {\n right: 83.33333333%;\n}\n.ant-col-xs-offset-20 {\n margin-left: 83.33333333%;\n}\n.ant-col-xs-order-20 {\n order: 20;\n}\n.ant-col-xs-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n}\n.ant-col-xs-push-19 {\n left: 79.16666667%;\n}\n.ant-col-xs-pull-19 {\n right: 79.16666667%;\n}\n.ant-col-xs-offset-19 {\n margin-left: 79.16666667%;\n}\n.ant-col-xs-order-19 {\n order: 19;\n}\n.ant-col-xs-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n}\n.ant-col-xs-push-18 {\n left: 75%;\n}\n.ant-col-xs-pull-18 {\n right: 75%;\n}\n.ant-col-xs-offset-18 {\n margin-left: 75%;\n}\n.ant-col-xs-order-18 {\n order: 18;\n}\n.ant-col-xs-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n}\n.ant-col-xs-push-17 {\n left: 70.83333333%;\n}\n.ant-col-xs-pull-17 {\n right: 70.83333333%;\n}\n.ant-col-xs-offset-17 {\n margin-left: 70.83333333%;\n}\n.ant-col-xs-order-17 {\n order: 17;\n}\n.ant-col-xs-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n}\n.ant-col-xs-push-16 {\n left: 66.66666667%;\n}\n.ant-col-xs-pull-16 {\n right: 66.66666667%;\n}\n.ant-col-xs-offset-16 {\n margin-left: 66.66666667%;\n}\n.ant-col-xs-order-16 {\n order: 16;\n}\n.ant-col-xs-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n}\n.ant-col-xs-push-15 {\n left: 62.5%;\n}\n.ant-col-xs-pull-15 {\n right: 62.5%;\n}\n.ant-col-xs-offset-15 {\n margin-left: 62.5%;\n}\n.ant-col-xs-order-15 {\n order: 15;\n}\n.ant-col-xs-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n}\n.ant-col-xs-push-14 {\n left: 58.33333333%;\n}\n.ant-col-xs-pull-14 {\n right: 58.33333333%;\n}\n.ant-col-xs-offset-14 {\n margin-left: 58.33333333%;\n}\n.ant-col-xs-order-14 {\n order: 14;\n}\n.ant-col-xs-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n}\n.ant-col-xs-push-13 {\n left: 54.16666667%;\n}\n.ant-col-xs-pull-13 {\n right: 54.16666667%;\n}\n.ant-col-xs-offset-13 {\n margin-left: 54.16666667%;\n}\n.ant-col-xs-order-13 {\n order: 13;\n}\n.ant-col-xs-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n}\n.ant-col-xs-push-12 {\n left: 50%;\n}\n.ant-col-xs-pull-12 {\n right: 50%;\n}\n.ant-col-xs-offset-12 {\n margin-left: 50%;\n}\n.ant-col-xs-order-12 {\n order: 12;\n}\n.ant-col-xs-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n}\n.ant-col-xs-push-11 {\n left: 45.83333333%;\n}\n.ant-col-xs-pull-11 {\n right: 45.83333333%;\n}\n.ant-col-xs-offset-11 {\n margin-left: 45.83333333%;\n}\n.ant-col-xs-order-11 {\n order: 11;\n}\n.ant-col-xs-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n}\n.ant-col-xs-push-10 {\n left: 41.66666667%;\n}\n.ant-col-xs-pull-10 {\n right: 41.66666667%;\n}\n.ant-col-xs-offset-10 {\n margin-left: 41.66666667%;\n}\n.ant-col-xs-order-10 {\n order: 10;\n}\n.ant-col-xs-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n}\n.ant-col-xs-push-9 {\n left: 37.5%;\n}\n.ant-col-xs-pull-9 {\n right: 37.5%;\n}\n.ant-col-xs-offset-9 {\n margin-left: 37.5%;\n}\n.ant-col-xs-order-9 {\n order: 9;\n}\n.ant-col-xs-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n}\n.ant-col-xs-push-8 {\n left: 33.33333333%;\n}\n.ant-col-xs-pull-8 {\n right: 33.33333333%;\n}\n.ant-col-xs-offset-8 {\n margin-left: 33.33333333%;\n}\n.ant-col-xs-order-8 {\n order: 8;\n}\n.ant-col-xs-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n}\n.ant-col-xs-push-7 {\n left: 29.16666667%;\n}\n.ant-col-xs-pull-7 {\n right: 29.16666667%;\n}\n.ant-col-xs-offset-7 {\n margin-left: 29.16666667%;\n}\n.ant-col-xs-order-7 {\n order: 7;\n}\n.ant-col-xs-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n}\n.ant-col-xs-push-6 {\n left: 25%;\n}\n.ant-col-xs-pull-6 {\n right: 25%;\n}\n.ant-col-xs-offset-6 {\n margin-left: 25%;\n}\n.ant-col-xs-order-6 {\n order: 6;\n}\n.ant-col-xs-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n}\n.ant-col-xs-push-5 {\n left: 20.83333333%;\n}\n.ant-col-xs-pull-5 {\n right: 20.83333333%;\n}\n.ant-col-xs-offset-5 {\n margin-left: 20.83333333%;\n}\n.ant-col-xs-order-5 {\n order: 5;\n}\n.ant-col-xs-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n}\n.ant-col-xs-push-4 {\n left: 16.66666667%;\n}\n.ant-col-xs-pull-4 {\n right: 16.66666667%;\n}\n.ant-col-xs-offset-4 {\n margin-left: 16.66666667%;\n}\n.ant-col-xs-order-4 {\n order: 4;\n}\n.ant-col-xs-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n}\n.ant-col-xs-push-3 {\n left: 12.5%;\n}\n.ant-col-xs-pull-3 {\n right: 12.5%;\n}\n.ant-col-xs-offset-3 {\n margin-left: 12.5%;\n}\n.ant-col-xs-order-3 {\n order: 3;\n}\n.ant-col-xs-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n}\n.ant-col-xs-push-2 {\n left: 8.33333333%;\n}\n.ant-col-xs-pull-2 {\n right: 8.33333333%;\n}\n.ant-col-xs-offset-2 {\n margin-left: 8.33333333%;\n}\n.ant-col-xs-order-2 {\n order: 2;\n}\n.ant-col-xs-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n}\n.ant-col-xs-push-1 {\n left: 4.16666667%;\n}\n.ant-col-xs-pull-1 {\n right: 4.16666667%;\n}\n.ant-col-xs-offset-1 {\n margin-left: 4.16666667%;\n}\n.ant-col-xs-order-1 {\n order: 1;\n}\n.ant-col-xs-0 {\n display: none;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-xs-push-0 {\n left: auto;\n}\n.ant-col-xs-pull-0 {\n right: auto;\n}\n.ant-col-xs-offset-0 {\n margin-left: 0;\n}\n.ant-col-xs-order-0 {\n order: 0;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-xs-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-xs-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-xs-offset-0.ant-col-rtl {\n margin-right: 0;\n}\n.ant-col-xs-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n}\n.ant-col-xs-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n}\n.ant-col-xs-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n}\n.ant-col-xs-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n}\n.ant-col-xs-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n}\n.ant-col-xs-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n}\n.ant-col-xs-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n}\n.ant-col-xs-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n}\n.ant-col-xs-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n}\n.ant-col-xs-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n}\n.ant-col-xs-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n}\n.ant-col-xs-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n}\n.ant-col-xs-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n}\n.ant-col-xs-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n}\n.ant-col-xs-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n}\n.ant-col-xs-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n}\n.ant-col-xs-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n}\n.ant-col-xs-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n}\n.ant-col-xs-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n}\n.ant-col-xs-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n}\n.ant-col-xs-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n}\n.ant-col-xs-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n}\n.ant-col-xs-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n}\n.ant-col-xs-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n}\n.ant-col-xs-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n}\n.ant-col-xs-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n}\n.ant-col-xs-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n}\n.ant-col-xs-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n}\n.ant-col-xs-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n}\n.ant-col-xs-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n}\n.ant-col-xs-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n}\n.ant-col-xs-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n}\n.ant-col-xs-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n}\n.ant-col-xs-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n}\n.ant-col-xs-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n}\n.ant-col-xs-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n}\n@media (min-width: 576px) {\n .ant-col-sm-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-sm-push-24 {\n left: 100%;\n }\n .ant-col-sm-pull-24 {\n right: 100%;\n }\n .ant-col-sm-offset-24 {\n margin-left: 100%;\n }\n .ant-col-sm-order-24 {\n order: 24;\n }\n .ant-col-sm-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-sm-push-23 {\n left: 95.83333333%;\n }\n .ant-col-sm-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-sm-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-sm-order-23 {\n order: 23;\n }\n .ant-col-sm-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-sm-push-22 {\n left: 91.66666667%;\n }\n .ant-col-sm-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-sm-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-sm-order-22 {\n order: 22;\n }\n .ant-col-sm-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-sm-push-21 {\n left: 87.5%;\n }\n .ant-col-sm-pull-21 {\n right: 87.5%;\n }\n .ant-col-sm-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-sm-order-21 {\n order: 21;\n }\n .ant-col-sm-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-sm-push-20 {\n left: 83.33333333%;\n }\n .ant-col-sm-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-sm-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-sm-order-20 {\n order: 20;\n }\n .ant-col-sm-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-sm-push-19 {\n left: 79.16666667%;\n }\n .ant-col-sm-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-sm-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-sm-order-19 {\n order: 19;\n }\n .ant-col-sm-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-sm-push-18 {\n left: 75%;\n }\n .ant-col-sm-pull-18 {\n right: 75%;\n }\n .ant-col-sm-offset-18 {\n margin-left: 75%;\n }\n .ant-col-sm-order-18 {\n order: 18;\n }\n .ant-col-sm-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-sm-push-17 {\n left: 70.83333333%;\n }\n .ant-col-sm-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-sm-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-sm-order-17 {\n order: 17;\n }\n .ant-col-sm-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-sm-push-16 {\n left: 66.66666667%;\n }\n .ant-col-sm-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-sm-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-sm-order-16 {\n order: 16;\n }\n .ant-col-sm-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-sm-push-15 {\n left: 62.5%;\n }\n .ant-col-sm-pull-15 {\n right: 62.5%;\n }\n .ant-col-sm-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-sm-order-15 {\n order: 15;\n }\n .ant-col-sm-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-sm-push-14 {\n left: 58.33333333%;\n }\n .ant-col-sm-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-sm-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-sm-order-14 {\n order: 14;\n }\n .ant-col-sm-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-sm-push-13 {\n left: 54.16666667%;\n }\n .ant-col-sm-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-sm-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-sm-order-13 {\n order: 13;\n }\n .ant-col-sm-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-sm-push-12 {\n left: 50%;\n }\n .ant-col-sm-pull-12 {\n right: 50%;\n }\n .ant-col-sm-offset-12 {\n margin-left: 50%;\n }\n .ant-col-sm-order-12 {\n order: 12;\n }\n .ant-col-sm-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-sm-push-11 {\n left: 45.83333333%;\n }\n .ant-col-sm-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-sm-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-sm-order-11 {\n order: 11;\n }\n .ant-col-sm-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-sm-push-10 {\n left: 41.66666667%;\n }\n .ant-col-sm-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-sm-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-sm-order-10 {\n order: 10;\n }\n .ant-col-sm-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-sm-push-9 {\n left: 37.5%;\n }\n .ant-col-sm-pull-9 {\n right: 37.5%;\n }\n .ant-col-sm-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-sm-order-9 {\n order: 9;\n }\n .ant-col-sm-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-sm-push-8 {\n left: 33.33333333%;\n }\n .ant-col-sm-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-sm-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-sm-order-8 {\n order: 8;\n }\n .ant-col-sm-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-sm-push-7 {\n left: 29.16666667%;\n }\n .ant-col-sm-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-sm-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-sm-order-7 {\n order: 7;\n }\n .ant-col-sm-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-sm-push-6 {\n left: 25%;\n }\n .ant-col-sm-pull-6 {\n right: 25%;\n }\n .ant-col-sm-offset-6 {\n margin-left: 25%;\n }\n .ant-col-sm-order-6 {\n order: 6;\n }\n .ant-col-sm-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-sm-push-5 {\n left: 20.83333333%;\n }\n .ant-col-sm-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-sm-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-sm-order-5 {\n order: 5;\n }\n .ant-col-sm-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-sm-push-4 {\n left: 16.66666667%;\n }\n .ant-col-sm-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-sm-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-sm-order-4 {\n order: 4;\n }\n .ant-col-sm-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-sm-push-3 {\n left: 12.5%;\n }\n .ant-col-sm-pull-3 {\n right: 12.5%;\n }\n .ant-col-sm-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-sm-order-3 {\n order: 3;\n }\n .ant-col-sm-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-sm-push-2 {\n left: 8.33333333%;\n }\n .ant-col-sm-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-sm-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-sm-order-2 {\n order: 2;\n }\n .ant-col-sm-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-sm-push-1 {\n left: 4.16666667%;\n }\n .ant-col-sm-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-sm-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-sm-order-1 {\n order: 1;\n }\n .ant-col-sm-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-sm-push-0 {\n left: auto;\n }\n .ant-col-sm-pull-0 {\n right: auto;\n }\n .ant-col-sm-offset-0 {\n margin-left: 0;\n }\n .ant-col-sm-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-sm-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-sm-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-sm-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-sm-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-sm-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-sm-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-sm-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-sm-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-sm-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-sm-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-sm-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-sm-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-sm-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-sm-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-sm-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-sm-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-sm-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-sm-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-sm-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-sm-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-sm-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-sm-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-sm-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-sm-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-sm-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-sm-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-sm-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-sm-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-sm-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-sm-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-sm-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-sm-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-sm-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-sm-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-sm-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-sm-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-sm-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-sm-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-sm-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 768px) {\n .ant-col-md-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-md-push-24 {\n left: 100%;\n }\n .ant-col-md-pull-24 {\n right: 100%;\n }\n .ant-col-md-offset-24 {\n margin-left: 100%;\n }\n .ant-col-md-order-24 {\n order: 24;\n }\n .ant-col-md-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-md-push-23 {\n left: 95.83333333%;\n }\n .ant-col-md-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-md-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-md-order-23 {\n order: 23;\n }\n .ant-col-md-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-md-push-22 {\n left: 91.66666667%;\n }\n .ant-col-md-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-md-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-md-order-22 {\n order: 22;\n }\n .ant-col-md-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-md-push-21 {\n left: 87.5%;\n }\n .ant-col-md-pull-21 {\n right: 87.5%;\n }\n .ant-col-md-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-md-order-21 {\n order: 21;\n }\n .ant-col-md-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-md-push-20 {\n left: 83.33333333%;\n }\n .ant-col-md-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-md-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-md-order-20 {\n order: 20;\n }\n .ant-col-md-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-md-push-19 {\n left: 79.16666667%;\n }\n .ant-col-md-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-md-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-md-order-19 {\n order: 19;\n }\n .ant-col-md-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-md-push-18 {\n left: 75%;\n }\n .ant-col-md-pull-18 {\n right: 75%;\n }\n .ant-col-md-offset-18 {\n margin-left: 75%;\n }\n .ant-col-md-order-18 {\n order: 18;\n }\n .ant-col-md-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-md-push-17 {\n left: 70.83333333%;\n }\n .ant-col-md-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-md-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-md-order-17 {\n order: 17;\n }\n .ant-col-md-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-md-push-16 {\n left: 66.66666667%;\n }\n .ant-col-md-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-md-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-md-order-16 {\n order: 16;\n }\n .ant-col-md-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-md-push-15 {\n left: 62.5%;\n }\n .ant-col-md-pull-15 {\n right: 62.5%;\n }\n .ant-col-md-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-md-order-15 {\n order: 15;\n }\n .ant-col-md-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-md-push-14 {\n left: 58.33333333%;\n }\n .ant-col-md-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-md-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-md-order-14 {\n order: 14;\n }\n .ant-col-md-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-md-push-13 {\n left: 54.16666667%;\n }\n .ant-col-md-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-md-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-md-order-13 {\n order: 13;\n }\n .ant-col-md-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-md-push-12 {\n left: 50%;\n }\n .ant-col-md-pull-12 {\n right: 50%;\n }\n .ant-col-md-offset-12 {\n margin-left: 50%;\n }\n .ant-col-md-order-12 {\n order: 12;\n }\n .ant-col-md-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-md-push-11 {\n left: 45.83333333%;\n }\n .ant-col-md-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-md-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-md-order-11 {\n order: 11;\n }\n .ant-col-md-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-md-push-10 {\n left: 41.66666667%;\n }\n .ant-col-md-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-md-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-md-order-10 {\n order: 10;\n }\n .ant-col-md-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-md-push-9 {\n left: 37.5%;\n }\n .ant-col-md-pull-9 {\n right: 37.5%;\n }\n .ant-col-md-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-md-order-9 {\n order: 9;\n }\n .ant-col-md-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-md-push-8 {\n left: 33.33333333%;\n }\n .ant-col-md-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-md-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-md-order-8 {\n order: 8;\n }\n .ant-col-md-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-md-push-7 {\n left: 29.16666667%;\n }\n .ant-col-md-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-md-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-md-order-7 {\n order: 7;\n }\n .ant-col-md-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-md-push-6 {\n left: 25%;\n }\n .ant-col-md-pull-6 {\n right: 25%;\n }\n .ant-col-md-offset-6 {\n margin-left: 25%;\n }\n .ant-col-md-order-6 {\n order: 6;\n }\n .ant-col-md-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-md-push-5 {\n left: 20.83333333%;\n }\n .ant-col-md-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-md-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-md-order-5 {\n order: 5;\n }\n .ant-col-md-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-md-push-4 {\n left: 16.66666667%;\n }\n .ant-col-md-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-md-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-md-order-4 {\n order: 4;\n }\n .ant-col-md-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-md-push-3 {\n left: 12.5%;\n }\n .ant-col-md-pull-3 {\n right: 12.5%;\n }\n .ant-col-md-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-md-order-3 {\n order: 3;\n }\n .ant-col-md-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-md-push-2 {\n left: 8.33333333%;\n }\n .ant-col-md-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-md-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-md-order-2 {\n order: 2;\n }\n .ant-col-md-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-md-push-1 {\n left: 4.16666667%;\n }\n .ant-col-md-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-md-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-md-order-1 {\n order: 1;\n }\n .ant-col-md-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-md-push-0 {\n left: auto;\n }\n .ant-col-md-pull-0 {\n right: auto;\n }\n .ant-col-md-offset-0 {\n margin-left: 0;\n }\n .ant-col-md-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-md-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-md-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-md-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-md-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-md-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-md-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-md-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-md-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-md-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-md-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-md-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-md-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-md-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-md-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-md-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-md-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-md-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-md-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-md-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-md-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-md-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-md-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-md-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-md-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-md-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-md-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-md-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-md-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-md-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-md-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-md-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-md-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-md-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-md-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-md-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-md-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-md-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-md-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-md-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-md-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-md-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-md-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-md-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-md-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-md-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-md-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-md-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-md-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-md-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-md-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-md-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-md-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-md-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-md-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-md-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-md-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-md-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-md-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-md-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 992px) {\n .ant-col-lg-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-lg-push-24 {\n left: 100%;\n }\n .ant-col-lg-pull-24 {\n right: 100%;\n }\n .ant-col-lg-offset-24 {\n margin-left: 100%;\n }\n .ant-col-lg-order-24 {\n order: 24;\n }\n .ant-col-lg-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-lg-push-23 {\n left: 95.83333333%;\n }\n .ant-col-lg-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-lg-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-lg-order-23 {\n order: 23;\n }\n .ant-col-lg-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-lg-push-22 {\n left: 91.66666667%;\n }\n .ant-col-lg-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-lg-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-lg-order-22 {\n order: 22;\n }\n .ant-col-lg-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-lg-push-21 {\n left: 87.5%;\n }\n .ant-col-lg-pull-21 {\n right: 87.5%;\n }\n .ant-col-lg-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-lg-order-21 {\n order: 21;\n }\n .ant-col-lg-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-lg-push-20 {\n left: 83.33333333%;\n }\n .ant-col-lg-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-lg-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-lg-order-20 {\n order: 20;\n }\n .ant-col-lg-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-lg-push-19 {\n left: 79.16666667%;\n }\n .ant-col-lg-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-lg-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-lg-order-19 {\n order: 19;\n }\n .ant-col-lg-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-lg-push-18 {\n left: 75%;\n }\n .ant-col-lg-pull-18 {\n right: 75%;\n }\n .ant-col-lg-offset-18 {\n margin-left: 75%;\n }\n .ant-col-lg-order-18 {\n order: 18;\n }\n .ant-col-lg-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-lg-push-17 {\n left: 70.83333333%;\n }\n .ant-col-lg-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-lg-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-lg-order-17 {\n order: 17;\n }\n .ant-col-lg-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-lg-push-16 {\n left: 66.66666667%;\n }\n .ant-col-lg-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-lg-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-lg-order-16 {\n order: 16;\n }\n .ant-col-lg-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-lg-push-15 {\n left: 62.5%;\n }\n .ant-col-lg-pull-15 {\n right: 62.5%;\n }\n .ant-col-lg-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-lg-order-15 {\n order: 15;\n }\n .ant-col-lg-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-lg-push-14 {\n left: 58.33333333%;\n }\n .ant-col-lg-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-lg-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-lg-order-14 {\n order: 14;\n }\n .ant-col-lg-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-lg-push-13 {\n left: 54.16666667%;\n }\n .ant-col-lg-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-lg-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-lg-order-13 {\n order: 13;\n }\n .ant-col-lg-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-lg-push-12 {\n left: 50%;\n }\n .ant-col-lg-pull-12 {\n right: 50%;\n }\n .ant-col-lg-offset-12 {\n margin-left: 50%;\n }\n .ant-col-lg-order-12 {\n order: 12;\n }\n .ant-col-lg-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-lg-push-11 {\n left: 45.83333333%;\n }\n .ant-col-lg-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-lg-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-lg-order-11 {\n order: 11;\n }\n .ant-col-lg-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-lg-push-10 {\n left: 41.66666667%;\n }\n .ant-col-lg-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-lg-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-lg-order-10 {\n order: 10;\n }\n .ant-col-lg-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-lg-push-9 {\n left: 37.5%;\n }\n .ant-col-lg-pull-9 {\n right: 37.5%;\n }\n .ant-col-lg-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-lg-order-9 {\n order: 9;\n }\n .ant-col-lg-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-lg-push-8 {\n left: 33.33333333%;\n }\n .ant-col-lg-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-lg-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-lg-order-8 {\n order: 8;\n }\n .ant-col-lg-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-lg-push-7 {\n left: 29.16666667%;\n }\n .ant-col-lg-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-lg-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-lg-order-7 {\n order: 7;\n }\n .ant-col-lg-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-lg-push-6 {\n left: 25%;\n }\n .ant-col-lg-pull-6 {\n right: 25%;\n }\n .ant-col-lg-offset-6 {\n margin-left: 25%;\n }\n .ant-col-lg-order-6 {\n order: 6;\n }\n .ant-col-lg-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-lg-push-5 {\n left: 20.83333333%;\n }\n .ant-col-lg-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-lg-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-lg-order-5 {\n order: 5;\n }\n .ant-col-lg-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-lg-push-4 {\n left: 16.66666667%;\n }\n .ant-col-lg-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-lg-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-lg-order-4 {\n order: 4;\n }\n .ant-col-lg-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-lg-push-3 {\n left: 12.5%;\n }\n .ant-col-lg-pull-3 {\n right: 12.5%;\n }\n .ant-col-lg-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-lg-order-3 {\n order: 3;\n }\n .ant-col-lg-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-lg-push-2 {\n left: 8.33333333%;\n }\n .ant-col-lg-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-lg-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-lg-order-2 {\n order: 2;\n }\n .ant-col-lg-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-lg-push-1 {\n left: 4.16666667%;\n }\n .ant-col-lg-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-lg-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-lg-order-1 {\n order: 1;\n }\n .ant-col-lg-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-lg-push-0 {\n left: auto;\n }\n .ant-col-lg-pull-0 {\n right: auto;\n }\n .ant-col-lg-offset-0 {\n margin-left: 0;\n }\n .ant-col-lg-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-lg-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-lg-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-lg-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-lg-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-lg-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-lg-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-lg-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-lg-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-lg-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-lg-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-lg-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-lg-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-lg-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-lg-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-lg-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-lg-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-lg-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-lg-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-lg-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-lg-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-lg-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-lg-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-lg-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-lg-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-lg-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-lg-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-lg-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-lg-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-lg-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-lg-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-lg-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-lg-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-lg-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-lg-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-lg-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-lg-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-lg-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-lg-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-lg-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 1200px) {\n .ant-col-xl-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xl-push-24 {\n left: 100%;\n }\n .ant-col-xl-pull-24 {\n right: 100%;\n }\n .ant-col-xl-offset-24 {\n margin-left: 100%;\n }\n .ant-col-xl-order-24 {\n order: 24;\n }\n .ant-col-xl-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-xl-push-23 {\n left: 95.83333333%;\n }\n .ant-col-xl-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-xl-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-xl-order-23 {\n order: 23;\n }\n .ant-col-xl-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-xl-push-22 {\n left: 91.66666667%;\n }\n .ant-col-xl-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-xl-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-xl-order-22 {\n order: 22;\n }\n .ant-col-xl-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-xl-push-21 {\n left: 87.5%;\n }\n .ant-col-xl-pull-21 {\n right: 87.5%;\n }\n .ant-col-xl-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-xl-order-21 {\n order: 21;\n }\n .ant-col-xl-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-xl-push-20 {\n left: 83.33333333%;\n }\n .ant-col-xl-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-xl-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-xl-order-20 {\n order: 20;\n }\n .ant-col-xl-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-xl-push-19 {\n left: 79.16666667%;\n }\n .ant-col-xl-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-xl-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-xl-order-19 {\n order: 19;\n }\n .ant-col-xl-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-xl-push-18 {\n left: 75%;\n }\n .ant-col-xl-pull-18 {\n right: 75%;\n }\n .ant-col-xl-offset-18 {\n margin-left: 75%;\n }\n .ant-col-xl-order-18 {\n order: 18;\n }\n .ant-col-xl-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-xl-push-17 {\n left: 70.83333333%;\n }\n .ant-col-xl-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-xl-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-xl-order-17 {\n order: 17;\n }\n .ant-col-xl-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-xl-push-16 {\n left: 66.66666667%;\n }\n .ant-col-xl-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-xl-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-xl-order-16 {\n order: 16;\n }\n .ant-col-xl-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-xl-push-15 {\n left: 62.5%;\n }\n .ant-col-xl-pull-15 {\n right: 62.5%;\n }\n .ant-col-xl-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-xl-order-15 {\n order: 15;\n }\n .ant-col-xl-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-xl-push-14 {\n left: 58.33333333%;\n }\n .ant-col-xl-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-xl-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-xl-order-14 {\n order: 14;\n }\n .ant-col-xl-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-xl-push-13 {\n left: 54.16666667%;\n }\n .ant-col-xl-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-xl-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-xl-order-13 {\n order: 13;\n }\n .ant-col-xl-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-xl-push-12 {\n left: 50%;\n }\n .ant-col-xl-pull-12 {\n right: 50%;\n }\n .ant-col-xl-offset-12 {\n margin-left: 50%;\n }\n .ant-col-xl-order-12 {\n order: 12;\n }\n .ant-col-xl-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-xl-push-11 {\n left: 45.83333333%;\n }\n .ant-col-xl-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-xl-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-xl-order-11 {\n order: 11;\n }\n .ant-col-xl-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-xl-push-10 {\n left: 41.66666667%;\n }\n .ant-col-xl-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-xl-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-xl-order-10 {\n order: 10;\n }\n .ant-col-xl-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-xl-push-9 {\n left: 37.5%;\n }\n .ant-col-xl-pull-9 {\n right: 37.5%;\n }\n .ant-col-xl-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-xl-order-9 {\n order: 9;\n }\n .ant-col-xl-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-xl-push-8 {\n left: 33.33333333%;\n }\n .ant-col-xl-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-xl-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-xl-order-8 {\n order: 8;\n }\n .ant-col-xl-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-xl-push-7 {\n left: 29.16666667%;\n }\n .ant-col-xl-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-xl-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-xl-order-7 {\n order: 7;\n }\n .ant-col-xl-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-xl-push-6 {\n left: 25%;\n }\n .ant-col-xl-pull-6 {\n right: 25%;\n }\n .ant-col-xl-offset-6 {\n margin-left: 25%;\n }\n .ant-col-xl-order-6 {\n order: 6;\n }\n .ant-col-xl-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-xl-push-5 {\n left: 20.83333333%;\n }\n .ant-col-xl-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-xl-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-xl-order-5 {\n order: 5;\n }\n .ant-col-xl-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-xl-push-4 {\n left: 16.66666667%;\n }\n .ant-col-xl-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-xl-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-xl-order-4 {\n order: 4;\n }\n .ant-col-xl-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-xl-push-3 {\n left: 12.5%;\n }\n .ant-col-xl-pull-3 {\n right: 12.5%;\n }\n .ant-col-xl-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-xl-order-3 {\n order: 3;\n }\n .ant-col-xl-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-xl-push-2 {\n left: 8.33333333%;\n }\n .ant-col-xl-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-xl-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-xl-order-2 {\n order: 2;\n }\n .ant-col-xl-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-xl-push-1 {\n left: 4.16666667%;\n }\n .ant-col-xl-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-xl-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-xl-order-1 {\n order: 1;\n }\n .ant-col-xl-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-xl-push-0 {\n left: auto;\n }\n .ant-col-xl-pull-0 {\n right: auto;\n }\n .ant-col-xl-offset-0 {\n margin-left: 0;\n }\n .ant-col-xl-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xl-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-xl-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xl-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-xl-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-xl-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-xl-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-xl-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-xl-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-xl-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-xl-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-xl-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-xl-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-xl-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-xl-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-xl-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-xl-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-xl-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-xl-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-xl-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-xl-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-xl-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-xl-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-xl-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-xl-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-xl-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-xl-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-xl-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-xl-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-xl-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-xl-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-xl-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-xl-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-xl-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-xl-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-xl-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-xl-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-xl-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-xl-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-xl-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 1600px) {\n .ant-col-xxl-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xxl-push-24 {\n left: 100%;\n }\n .ant-col-xxl-pull-24 {\n right: 100%;\n }\n .ant-col-xxl-offset-24 {\n margin-left: 100%;\n }\n .ant-col-xxl-order-24 {\n order: 24;\n }\n .ant-col-xxl-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-xxl-push-23 {\n left: 95.83333333%;\n }\n .ant-col-xxl-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-xxl-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-xxl-order-23 {\n order: 23;\n }\n .ant-col-xxl-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-xxl-push-22 {\n left: 91.66666667%;\n }\n .ant-col-xxl-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-xxl-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-xxl-order-22 {\n order: 22;\n }\n .ant-col-xxl-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-xxl-push-21 {\n left: 87.5%;\n }\n .ant-col-xxl-pull-21 {\n right: 87.5%;\n }\n .ant-col-xxl-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-xxl-order-21 {\n order: 21;\n }\n .ant-col-xxl-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-xxl-push-20 {\n left: 83.33333333%;\n }\n .ant-col-xxl-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-xxl-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-xxl-order-20 {\n order: 20;\n }\n .ant-col-xxl-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-xxl-push-19 {\n left: 79.16666667%;\n }\n .ant-col-xxl-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-xxl-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-xxl-order-19 {\n order: 19;\n }\n .ant-col-xxl-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-xxl-push-18 {\n left: 75%;\n }\n .ant-col-xxl-pull-18 {\n right: 75%;\n }\n .ant-col-xxl-offset-18 {\n margin-left: 75%;\n }\n .ant-col-xxl-order-18 {\n order: 18;\n }\n .ant-col-xxl-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-xxl-push-17 {\n left: 70.83333333%;\n }\n .ant-col-xxl-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-xxl-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-xxl-order-17 {\n order: 17;\n }\n .ant-col-xxl-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-xxl-push-16 {\n left: 66.66666667%;\n }\n .ant-col-xxl-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-xxl-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-xxl-order-16 {\n order: 16;\n }\n .ant-col-xxl-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-xxl-push-15 {\n left: 62.5%;\n }\n .ant-col-xxl-pull-15 {\n right: 62.5%;\n }\n .ant-col-xxl-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-xxl-order-15 {\n order: 15;\n }\n .ant-col-xxl-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-xxl-push-14 {\n left: 58.33333333%;\n }\n .ant-col-xxl-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-xxl-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-xxl-order-14 {\n order: 14;\n }\n .ant-col-xxl-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-xxl-push-13 {\n left: 54.16666667%;\n }\n .ant-col-xxl-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-xxl-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-xxl-order-13 {\n order: 13;\n }\n .ant-col-xxl-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-xxl-push-12 {\n left: 50%;\n }\n .ant-col-xxl-pull-12 {\n right: 50%;\n }\n .ant-col-xxl-offset-12 {\n margin-left: 50%;\n }\n .ant-col-xxl-order-12 {\n order: 12;\n }\n .ant-col-xxl-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-xxl-push-11 {\n left: 45.83333333%;\n }\n .ant-col-xxl-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-xxl-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-xxl-order-11 {\n order: 11;\n }\n .ant-col-xxl-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-xxl-push-10 {\n left: 41.66666667%;\n }\n .ant-col-xxl-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-xxl-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-xxl-order-10 {\n order: 10;\n }\n .ant-col-xxl-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-xxl-push-9 {\n left: 37.5%;\n }\n .ant-col-xxl-pull-9 {\n right: 37.5%;\n }\n .ant-col-xxl-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-xxl-order-9 {\n order: 9;\n }\n .ant-col-xxl-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-xxl-push-8 {\n left: 33.33333333%;\n }\n .ant-col-xxl-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-xxl-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-xxl-order-8 {\n order: 8;\n }\n .ant-col-xxl-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-xxl-push-7 {\n left: 29.16666667%;\n }\n .ant-col-xxl-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-xxl-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-xxl-order-7 {\n order: 7;\n }\n .ant-col-xxl-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-xxl-push-6 {\n left: 25%;\n }\n .ant-col-xxl-pull-6 {\n right: 25%;\n }\n .ant-col-xxl-offset-6 {\n margin-left: 25%;\n }\n .ant-col-xxl-order-6 {\n order: 6;\n }\n .ant-col-xxl-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-xxl-push-5 {\n left: 20.83333333%;\n }\n .ant-col-xxl-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-xxl-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-xxl-order-5 {\n order: 5;\n }\n .ant-col-xxl-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-xxl-push-4 {\n left: 16.66666667%;\n }\n .ant-col-xxl-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-xxl-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-xxl-order-4 {\n order: 4;\n }\n .ant-col-xxl-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-xxl-push-3 {\n left: 12.5%;\n }\n .ant-col-xxl-pull-3 {\n right: 12.5%;\n }\n .ant-col-xxl-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-xxl-order-3 {\n order: 3;\n }\n .ant-col-xxl-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-xxl-push-2 {\n left: 8.33333333%;\n }\n .ant-col-xxl-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-xxl-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-xxl-order-2 {\n order: 2;\n }\n .ant-col-xxl-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-xxl-push-1 {\n left: 4.16666667%;\n }\n .ant-col-xxl-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-xxl-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-xxl-order-1 {\n order: 1;\n }\n .ant-col-xxl-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-xxl-push-0 {\n left: auto;\n }\n .ant-col-xxl-pull-0 {\n right: auto;\n }\n .ant-col-xxl-offset-0 {\n margin-left: 0;\n }\n .ant-col-xxl-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xxl-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-xxl-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xxl-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-xxl-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-xxl-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-xxl-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-xxl-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-xxl-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-xxl-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-xxl-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-xxl-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-xxl-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-xxl-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-xxl-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-xxl-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-xxl-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-xxl-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-xxl-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-xxl-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-xxl-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-xxl-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-xxl-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-xxl-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-xxl-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-xxl-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-xxl-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-xxl-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-xxl-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-xxl-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-xxl-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-xxl-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-xxl-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-xxl-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-xxl-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-xxl-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-xxl-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-xxl-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-xxl-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-xxl-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n.ant-row-rtl {\n direction: rtl;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-carousel {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-carousel .slick-slider {\n position: relative;\n display: block;\n box-sizing: border-box;\n touch-action: pan-y;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: transparent;\n}\n.ant-carousel .slick-list {\n position: relative;\n display: block;\n margin: 0;\n padding: 0;\n overflow: hidden;\n}\n.ant-carousel .slick-list:focus {\n outline: none;\n}\n.ant-carousel .slick-list.dragging {\n cursor: pointer;\n}\n.ant-carousel .slick-list .slick-slide {\n pointer-events: none;\n}\n.ant-carousel .slick-list .slick-slide input.ant-radio-input,\n.ant-carousel .slick-list .slick-slide input.ant-checkbox-input {\n visibility: hidden;\n}\n.ant-carousel .slick-list .slick-slide.slick-active {\n pointer-events: auto;\n}\n.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input,\n.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input {\n visibility: visible;\n}\n.ant-carousel .slick-list .slick-slide > div > div {\n vertical-align: bottom;\n}\n.ant-carousel .slick-slider .slick-track,\n.ant-carousel .slick-slider .slick-list {\n transform: translate3d(0, 0, 0);\n touch-action: pan-y;\n}\n.ant-carousel .slick-track {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n}\n.ant-carousel .slick-track::before,\n.ant-carousel .slick-track::after {\n display: table;\n content: '';\n}\n.ant-carousel .slick-track::after {\n clear: both;\n}\n.slick-loading .ant-carousel .slick-track {\n visibility: hidden;\n}\n.ant-carousel .slick-slide {\n display: none;\n float: left;\n height: 100%;\n min-height: 1px;\n}\n.ant-carousel .slick-slide img {\n display: block;\n}\n.ant-carousel .slick-slide.slick-loading img {\n display: none;\n}\n.ant-carousel .slick-slide.dragging img {\n pointer-events: none;\n}\n.ant-carousel .slick-initialized .slick-slide {\n display: block;\n}\n.ant-carousel .slick-loading .slick-slide {\n visibility: hidden;\n}\n.ant-carousel .slick-vertical .slick-slide {\n display: block;\n height: auto;\n}\n.ant-carousel .slick-arrow.slick-hidden {\n display: none;\n}\n.ant-carousel .slick-prev,\n.ant-carousel .slick-next {\n position: absolute;\n top: 50%;\n display: block;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n padding: 0;\n color: transparent;\n font-size: 0;\n line-height: 0;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n}\n.ant-carousel .slick-prev:hover,\n.ant-carousel .slick-next:hover,\n.ant-carousel .slick-prev:focus,\n.ant-carousel .slick-next:focus {\n color: transparent;\n background: transparent;\n outline: none;\n}\n.ant-carousel .slick-prev:hover::before,\n.ant-carousel .slick-next:hover::before,\n.ant-carousel .slick-prev:focus::before,\n.ant-carousel .slick-next:focus::before {\n opacity: 1;\n}\n.ant-carousel .slick-prev.slick-disabled::before,\n.ant-carousel .slick-next.slick-disabled::before {\n opacity: 0.25;\n}\n.ant-carousel .slick-prev {\n left: -25px;\n}\n.ant-carousel .slick-prev::before {\n content: '←';\n}\n.ant-carousel .slick-next {\n right: -25px;\n}\n.ant-carousel .slick-next::before {\n content: '→';\n}\n.ant-carousel .slick-dots {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex !important;\n justify-content: center;\n margin-right: 15%;\n margin-left: 15%;\n padding-left: 0;\n list-style: none;\n}\n.ant-carousel .slick-dots-bottom {\n bottom: 12px;\n}\n.ant-carousel .slick-dots-top {\n top: 12px;\n bottom: auto;\n}\n.ant-carousel .slick-dots li {\n position: relative;\n display: inline-block;\n flex: 0 1 auto;\n box-sizing: content-box;\n width: 16px;\n height: 3px;\n margin: 0 2px;\n margin-right: 3px;\n margin-left: 3px;\n padding: 0;\n text-align: center;\n text-indent: -999px;\n vertical-align: top;\n transition: all 0.5s;\n}\n.ant-carousel .slick-dots li button {\n display: block;\n width: 100%;\n height: 3px;\n padding: 0;\n color: transparent;\n font-size: 0;\n background: #fff;\n border: 0;\n border-radius: 1px;\n outline: none;\n cursor: pointer;\n opacity: 0.3;\n transition: all 0.5s;\n}\n.ant-carousel .slick-dots li button:hover,\n.ant-carousel .slick-dots li button:focus {\n opacity: 0.75;\n}\n.ant-carousel .slick-dots li.slick-active {\n width: 24px;\n}\n.ant-carousel .slick-dots li.slick-active button {\n background: #fff;\n opacity: 1;\n}\n.ant-carousel .slick-dots li.slick-active:hover,\n.ant-carousel .slick-dots li.slick-active:focus {\n opacity: 1;\n}\n.ant-carousel-vertical .slick-dots {\n top: 50%;\n bottom: auto;\n flex-direction: column;\n width: 3px;\n height: auto;\n margin: 0;\n transform: translateY(-50%);\n}\n.ant-carousel-vertical .slick-dots-left {\n right: auto;\n left: 12px;\n}\n.ant-carousel-vertical .slick-dots-right {\n right: 12px;\n left: auto;\n}\n.ant-carousel-vertical .slick-dots li {\n width: 3px;\n height: 16px;\n margin: 4px 2px;\n vertical-align: baseline;\n}\n.ant-carousel-vertical .slick-dots li button {\n width: 3px;\n height: 16px;\n}\n.ant-carousel-vertical .slick-dots li.slick-active {\n width: 3px;\n height: 24px;\n}\n.ant-carousel-vertical .slick-dots li.slick-active button {\n width: 3px;\n height: 24px;\n}\n.ant-carousel-rtl {\n direction: rtl;\n}\n.ant-carousel-rtl .ant-carousel .slick-track {\n right: 0;\n left: auto;\n}\n.ant-carousel-rtl .ant-carousel .slick-prev {\n right: -25px;\n left: auto;\n}\n.ant-carousel-rtl .ant-carousel .slick-prev::before {\n content: '→';\n}\n.ant-carousel-rtl .ant-carousel .slick-next {\n right: auto;\n left: -25px;\n}\n.ant-carousel-rtl .ant-carousel .slick-next::before {\n content: '←';\n}\n.ant-carousel-rtl.ant-carousel .slick-dots {\n flex-direction: row-reverse;\n}\n.ant-carousel-rtl.ant-carousel-vertical .slick-dots {\n flex-direction: column;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-cascader {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-cascader-input.ant-input {\n position: static;\n width: 100%;\n padding-right: 24px;\n background-color: transparent !important;\n cursor: pointer;\n}\n.ant-cascader-picker-show-search .ant-cascader-input.ant-input {\n position: relative;\n}\n.ant-cascader-picker {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n background-color: #fff;\n border-radius: 2px;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n}\n.ant-cascader-picker-with-value .ant-cascader-picker-label {\n color: transparent;\n}\n.ant-cascader-picker-disabled {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-cascader-picker-disabled .ant-cascader-input {\n cursor: not-allowed;\n}\n.ant-cascader-picker:focus .ant-cascader-input {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-cascader-picker-borderless .ant-cascader-input {\n border-color: transparent !important;\n box-shadow: none !important;\n}\n.ant-cascader-picker-show-search.ant-cascader-picker-focused {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-cascader-picker-label {\n position: absolute;\n top: 50%;\n left: 0;\n width: 100%;\n height: 20px;\n margin-top: -10px;\n padding: 0 20px 0 12px;\n overflow: hidden;\n line-height: 20px;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-cascader-picker-clear {\n position: absolute;\n top: 50%;\n right: 12px;\n z-index: 2;\n width: 12px;\n height: 12px;\n margin-top: -6px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n line-height: 12px;\n background: #fff;\n cursor: pointer;\n opacity: 0;\n transition: color 0.3s ease, opacity 0.15s ease;\n}\n.ant-cascader-picker-clear:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-cascader-picker:hover .ant-cascader-picker-clear {\n opacity: 1;\n}\n.ant-cascader-picker-arrow {\n position: absolute;\n top: 50%;\n right: 12px;\n z-index: 1;\n width: 12px;\n height: 12px;\n margin-top: -6px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n line-height: 12px;\n}\n.ant-cascader-picker-label:hover + .ant-cascader-input:not(.ant-cascader-picker-disabled .ant-cascader-picker-label:hover + .ant-cascader-input) {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-cascader-picker-small .ant-cascader-picker-clear,\n.ant-cascader-picker-small .ant-cascader-picker-arrow {\n right: 8px;\n}\n.ant-cascader-menus {\n position: absolute;\n z-index: 1050;\n font-size: 14px;\n white-space: nowrap;\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-cascader-menus ul,\n.ant-cascader-menus ol {\n margin: 0;\n list-style: none;\n}\n.ant-cascader-menus-empty,\n.ant-cascader-menus-hidden {\n display: none;\n}\n.ant-cascader-menus.ant-slide-up-enter.ant-slide-up-enter-active.ant-cascader-menus-placement-bottomLeft,\n.ant-cascader-menus.ant-slide-up-appear.ant-slide-up-appear-active.ant-cascader-menus-placement-bottomLeft {\n -webkit-animation-name: antSlideUpIn;\n animation-name: antSlideUpIn;\n}\n.ant-cascader-menus.ant-slide-up-enter.ant-slide-up-enter-active.ant-cascader-menus-placement-topLeft,\n.ant-cascader-menus.ant-slide-up-appear.ant-slide-up-appear-active.ant-cascader-menus-placement-topLeft {\n -webkit-animation-name: antSlideDownIn;\n animation-name: antSlideDownIn;\n}\n.ant-cascader-menus.ant-slide-up-leave.ant-slide-up-leave-active.ant-cascader-menus-placement-bottomLeft {\n -webkit-animation-name: antSlideUpOut;\n animation-name: antSlideUpOut;\n}\n.ant-cascader-menus.ant-slide-up-leave.ant-slide-up-leave-active.ant-cascader-menus-placement-topLeft {\n -webkit-animation-name: antSlideDownOut;\n animation-name: antSlideDownOut;\n}\n.ant-cascader-menu {\n display: inline-block;\n min-width: 111px;\n height: 180px;\n margin: 0;\n padding: 4px 0;\n overflow: auto;\n vertical-align: top;\n list-style: none;\n border-right: 1px solid #f0f0f0;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n.ant-cascader-menu:first-child {\n border-radius: 2px 0 0 2px;\n}\n.ant-cascader-menu:last-child {\n margin-right: -1px;\n border-right-color: transparent;\n border-radius: 0 2px 2px 0;\n}\n.ant-cascader-menu:only-child {\n border-radius: 2px;\n}\n.ant-cascader-menu-item {\n padding: 5px 12px;\n overflow: hidden;\n line-height: 22px;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-cascader-menu-item:hover {\n background: #f5f5f5;\n}\n.ant-cascader-menu-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-cascader-menu-item-disabled:hover {\n background: transparent;\n}\n.ant-cascader-menu-empty .ant-cascader-menu-item {\n color: rgba(0, 0, 0, 0.25);\n cursor: default;\n pointer-events: none;\n}\n.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),\n.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover {\n font-weight: 600;\n background-color: #e6f7ff;\n}\n.ant-cascader-menu-item-expand {\n position: relative;\n padding-right: 24px;\n}\n.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,\n.ant-cascader-menu-item-loading-icon {\n position: absolute;\n right: 12px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n}\n.ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,\n.ant-cascader-menu-item-disabled.ant-cascader-menu-item-loading-icon {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-cascader-menu-item .ant-cascader-menu-item-keyword {\n color: #ff4d4f;\n}\n.ant-cascader-picker-rtl .ant-cascader-input.ant-input {\n padding-right: 11px;\n padding-left: 24px;\n text-align: right;\n}\n.ant-cascader-picker-rtl {\n direction: rtl;\n}\n.ant-cascader-picker-rtl .ant-cascader-picker-label {\n padding: 0 12px 0 20px;\n text-align: right;\n}\n.ant-cascader-picker-rtl .ant-cascader-picker-clear {\n right: auto;\n left: 12px;\n}\n.ant-cascader-picker-rtl .ant-cascader-picker-arrow {\n right: auto;\n left: 12px;\n}\n.ant-cascader-picker-rtl.ant-cascader-picker-small .ant-cascader-picker-clear,\n.ant-cascader-picker-rtl.ant-cascader-picker-small .ant-cascader-picker-arrow {\n right: auto;\n left: 8px;\n}\n.ant-cascader-menu-rtl .ant-cascader-menu {\n direction: rtl;\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-cascader-menu-rtl .ant-cascader-menu:first-child {\n border-radius: 0 2px 2px 0;\n}\n.ant-cascader-menu-rtl .ant-cascader-menu:last-child {\n margin-right: 0;\n margin-left: -1px;\n border-left-color: transparent;\n border-radius: 2px 0 0 2px;\n}\n.ant-cascader-menu-rtl .ant-cascader-menu:only-child {\n border-radius: 2px;\n}\n.ant-cascader-menu-rtl .ant-cascader-menu-item-expand {\n padding-right: 12px;\n padding-left: 24px;\n}\n.ant-cascader-menu-rtl .ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,\n.ant-cascader-menu-rtl .ant-cascader-menu-item-loading-icon {\n right: auto;\n left: 12px;\n}\n.ant-cascader-menu-rtl .ant-cascader-menu-item-loading-icon {\n transform: scaleY(-1);\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-input-affix-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s;\n display: inline-flex;\n}\n.ant-input-affix-wrapper::-moz-placeholder {\n opacity: 1;\n}\n.ant-input-affix-wrapper:-ms-input-placeholder {\n color: #bfbfbf;\n}\n.ant-input-affix-wrapper::placeholder {\n color: #bfbfbf;\n}\n.ant-input-affix-wrapper:-moz-placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-affix-wrapper:-ms-input-placeholder {\n text-overflow: ellipsis;\n}\n.ant-input-affix-wrapper:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-affix-wrapper:hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-input-rtl .ant-input-affix-wrapper:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-affix-wrapper:focus,\n.ant-input-affix-wrapper-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-input-rtl .ant-input-affix-wrapper:focus,\n.ant-input-rtl .ant-input-affix-wrapper-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-affix-wrapper-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-affix-wrapper-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-input-affix-wrapper[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-affix-wrapper[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-input-affix-wrapper-borderless,\n.ant-input-affix-wrapper-borderless:hover,\n.ant-input-affix-wrapper-borderless:focus,\n.ant-input-affix-wrapper-borderless-focused,\n.ant-input-affix-wrapper-borderless-disabled,\n.ant-input-affix-wrapper-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input-affix-wrapper {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-affix-wrapper-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-affix-wrapper-sm {\n padding: 0px 7px;\n}\n.ant-input-affix-wrapper-rtl {\n direction: rtl;\n}\n.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n z-index: 1;\n}\n.ant-input-rtl .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-search-with-button .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n z-index: 0;\n}\n.ant-input-affix-wrapper-focused,\n.ant-input-affix-wrapper:focus {\n z-index: 1;\n}\n.ant-input-affix-wrapper-disabled .ant-input[disabled] {\n background: transparent;\n}\n.ant-input-affix-wrapper > input.ant-input {\n padding: 0;\n border: none;\n outline: none;\n}\n.ant-input-affix-wrapper > input.ant-input:focus {\n box-shadow: none;\n}\n.ant-input-affix-wrapper::before {\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\n.ant-input-prefix,\n.ant-input-suffix {\n display: flex;\n flex: none;\n align-items: center;\n}\n.ant-input-prefix {\n margin-right: 4px;\n}\n.ant-input-suffix {\n margin-left: 4px;\n}\n.ant-input-clear-icon {\n margin: 0 4px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n vertical-align: -1px;\n cursor: pointer;\n transition: color 0.3s;\n}\n.ant-input-clear-icon:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-input-clear-icon:active {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-input-clear-icon-hidden {\n visibility: hidden;\n}\n.ant-input-clear-icon:last-child {\n margin-right: 0;\n}\n.ant-input-affix-wrapper-textarea-with-clear-btn {\n padding: 0 !important;\n border: 0 !important;\n}\n.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input-clear-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1;\n}\n.ant-input {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s;\n}\n.ant-input::-moz-placeholder {\n opacity: 1;\n}\n.ant-input:-ms-input-placeholder {\n color: #bfbfbf;\n}\n.ant-input::placeholder {\n color: #bfbfbf;\n}\n.ant-input:-moz-placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input:-ms-input-placeholder {\n text-overflow: ellipsis;\n}\n.ant-input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input:hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-input-rtl .ant-input:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input:focus,\n.ant-input-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-input-rtl .ant-input:focus,\n.ant-input-rtl .ant-input-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-input-borderless,\n.ant-input-borderless:hover,\n.ant-input-borderless:focus,\n.ant-input-borderless-focused,\n.ant-input-borderless-disabled,\n.ant-input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-sm {\n padding: 0px 7px;\n}\n.ant-input-rtl {\n direction: rtl;\n}\n.ant-input-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: table;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n}\n.ant-input-group[class*='col-'] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.ant-input-group > [class*='col-'] {\n padding-right: 8px;\n}\n.ant-input-group > [class*='col-']:last-child {\n padding-right: 0;\n}\n.ant-input-group-addon,\n.ant-input-group-wrap,\n.ant-input-group > .ant-input {\n display: table-cell;\n}\n.ant-input-group-addon:not(:first-child):not(:last-child),\n.ant-input-group-wrap:not(:first-child):not(:last-child),\n.ant-input-group > .ant-input:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.ant-input-group-addon,\n.ant-input-group-wrap {\n width: 1px;\n white-space: nowrap;\n vertical-align: middle;\n}\n.ant-input-group-wrap > * {\n display: block !important;\n}\n.ant-input-group .ant-input {\n float: left;\n width: 100%;\n margin-bottom: 0;\n text-align: inherit;\n}\n.ant-input-group .ant-input:focus {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-group .ant-input:hover {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-search-with-button .ant-input-group .ant-input:hover {\n z-index: 0;\n}\n.ant-input-group-addon {\n position: relative;\n padding: 0 11px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n text-align: center;\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s;\n}\n.ant-input-group-addon .ant-select {\n margin: -5px -11px;\n}\n.ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n background-color: inherit;\n border: 1px solid transparent;\n box-shadow: none;\n}\n.ant-input-group-addon .ant-select-open .ant-select-selector,\n.ant-input-group-addon .ant-select-focused .ant-select-selector {\n color: #1890ff;\n}\n.ant-input-group > .ant-input:first-child,\n.ant-input-group-addon:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group > .ant-input:first-child .ant-select .ant-select-selector,\n.ant-input-group-addon:first-child .ant-select .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group > .ant-input-affix-wrapper:not(:first-child) .ant-input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group > .ant-input-affix-wrapper:not(:last-child) .ant-input {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group-addon:first-child {\n border-right: 0;\n}\n.ant-input-group-addon:last-child {\n border-left: 0;\n}\n.ant-input-group > .ant-input:last-child,\n.ant-input-group-addon:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group > .ant-input:last-child .ant-select .ant-select-selector,\n.ant-input-group-addon:last-child .ant-select .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group-lg .ant-input,\n.ant-input-group-lg > .ant-input-group-addon {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-group-sm .ant-input,\n.ant-input-group-sm > .ant-input-group-addon {\n padding: 0px 7px;\n}\n.ant-input-group-lg .ant-select-single .ant-select-selector {\n height: 40px;\n}\n.ant-input-group-sm .ant-select-single .ant-select-selector {\n height: 24px;\n}\n.ant-input-group .ant-input-affix-wrapper:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-top-left-radius: 2px;\n border-bottom-left-radius: 2px;\n}\n.ant-input-group.ant-input-group-compact {\n display: block;\n}\n.ant-input-group.ant-input-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-group.ant-input-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child) {\n border-right-width: 1px;\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):hover {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):focus {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > * {\n display: inline-block;\n float: none;\n vertical-align: top;\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact > .ant-input-affix-wrapper {\n display: inline-flex;\n}\n.ant-input-group.ant-input-group-compact > .ant-picker-range {\n display: inline-flex;\n}\n.ant-input-group.ant-input-group-compact > *:not(:last-child) {\n margin-right: -1px;\n border-right-width: 1px;\n}\n.ant-input-group.ant-input-group-compact .ant-input {\n float: none;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input {\n border-right-width: 1px;\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector:hover,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:hover,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:hover,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input:hover {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector:focus,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:focus,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:focus,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input:focus {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select-focused {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-arrow {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > *:first-child,\n.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-top-left-radius: 2px;\n border-bottom-left-radius: 2px;\n}\n.ant-input-group.ant-input-group-compact > *:last-child,\n.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-right-width: 1px;\n border-top-right-radius: 2px;\n border-bottom-right-radius: 2px;\n}\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input {\n vertical-align: top;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper {\n margin-left: -1px;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input-group-addon > .ant-input-search-button {\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 2px 0 0 2px;\n}\n.ant-input-group > .ant-input-rtl:first-child,\n.ant-input-group-rtl .ant-input-group-addon:first-child {\n border-radius: 0 2px 2px 0;\n}\n.ant-input-group-rtl .ant-input-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n}\n.ant-input-group-rtl .ant-input-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n}\n.ant-input-group-rtl.ant-input-group > .ant-input:last-child,\n.ant-input-group-rtl.ant-input-group-addon:last-child {\n border-radius: 2px 0 0 2px;\n}\n.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child) {\n border-radius: 2px 0 0 2px;\n}\n.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-radius: 0 2px 2px 0;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:not(:last-child) {\n margin-right: 0;\n margin-left: -1px;\n border-left-width: 1px;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:first-child,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-radius: 0 2px 2px 0;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:last-child,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-left-width: 1px;\n border-radius: 2px 0 0 2px;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl + .ant-input-group-wrapper-rtl {\n margin-right: -1px;\n margin-left: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 0 2px 2px 0;\n}\n.ant-input-group-wrapper {\n display: inline-block;\n width: 100%;\n text-align: start;\n vertical-align: top;\n}\n.ant-input-password-icon {\n color: rgba(0, 0, 0, 0.45);\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-input-password-icon:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-input[type='color'] {\n height: 32px;\n}\n.ant-input[type='color'].ant-input-lg {\n height: 40px;\n}\n.ant-input[type='color'].ant-input-sm {\n height: 24px;\n padding-top: 3px;\n padding-bottom: 3px;\n}\n.ant-input-textarea-show-count::after {\n float: right;\n color: rgba(0, 0, 0, 0.45);\n white-space: nowrap;\n content: attr(data-count);\n pointer-events: none;\n}\n.ant-input-search .ant-input:hover,\n.ant-input-search .ant-input:focus {\n border-color: #40a9ff;\n}\n.ant-input-search .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),\n.ant-input-search .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary) {\n border-left-color: #40a9ff;\n}\n.ant-input-search .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-search .ant-input-lg {\n line-height: 1.5713;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child {\n left: -1px;\n padding: 0;\n border: 0;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button {\n padding-top: 0;\n padding-bottom: 0;\n border-radius: 0 2px 2px 0;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary) {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary).ant-btn-loading::before {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.ant-input-search-button {\n height: 32px;\n}\n.ant-input-search-button:hover,\n.ant-input-search-button:focus {\n z-index: 1;\n}\n.ant-input-search-large .ant-input-search-button {\n height: 40px;\n}\n.ant-input-search-small .ant-input-search-button {\n height: 24px;\n}\n.ant-input-group-wrapper-rtl {\n direction: rtl;\n}\n.ant-input-group-rtl {\n direction: rtl;\n}\n.ant-input-affix-wrapper.ant-input-affix-wrapper-rtl > input.ant-input {\n border: none;\n outline: none;\n}\n.ant-input-affix-wrapper-rtl .ant-input-prefix {\n margin: 0 0 0 4px;\n}\n.ant-input-affix-wrapper-rtl .ant-input-suffix {\n margin: 0 4px 0 0;\n}\n.ant-input-textarea-rtl {\n direction: rtl;\n}\n.ant-input-textarea-rtl.ant-input-textarea-show-count::after {\n text-align: left;\n}\n.ant-input-affix-wrapper-rtl .ant-input-clear-icon:last-child {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-input-affix-wrapper-rtl .ant-input-clear-icon {\n right: auto;\n left: 8px;\n}\n.ant-input-search-rtl {\n direction: rtl;\n}\n.ant-input-search-rtl .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),\n.ant-input-search-rtl .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary) {\n border-right-color: #40a9ff;\n border-left-color: #d9d9d9;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-affix-wrapper:hover,\n.ant-input-search-rtl > .ant-input-group > .ant-input-affix-wrapper-focused {\n border-right-color: #40a9ff;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-group-addon {\n right: -1px;\n left: auto;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-group-addon .ant-input-search-button {\n border-radius: 2px 0 0 2px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .ant-input {\n height: 32px;\n }\n .ant-input-lg {\n height: 40px;\n }\n .ant-input-sm {\n height: 24px;\n }\n .ant-input-affix-wrapper > input.ant-input {\n height: auto;\n }\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n@-webkit-keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-checkbox-wrapper:hover .ant-checkbox-inner,\n.ant-checkbox:hover .ant-checkbox-inner,\n.ant-checkbox-input:focus + .ant-checkbox-inner {\n border-color: #1890ff;\n}\n.ant-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #1890ff;\n border-radius: 2px;\n visibility: hidden;\n -webkit-animation: antCheckboxEffect 0.36s ease-in-out;\n animation: antCheckboxEffect 0.36s ease-in-out;\n -webkit-animation-fill-mode: backwards;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-checkbox:hover::after,\n.ant-checkbox-wrapper:hover .ant-checkbox::after {\n visibility: visible;\n}\n.ant-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 22%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-checkbox-checked .ant-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-checkbox-checked .ant-checkbox-inner {\n background-color: #1890ff;\n border-color: #1890ff;\n}\n.ant-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n -webkit-animation-name: none;\n animation-name: none;\n}\n.ant-checkbox-disabled .ant-checkbox-input {\n cursor: not-allowed;\n}\n.ant-checkbox-disabled .ant-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-checkbox-disabled .ant-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n -webkit-animation-name: none;\n animation-name: none;\n}\n.ant-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-checkbox-disabled:hover::after,\n.ant-checkbox-wrapper:hover .ant-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-checkbox-wrapper + .ant-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-checkbox-group-item + .ant-checkbox-group-item {\n margin-left: 0;\n}\n.ant-checkbox-indeterminate .ant-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #1890ff;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-checkbox-rtl {\n direction: rtl;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item + .ant-checkbox-group-item {\n margin-left: 8px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-collapse {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-bottom: 0;\n border-radius: 2px;\n}\n.ant-collapse > .ant-collapse-item {\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-collapse > .ant-collapse-item:last-child,\n.ant-collapse > .ant-collapse-item:last-child > .ant-collapse-header {\n border-radius: 0 0 2px 2px;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header {\n position: relative;\n padding: 12px 16px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 1.5715;\n cursor: pointer;\n transition: all 0.3s, visibility 0s;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header::before {\n display: table;\n content: '';\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n display: inline-block;\n margin-right: 12px;\n font-size: 12px;\n vertical-align: -1px;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow svg {\n transition: transform 0.24s;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-extra {\n float: right;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header:focus {\n outline: none;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-header-collapsible-only {\n cursor: default;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text {\n cursor: pointer;\n}\n.ant-collapse > .ant-collapse-item.ant-collapse-no-arrow > .ant-collapse-header {\n padding-left: 12px;\n}\n.ant-collapse-icon-position-right > .ant-collapse-item > .ant-collapse-header {\n padding: 12px 16px;\n padding-right: 40px;\n}\n.ant-collapse-icon-position-right > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n position: absolute;\n top: 50%;\n right: 16px;\n left: auto;\n margin: 0;\n transform: translateY(-50%);\n}\n.ant-collapse-content {\n color: rgba(0, 0, 0, 0.85);\n background-color: #fff;\n border-top: 1px solid #d9d9d9;\n}\n.ant-collapse-content > .ant-collapse-content-box {\n padding: 16px;\n}\n.ant-collapse-content-hidden {\n display: none;\n}\n.ant-collapse-item:last-child > .ant-collapse-content {\n border-radius: 0 0 2px 2px;\n}\n.ant-collapse-borderless {\n background-color: #fafafa;\n border: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item {\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-collapse-borderless > .ant-collapse-item:last-child,\n.ant-collapse-borderless > .ant-collapse-item:last-child .ant-collapse-header {\n border-radius: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content {\n background-color: transparent;\n border-top: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box {\n padding-top: 4px;\n}\n.ant-collapse-ghost {\n background-color: transparent;\n border: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item {\n border-bottom: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item > .ant-collapse-content {\n background-color: transparent;\n border-top: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box {\n padding-top: 12px;\n padding-bottom: 12px;\n}\n.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header,\n.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header > .arrow {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-collapse-rtl {\n direction: rtl;\n}\n.ant-collapse-rtl .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 12px 16px;\n padding-right: 40px;\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow svg {\n transform: rotate(180deg);\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-extra {\n float: left;\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item.ant-collapse-no-arrow > .ant-collapse-header {\n padding-right: 12px;\n padding-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-comment {\n position: relative;\n background-color: inherit;\n}\n.ant-comment-inner {\n display: flex;\n padding: 16px 0;\n}\n.ant-comment-avatar {\n position: relative;\n flex-shrink: 0;\n margin-right: 12px;\n cursor: pointer;\n}\n.ant-comment-avatar img {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n}\n.ant-comment-content {\n position: relative;\n flex: 1 1 auto;\n min-width: 1px;\n font-size: 14px;\n word-wrap: break-word;\n}\n.ant-comment-content-author {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin-bottom: 4px;\n font-size: 14px;\n}\n.ant-comment-content-author > a,\n.ant-comment-content-author > span {\n padding-right: 8px;\n font-size: 12px;\n line-height: 18px;\n}\n.ant-comment-content-author-name {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n transition: color 0.3s;\n}\n.ant-comment-content-author-name > * {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-content-author-name > *:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-content-author-time {\n color: #ccc;\n white-space: nowrap;\n cursor: auto;\n}\n.ant-comment-content-detail p {\n margin-bottom: inherit;\n white-space: pre-wrap;\n}\n.ant-comment-actions {\n margin-top: 12px;\n margin-bottom: inherit;\n padding-left: 0;\n}\n.ant-comment-actions > li {\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-actions > li > span {\n margin-right: 10px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n cursor: pointer;\n transition: color 0.3s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-comment-actions > li > span:hover {\n color: #595959;\n}\n.ant-comment-nested {\n margin-left: 44px;\n}\n.ant-comment-rtl {\n direction: rtl;\n}\n.ant-comment-rtl .ant-comment-avatar {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-comment-rtl .ant-comment-content-author > a,\n.ant-comment-rtl .ant-comment-content-author > span {\n padding-right: 0;\n padding-left: 8px;\n}\n.ant-comment-rtl .ant-comment-actions {\n padding-right: 0;\n}\n.ant-comment-rtl .ant-comment-actions > li > span {\n margin-right: 0;\n margin-left: 10px;\n}\n.ant-comment-rtl .ant-comment-nested {\n margin-right: 44px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-descriptions-header {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n}\n.ant-descriptions-title {\n flex: auto;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: bold;\n font-size: 16px;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-descriptions-extra {\n margin-left: auto;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-descriptions-view {\n width: 100%;\n overflow: hidden;\n border-radius: 2px;\n}\n.ant-descriptions-view table {\n width: 100%;\n table-layout: fixed;\n}\n.ant-descriptions-row > th,\n.ant-descriptions-row > td {\n padding-bottom: 16px;\n}\n.ant-descriptions-row:last-child {\n border-bottom: none;\n}\n.ant-descriptions-item-label {\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 1.5715;\n text-align: start;\n}\n.ant-descriptions-item-label::after {\n content: ':';\n position: relative;\n top: -0.5px;\n margin: 0 8px 0 2px;\n}\n.ant-descriptions-item-label.ant-descriptions-item-no-colon::after {\n content: ' ';\n}\n.ant-descriptions-item-no-label::after {\n margin: 0;\n content: '';\n}\n.ant-descriptions-item-content {\n display: table-cell;\n flex: 1;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n.ant-descriptions-item {\n padding-bottom: 0;\n vertical-align: top;\n}\n.ant-descriptions-item-container {\n display: flex;\n}\n.ant-descriptions-item-container .ant-descriptions-item-label,\n.ant-descriptions-item-container .ant-descriptions-item-content {\n display: inline-flex;\n align-items: baseline;\n}\n.ant-descriptions-middle .ant-descriptions-row > th,\n.ant-descriptions-middle .ant-descriptions-row > td {\n padding-bottom: 12px;\n}\n.ant-descriptions-small .ant-descriptions-row > th,\n.ant-descriptions-small .ant-descriptions-row > td {\n padding-bottom: 8px;\n}\n.ant-descriptions-bordered .ant-descriptions-view {\n border: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-view > table {\n table-layout: auto;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label,\n.ant-descriptions-bordered .ant-descriptions-item-content {\n padding: 16px 24px;\n border-right: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label:last-child,\n.ant-descriptions-bordered .ant-descriptions-item-content:last-child {\n border-right: none;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label {\n background-color: #fafafa;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label::after {\n display: none;\n}\n.ant-descriptions-bordered .ant-descriptions-row {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-row:last-child {\n border-bottom: none;\n}\n.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label,\n.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content {\n padding: 12px 24px;\n}\n.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label,\n.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content {\n padding: 8px 16px;\n}\n.ant-descriptions-rtl {\n direction: rtl;\n}\n.ant-descriptions-rtl .ant-descriptions-item-label::after {\n margin: 0 2px 0 8px;\n}\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label,\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label:last-child,\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content:last-child {\n border-left: none;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-divider {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n}\n.ant-divider-vertical {\n position: relative;\n top: -0.06em;\n display: inline-block;\n height: 0.9em;\n margin: 0 8px;\n vertical-align: middle;\n border-top: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.06);\n}\n.ant-divider-horizontal {\n display: flex;\n clear: both;\n width: 100%;\n min-width: 100%;\n margin: 24px 0;\n}\n.ant-divider-horizontal.ant-divider-with-text {\n display: flex;\n margin: 16px 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n white-space: nowrap;\n text-align: center;\n border-top: 0;\n border-top-color: rgba(0, 0, 0, 0.06);\n}\n.ant-divider-horizontal.ant-divider-with-text::before,\n.ant-divider-horizontal.ant-divider-with-text::after {\n position: relative;\n top: 50%;\n width: 50%;\n border-top: 1px solid transparent;\n border-top-color: inherit;\n border-bottom: 0;\n transform: translateY(50%);\n content: '';\n}\n.ant-divider-horizontal.ant-divider-with-text-left::before {\n top: 50%;\n width: 5%;\n}\n.ant-divider-horizontal.ant-divider-with-text-left::after {\n top: 50%;\n width: 95%;\n}\n.ant-divider-horizontal.ant-divider-with-text-right::before {\n top: 50%;\n width: 95%;\n}\n.ant-divider-horizontal.ant-divider-with-text-right::after {\n top: 50%;\n width: 5%;\n}\n.ant-divider-inner-text {\n display: inline-block;\n padding: 0 1em;\n}\n.ant-divider-dashed {\n background: none;\n border-color: rgba(0, 0, 0, 0.06);\n border-style: dashed;\n border-width: 1px 0 0;\n}\n.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed {\n border-top: 0;\n}\n.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::before,\n.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::after {\n border-style: dashed none none;\n}\n.ant-divider-vertical.ant-divider-dashed {\n border-width: 0 0 0 1px;\n}\n.ant-divider-plain.ant-divider-with-text {\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-divider-rtl {\n direction: rtl;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left::before {\n width: 95%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left::after {\n width: 5%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right::before {\n width: 5%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right::after {\n width: 95%;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-drawer {\n position: fixed;\n z-index: 1000;\n width: 0%;\n height: 100%;\n transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1), height 0s ease 0.3s, width 0s ease 0.3s;\n}\n.ant-drawer > * {\n transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1), box-shadow 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n.ant-drawer-content-wrapper {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.ant-drawer .ant-drawer-content {\n width: 100%;\n height: 100%;\n}\n.ant-drawer-left,\n.ant-drawer-right {\n top: 0;\n width: 0%;\n height: 100%;\n}\n.ant-drawer-left .ant-drawer-content-wrapper,\n.ant-drawer-right .ant-drawer-content-wrapper {\n height: 100%;\n}\n.ant-drawer-left.ant-drawer-open,\n.ant-drawer-right.ant-drawer-open {\n width: 100%;\n transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n.ant-drawer-left {\n left: 0;\n}\n.ant-drawer-left .ant-drawer-content-wrapper {\n left: 0;\n}\n.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper {\n box-shadow: 6px 0 16px -8px rgba(0, 0, 0, 0.08), 9px 0 28px 0 rgba(0, 0, 0, 0.05), 12px 0 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-right {\n right: 0;\n}\n.ant-drawer-right .ant-drawer-content-wrapper {\n right: 0;\n}\n.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper {\n box-shadow: -6px 0 16px -8px rgba(0, 0, 0, 0.08), -9px 0 28px 0 rgba(0, 0, 0, 0.05), -12px 0 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-right.ant-drawer-open.no-mask {\n right: 1px;\n transform: translateX(1px);\n}\n.ant-drawer-top,\n.ant-drawer-bottom {\n left: 0;\n width: 100%;\n height: 0%;\n}\n.ant-drawer-top .ant-drawer-content-wrapper,\n.ant-drawer-bottom .ant-drawer-content-wrapper {\n width: 100%;\n}\n.ant-drawer-top.ant-drawer-open,\n.ant-drawer-bottom.ant-drawer-open {\n height: 100%;\n transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n.ant-drawer-top {\n top: 0;\n}\n.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper {\n box-shadow: 0 6px 16px -8px rgba(0, 0, 0, 0.08), 0 9px 28px 0 rgba(0, 0, 0, 0.05), 0 12px 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-bottom {\n bottom: 0;\n}\n.ant-drawer-bottom .ant-drawer-content-wrapper {\n bottom: 0;\n}\n.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper {\n box-shadow: 0 -6px 16px -8px rgba(0, 0, 0, 0.08), 0 -9px 28px 0 rgba(0, 0, 0, 0.05), 0 -12px 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-bottom.ant-drawer-open.no-mask {\n bottom: 1px;\n transform: translateY(1px);\n}\n.ant-drawer.ant-drawer-open .ant-drawer-mask {\n height: 100%;\n opacity: 1;\n transition: none;\n -webkit-animation: antdDrawerFadeIn 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n animation: antdDrawerFadeIn 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n pointer-events: auto;\n}\n.ant-drawer-title {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 22px;\n}\n.ant-drawer-content {\n position: relative;\n z-index: 1;\n overflow: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n}\n.ant-drawer-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 10;\n display: block;\n padding: 20px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: 700;\n font-size: 16px;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n text-rendering: auto;\n}\n.ant-drawer-close:focus,\n.ant-drawer-close:hover {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n}\n.ant-drawer-header-no-title .ant-drawer-close {\n margin-right: var(--scroll-bar);\n /* stylelint-disable-next-line function-calc-no-invalid */\n padding-right: calc(20px - var(--scroll-bar));\n}\n.ant-drawer-header {\n position: relative;\n padding: 16px 24px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 2px 2px 0 0;\n}\n.ant-drawer-header-no-title {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n}\n.ant-drawer-wrapper-body {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n width: 100%;\n height: 100%;\n}\n.ant-drawer-body {\n flex-grow: 1;\n padding: 24px;\n overflow: auto;\n font-size: 14px;\n line-height: 1.5715;\n word-wrap: break-word;\n}\n.ant-drawer-footer {\n flex-shrink: 0;\n padding: 10px 16px;\n border-top: 1px solid #f0f0f0;\n}\n.ant-drawer-mask {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 0;\n background-color: rgba(0, 0, 0, 0.45);\n opacity: 0;\n filter: alpha(opacity=45);\n transition: opacity 0.3s linear, height 0s ease 0.3s;\n pointer-events: none;\n}\n.ant-drawer-open-content {\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-drawer .ant-picker-clear {\n background: #fff;\n}\n@-webkit-keyframes antdDrawerFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes antdDrawerFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n.ant-drawer-rtl {\n direction: rtl;\n}\n.ant-drawer-rtl .ant-drawer-close {\n right: auto;\n left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-form-item .ant-mentions,\n.ant-form-item textarea.ant-input {\n height: auto;\n}\n.ant-form-item .ant-upload {\n background: transparent;\n}\n.ant-form-item .ant-upload.ant-upload-drag {\n background: #fafafa;\n}\n.ant-form-item input[type='radio'],\n.ant-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-form-item .ant-radio-inline,\n.ant-form-item .ant-checkbox-inline {\n display: inline-block;\n margin-left: 8px;\n font-weight: normal;\n vertical-align: middle;\n cursor: pointer;\n}\n.ant-form-item .ant-radio-inline:first-child,\n.ant-form-item .ant-checkbox-inline:first-child {\n margin-left: 0;\n}\n.ant-form-item .ant-checkbox-vertical,\n.ant-form-item .ant-radio-vertical {\n display: block;\n}\n.ant-form-item .ant-checkbox-vertical + .ant-checkbox-vertical,\n.ant-form-item .ant-radio-vertical + .ant-radio-vertical {\n margin-left: 0;\n}\n.ant-form-item .ant-input-number + .ant-form-text {\n margin-left: 8px;\n}\n.ant-form-item .ant-input-number-handler-wrap {\n z-index: 2;\n}\n.ant-form-item .ant-select,\n.ant-form-item .ant-cascader-picker {\n width: 100%;\n}\n.ant-form-item .ant-picker-calendar-year-select,\n.ant-form-item .ant-picker-calendar-month-select,\n.ant-form-item .ant-input-group .ant-select,\n.ant-form-item .ant-input-group .ant-cascader-picker {\n width: auto;\n}\n.ant-form-inline {\n display: flex;\n flex-wrap: wrap;\n}\n.ant-form-inline .ant-form-item {\n flex: none;\n flex-wrap: nowrap;\n margin-right: 16px;\n margin-bottom: 0;\n}\n.ant-form-inline .ant-form-item-with-help {\n margin-bottom: 24px;\n}\n.ant-form-inline .ant-form-item > .ant-form-item-label,\n.ant-form-inline .ant-form-item > .ant-form-item-control {\n display: inline-block;\n vertical-align: top;\n}\n.ant-form-inline .ant-form-item > .ant-form-item-label {\n flex: none;\n}\n.ant-form-inline .ant-form-item .ant-form-text {\n display: inline-block;\n}\n.ant-form-inline .ant-form-item .ant-form-item-has-feedback {\n display: inline-block;\n}\n.ant-form-horizontal .ant-form-item-label {\n flex-grow: 0;\n}\n.ant-form-horizontal .ant-form-item-control {\n flex: 1 1 0;\n}\n.ant-form-vertical .ant-form-item {\n flex-direction: column;\n}\n.ant-form-vertical .ant-form-item-label > label {\n height: auto;\n}\n.ant-form-vertical .ant-form-item-label,\n.ant-col-24.ant-form-item-label,\n.ant-col-xl-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n}\n.ant-form-vertical .ant-form-item-label > label,\n.ant-col-24.ant-form-item-label > label,\n.ant-col-xl-24.ant-form-item-label > label {\n margin: 0;\n}\n.ant-form-vertical .ant-form-item-label > label::after,\n.ant-col-24.ant-form-item-label > label::after,\n.ant-col-xl-24.ant-form-item-label > label::after {\n display: none;\n}\n.ant-form-rtl.ant-form-vertical .ant-form-item-label,\n.ant-form-rtl.ant-col-24.ant-form-item-label,\n.ant-form-rtl.ant-col-xl-24.ant-form-item-label {\n text-align: right;\n}\n@media (max-width: 575px) {\n .ant-form-item .ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-form-item .ant-form-item-label > label {\n margin: 0;\n }\n .ant-form-item .ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-form-item .ant-form-item-label {\n text-align: right;\n }\n .ant-form .ant-form-item {\n flex-wrap: wrap;\n }\n .ant-form .ant-form-item .ant-form-item-label,\n .ant-form .ant-form-item .ant-form-item-control {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xs-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-xs-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-xs-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-xs-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 767px) {\n .ant-col-sm-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-sm-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-sm-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-sm-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 991px) {\n .ant-col-md-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-md-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-md-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-md-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 1199px) {\n .ant-col-lg-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-lg-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-lg-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-lg-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 1599px) {\n .ant-col-xl-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-xl-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-xl-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-xl-24.ant-form-item-label {\n text-align: right;\n }\n}\n.ant-form-item {\n /* Some non-status related component style is in `components.less` */\n /* To support leave along ErrorList. We add additional className to handle explain style */\n}\n.ant-form-item-explain.ant-form-item-explain-error {\n color: #ff4d4f;\n}\n.ant-form-item-explain.ant-form-item-explain-warning {\n color: #faad14;\n}\n.ant-form-item-has-feedback .ant-input {\n padding-right: 24px;\n}\n.ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix {\n padding-right: 18px;\n}\n.ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix {\n right: 28px;\n}\n.ant-form-item-has-feedback .ant-switch {\n margin: 2px 0 4px;\n}\n.ant-form-item-has-feedback > .ant-select .ant-select-arrow,\n.ant-form-item-has-feedback > .ant-select .ant-select-clear,\n.ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-arrow,\n.ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-clear {\n right: 32px;\n}\n.ant-form-item-has-feedback > .ant-select .ant-select-selection-selected-value,\n.ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection-selected-value {\n padding-right: 42px;\n}\n.ant-form-item-has-feedback .ant-cascader-picker-arrow {\n margin-right: 19px;\n}\n.ant-form-item-has-feedback .ant-cascader-picker-clear {\n right: 32px;\n}\n.ant-form-item-has-feedback .ant-picker {\n padding-right: 29.2px;\n}\n.ant-form-item-has-feedback .ant-picker-large {\n padding-right: 29.2px;\n}\n.ant-form-item-has-feedback .ant-picker-small {\n padding-right: 25.2px;\n}\n.ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,\n.ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,\n.ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,\n.ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon {\n position: absolute;\n top: 50%;\n right: 0;\n z-index: 1;\n width: 32px;\n height: 20px;\n margin-top: -10px;\n font-size: 14px;\n line-height: 20px;\n text-align: center;\n visibility: visible;\n -webkit-animation: zoomIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n animation: zoomIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n pointer-events: none;\n}\n.ant-form-item-has-success.ant-form-item-has-feedback .ant-form-item-children-icon {\n color: #52c41a;\n -webkit-animation-name: diffZoomIn1 !important;\n animation-name: diffZoomIn1 !important;\n}\n.ant-form-item-has-warning .ant-form-item-split {\n color: #faad14;\n}\n.ant-form-item-has-warning .ant-input:not(.ant-input-disabled),\n.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled),\n.ant-form-item-has-warning .ant-input:not(.ant-input-disabled):hover,\n.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n background-color: #fff;\n border-color: #faad14;\n}\n.ant-form-item-has-warning .ant-input:not(.ant-input-disabled):focus,\n.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):focus,\n.ant-form-item-has-warning .ant-input:not(.ant-input-disabled)-focused,\n.ant-form-item-has-warning .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled)-focused {\n border-color: #ffc53d;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n}\n.ant-form-item-has-warning .ant-calendar-picker-open .ant-calendar-picker-input {\n border-color: #ffc53d;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n}\n.ant-form-item-has-warning .ant-input-prefix {\n color: #faad14;\n}\n.ant-form-item-has-warning .ant-input-group-addon {\n color: #faad14;\n border-color: #faad14;\n}\n.ant-form-item-has-warning .has-feedback {\n color: #faad14;\n}\n.ant-form-item-has-warning.ant-form-item-has-feedback .ant-form-item-children-icon {\n color: #faad14;\n -webkit-animation-name: diffZoomIn3 !important;\n animation-name: diffZoomIn3 !important;\n}\n.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input) .ant-select-selector {\n background-color: #fff;\n border-color: #faad14 !important;\n}\n.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-open .ant-select-selector,\n.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-focused .ant-select-selector {\n border-color: #ffc53d;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n}\n.ant-form-item-has-warning .ant-input-number,\n.ant-form-item-has-warning .ant-picker {\n background-color: #fff;\n border-color: #faad14;\n}\n.ant-form-item-has-warning .ant-input-number-focused,\n.ant-form-item-has-warning .ant-picker-focused,\n.ant-form-item-has-warning .ant-input-number:focus,\n.ant-form-item-has-warning .ant-picker:focus {\n border-color: #ffc53d;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n}\n.ant-form-item-has-warning .ant-input-number:not([disabled]):hover,\n.ant-form-item-has-warning .ant-picker:not([disabled]):hover {\n background-color: #fff;\n border-color: #faad14;\n}\n.ant-form-item-has-warning .ant-cascader-picker:focus .ant-cascader-input {\n border-color: #ffc53d;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n}\n.ant-form-item-has-error .ant-form-item-split {\n color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-input:not(.ant-input-disabled),\n.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled),\n.ant-form-item-has-error .ant-input:not(.ant-input-disabled):hover,\n.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-input:not(.ant-input-disabled):focus,\n.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):focus,\n.ant-form-item-has-error .ant-input:not(.ant-input-disabled)-focused,\n.ant-form-item-has-error .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled)-focused {\n border-color: #ff7875;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n}\n.ant-form-item-has-error .ant-calendar-picker-open .ant-calendar-picker-input {\n border-color: #ff7875;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n}\n.ant-form-item-has-error .ant-input-prefix {\n color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-input-group-addon {\n color: #ff4d4f;\n border-color: #ff4d4f;\n}\n.ant-form-item-has-error .has-feedback {\n color: #ff4d4f;\n}\n.ant-form-item-has-error.ant-form-item-has-feedback .ant-form-item-children-icon {\n color: #ff4d4f;\n -webkit-animation-name: diffZoomIn2 !important;\n animation-name: diffZoomIn2 !important;\n}\n.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input) .ant-select-selector {\n background-color: #fff;\n border-color: #ff4d4f !important;\n}\n.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-open .ant-select-selector,\n.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-focused .ant-select-selector {\n border-color: #ff7875;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n}\n.ant-form-item-has-error .ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n background-color: inherit;\n border: 0;\n box-shadow: none;\n}\n.ant-form-item-has-error .ant-select.ant-select-auto-complete .ant-input:focus {\n border-color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-input-number,\n.ant-form-item-has-error .ant-picker {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-input-number-focused,\n.ant-form-item-has-error .ant-picker-focused,\n.ant-form-item-has-error .ant-input-number:focus,\n.ant-form-item-has-error .ant-picker:focus {\n border-color: #ff7875;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n}\n.ant-form-item-has-error .ant-input-number:not([disabled]):hover,\n.ant-form-item-has-error .ant-picker:not([disabled]):hover {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor,\n.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor,\n.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus {\n border-color: #ff7875;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n}\n.ant-form-item-has-error .ant-cascader-picker:hover .ant-cascader-picker-label:hover + .ant-cascader-input.ant-input {\n border-color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-cascader-picker:focus .ant-cascader-input {\n background-color: #fff;\n border-color: #ff7875;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n}\n.ant-form-item-has-error .ant-transfer-list {\n border-color: #ff4d4f;\n}\n.ant-form-item-has-error .ant-transfer-list-search:not([disabled]) {\n border-color: #d9d9d9;\n}\n.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):focus {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-form-item-has-error .ant-radio-button-wrapper {\n border-color: #ff4d4f !important;\n}\n.ant-form-item-has-error .ant-radio-button-wrapper:not(:first-child)::before {\n background-color: #ff4d4f;\n}\n.ant-form-item-is-validating.ant-form-item-has-feedback .ant-form-item-children-icon {\n display: inline-block;\n color: #1890ff;\n}\n.ant-form {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-form legend {\n display: block;\n width: 100%;\n margin-bottom: 20px;\n padding: 0;\n color: rgba(0, 0, 0, 0.45);\n font-size: 16px;\n line-height: inherit;\n border: 0;\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-form label {\n font-size: 14px;\n}\n.ant-form input[type='search'] {\n box-sizing: border-box;\n}\n.ant-form input[type='radio'],\n.ant-form input[type='checkbox'] {\n line-height: normal;\n}\n.ant-form input[type='file'] {\n display: block;\n}\n.ant-form input[type='range'] {\n display: block;\n width: 100%;\n}\n.ant-form select[multiple],\n.ant-form select[size] {\n height: auto;\n}\n.ant-form input[type='file']:focus,\n.ant-form input[type='radio']:focus,\n.ant-form input[type='checkbox']:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.ant-form output {\n display: block;\n padding-top: 15px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-form .ant-form-text {\n display: inline-block;\n padding-right: 8px;\n}\n.ant-form-small .ant-form-item-label > label {\n height: 24px;\n}\n.ant-form-small .ant-form-item-control-input {\n min-height: 24px;\n}\n.ant-form-large .ant-form-item-label > label {\n height: 40px;\n}\n.ant-form-large .ant-form-item-control-input {\n min-height: 40px;\n}\n.ant-form-item {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n margin-bottom: 24px;\n vertical-align: top;\n}\n.ant-form-item-with-help {\n margin-bottom: 0;\n}\n.ant-form-item-hidden,\n.ant-form-item-hidden.ant-row {\n display: none;\n}\n.ant-form-item-label {\n display: inline-block;\n flex-grow: 0;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n vertical-align: middle;\n}\n.ant-form-item-label-left {\n text-align: left;\n}\n.ant-form-item-label > label {\n position: relative;\n display: inline-flex;\n align-items: center;\n height: 32px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-form-item-label > label > .anticon {\n font-size: 14px;\n vertical-align: top;\n}\n.ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {\n display: inline-block;\n margin-right: 4px;\n color: #ff4d4f;\n font-size: 14px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n}\n.ant-form-hide-required-mark .ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {\n display: none;\n}\n.ant-form-item-label > label .ant-form-item-optional {\n display: inline-block;\n margin-left: 4px;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-form-hide-required-mark .ant-form-item-label > label .ant-form-item-optional {\n display: none;\n}\n.ant-form-item-label > label .ant-form-item-tooltip {\n color: rgba(0, 0, 0, 0.45);\n cursor: help;\n -ms-writing-mode: lr-tb;\n writing-mode: horizontal-tb;\n -webkit-margin-start: 4px;\n margin-inline-start: 4px;\n}\n.ant-form-item-label > label::after {\n content: ':';\n position: relative;\n top: -0.5px;\n margin: 0 8px 0 2px;\n}\n.ant-form-item-label > label.ant-form-item-no-colon::after {\n content: ' ';\n}\n.ant-form-item-control {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n.ant-form-item-control:first-child:not([class^='ant-col-']):not([class*=' ant-col-']) {\n width: 100%;\n}\n.ant-form-item-control-input {\n position: relative;\n display: flex;\n align-items: center;\n min-height: 32px;\n}\n.ant-form-item-control-input-content {\n flex: auto;\n max-width: 100%;\n}\n.ant-form-item-explain,\n.ant-form-item-extra {\n clear: both;\n min-height: 24px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.ant-form-item .ant-input-textarea-show-count::after {\n margin-bottom: -22px;\n}\n.ant-show-help-enter,\n.ant-show-help-appear {\n -webkit-animation-duration: 0.3s;\n animation-duration: 0.3s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-show-help-leave {\n -webkit-animation-duration: 0.3s;\n animation-duration: 0.3s;\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-show-help-enter.ant-show-help-enter-active,\n.ant-show-help-appear.ant-show-help-appear-active {\n -webkit-animation-name: antShowHelpIn;\n animation-name: antShowHelpIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-show-help-leave.ant-show-help-leave-active {\n -webkit-animation-name: antShowHelpOut;\n animation-name: antShowHelpOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-show-help-enter,\n.ant-show-help-appear {\n opacity: 0;\n -webkit-animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-show-help-leave {\n -webkit-animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n@-webkit-keyframes antShowHelpIn {\n 0% {\n transform: translateY(-5px);\n opacity: 0;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n}\n@keyframes antShowHelpIn {\n 0% {\n transform: translateY(-5px);\n opacity: 0;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n}\n@-webkit-keyframes antShowHelpOut {\n to {\n transform: translateY(-5px);\n opacity: 0;\n }\n}\n@keyframes antShowHelpOut {\n to {\n transform: translateY(-5px);\n opacity: 0;\n }\n}\n@-webkit-keyframes diffZoomIn1 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes diffZoomIn1 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@-webkit-keyframes diffZoomIn2 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes diffZoomIn2 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@-webkit-keyframes diffZoomIn3 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes diffZoomIn3 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n.ant-form-rtl {\n direction: rtl;\n}\n.ant-form-rtl .ant-form-item-label {\n text-align: left;\n}\n.ant-form-rtl .ant-form-item-label > label.ant-form-item-required::before {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-form-rtl .ant-form-item-label > label::after {\n margin: 0 2px 0 8px;\n}\n.ant-form-rtl .ant-form-item-label > label .ant-form-item-optional {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-col-rtl .ant-form-item-control:first-child {\n width: 100%;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input {\n padding-right: 11px;\n padding-left: 24px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix {\n padding-right: 11px;\n padding-left: 18px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input {\n padding: 0;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix {\n right: auto;\n left: 28px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-number {\n padding-left: 18px;\n}\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-arrow,\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-clear,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-arrow,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-clear {\n right: auto;\n left: 32px;\n}\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-selection-selected-value,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection-selected-value {\n padding-right: 0;\n padding-left: 42px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-arrow {\n margin-right: 0;\n margin-left: 19px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-clear {\n right: auto;\n left: 32px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker {\n padding-right: 11px;\n padding-left: 29.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker-large {\n padding-right: 11px;\n padding-left: 29.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker-small {\n padding-right: 7px;\n padding-left: 25.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon {\n right: auto;\n left: 0;\n}\n.ant-form-rtl.ant-form-inline .ant-form-item {\n margin-right: 0;\n margin-left: 16px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-image {\n position: relative;\n display: inline-block;\n}\n.ant-image-img {\n display: block;\n width: 100%;\n height: auto;\n}\n.ant-image-img-placeholder {\n background-color: #f5f5f5;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=);\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 30%;\n}\n.ant-image-mask {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n background: rgba(0, 0, 0, 0.5);\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.ant-image-mask-info .anticon {\n -webkit-margin-end: 4px;\n margin-inline-end: 4px;\n}\n.ant-image-mask:hover {\n opacity: 1;\n}\n.ant-image-placeholder {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.ant-image-preview {\n pointer-events: none;\n height: 100%;\n text-align: center;\n}\n.ant-image-preview.ant-zoom-enter,\n.ant-image-preview.antzoom-appear {\n transform: none;\n opacity: 0;\n -webkit-animation-duration: 0.3s;\n animation-duration: 0.3s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-image-preview-mask {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.45);\n}\n.ant-image-preview-mask-hidden {\n display: none;\n}\n.ant-image-preview-wrap {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n outline: 0;\n -webkit-overflow-scrolling: touch;\n}\n.ant-image-preview-body {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n}\n.ant-image-preview-img {\n max-width: 100%;\n max-height: 100%;\n vertical-align: middle;\n transform: scale3d(1, 1, 1);\n cursor: -webkit-grab;\n cursor: grab;\n transition: transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n pointer-events: auto;\n}\n.ant-image-preview-img-wrapper {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n transition: transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;\n}\n.ant-image-preview-img-wrapper::before {\n display: inline-block;\n width: 1px;\n height: 50%;\n margin-right: -1px;\n content: '';\n}\n.ant-image-preview-moving .ant-image-preview-img {\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.ant-image-preview-moving .ant-image-preview-img-wrapper {\n transition-duration: 0s;\n}\n.ant-image-preview-wrap {\n z-index: 1080;\n}\n.ant-image-preview-operations {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n width: 100%;\n color: rgba(255, 255, 255, 0.85);\n list-style: none;\n background: rgba(0, 0, 0, 0.1);\n pointer-events: auto;\n}\n.ant-image-preview-operations-operation {\n margin-left: 12px;\n padding: 12px;\n cursor: pointer;\n}\n.ant-image-preview-operations-operation-disabled {\n color: rgba(255, 255, 255, 0.25);\n pointer-events: none;\n}\n.ant-image-preview-operations-operation:last-of-type {\n margin-left: 0;\n}\n.ant-image-preview-operations-icon {\n font-size: 18px;\n}\n.ant-image-preview-switch-left,\n.ant-image-preview-switch-right {\n position: absolute;\n top: 50%;\n right: 10px;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n margin-top: -22px;\n color: rgba(255, 255, 255, 0.85);\n background: rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n cursor: pointer;\n pointer-events: auto;\n}\n.ant-image-preview-switch-left-disabled,\n.ant-image-preview-switch-right-disabled {\n color: rgba(255, 255, 255, 0.25);\n cursor: not-allowed;\n}\n.ant-image-preview-switch-left-disabled > .anticon,\n.ant-image-preview-switch-right-disabled > .anticon {\n cursor: not-allowed;\n}\n.ant-image-preview-switch-left > .anticon,\n.ant-image-preview-switch-right > .anticon {\n font-size: 18px;\n}\n.ant-image-preview-switch-left {\n left: 10px;\n}\n.ant-image-preview-switch-right {\n right: 10px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-input-number {\n box-sizing: border-box;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n transition: all 0.3s;\n display: inline-block;\n width: 90px;\n margin: 0;\n padding: 0;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n}\n.ant-input-number::-moz-placeholder {\n opacity: 1;\n}\n.ant-input-number:-ms-input-placeholder {\n color: #bfbfbf;\n}\n.ant-input-number::placeholder {\n color: #bfbfbf;\n}\n.ant-input-number:-moz-placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number:-ms-input-placeholder {\n text-overflow: ellipsis;\n}\n.ant-input-number:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number:hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-input-number:focus,\n.ant-input-number-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-input-number-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-input-number[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-input-number-borderless,\n.ant-input-number-borderless:hover,\n.ant-input-number-borderless:focus,\n.ant-input-number-borderless-focused,\n.ant-input-number-borderless-disabled,\n.ant-input-number-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input-number {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-number-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-number-sm {\n padding: 0px 7px;\n}\n.ant-input-number-handler {\n position: relative;\n display: block;\n width: 100%;\n height: 50%;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.45);\n font-weight: bold;\n line-height: 0;\n text-align: center;\n transition: all 0.1s linear;\n}\n.ant-input-number-handler:active {\n background: #f4f4f4;\n}\n.ant-input-number-handler:hover .ant-input-number-handler-up-inner,\n.ant-input-number-handler:hover .ant-input-number-handler-down-inner {\n color: #40a9ff;\n}\n.ant-input-number-handler-up-inner,\n.ant-input-number-handler-down-inner {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n position: absolute;\n right: 4px;\n width: 12px;\n height: 12px;\n color: rgba(0, 0, 0, 0.45);\n line-height: 12px;\n transition: all 0.1s linear;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-input-number-handler-up-inner > *,\n.ant-input-number-handler-down-inner > * {\n line-height: 1;\n}\n.ant-input-number-handler-up-inner svg,\n.ant-input-number-handler-down-inner svg {\n display: inline-block;\n}\n.ant-input-number-handler-up-inner::before,\n.ant-input-number-handler-down-inner::before {\n display: none;\n}\n.ant-input-number-handler-up-inner .ant-input-number-handler-up-inner-icon,\n.ant-input-number-handler-up-inner .ant-input-number-handler-down-inner-icon,\n.ant-input-number-handler-down-inner .ant-input-number-handler-up-inner-icon,\n.ant-input-number-handler-down-inner .ant-input-number-handler-down-inner-icon {\n display: block;\n}\n.ant-input-number:hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-input-number:hover + .ant-form-item-children-icon {\n opacity: 0;\n transition: opacity 0.24s linear 0.24s;\n}\n.ant-input-number-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-input-number-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-input-number-disabled .ant-input-number-input {\n cursor: not-allowed;\n}\n.ant-input-number-disabled .ant-input-number-handler-wrap {\n display: none;\n}\n.ant-input-number-readonly .ant-input-number-handler-wrap {\n display: none;\n}\n.ant-input-number-input {\n width: 100%;\n height: 30px;\n padding: 0 11px;\n text-align: left;\n background-color: transparent;\n border: 0;\n border-radius: 2px;\n outline: 0;\n transition: all 0.3s linear;\n -moz-appearance: textfield !important;\n}\n.ant-input-number-input::-moz-placeholder {\n opacity: 1;\n}\n.ant-input-number-input:-ms-input-placeholder {\n color: #bfbfbf;\n}\n.ant-input-number-input::placeholder {\n color: #bfbfbf;\n}\n.ant-input-number-input:-moz-placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number-input:-ms-input-placeholder {\n text-overflow: ellipsis;\n}\n.ant-input-number-input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number-input[type='number']::-webkit-inner-spin-button,\n.ant-input-number-input[type='number']::-webkit-outer-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.ant-input-number-lg {\n padding: 0;\n font-size: 16px;\n}\n.ant-input-number-lg input {\n height: 38px;\n}\n.ant-input-number-sm {\n padding: 0;\n}\n.ant-input-number-sm input {\n height: 22px;\n padding: 0 7px;\n}\n.ant-input-number-handler-wrap {\n position: absolute;\n top: 0;\n right: 0;\n width: 22px;\n height: 100%;\n background: #fff;\n border-left: 1px solid #d9d9d9;\n border-radius: 0 2px 2px 0;\n opacity: 0;\n transition: opacity 0.24s linear 0.1s;\n}\n.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner,\n.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner {\n min-width: auto;\n margin-right: 0;\n font-size: 7px;\n}\n.ant-input-number-borderless .ant-input-number-handler-wrap {\n border-left-width: 0;\n}\n.ant-input-number-handler-wrap:hover .ant-input-number-handler {\n height: 40%;\n}\n.ant-input-number:hover .ant-input-number-handler-wrap {\n opacity: 1;\n}\n.ant-input-number-handler-up {\n border-top-right-radius: 2px;\n cursor: pointer;\n}\n.ant-input-number-handler-up-inner {\n top: 50%;\n margin-top: -5px;\n text-align: center;\n}\n.ant-input-number-handler-up:hover {\n height: 60% !important;\n}\n.ant-input-number-handler-down {\n top: 0;\n border-top: 1px solid #d9d9d9;\n border-bottom-right-radius: 2px;\n cursor: pointer;\n}\n.ant-input-number-handler-down-inner {\n top: 50%;\n text-align: center;\n transform: translateY(-50%);\n}\n.ant-input-number-handler-down:hover {\n height: 60% !important;\n}\n.ant-input-number-borderless .ant-input-number-handler-down {\n border-top-width: 0;\n}\n.ant-input-number-handler-up-disabled,\n.ant-input-number-handler-down-disabled {\n cursor: not-allowed;\n}\n.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner,\n.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-input-number-borderless {\n box-shadow: none;\n}\n.ant-input-number-out-of-range input {\n color: #ff4d4f;\n}\n.ant-input-number-rtl {\n direction: rtl;\n}\n.ant-input-number-rtl .ant-input-number-handler-wrap {\n right: auto;\n left: 0;\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n border-radius: 2px 0 0 2px;\n}\n.ant-input-number-rtl.ant-input-number-borderless .ant-input-number-handler-wrap {\n border-right-width: 0;\n}\n.ant-input-number-rtl .ant-input-number-input {\n direction: ltr;\n text-align: right;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-layout {\n display: flex;\n flex: auto;\n flex-direction: column;\n /* fix firefox can't set height smaller than content on flex item */\n min-height: 0;\n background: #f0f2f5;\n}\n.ant-layout,\n.ant-layout * {\n box-sizing: border-box;\n}\n.ant-layout.ant-layout-has-sider {\n flex-direction: row;\n}\n.ant-layout.ant-layout-has-sider > .ant-layout,\n.ant-layout.ant-layout-has-sider > .ant-layout-content {\n width: 0;\n}\n.ant-layout-header,\n.ant-layout-footer {\n flex: 0 0 auto;\n}\n.ant-layout-header {\n height: 64px;\n padding: 0 50px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 64px;\n background: #001529;\n}\n.ant-layout-footer {\n padding: 24px 50px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n background: #f0f2f5;\n}\n.ant-layout-content {\n flex: auto;\n /* fix firefox can't set height smaller than content on flex item */\n min-height: 0;\n}\n.ant-layout-sider {\n position: relative;\n /* fix firefox can't set width smaller than content on flex item */\n min-width: 0;\n background: #001529;\n transition: all 0.2s;\n}\n.ant-layout-sider-children {\n height: 100%;\n margin-top: -0.1px;\n padding-top: 0.1px;\n}\n.ant-layout-sider-children .ant-menu.ant-menu-inline-collapsed {\n width: auto;\n}\n.ant-layout-sider-has-trigger {\n padding-bottom: 48px;\n}\n.ant-layout-sider-right {\n order: 1;\n}\n.ant-layout-sider-trigger {\n position: fixed;\n bottom: 0;\n z-index: 1;\n height: 48px;\n color: #fff;\n line-height: 48px;\n text-align: center;\n background: #002140;\n cursor: pointer;\n transition: all 0.2s;\n}\n.ant-layout-sider-zero-width > * {\n overflow: hidden;\n}\n.ant-layout-sider-zero-width-trigger {\n position: absolute;\n top: 64px;\n right: -36px;\n z-index: 1;\n width: 36px;\n height: 42px;\n color: #fff;\n font-size: 18px;\n line-height: 42px;\n text-align: center;\n background: #001529;\n border-radius: 0 2px 2px 0;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-layout-sider-zero-width-trigger::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n transition: all 0.3s;\n content: '';\n}\n.ant-layout-sider-zero-width-trigger:hover::after {\n background: rgba(255, 255, 255, 0.1);\n}\n.ant-layout-sider-zero-width-trigger-right {\n left: -36px;\n border-radius: 2px 0 0 2px;\n}\n.ant-layout-sider-light {\n background: #fff;\n}\n.ant-layout-sider-light .ant-layout-sider-trigger {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n}\n.ant-layout-sider-light .ant-layout-sider-zero-width-trigger {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n}\n.ant-layout-rtl {\n direction: rtl;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-list {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n}\n.ant-list * {\n outline: none;\n}\n.ant-list-pagination {\n margin-top: 24px;\n text-align: right;\n}\n.ant-list-pagination .ant-pagination-options {\n text-align: left;\n}\n.ant-list-more {\n margin-top: 12px;\n text-align: center;\n}\n.ant-list-more button {\n padding-right: 32px;\n padding-left: 32px;\n}\n.ant-list-spin {\n min-height: 40px;\n text-align: center;\n}\n.ant-list-empty-text {\n padding: 16px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 14px;\n text-align: center;\n}\n.ant-list-items {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-list-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-list-item-meta {\n display: flex;\n flex: 1;\n align-items: flex-start;\n max-width: 100%;\n}\n.ant-list-item-meta-avatar {\n margin-right: 16px;\n}\n.ant-list-item-meta-content {\n flex: 1 0;\n width: 0;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-list-item-meta-title {\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-list-item-meta-title > a {\n color: rgba(0, 0, 0, 0.85);\n transition: all 0.3s;\n}\n.ant-list-item-meta-title > a:hover {\n color: #1890ff;\n}\n.ant-list-item-meta-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-list-item-action {\n flex: 0 0 auto;\n margin-left: 48px;\n padding: 0;\n font-size: 0;\n list-style: none;\n}\n.ant-list-item-action > li {\n position: relative;\n display: inline-block;\n padding: 0 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-list-item-action > li:first-child {\n padding-left: 0;\n}\n.ant-list-item-action-split {\n position: absolute;\n top: 50%;\n right: 0;\n width: 1px;\n height: 14px;\n margin-top: -7px;\n background-color: #f0f0f0;\n}\n.ant-list-header {\n background: transparent;\n}\n.ant-list-footer {\n background: transparent;\n}\n.ant-list-header,\n.ant-list-footer {\n padding-top: 12px;\n padding-bottom: 12px;\n}\n.ant-list-empty {\n padding: 16px 0;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n text-align: center;\n}\n.ant-list-split .ant-list-item {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-split .ant-list-item:last-child {\n border-bottom: none;\n}\n.ant-list-split .ant-list-header {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-split.ant-list-empty .ant-list-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-list-loading .ant-list-spin-nested-loading {\n min-height: 32px;\n}\n.ant-list-split.ant-list-something-after-last-item .ant-spin-container > .ant-list-items > .ant-list-item:last-child {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-lg .ant-list-item {\n padding: 16px 24px;\n}\n.ant-list-sm .ant-list-item {\n padding: 8px 16px;\n}\n.ant-list-vertical .ant-list-item {\n align-items: initial;\n}\n.ant-list-vertical .ant-list-item-main {\n display: block;\n flex: 1;\n}\n.ant-list-vertical .ant-list-item-extra {\n margin-left: 40px;\n}\n.ant-list-vertical .ant-list-item-meta {\n margin-bottom: 16px;\n}\n.ant-list-vertical .ant-list-item-meta-title {\n margin-bottom: 12px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 24px;\n}\n.ant-list-vertical .ant-list-item-action {\n margin-top: 16px;\n margin-left: auto;\n}\n.ant-list-vertical .ant-list-item-action > li {\n padding: 0 16px;\n}\n.ant-list-vertical .ant-list-item-action > li:first-child {\n padding-left: 0;\n}\n.ant-list-grid .ant-col > .ant-list-item {\n display: block;\n max-width: 100%;\n margin-bottom: 16px;\n padding-top: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.ant-list-item-no-flex {\n display: block;\n}\n.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action {\n float: right;\n}\n.ant-list-bordered {\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n}\n.ant-list-bordered .ant-list-header {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-footer {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-item {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-pagination {\n margin: 16px 24px;\n}\n.ant-list-bordered.ant-list-sm .ant-list-item {\n padding: 8px 16px;\n}\n.ant-list-bordered.ant-list-sm .ant-list-header,\n.ant-list-bordered.ant-list-sm .ant-list-footer {\n padding: 8px 16px;\n}\n.ant-list-bordered.ant-list-lg .ant-list-item {\n padding: 16px 24px;\n}\n.ant-list-bordered.ant-list-lg .ant-list-header,\n.ant-list-bordered.ant-list-lg .ant-list-footer {\n padding: 16px 24px;\n}\n@media screen and (max-width: 768px) {\n .ant-list-item-action {\n margin-left: 24px;\n }\n .ant-list-vertical .ant-list-item-extra {\n margin-left: 24px;\n }\n}\n@media screen and (max-width: 576px) {\n .ant-list-item {\n flex-wrap: wrap;\n }\n .ant-list-item-action {\n margin-left: 12px;\n }\n .ant-list-vertical .ant-list-item {\n flex-wrap: wrap-reverse;\n }\n .ant-list-vertical .ant-list-item-main {\n min-width: 220px;\n }\n .ant-list-vertical .ant-list-item-extra {\n margin: auto auto 16px;\n }\n}\n.ant-list-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-list-rtl .ReactVirtualized__List .ant-list-item {\n direction: rtl;\n}\n.ant-list-rtl .ant-list-pagination {\n text-align: left;\n}\n.ant-list-rtl .ant-list-item-meta-avatar {\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-list-rtl .ant-list-item-action {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-list.ant-list-rtl .ant-list-item-action > li:first-child {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-list-rtl .ant-list-item-action-split {\n right: auto;\n left: 0;\n}\n.ant-list-rtl.ant-list-vertical .ant-list-item-extra {\n margin-right: 40px;\n margin-left: 0;\n}\n.ant-list-rtl.ant-list-vertical .ant-list-item-action {\n margin-right: auto;\n}\n.ant-list-rtl .ant-list-vertical .ant-list-item-action > li:first-child {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-list-rtl .ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action {\n float: left;\n}\n@media screen and (max-width: 768px) {\n .ant-list-rtl .ant-list-item-action {\n margin-right: 24px;\n margin-left: 0;\n }\n .ant-list-rtl .ant-list-vertical .ant-list-item-extra {\n margin-right: 24px;\n margin-left: 0;\n }\n}\n@media screen and (max-width: 576px) {\n .ant-list-rtl .ant-list-item-action {\n margin-right: 22px;\n margin-left: 0;\n }\n .ant-list-rtl.ant-list-vertical .ant-list-item-extra {\n margin: auto auto 16px;\n }\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-spin {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n display: none;\n color: #1890ff;\n text-align: center;\n vertical-align: middle;\n opacity: 0;\n transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-spin-spinning {\n position: static;\n display: inline-block;\n opacity: 1;\n}\n.ant-spin-nested-loading {\n position: relative;\n}\n.ant-spin-nested-loading > div > .ant-spin {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 4;\n display: block;\n width: 100%;\n height: 100%;\n max-height: 400px;\n}\n.ant-spin-nested-loading > div > .ant-spin .ant-spin-dot {\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -10px;\n}\n.ant-spin-nested-loading > div > .ant-spin .ant-spin-text {\n position: absolute;\n top: 50%;\n width: 100%;\n padding-top: 5px;\n text-shadow: 0 1px 2px #fff;\n}\n.ant-spin-nested-loading > div > .ant-spin.ant-spin-show-text .ant-spin-dot {\n margin-top: -20px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm .ant-spin-dot {\n margin: -7px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm .ant-spin-text {\n padding-top: 2px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm.ant-spin-show-text .ant-spin-dot {\n margin-top: -17px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg .ant-spin-dot {\n margin: -16px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg .ant-spin-text {\n padding-top: 11px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg.ant-spin-show-text .ant-spin-dot {\n margin-top: -26px;\n}\n.ant-spin-container {\n position: relative;\n transition: opacity 0.3s;\n}\n.ant-spin-container::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n display: none \\9;\n width: 100%;\n height: 100%;\n background: #fff;\n opacity: 0;\n transition: all 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-spin-blur {\n clear: both;\n overflow: hidden;\n opacity: 0.5;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n pointer-events: none;\n}\n.ant-spin-blur::after {\n opacity: 0.4;\n pointer-events: auto;\n}\n.ant-spin-tip {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-spin-dot {\n position: relative;\n display: inline-block;\n font-size: 20px;\n width: 1em;\n height: 1em;\n}\n.ant-spin-dot-item {\n position: absolute;\n display: block;\n width: 9px;\n height: 9px;\n background-color: #1890ff;\n border-radius: 100%;\n transform: scale(0.75);\n transform-origin: 50% 50%;\n opacity: 0.3;\n -webkit-animation: antSpinMove 1s infinite linear alternate;\n animation: antSpinMove 1s infinite linear alternate;\n}\n.ant-spin-dot-item:nth-child(1) {\n top: 0;\n left: 0;\n}\n.ant-spin-dot-item:nth-child(2) {\n top: 0;\n right: 0;\n -webkit-animation-delay: 0.4s;\n animation-delay: 0.4s;\n}\n.ant-spin-dot-item:nth-child(3) {\n right: 0;\n bottom: 0;\n -webkit-animation-delay: 0.8s;\n animation-delay: 0.8s;\n}\n.ant-spin-dot-item:nth-child(4) {\n bottom: 0;\n left: 0;\n -webkit-animation-delay: 1.2s;\n animation-delay: 1.2s;\n}\n.ant-spin-dot-spin {\n transform: rotate(45deg);\n -webkit-animation: antRotate 1.2s infinite linear;\n animation: antRotate 1.2s infinite linear;\n}\n.ant-spin-sm .ant-spin-dot {\n font-size: 14px;\n}\n.ant-spin-sm .ant-spin-dot i {\n width: 6px;\n height: 6px;\n}\n.ant-spin-lg .ant-spin-dot {\n font-size: 32px;\n}\n.ant-spin-lg .ant-spin-dot i {\n width: 14px;\n height: 14px;\n}\n.ant-spin.ant-spin-show-text .ant-spin-text {\n display: block;\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n /* IE10+ */\n .ant-spin-blur {\n background: #fff;\n opacity: 0.5;\n }\n}\n@-webkit-keyframes antSpinMove {\n to {\n opacity: 1;\n }\n}\n@keyframes antSpinMove {\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes antRotate {\n to {\n transform: rotate(405deg);\n }\n}\n@keyframes antRotate {\n to {\n transform: rotate(405deg);\n }\n}\n.ant-spin-rtl {\n direction: rtl;\n}\n.ant-spin-rtl .ant-spin-dot-spin {\n transform: rotate(-45deg);\n -webkit-animation-name: antRotateRtl;\n animation-name: antRotateRtl;\n}\n@-webkit-keyframes antRotateRtl {\n to {\n transform: rotate(-405deg);\n }\n}\n@keyframes antRotateRtl {\n to {\n transform: rotate(-405deg);\n }\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-pagination {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-pagination ul,\n.ant-pagination ol {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-pagination::after {\n display: block;\n clear: both;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n content: ' ';\n}\n.ant-pagination-total-text {\n display: inline-block;\n height: 32px;\n margin-right: 8px;\n line-height: 30px;\n vertical-align: middle;\n}\n.ant-pagination-item {\n display: inline-block;\n min-width: 32px;\n height: 32px;\n margin-right: 8px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 30px;\n text-align: center;\n vertical-align: middle;\n list-style: none;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n outline: 0;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-pagination-item a {\n display: block;\n padding: 0 6px;\n color: rgba(0, 0, 0, 0.85);\n transition: none;\n}\n.ant-pagination-item a:hover {\n text-decoration: none;\n}\n.ant-pagination-item:focus-visible,\n.ant-pagination-item:hover {\n border-color: #1890ff;\n transition: all 0.3s;\n}\n.ant-pagination-item:focus-visible a,\n.ant-pagination-item:hover a {\n color: #1890ff;\n}\n.ant-pagination-item-active {\n font-weight: 500;\n background: #fff;\n border-color: #1890ff;\n}\n.ant-pagination-item-active a {\n color: #1890ff;\n}\n.ant-pagination-item-active:focus-visible,\n.ant-pagination-item-active:hover {\n border-color: #40a9ff;\n}\n.ant-pagination-item-active:focus-visible a,\n.ant-pagination-item-active:hover a {\n color: #40a9ff;\n}\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n outline: 0;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container,\n.ant-pagination-jump-next .ant-pagination-item-container {\n position: relative;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon {\n color: #1890ff;\n font-size: 12px;\n letter-spacing: -1px;\n opacity: 0;\n transition: all 0.2s;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n margin: auto;\n color: rgba(0, 0, 0, 0.25);\n font-family: Arial, Helvetica, sans-serif;\n letter-spacing: 2px;\n text-align: center;\n text-indent: 0.13em;\n opacity: 1;\n transition: all 0.2s;\n}\n.ant-pagination-jump-prev:focus-visible .ant-pagination-item-link-icon,\n.ant-pagination-jump-next:focus-visible .ant-pagination-item-link-icon,\n.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon,\n.ant-pagination-jump-next:hover .ant-pagination-item-link-icon {\n opacity: 1;\n}\n.ant-pagination-jump-prev:focus-visible .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next:focus-visible .ant-pagination-item-ellipsis,\n.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis {\n opacity: 0;\n}\n.ant-pagination-prev,\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n margin-right: 8px;\n}\n.ant-pagination-prev,\n.ant-pagination-next,\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n display: inline-block;\n min-width: 32px;\n height: 32px;\n color: rgba(0, 0, 0, 0.85);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 32px;\n text-align: center;\n vertical-align: middle;\n list-style: none;\n border-radius: 2px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-pagination-prev,\n.ant-pagination-next {\n font-family: Arial, Helvetica, sans-serif;\n outline: 0;\n}\n.ant-pagination-prev button,\n.ant-pagination-next button {\n color: rgba(0, 0, 0, 0.85);\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-pagination-prev:hover button,\n.ant-pagination-next:hover button {\n border-color: #40a9ff;\n}\n.ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination-next .ant-pagination-item-link {\n display: block;\n width: 100%;\n height: 100%;\n padding: 0;\n font-size: 12px;\n text-align: center;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n outline: none;\n transition: all 0.3s;\n}\n.ant-pagination-prev:focus-visible .ant-pagination-item-link,\n.ant-pagination-next:focus-visible .ant-pagination-item-link,\n.ant-pagination-prev:hover .ant-pagination-item-link,\n.ant-pagination-next:hover .ant-pagination-item-link {\n color: #1890ff;\n border-color: #1890ff;\n}\n.ant-pagination-disabled,\n.ant-pagination-disabled:hover,\n.ant-pagination-disabled:focus-visible {\n cursor: not-allowed;\n}\n.ant-pagination-disabled .ant-pagination-item-link,\n.ant-pagination-disabled:hover .ant-pagination-item-link,\n.ant-pagination-disabled:focus-visible .ant-pagination-item-link {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination-slash {\n margin: 0 10px 0 5px;\n}\n.ant-pagination-options {\n display: inline-block;\n margin-left: 16px;\n vertical-align: middle;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-pagination-options *::-ms-backdrop,\n .ant-pagination-options {\n vertical-align: top;\n }\n}\n.ant-pagination-options-size-changer.ant-select {\n display: inline-block;\n width: auto;\n}\n.ant-pagination-options-quick-jumper {\n display: inline-block;\n height: 32px;\n margin-left: 8px;\n line-height: 32px;\n vertical-align: top;\n}\n.ant-pagination-options-quick-jumper input {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s;\n width: 50px;\n height: 32px;\n margin: 0 8px;\n}\n.ant-pagination-options-quick-jumper input::-moz-placeholder {\n opacity: 1;\n}\n.ant-pagination-options-quick-jumper input:-ms-input-placeholder {\n color: #bfbfbf;\n}\n.ant-pagination-options-quick-jumper input::placeholder {\n color: #bfbfbf;\n}\n.ant-pagination-options-quick-jumper input:-moz-placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-pagination-options-quick-jumper input:-ms-input-placeholder {\n text-overflow: ellipsis;\n}\n.ant-pagination-options-quick-jumper input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-pagination-options-quick-jumper input:hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-pagination-options-quick-jumper input:focus,\n.ant-pagination-options-quick-jumper input-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-pagination-options-quick-jumper input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-pagination-options-quick-jumper input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-pagination-options-quick-jumper input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-pagination-options-quick-jumper input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-pagination-options-quick-jumper input-borderless,\n.ant-pagination-options-quick-jumper input-borderless:hover,\n.ant-pagination-options-quick-jumper input-borderless:focus,\n.ant-pagination-options-quick-jumper input-borderless-focused,\n.ant-pagination-options-quick-jumper input-borderless-disabled,\n.ant-pagination-options-quick-jumper input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-pagination-options-quick-jumper input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-pagination-options-quick-jumper input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-pagination-options-quick-jumper input-sm {\n padding: 0px 7px;\n}\n.ant-pagination-simple .ant-pagination-prev,\n.ant-pagination-simple .ant-pagination-next {\n height: 24px;\n line-height: 24px;\n vertical-align: top;\n}\n.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link {\n height: 24px;\n background-color: transparent;\n border: 0;\n}\n.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link::after,\n.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link::after {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination-simple .ant-pagination-simple-pager {\n display: inline-block;\n height: 24px;\n margin-right: 8px;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input {\n box-sizing: border-box;\n height: 100%;\n margin-right: 8px;\n padding: 0 6px;\n text-align: center;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n outline: none;\n transition: border-color 0.3s;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input:hover {\n border-color: #1890ff;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination.mini .ant-pagination-total-text,\n.ant-pagination.mini .ant-pagination-simple-pager {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.mini .ant-pagination-item {\n min-width: 24px;\n height: 24px;\n margin: 0;\n line-height: 22px;\n}\n.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active) {\n background: transparent;\n border-color: transparent;\n}\n.ant-pagination.mini .ant-pagination-prev,\n.ant-pagination.mini .ant-pagination-next {\n min-width: 24px;\n height: 24px;\n margin: 0;\n line-height: 24px;\n}\n.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link {\n background: transparent;\n border-color: transparent;\n}\n.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link::after,\n.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link::after {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.mini .ant-pagination-jump-prev,\n.ant-pagination.mini .ant-pagination-jump-next {\n height: 24px;\n margin-right: 0;\n line-height: 24px;\n}\n.ant-pagination.mini .ant-pagination-options {\n margin-left: 2px;\n}\n.ant-pagination.mini .ant-pagination-options-size-changer {\n top: 0px;\n}\n.ant-pagination.mini .ant-pagination-options-quick-jumper {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.mini .ant-pagination-options-quick-jumper input {\n padding: 0px 7px;\n width: 44px;\n height: 24px;\n}\n.ant-pagination.ant-pagination-disabled {\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item {\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item a {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border: none;\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-active {\n background: #dbdbdb;\n border-color: transparent;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a {\n color: #fff;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-link {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link {\n background: transparent;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-link-icon {\n opacity: 0;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-ellipsis {\n opacity: 1;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-simple-pager {\n color: rgba(0, 0, 0, 0.25);\n}\n@media only screen and (max-width: 992px) {\n .ant-pagination-item-after-jump-prev,\n .ant-pagination-item-before-jump-next {\n display: none;\n }\n}\n@media only screen and (max-width: 576px) {\n .ant-pagination-options {\n display: none;\n }\n}\n.ant-pagination-rtl .ant-pagination-total-text {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-item,\n.ant-pagination-rtl .ant-pagination-prev,\n.ant-pagination-rtl .ant-pagination-jump-prev,\n.ant-pagination-rtl .ant-pagination-jump-next {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-slash {\n margin: 0 5px 0 10px;\n}\n.ant-pagination-rtl .ant-pagination-options {\n margin-right: 16px;\n margin-left: 0;\n}\n.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-size-changer.ant-select {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-quick-jumper {\n margin-left: 0;\n}\n.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager input {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl.ant-pagination.mini .ant-pagination-options {\n margin-right: 2px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-mentions {\n box-sizing: border-box;\n margin: 0;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s;\n position: relative;\n display: inline-block;\n height: auto;\n padding: 0;\n overflow: hidden;\n line-height: 1.5715;\n white-space: pre-wrap;\n vertical-align: bottom;\n}\n.ant-mentions::-moz-placeholder {\n opacity: 1;\n}\n.ant-mentions:-ms-input-placeholder {\n color: #bfbfbf;\n}\n.ant-mentions::placeholder {\n color: #bfbfbf;\n}\n.ant-mentions:-moz-placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-mentions:-ms-input-placeholder {\n text-overflow: ellipsis;\n}\n.ant-mentions:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-mentions:hover {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n}\n.ant-mentions:focus,\n.ant-mentions-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-mentions-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-mentions[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-mentions-borderless,\n.ant-mentions-borderless:hover,\n.ant-mentions-borderless:focus,\n.ant-mentions-borderless-focused,\n.ant-mentions-borderless-disabled,\n.ant-mentions-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-mentions {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-mentions-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-mentions-sm {\n padding: 0px 7px;\n}\n.ant-mentions-disabled > textarea {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions-disabled > textarea:hover {\n border-color: #d9d9d9;\n border-right-width: 1px !important;\n}\n.ant-mentions-focused {\n border-color: #40a9ff;\n border-right-width: 1px !important;\n outline: 0;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-mentions > textarea,\n.ant-mentions-measure {\n min-height: 30px;\n margin: 0;\n padding: 4px 11px;\n overflow: inherit;\n overflow-x: hidden;\n overflow-y: auto;\n font-weight: inherit;\n font-size: inherit;\n font-family: inherit;\n font-style: inherit;\n font-variant: inherit;\n font-size-adjust: inherit;\n font-stretch: inherit;\n line-height: inherit;\n direction: inherit;\n letter-spacing: inherit;\n white-space: inherit;\n text-align: inherit;\n vertical-align: top;\n word-wrap: break-word;\n word-break: inherit;\n -moz-tab-size: inherit;\n -o-tab-size: inherit;\n tab-size: inherit;\n}\n.ant-mentions > textarea {\n width: 100%;\n border: none;\n outline: none;\n resize: none;\n}\n.ant-mentions > textarea::-moz-placeholder {\n opacity: 1;\n}\n.ant-mentions > textarea:-ms-input-placeholder {\n color: #bfbfbf;\n}\n.ant-mentions > textarea::placeholder {\n color: #bfbfbf;\n}\n.ant-mentions > textarea:-moz-placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-mentions > textarea:-ms-input-placeholder {\n text-overflow: ellipsis;\n}\n.ant-mentions > textarea:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-mentions-measure {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n color: transparent;\n pointer-events: none;\n}\n.ant-mentions-measure > span {\n display: inline-block;\n min-height: 1em;\n}\n.ant-mentions-dropdown {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n box-sizing: border-box;\n font-size: 14px;\n font-variant: initial;\n background-color: #fff;\n border-radius: 2px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-mentions-dropdown-hidden {\n display: none;\n}\n.ant-mentions-dropdown-menu {\n max-height: 250px;\n margin-bottom: 0;\n padding-left: 0;\n overflow: auto;\n list-style: none;\n outline: none;\n}\n.ant-mentions-dropdown-menu-item {\n position: relative;\n display: block;\n min-width: 100px;\n padding: 5px 12px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-mentions-dropdown-menu-item:hover {\n background-color: #f5f5f5;\n}\n.ant-mentions-dropdown-menu-item:first-child {\n border-radius: 2px 2px 0 0;\n}\n.ant-mentions-dropdown-menu-item:last-child {\n border-radius: 0 0 2px 2px;\n}\n.ant-mentions-dropdown-menu-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-mentions-dropdown-menu-item-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-mentions-dropdown-menu-item-selected {\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n background-color: #fafafa;\n}\n.ant-mentions-dropdown-menu-item-active {\n background-color: #f5f5f5;\n}\n.ant-mentions-rtl {\n direction: rtl;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-message {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n top: 8px;\n left: 0;\n z-index: 1010;\n width: 100%;\n pointer-events: none;\n}\n.ant-message-notice {\n padding: 8px;\n text-align: center;\n}\n.ant-message-notice-content {\n display: inline-block;\n padding: 10px 16px;\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n pointer-events: all;\n}\n.ant-message-success .anticon {\n color: #52c41a;\n}\n.ant-message-error .anticon {\n color: #ff4d4f;\n}\n.ant-message-warning .anticon {\n color: #faad14;\n}\n.ant-message-info .anticon,\n.ant-message-loading .anticon {\n color: #1890ff;\n}\n.ant-message .anticon {\n position: relative;\n top: 1px;\n margin-right: 8px;\n font-size: 16px;\n}\n.ant-message-notice.ant-move-up-leave.ant-move-up-leave-active {\n -webkit-animation-name: MessageMoveOut;\n animation-name: MessageMoveOut;\n -webkit-animation-duration: 0.3s;\n animation-duration: 0.3s;\n}\n@-webkit-keyframes MessageMoveOut {\n 0% {\n max-height: 150px;\n padding: 8px;\n opacity: 1;\n }\n 100% {\n max-height: 0;\n padding: 0;\n opacity: 0;\n }\n}\n@keyframes MessageMoveOut {\n 0% {\n max-height: 150px;\n padding: 8px;\n opacity: 1;\n }\n 100% {\n max-height: 0;\n padding: 0;\n opacity: 0;\n }\n}\n.ant-message-rtl {\n direction: rtl;\n}\n.ant-message-rtl span {\n direction: rtl;\n}\n.ant-message-rtl .anticon {\n margin-right: 0;\n margin-left: 8px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-modal {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n pointer-events: none;\n position: relative;\n top: 100px;\n width: auto;\n max-width: calc(100vw - 32px);\n margin: 0 auto;\n padding-bottom: 24px;\n}\n.ant-modal.ant-zoom-enter,\n.ant-modal.antzoom-appear {\n transform: none;\n opacity: 0;\n -webkit-animation-duration: 0.3s;\n animation-duration: 0.3s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-modal-mask {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.45);\n}\n.ant-modal-mask-hidden {\n display: none;\n}\n.ant-modal-wrap {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n outline: 0;\n -webkit-overflow-scrolling: touch;\n}\n.ant-modal-wrap {\n z-index: 1000;\n}\n.ant-modal-title {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 22px;\n word-wrap: break-word;\n}\n.ant-modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n pointer-events: auto;\n}\n.ant-modal-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 10;\n padding: 0;\n color: rgba(0, 0, 0, 0.45);\n font-weight: 700;\n line-height: 1;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n}\n.ant-modal-close-x {\n display: block;\n width: 56px;\n height: 56px;\n font-size: 16px;\n font-style: normal;\n line-height: 56px;\n text-align: center;\n text-transform: none;\n text-rendering: auto;\n}\n.ant-modal-close:focus,\n.ant-modal-close:hover {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n}\n.ant-modal-header {\n padding: 16px 24px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 2px 2px 0 0;\n}\n.ant-modal-body {\n padding: 24px;\n font-size: 14px;\n line-height: 1.5715;\n word-wrap: break-word;\n}\n.ant-modal-footer {\n padding: 10px 16px;\n text-align: right;\n background: transparent;\n border-top: 1px solid #f0f0f0;\n border-radius: 0 0 2px 2px;\n}\n.ant-modal-footer .ant-btn + .ant-btn:not(.ant-dropdown-trigger) {\n margin-bottom: 0;\n margin-left: 8px;\n}\n.ant-modal-open {\n overflow: hidden;\n}\n.ant-modal-centered {\n text-align: center;\n}\n.ant-modal-centered::before {\n display: inline-block;\n width: 0;\n height: 100%;\n vertical-align: middle;\n content: '';\n}\n.ant-modal-centered .ant-modal {\n top: 0;\n display: inline-block;\n text-align: left;\n vertical-align: middle;\n}\n@media (max-width: 767px) {\n .ant-modal {\n max-width: calc(100vw - 16px);\n margin: 8px auto;\n }\n .ant-modal-centered .ant-modal {\n flex: 1;\n }\n}\n.ant-modal-confirm .ant-modal-header {\n display: none;\n}\n.ant-modal-confirm .ant-modal-body {\n padding: 32px 32px 24px;\n}\n.ant-modal-confirm-body-wrapper::before {\n display: table;\n content: '';\n}\n.ant-modal-confirm-body-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-modal-confirm-body .ant-modal-confirm-title {\n display: block;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 1.4;\n}\n.ant-modal-confirm-body .ant-modal-confirm-content {\n margin-top: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-modal-confirm-body > .anticon {\n float: left;\n margin-right: 16px;\n font-size: 22px;\n}\n.ant-modal-confirm-body > .anticon + .ant-modal-confirm-title + .ant-modal-confirm-content {\n margin-left: 38px;\n}\n.ant-modal-confirm .ant-modal-confirm-btns {\n float: right;\n margin-top: 24px;\n}\n.ant-modal-confirm .ant-modal-confirm-btns .ant-btn + .ant-btn {\n margin-bottom: 0;\n margin-left: 8px;\n}\n.ant-modal-confirm-error .ant-modal-confirm-body > .anticon {\n color: #ff4d4f;\n}\n.ant-modal-confirm-warning .ant-modal-confirm-body > .anticon,\n.ant-modal-confirm-confirm .ant-modal-confirm-body > .anticon {\n color: #faad14;\n}\n.ant-modal-confirm-info .ant-modal-confirm-body > .anticon {\n color: #1890ff;\n}\n.ant-modal-confirm-success .ant-modal-confirm-body > .anticon {\n color: #52c41a;\n}\n.ant-modal-wrap-rtl {\n direction: rtl;\n}\n.ant-modal-wrap-rtl .ant-modal-close {\n right: initial;\n left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-footer {\n text-align: left;\n}\n.ant-modal-wrap-rtl .ant-modal-footer .ant-btn + .ant-btn {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body {\n direction: rtl;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body > .anticon {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body > .anticon + .ant-modal-confirm-title + .ant-modal-confirm-content {\n margin-right: 38px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-btns {\n float: left;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-btns .ant-btn + .ant-btn {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl.ant-modal-centered .ant-modal {\n text-align: right;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-notification {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n z-index: 1010;\n margin-right: 24px;\n}\n.ant-notification-topLeft,\n.ant-notification-bottomLeft {\n margin-right: 0;\n margin-left: 24px;\n}\n.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,\n.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active {\n -webkit-animation-name: NotificationLeftFadeIn;\n animation-name: NotificationLeftFadeIn;\n}\n.ant-notification-close-icon {\n font-size: 14px;\n cursor: pointer;\n}\n.ant-notification-hook-holder {\n position: relative;\n}\n.ant-notification-notice {\n position: relative;\n width: 384px;\n max-width: calc(100vw - 24px * 2);\n margin-bottom: 16px;\n margin-left: auto;\n padding: 16px 24px;\n overflow: hidden;\n line-height: 1.5715;\n word-wrap: break-word;\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-notification-topLeft .ant-notification-notice,\n.ant-notification-bottomLeft .ant-notification-notice {\n margin-right: auto;\n margin-left: 0;\n}\n.ant-notification-notice-message {\n margin-bottom: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 24px;\n}\n.ant-notification-notice-message-single-line-auto-margin {\n display: block;\n width: calc(384px - 24px * 2 - 24px - 48px - 100%);\n max-width: 4px;\n background-color: transparent;\n pointer-events: none;\n}\n.ant-notification-notice-message-single-line-auto-margin::before {\n display: block;\n content: '';\n}\n.ant-notification-notice-description {\n font-size: 14px;\n}\n.ant-notification-notice-closable .ant-notification-notice-message {\n padding-right: 24px;\n}\n.ant-notification-notice-with-icon .ant-notification-notice-message {\n margin-bottom: 4px;\n margin-left: 48px;\n font-size: 16px;\n}\n.ant-notification-notice-with-icon .ant-notification-notice-description {\n margin-left: 48px;\n font-size: 14px;\n}\n.ant-notification-notice-icon {\n position: absolute;\n margin-left: 4px;\n font-size: 24px;\n line-height: 24px;\n}\n.anticon.ant-notification-notice-icon-success {\n color: #52c41a;\n}\n.anticon.ant-notification-notice-icon-info {\n color: #1890ff;\n}\n.anticon.ant-notification-notice-icon-warning {\n color: #faad14;\n}\n.anticon.ant-notification-notice-icon-error {\n color: #ff4d4f;\n}\n.ant-notification-notice-close {\n position: absolute;\n top: 16px;\n right: 22px;\n color: rgba(0, 0, 0, 0.45);\n outline: none;\n}\n.ant-notification-notice-close:hover {\n color: rgba(0, 0, 0, 0.67);\n}\n.ant-notification-notice-btn {\n float: right;\n margin-top: 16px;\n}\n.ant-notification .notification-fade-effect {\n -webkit-animation-duration: 0.24s;\n animation-duration: 0.24s;\n -webkit-animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n}\n.ant-notification-fade-enter,\n.ant-notification-fade-appear {\n -webkit-animation-duration: 0.24s;\n animation-duration: 0.24s;\n -webkit-animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n opacity: 0;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-notification-fade-leave {\n -webkit-animation-duration: 0.24s;\n animation-duration: 0.24s;\n -webkit-animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n -webkit-animation-fill-mode: both;\n animation-fill-mode: both;\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-play-state: paused;\n animation-play-state: paused;\n}\n.ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-fade-appear.ant-notification-fade-appear-active {\n -webkit-animation-name: NotificationFadeIn;\n animation-name: NotificationFadeIn;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n.ant-notification-fade-leave.ant-notification-fade-leave-active {\n -webkit-animation-name: NotificationFadeOut;\n animation-name: NotificationFadeOut;\n -webkit-animation-play-state: running;\n animation-play-state: running;\n}\n@-webkit-keyframes NotificationFadeIn {\n 0% {\n left: 384px;\n opacity: 0;\n }\n 100% {\n left: 0;\n opacity: 1;\n }\n}\n@keyframes NotificationFadeIn {\n 0% {\n left: 384px;\n opacity: 0;\n }\n 100% {\n left: 0;\n opacity: 1;\n }\n}\n@-webkit-keyframes NotificationLeftFadeIn {\n 0% {\n right: 384px;\n opacity: 0;\n }\n 100% {\n right: 0;\n opacity: 1;\n }\n}\n@keyframes NotificationLeftFadeIn {\n 0% {\n right: 384px;\n opacity: 0;\n }\n 100% {\n right: 0;\n opacity: 1;\n }\n}\n@-webkit-keyframes NotificationFadeOut {\n 0% {\n max-height: 150px;\n margin-bottom: 16px;\n opacity: 1;\n }\n 100% {\n max-height: 0;\n margin-bottom: 0;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n }\n}\n@keyframes NotificationFadeOut {\n 0% {\n max-height: 150px;\n margin-bottom: 16px;\n opacity: 1;\n }\n 100% {\n max-height: 0;\n margin-bottom: 0;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n }\n}\n.ant-notification-rtl {\n direction: rtl;\n}\n.ant-notification-rtl .ant-notification-notice-closable .ant-notification-notice-message {\n padding-right: 0;\n padding-left: 24px;\n}\n.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-message {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-description {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-icon {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-close {\n right: auto;\n left: 22px;\n}\n.ant-notification-rtl .ant-notification-notice-btn {\n float: left;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-page-header {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n padding: 16px 24px;\n background-color: #fff;\n}\n.ant-page-header-ghost {\n background-color: inherit;\n}\n.ant-page-header.has-breadcrumb {\n padding-top: 12px;\n}\n.ant-page-header.has-footer {\n padding-bottom: 0;\n}\n.ant-page-header-back {\n margin-right: 16px;\n font-size: 16px;\n line-height: 1;\n}\n.ant-page-header-back-button {\n color: #1890ff;\n text-decoration: none;\n outline: none;\n transition: color 0.3s;\n color: #000;\n cursor: pointer;\n}\n.ant-page-header-back-button:focus,\n.ant-page-header-back-button:hover {\n color: #40a9ff;\n}\n.ant-page-header-back-button:active {\n color: #096dd9;\n}\n.ant-page-header .ant-divider-vertical {\n height: 14px;\n margin: 0 12px;\n vertical-align: middle;\n}\n.ant-breadcrumb + .ant-page-header-heading {\n margin-top: 8px;\n}\n.ant-page-header-heading {\n display: flex;\n justify-content: space-between;\n}\n.ant-page-header-heading-left {\n display: flex;\n align-items: center;\n margin: 4px 0;\n overflow: hidden;\n}\n.ant-page-header-heading-title {\n margin-right: 12px;\n margin-bottom: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 20px;\n line-height: 32px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-page-header-heading .ant-avatar {\n margin-right: 12px;\n}\n.ant-page-header-heading-sub-title {\n margin-right: 12px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-page-header-heading-extra {\n margin: 4px 0;\n white-space: nowrap;\n}\n.ant-page-header-heading-extra > * {\n margin-left: 12px;\n white-space: unset;\n}\n.ant-page-header-heading-extra > *:first-child {\n margin-left: 0;\n}\n.ant-page-header-content {\n padding-top: 12px;\n}\n.ant-page-header-footer {\n margin-top: 16px;\n}\n.ant-page-header-footer .ant-tabs > .ant-tabs-nav {\n margin: 0;\n}\n.ant-page-header-footer .ant-tabs > .ant-tabs-nav::before {\n border: none;\n}\n.ant-page-header-footer .ant-tabs .ant-tabs-tab {\n padding-top: 8px;\n padding-bottom: 8px;\n font-size: 16px;\n}\n.ant-page-header-compact .ant-page-header-heading {\n flex-wrap: wrap;\n}\n.ant-page-header-rtl {\n direction: rtl;\n}\n.ant-page-header-rtl .ant-page-header-back {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-page-header-rtl .ant-page-header-heading-title {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading .ant-avatar {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading-sub-title {\n float: right;\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading-tags {\n float: right;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra {\n float: left;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra > * {\n margin-right: 12px;\n margin-left: 0;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra > *:first-child {\n margin-right: 0;\n}\n.ant-page-header-rtl .ant-page-header-footer .ant-tabs-bar .ant-tabs-nav {\n float: right;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-popconfirm {\n z-index: 1060;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-progress {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-progress-line {\n position: relative;\n width: 100%;\n font-size: 14px;\n}\n.ant-progress-steps {\n display: inline-block;\n}\n.ant-progress-steps-outer {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.ant-progress-steps-item {\n flex-shrink: 0;\n min-width: 2px;\n margin-right: 2px;\n background: #f3f3f3;\n transition: all 0.3s;\n}\n.ant-progress-steps-item-active {\n background: #1890ff;\n}\n.ant-progress-small.ant-progress-line,\n.ant-progress-small.ant-progress-line .ant-progress-text .anticon {\n font-size: 12px;\n}\n.ant-progress-outer {\n display: inline-block;\n width: 100%;\n margin-right: 0;\n padding-right: 0;\n}\n.ant-progress-show-info .ant-progress-outer {\n margin-right: calc(-2em - 8px);\n padding-right: calc(2em + 8px);\n}\n.ant-progress-inner {\n position: relative;\n display: inline-block;\n width: 100%;\n overflow: hidden;\n vertical-align: middle;\n background-color: #f5f5f5;\n border-radius: 100px;\n}\n.ant-progress-circle-trail {\n stroke: #f5f5f5;\n}\n.ant-progress-circle-path {\n -webkit-animation: ant-progress-appear 0.3s;\n animation: ant-progress-appear 0.3s;\n}\n.ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #1890ff;\n}\n.ant-progress-success-bg,\n.ant-progress-bg {\n position: relative;\n background-color: #1890ff;\n border-radius: 100px;\n transition: all 0.4s cubic-bezier(0.08, 0.82, 0.17, 1) 0s;\n}\n.ant-progress-success-bg {\n position: absolute;\n top: 0;\n left: 0;\n background-color: #52c41a;\n}\n.ant-progress-text {\n display: inline-block;\n width: 2em;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 1em;\n line-height: 1;\n white-space: nowrap;\n text-align: left;\n vertical-align: middle;\n word-break: normal;\n}\n.ant-progress-text .anticon {\n font-size: 14px;\n}\n.ant-progress-status-active .ant-progress-bg::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: #fff;\n border-radius: 10px;\n opacity: 0;\n -webkit-animation: ant-progress-active 2.4s cubic-bezier(0.23, 1, 0.32, 1) infinite;\n animation: ant-progress-active 2.4s cubic-bezier(0.23, 1, 0.32, 1) infinite;\n content: '';\n}\n.ant-progress-status-exception .ant-progress-bg {\n background-color: #ff4d4f;\n}\n.ant-progress-status-exception .ant-progress-text {\n color: #ff4d4f;\n}\n.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #ff4d4f;\n}\n.ant-progress-status-success .ant-progress-bg {\n background-color: #52c41a;\n}\n.ant-progress-status-success .ant-progress-text {\n color: #52c41a;\n}\n.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #52c41a;\n}\n.ant-progress-circle .ant-progress-inner {\n position: relative;\n line-height: 1;\n background-color: transparent;\n}\n.ant-progress-circle .ant-progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 1em;\n line-height: 1;\n white-space: normal;\n text-align: center;\n transform: translate(-50%, -50%);\n}\n.ant-progress-circle .ant-progress-text .anticon {\n font-size: 1.16666667em;\n}\n.ant-progress-circle.ant-progress-status-exception .ant-progress-text {\n color: #ff4d4f;\n}\n.ant-progress-circle.ant-progress-status-success .ant-progress-text {\n color: #52c41a;\n}\n@-webkit-keyframes ant-progress-active {\n 0% {\n width: 0;\n opacity: 0.1;\n }\n 20% {\n width: 0;\n opacity: 0.5;\n }\n 100% {\n width: 100%;\n opacity: 0;\n }\n}\n@keyframes ant-progress-active {\n 0% {\n width: 0;\n opacity: 0.1;\n }\n 20% {\n width: 0;\n opacity: 0.5;\n }\n 100% {\n width: 100%;\n opacity: 0;\n }\n}\n.ant-progress-rtl {\n direction: rtl;\n}\n.ant-progress-rtl.ant-progress-show-info .ant-progress-outer {\n margin-right: 0;\n margin-left: calc(-2em - 8px);\n padding-right: 0;\n padding-left: calc(2em + 8px);\n}\n.ant-progress-rtl .ant-progress-success-bg {\n right: 0;\n left: auto;\n}\n.ant-progress-rtl.ant-progress-line .ant-progress-text,\n.ant-progress-rtl.ant-progress-steps .ant-progress-text {\n margin-right: 8px;\n margin-left: 0;\n text-align: right;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-rate {\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n display: inline-block;\n margin: 0;\n padding: 0;\n color: #fadb14;\n font-size: 20px;\n line-height: unset;\n list-style: none;\n outline: none;\n}\n.ant-rate-disabled .ant-rate-star {\n cursor: default;\n}\n.ant-rate-disabled .ant-rate-star:hover {\n transform: scale(1);\n}\n.ant-rate-star {\n position: relative;\n display: inline-block;\n color: inherit;\n cursor: pointer;\n}\n.ant-rate-star:not(:last-child) {\n margin-right: 8px;\n}\n.ant-rate-star > div {\n transition: all 0.3s;\n}\n.ant-rate-star > div:hover,\n.ant-rate-star > div:focus-visible {\n transform: scale(1.1);\n}\n.ant-rate-star > div:focus:not(:focus-visible) {\n outline: 0;\n}\n.ant-rate-star-first,\n.ant-rate-star-second {\n color: #f0f0f0;\n transition: all 0.3s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-rate-star-first .anticon,\n.ant-rate-star-second .anticon {\n vertical-align: middle;\n}\n.ant-rate-star-first {\n position: absolute;\n top: 0;\n left: 0;\n width: 50%;\n height: 100%;\n overflow: hidden;\n opacity: 0;\n}\n.ant-rate-star-half .ant-rate-star-first,\n.ant-rate-star-half .ant-rate-star-second {\n opacity: 1;\n}\n.ant-rate-star-half .ant-rate-star-first,\n.ant-rate-star-full .ant-rate-star-second {\n color: inherit;\n}\n.ant-rate-text {\n display: inline-block;\n margin: 0 8px;\n font-size: 14px;\n}\n.ant-rate-rtl {\n direction: rtl;\n}\n.ant-rate-rtl .ant-rate-star:not(:last-child) {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-rate-rtl .ant-rate-star-first {\n right: 0;\n left: auto;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-result {\n padding: 48px 32px;\n}\n.ant-result-success .ant-result-icon > .anticon {\n color: #52c41a;\n}\n.ant-result-error .ant-result-icon > .anticon {\n color: #ff4d4f;\n}\n.ant-result-info .ant-result-icon > .anticon {\n color: #1890ff;\n}\n.ant-result-warning .ant-result-icon > .anticon {\n color: #faad14;\n}\n.ant-result-image {\n width: 250px;\n height: 295px;\n margin: auto;\n}\n.ant-result-icon {\n margin-bottom: 24px;\n text-align: center;\n}\n.ant-result-icon > .anticon {\n font-size: 72px;\n}\n.ant-result-title {\n color: rgba(0, 0, 0, 0.85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n}\n.ant-result-subtitle {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.6;\n text-align: center;\n}\n.ant-result-extra {\n margin: 24px 0 0 0;\n text-align: center;\n}\n.ant-result-extra > * {\n margin-right: 8px;\n}\n.ant-result-extra > *:last-child {\n margin-right: 0;\n}\n.ant-result-content {\n margin-top: 24px;\n padding: 24px 40px;\n background-color: #fafafa;\n}\n.ant-result-rtl {\n direction: rtl;\n}\n.ant-result-rtl .ant-result-extra > * {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-result-rtl .ant-result-extra > *:last-child {\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-skeleton {\n display: table;\n width: 100%;\n}\n.ant-skeleton-header {\n display: table-cell;\n padding-right: 16px;\n vertical-align: top;\n}\n.ant-skeleton-header .ant-skeleton-avatar {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 32px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-header .ant-skeleton-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-header .ant-skeleton-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-content {\n display: table-cell;\n width: 100%;\n vertical-align: top;\n}\n.ant-skeleton-content .ant-skeleton-title {\n width: 100%;\n height: 16px;\n margin-top: 16px;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 4px;\n}\n.ant-skeleton-content .ant-skeleton-title + .ant-skeleton-paragraph {\n margin-top: 24px;\n}\n.ant-skeleton-content .ant-skeleton-paragraph {\n padding: 0;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li {\n width: 100%;\n height: 16px;\n list-style: none;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 4px;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li:last-child:not(:first-child):not(:nth-child(2)) {\n width: 61%;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li + li {\n margin-top: 16px;\n}\n.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title {\n margin-top: 12px;\n}\n.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title + .ant-skeleton-paragraph {\n margin-top: 28px;\n}\n.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title,\n.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph > li {\n border-radius: 100px;\n}\n.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,\n.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li {\n background: linear-gradient(90deg, rgba(190, 190, 190, 0.2) 25%, rgba(129, 129, 129, 0.24) 37%, rgba(190, 190, 190, 0.2) 63%);\n background-size: 400% 100%;\n -webkit-animation: ant-skeleton-loading 1.4s ease infinite;\n animation: ant-skeleton-loading 1.4s ease infinite;\n}\n.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar {\n background: linear-gradient(90deg, rgba(190, 190, 190, 0.2) 25%, rgba(129, 129, 129, 0.24) 37%, rgba(190, 190, 190, 0.2) 63%);\n background-size: 400% 100%;\n -webkit-animation: ant-skeleton-loading 1.4s ease infinite;\n animation: ant-skeleton-loading 1.4s ease infinite;\n}\n.ant-skeleton.ant-skeleton-active .ant-skeleton-button {\n background: linear-gradient(90deg, rgba(190, 190, 190, 0.2) 25%, rgba(129, 129, 129, 0.24) 37%, rgba(190, 190, 190, 0.2) 63%);\n background-size: 400% 100%;\n -webkit-animation: ant-skeleton-loading 1.4s ease infinite;\n animation: ant-skeleton-loading 1.4s ease infinite;\n}\n.ant-skeleton.ant-skeleton-active .ant-skeleton-input {\n background: linear-gradient(90deg, rgba(190, 190, 190, 0.2) 25%, rgba(129, 129, 129, 0.24) 37%, rgba(190, 190, 190, 0.2) 63%);\n background-size: 400% 100%;\n -webkit-animation: ant-skeleton-loading 1.4s ease infinite;\n animation: ant-skeleton-loading 1.4s ease infinite;\n}\n.ant-skeleton.ant-skeleton-active .ant-skeleton-image {\n background: linear-gradient(90deg, rgba(190, 190, 190, 0.2) 25%, rgba(129, 129, 129, 0.24) 37%, rgba(190, 190, 190, 0.2) 63%);\n background-size: 400% 100%;\n -webkit-animation: ant-skeleton-loading 1.4s ease infinite;\n animation: ant-skeleton-loading 1.4s ease infinite;\n}\n.ant-skeleton-element {\n display: inline-block;\n width: auto;\n}\n.ant-skeleton-element .ant-skeleton-button {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 2px;\n width: 64px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle {\n width: 32px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round {\n border-radius: 32px;\n}\n.ant-skeleton-element .ant-skeleton-button-lg {\n width: 80px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle {\n width: 40px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round {\n border-radius: 40px;\n}\n.ant-skeleton-element .ant-skeleton-button-sm {\n width: 48px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle {\n width: 24px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round {\n border-radius: 24px;\n}\n.ant-skeleton-element .ant-skeleton-avatar {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 32px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-input {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 100%;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-input-lg {\n width: 100%;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-input-sm {\n width: 100%;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-image {\n display: flex;\n align-items: center;\n justify-content: center;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 96px;\n height: 96px;\n line-height: 96px;\n}\n.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-image-path {\n fill: #bfbfbf;\n}\n.ant-skeleton-element .ant-skeleton-image-svg {\n width: 48px;\n height: 48px;\n line-height: 48px;\n max-width: 192px;\n max-height: 192px;\n}\n.ant-skeleton-element .ant-skeleton-image-svg.ant-skeleton-image-circle {\n border-radius: 50%;\n}\n@-webkit-keyframes ant-skeleton-loading {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0 50%;\n }\n}\n@keyframes ant-skeleton-loading {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0 50%;\n }\n}\n.ant-skeleton-rtl {\n direction: rtl;\n}\n.ant-skeleton-rtl .ant-skeleton-header {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li {\n -webkit-animation-name: ant-skeleton-loading-rtl;\n animation-name: ant-skeleton-loading-rtl;\n}\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar {\n -webkit-animation-name: ant-skeleton-loading-rtl;\n animation-name: ant-skeleton-loading-rtl;\n}\n@-webkit-keyframes ant-skeleton-loading-rtl {\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 100% 50%;\n }\n}\n@keyframes ant-skeleton-loading-rtl {\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 100% 50%;\n }\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-slider {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n height: 12px;\n margin: 10px 6px 10px;\n padding: 4px 0;\n cursor: pointer;\n touch-action: none;\n}\n.ant-slider-vertical {\n width: 12px;\n height: 100%;\n margin: 6px 10px;\n padding: 0 4px;\n}\n.ant-slider-vertical .ant-slider-rail {\n width: 4px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-track {\n width: 4px;\n}\n.ant-slider-vertical .ant-slider-handle {\n margin-top: -6px;\n margin-left: -5px;\n}\n.ant-slider-vertical .ant-slider-mark {\n top: 0;\n left: 12px;\n width: 18px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-mark-text {\n left: 4px;\n white-space: nowrap;\n}\n.ant-slider-vertical .ant-slider-step {\n width: 4px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-dot {\n top: auto;\n left: 2px;\n margin-bottom: -4px;\n}\n.ant-slider-tooltip .ant-tooltip-inner {\n min-width: unset;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-handle {\n margin-right: -5px;\n margin-left: 0;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-mark {\n right: 12px;\n left: auto;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-mark-text {\n right: 4px;\n left: auto;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-dot {\n right: 2px;\n left: auto;\n}\n.ant-slider-with-marks {\n margin-bottom: 28px;\n}\n.ant-slider-rail {\n position: absolute;\n width: 100%;\n height: 4px;\n background-color: #f5f5f5;\n border-radius: 2px;\n transition: background-color 0.3s;\n}\n.ant-slider-track {\n position: absolute;\n height: 4px;\n background-color: #91d5ff;\n border-radius: 2px;\n transition: background-color 0.3s;\n}\n.ant-slider-handle {\n position: absolute;\n width: 14px;\n height: 14px;\n margin-top: -5px;\n background-color: #fff;\n border: solid 2px #91d5ff;\n border-radius: 50%;\n box-shadow: 0;\n cursor: pointer;\n transition: border-color 0.3s, box-shadow 0.6s, transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);\n}\n.ant-slider-handle-dragging.ant-slider-handle-dragging.ant-slider-handle-dragging {\n border-color: #46a6ff;\n box-shadow: 0 0 0 5px rgba(24, 144, 255, 0.12);\n}\n.ant-slider-handle:focus {\n border-color: #46a6ff;\n outline: none;\n box-shadow: 0 0 0 5px rgba(24, 144, 255, 0.12);\n}\n.ant-slider-handle.ant-tooltip-open {\n border-color: #1890ff;\n}\n.ant-slider:hover .ant-slider-rail {\n background-color: #e1e1e1;\n}\n.ant-slider:hover .ant-slider-track {\n background-color: #69c0ff;\n}\n.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open) {\n border-color: #69c0ff;\n}\n.ant-slider-mark {\n position: absolute;\n top: 14px;\n left: 0;\n width: 100%;\n font-size: 14px;\n}\n.ant-slider-mark-text {\n position: absolute;\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n text-align: center;\n word-break: keep-all;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-slider-mark-text-active {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-slider-step {\n position: absolute;\n width: 100%;\n height: 4px;\n background: transparent;\n}\n.ant-slider-dot {\n position: absolute;\n top: -2px;\n width: 8px;\n height: 8px;\n margin-left: -4px;\n background-color: #fff;\n border: 2px solid #f0f0f0;\n border-radius: 50%;\n cursor: pointer;\n}\n.ant-slider-dot:first-child {\n margin-left: -4px;\n}\n.ant-slider-dot:last-child {\n margin-left: -4px;\n}\n.ant-slider-dot-active {\n border-color: #8cc8ff;\n}\n.ant-slider-disabled {\n cursor: not-allowed;\n}\n.ant-slider-disabled .ant-slider-track {\n background-color: rgba(0, 0, 0, 0.25) !important;\n}\n.ant-slider-disabled .ant-slider-handle,\n.ant-slider-disabled .ant-slider-dot {\n background-color: #fff;\n border-color: rgba(0, 0, 0, 0.25) !important;\n box-shadow: none;\n cursor: not-allowed;\n}\n.ant-slider-disabled .ant-slider-mark-text,\n.ant-slider-disabled .ant-slider-dot {\n cursor: not-allowed !important;\n}\n.ant-slider-rtl {\n direction: rtl;\n}\n.ant-slider-rtl .ant-slider-mark {\n right: 0;\n left: auto;\n}\n.ant-slider-rtl .ant-slider-dot {\n margin-right: -4px;\n margin-left: 0;\n}\n.ant-slider-rtl .ant-slider-dot:first-child {\n margin-right: -4px;\n margin-left: 0;\n}\n.ant-slider-rtl .ant-slider-dot:last-child {\n margin-right: -4px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-space {\n display: inline-flex;\n}\n.ant-space-vertical {\n flex-direction: column;\n}\n.ant-space-align-center {\n align-items: center;\n}\n.ant-space-align-start {\n align-items: flex-start;\n}\n.ant-space-align-end {\n align-items: flex-end;\n}\n.ant-space-align-baseline {\n align-items: baseline;\n}\n.ant-space-item:empty {\n display: none;\n}\n.ant-space-rtl {\n direction: rtl;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-statistic {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-statistic-title {\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-statistic-content {\n color: rgba(0, 0, 0, 0.85);\n font-size: 24px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n}\n.ant-statistic-content-value {\n display: inline-block;\n direction: ltr;\n}\n.ant-statistic-content-prefix,\n.ant-statistic-content-suffix {\n display: inline-block;\n}\n.ant-statistic-content-prefix {\n margin-right: 4px;\n}\n.ant-statistic-content-suffix {\n margin-left: 4px;\n}\n.ant-statistic-rtl {\n direction: rtl;\n}\n.ant-statistic-rtl .ant-statistic-content-prefix {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-statistic-rtl .ant-statistic-content-suffix {\n margin-right: 4px;\n margin-left: 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-steps {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: flex;\n width: 100%;\n font-size: 0;\n text-align: initial;\n}\n.ant-steps-item {\n position: relative;\n display: inline-block;\n flex: 1;\n overflow: hidden;\n vertical-align: top;\n}\n.ant-steps-item-container {\n outline: none;\n}\n.ant-steps-item:last-child {\n flex: none;\n}\n.ant-steps-item:last-child > .ant-steps-item-container > .ant-steps-item-tail,\n.ant-steps-item:last-child > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-item-icon,\n.ant-steps-item-content {\n display: inline-block;\n vertical-align: top;\n}\n.ant-steps-item-icon {\n width: 32px;\n height: 32px;\n margin: 0 8px 0 0;\n font-size: 16px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 32px;\n text-align: center;\n border: 1px solid rgba(0, 0, 0, 0.25);\n border-radius: 32px;\n transition: background-color 0.3s, border-color 0.3s;\n}\n.ant-steps-item-icon .ant-steps-icon {\n position: relative;\n top: -0.5px;\n color: #1890ff;\n line-height: 1;\n}\n.ant-steps-item-tail {\n position: absolute;\n top: 12px;\n left: 0;\n width: 100%;\n padding: 0 10px;\n}\n.ant-steps-item-tail::after {\n display: inline-block;\n width: 100%;\n height: 1px;\n background: #f0f0f0;\n border-radius: 1px;\n transition: background 0.3s;\n content: '';\n}\n.ant-steps-item-title {\n position: relative;\n display: inline-block;\n padding-right: 16px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 32px;\n}\n.ant-steps-item-title::after {\n position: absolute;\n top: 16px;\n left: 100%;\n display: block;\n width: 9999px;\n height: 1px;\n background: #f0f0f0;\n content: '';\n}\n.ant-steps-item-subtitle {\n display: inline;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-steps-item-wait .ant-steps-item-icon {\n background-color: #fff;\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process .ant-steps-item-icon {\n background-color: #fff;\n border-color: #1890ff;\n}\n.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon {\n color: #1890ff;\n}\n.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #1890ff;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-icon {\n background: #1890ff;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-icon .ant-steps-icon {\n color: #fff;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-title {\n font-weight: 500;\n}\n.ant-steps-item-finish .ant-steps-item-icon {\n background-color: #fff;\n border-color: #1890ff;\n}\n.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon {\n color: #1890ff;\n}\n.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #1890ff;\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #1890ff;\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #1890ff;\n}\n.ant-steps-item-error .ant-steps-item-icon {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon {\n color: #ff4d4f;\n}\n.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item.ant-steps-next-error .ant-steps-item-title::after {\n background: #ff4d4f;\n}\n.ant-steps-item-disabled {\n cursor: not-allowed;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] {\n cursor: pointer;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-title,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-subtitle,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-description,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-icon .ant-steps-icon {\n transition: color 0.3s;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-title,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-subtitle,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-description {\n color: #1890ff;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process) > .ant-steps-item-container[role='button']:hover .ant-steps-item-icon {\n border-color: #1890ff;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process) > .ant-steps-item-container[role='button']:hover .ant-steps-item-icon .ant-steps-icon {\n color: #1890ff;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-left: 16px;\n white-space: nowrap;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-left: 0;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title {\n padding-right: 0;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail {\n display: none;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description {\n max-width: 140px;\n white-space: normal;\n}\n.ant-steps-item-custom > .ant-steps-item-container > .ant-steps-item-icon {\n height: auto;\n background: none;\n border: 0;\n}\n.ant-steps-item-custom > .ant-steps-item-container > .ant-steps-item-icon > .ant-steps-icon {\n top: 0px;\n left: 0.5px;\n width: 32px;\n height: 32px;\n font-size: 24px;\n line-height: 32px;\n}\n.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon {\n color: #1890ff;\n}\n.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon {\n width: auto;\n background: none;\n}\n.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-left: 12px;\n}\n.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-left: 0;\n}\n.ant-steps-small .ant-steps-item-icon {\n width: 24px;\n height: 24px;\n margin: 0 8px 0 0;\n font-size: 12px;\n line-height: 24px;\n text-align: center;\n border-radius: 24px;\n}\n.ant-steps-small .ant-steps-item-title {\n padding-right: 12px;\n font-size: 14px;\n line-height: 24px;\n}\n.ant-steps-small .ant-steps-item-title::after {\n top: 12px;\n}\n.ant-steps-small .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-steps-small .ant-steps-item-tail {\n top: 8px;\n}\n.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon {\n width: inherit;\n height: inherit;\n line-height: inherit;\n background: none;\n border: 0;\n border-radius: 0;\n}\n.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon > .ant-steps-icon {\n font-size: 24px;\n line-height: 24px;\n transform: none;\n}\n.ant-steps-vertical {\n display: flex;\n flex-direction: column;\n}\n.ant-steps-vertical > .ant-steps-item {\n display: block;\n flex: 1 0 auto;\n padding-left: 0;\n overflow: visible;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-icon {\n float: left;\n margin-right: 16px;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-content {\n display: block;\n min-height: 48px;\n overflow: hidden;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-title {\n line-height: 32px;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-description {\n padding-bottom: 12px;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n position: absolute;\n top: 0;\n left: 16px;\n width: 1px;\n height: 100%;\n padding: 38px 0 6px;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail::after {\n width: 1px;\n height: 100%;\n}\n.ant-steps-vertical > .ant-steps-item:not(:last-child) > .ant-steps-item-container > .ant-steps-item-tail {\n display: block;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail {\n position: absolute;\n top: 0;\n left: 12px;\n padding: 30px 0 6px;\n}\n.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title {\n line-height: 24px;\n}\n.ant-steps-label-vertical .ant-steps-item {\n overflow: visible;\n}\n.ant-steps-label-vertical .ant-steps-item-tail {\n margin-left: 58px;\n padding: 3.5px 24px;\n}\n.ant-steps-label-vertical .ant-steps-item-content {\n display: block;\n width: 116px;\n margin-top: 8px;\n text-align: center;\n}\n.ant-steps-label-vertical .ant-steps-item-icon {\n display: inline-block;\n margin-left: 42px;\n}\n.ant-steps-label-vertical .ant-steps-item-title {\n padding-right: 0;\n padding-left: 0;\n}\n.ant-steps-label-vertical .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-label-vertical .ant-steps-item-subtitle {\n display: block;\n margin-bottom: 4px;\n margin-left: 0;\n line-height: 1.5715;\n}\n.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon {\n margin-left: 46px;\n}\n.ant-steps-dot .ant-steps-item-title,\n.ant-steps-dot.ant-steps-small .ant-steps-item-title {\n line-height: 1.5715;\n}\n.ant-steps-dot .ant-steps-item-tail,\n.ant-steps-dot.ant-steps-small .ant-steps-item-tail {\n top: 2px;\n width: 100%;\n margin: 0 0 0 70px;\n padding: 0;\n}\n.ant-steps-dot .ant-steps-item-tail::after,\n.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after {\n width: calc(100% - 20px);\n height: 3px;\n margin-left: 12px;\n}\n.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot {\n left: 2px;\n}\n.ant-steps-dot .ant-steps-item-icon,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon {\n width: 8px;\n height: 8px;\n margin-left: 67px;\n padding-right: 0;\n line-height: 8px;\n background: transparent;\n border: 0;\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n position: relative;\n float: left;\n width: 100%;\n height: 100%;\n border-radius: 100px;\n transition: all 0.3s;\n /* expand hover area */\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after {\n position: absolute;\n top: -12px;\n left: -26px;\n width: 60px;\n height: 32px;\n background: rgba(0, 0, 0, 0.001);\n content: '';\n}\n.ant-steps-dot .ant-steps-item-content,\n.ant-steps-dot.ant-steps-small .ant-steps-item-content {\n width: 140px;\n}\n.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,\n.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon {\n position: relative;\n top: -1px;\n width: 10px;\n height: 10px;\n line-height: 10px;\n background: none;\n}\n.ant-steps-dot .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot {\n left: 0;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon {\n margin-top: 8px;\n margin-left: 0;\n background: none;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n top: 2px;\n left: -9px;\n margin: 0;\n padding: 22px 0 4px;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot {\n left: 0;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-content {\n width: inherit;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-item-container .ant-steps-item-icon .ant-steps-icon-dot {\n left: -2px;\n}\n.ant-steps-navigation {\n padding-top: 12px;\n}\n.ant-steps-navigation.ant-steps-small .ant-steps-item-container {\n margin-left: -12px;\n}\n.ant-steps-navigation .ant-steps-item {\n overflow: visible;\n text-align: center;\n}\n.ant-steps-navigation .ant-steps-item-container {\n display: inline-block;\n height: 100%;\n margin-left: -16px;\n padding-bottom: 12px;\n text-align: left;\n transition: opacity 0.3s;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content {\n max-width: auto;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title {\n max-width: 100%;\n padding-right: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role='button'] {\n cursor: pointer;\n}\n.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role='button']:hover {\n opacity: 0.85;\n}\n.ant-steps-navigation .ant-steps-item:last-child {\n flex: 1;\n}\n.ant-steps-navigation .ant-steps-item:last-child::after {\n display: none;\n}\n.ant-steps-navigation .ant-steps-item::after {\n position: absolute;\n top: 50%;\n left: 100%;\n display: inline-block;\n width: 12px;\n height: 12px;\n margin-top: -14px;\n margin-left: -2px;\n border: 1px solid rgba(0, 0, 0, 0.25);\n border-bottom: none;\n border-left: none;\n transform: rotate(45deg);\n content: '';\n}\n.ant-steps-navigation .ant-steps-item::before {\n position: absolute;\n bottom: 0;\n left: 50%;\n display: inline-block;\n width: 0;\n height: 2px;\n background-color: #1890ff;\n transition: width 0.3s, left 0.3s;\n transition-timing-function: ease-out;\n content: '';\n}\n.ant-steps-navigation .ant-steps-item.ant-steps-item-active::before {\n left: 0;\n width: 100%;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item {\n margin-right: 0 !important;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item::before {\n display: none;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item.ant-steps-item-active::before {\n top: 0;\n right: 0;\n left: unset;\n display: block;\n width: 3px;\n height: calc(100% - 24px);\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item::after {\n position: relative;\n top: -2px;\n left: 50%;\n display: block;\n width: 8px;\n height: 8px;\n margin-bottom: 8px;\n text-align: center;\n transform: rotate(135deg);\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n visibility: hidden;\n}\n.ant-steps-rtl {\n direction: rtl;\n}\n.ant-steps.ant-steps-rtl .ant-steps-item-icon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-steps-rtl .ant-steps-item-tail {\n right: 0;\n left: auto;\n}\n.ant-steps-rtl .ant-steps-item-title {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-steps-rtl .ant-steps-item-title::after {\n right: 100%;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-right: 16px;\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-right: 0;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl .ant-steps-item-custom .ant-steps-item-icon > .ant-steps-icon {\n right: 0.5px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-navigation.ant-steps-small .ant-steps-item-container {\n margin-right: -12px;\n margin-left: 0;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container {\n margin-right: -16px;\n margin-left: 0;\n text-align: right;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item::after {\n right: 100%;\n left: auto;\n margin-right: -2px;\n margin-left: 0;\n transform: rotate(225deg);\n}\n.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-right: 12px;\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-right: 0;\n}\n.ant-steps-rtl.ant-steps-small .ant-steps-item-title {\n padding-right: 0;\n padding-left: 12px;\n}\n.ant-steps-rtl.ant-steps-vertical > .ant-steps-item .ant-steps-item-icon {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-steps-rtl.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n right: 16px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail {\n right: 12px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-label-vertical .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail {\n margin: 0 70px 0 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail::after,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after {\n margin-right: 12px;\n margin-left: 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot {\n right: 2px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon {\n margin-right: 67px;\n margin-left: 0;\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n /* expand hover area */\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n float: right;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after {\n right: -26px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon {\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n right: -9px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot {\n right: 0;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot {\n right: -2px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-with-progress.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item:first-child.ant-steps-item-active {\n padding-right: 4px;\n}\n.ant-steps-with-progress .ant-steps-item {\n padding-top: 4px;\n}\n.ant-steps-with-progress .ant-steps-item .ant-steps-item-tail {\n top: 4px !important;\n}\n.ant-steps-with-progress.ant-steps-horizontal .ant-steps-item:first-child {\n padding-bottom: 4px;\n padding-left: 4px;\n}\n.ant-steps-with-progress .ant-steps-item-icon {\n position: relative;\n}\n.ant-steps-with-progress .ant-steps-item-icon .ant-progress {\n position: absolute;\n top: -5px;\n right: -5px;\n bottom: -5px;\n left: -5px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-switch {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n min-width: 44px;\n height: 22px;\n line-height: 22px;\n vertical-align: middle;\n background-color: rgba(0, 0, 0, 0.25);\n border: 0;\n border-radius: 100px;\n cursor: pointer;\n transition: all 0.2s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-switch:focus {\n outline: 0;\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);\n}\n.ant-switch-checked:focus {\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n.ant-switch:focus:hover {\n box-shadow: none;\n}\n.ant-switch-checked {\n background-color: #1890ff;\n}\n.ant-switch-loading,\n.ant-switch-disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n.ant-switch-loading *,\n.ant-switch-disabled * {\n box-shadow: none;\n cursor: not-allowed;\n}\n.ant-switch-inner {\n display: block;\n margin: 0 7px 0 25px;\n color: #fff;\n font-size: 12px;\n transition: margin 0.2s;\n}\n.ant-switch-checked .ant-switch-inner {\n margin: 0 25px 0 7px;\n}\n.ant-switch-handle {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n transition: all 0.2s ease-in-out;\n}\n.ant-switch-handle::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: #fff;\n border-radius: 9px;\n box-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2);\n transition: all 0.2s ease-in-out;\n content: '';\n}\n.ant-switch-checked .ant-switch-handle {\n left: calc(100% - 18px - 2px);\n}\n.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle::before {\n right: -30%;\n left: 0;\n}\n.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle::before {\n right: 0;\n left: -30%;\n}\n.ant-switch-loading-icon {\n position: relative;\n top: 2px;\n color: rgba(0, 0, 0, 0.65);\n vertical-align: top;\n}\n.ant-switch-checked .ant-switch-loading-icon {\n color: #1890ff;\n}\n.ant-switch-small {\n min-width: 28px;\n height: 16px;\n line-height: 16px;\n}\n.ant-switch-small .ant-switch-inner {\n margin: 0 5px 0 18px;\n font-size: 12px;\n}\n.ant-switch-small .ant-switch-handle {\n width: 12px;\n height: 12px;\n}\n.ant-switch-small .ant-switch-loading-icon {\n top: 1.5px;\n font-size: 9px;\n}\n.ant-switch-small.ant-switch-checked .ant-switch-inner {\n margin: 0 18px 0 5px;\n}\n.ant-switch-small.ant-switch-checked .ant-switch-handle {\n left: calc(100% - 12px - 2px);\n}\n.ant-switch-rtl {\n direction: rtl;\n}\n.ant-switch-rtl .ant-switch-inner {\n margin: 0 25px 0 7px;\n}\n.ant-switch-rtl .ant-switch-handle {\n right: 2px;\n left: auto;\n}\n.ant-switch-rtl:not(.ant-switch-rtl-disabled):active .ant-switch-handle::before {\n right: 0;\n left: -30%;\n}\n.ant-switch-rtl:not(.ant-switch-rtl-disabled):active.ant-switch-checked .ant-switch-handle::before {\n right: -30%;\n left: 0;\n}\n.ant-switch-rtl.ant-switch-checked .ant-switch-inner {\n margin: 0 7px 0 25px;\n}\n.ant-switch-rtl.ant-switch-checked .ant-switch-handle {\n right: calc(100% - 18px - 2px);\n}\n.ant-switch-rtl.ant-switch-small.ant-switch-checked .ant-switch-handle {\n right: calc(100% - 12px - 2px);\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-table.ant-table-middle {\n font-size: 14px;\n}\n.ant-table.ant-table-middle .ant-table-title,\n.ant-table.ant-table-middle .ant-table-footer,\n.ant-table.ant-table-middle .ant-table-thead > tr > th,\n.ant-table.ant-table-middle .ant-table-tbody > tr > td,\n.ant-table.ant-table-middle tfoot > tr > th,\n.ant-table.ant-table-middle tfoot > tr > td {\n padding: 12px 8px;\n}\n.ant-table.ant-table-middle .ant-table-filter-trigger {\n margin-right: -4px;\n}\n.ant-table.ant-table-middle .ant-table-expanded-row-fixed {\n margin: -12px -8px;\n}\n.ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table {\n margin: -12px -8px -12px 25px;\n}\n.ant-table.ant-table-small {\n font-size: 14px;\n}\n.ant-table.ant-table-small .ant-table-title,\n.ant-table.ant-table-small .ant-table-footer,\n.ant-table.ant-table-small .ant-table-thead > tr > th,\n.ant-table.ant-table-small .ant-table-tbody > tr > td,\n.ant-table.ant-table-small tfoot > tr > th,\n.ant-table.ant-table-small tfoot > tr > td {\n padding: 8px 8px;\n}\n.ant-table.ant-table-small .ant-table-filter-trigger {\n margin-right: -4px;\n}\n.ant-table.ant-table-small .ant-table-expanded-row-fixed {\n margin: -8px -8px;\n}\n.ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table {\n margin: -8px -8px -8px 25px;\n}\n.ant-table-small .ant-table-thead > tr > th {\n background-color: #fafafa;\n}\n.ant-table-small .ant-table-selection-column {\n width: 46px;\n min-width: 46px;\n}\n.ant-table.ant-table-bordered > .ant-table-title {\n border: 1px solid #f0f0f0;\n border-bottom: 0;\n}\n.ant-table.ant-table-bordered > .ant-table-container {\n border: 1px solid #f0f0f0;\n border-right: 0;\n border-bottom: 0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > td {\n border-right: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr:not(:last-child) > th {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > th::before {\n background-color: transparent !important;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > .ant-table-cell-fix-right-first::after {\n border-right: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -16px -17px;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td > .ant-table-expanded-row-fixed::after {\n position: absolute;\n top: 0;\n right: 1px;\n bottom: 0;\n border-right: 1px solid #f0f0f0;\n content: '';\n}\n.ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-expanded-row > td,\n.ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-placeholder > td {\n border-right: 0;\n}\n.ant-table.ant-table-bordered.ant-table-middle > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered.ant-table-middle > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -12px -9px;\n}\n.ant-table.ant-table-bordered.ant-table-small > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered.ant-table-small > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -8px -9px;\n}\n.ant-table.ant-table-bordered > .ant-table-footer {\n border: 1px solid #f0f0f0;\n border-top: 0;\n}\n.ant-table-cell .ant-table-container:first-child {\n border-top: 0;\n}\n.ant-table-cell-scrollbar {\n box-shadow: 0 1px 0 1px #fafafa;\n}\n.ant-table-wrapper {\n clear: both;\n max-width: 100%;\n}\n.ant-table-wrapper::before {\n display: table;\n content: '';\n}\n.ant-table-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-table {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n font-size: 14px;\n background: #fff;\n border-radius: 2px;\n}\n.ant-table table {\n width: 100%;\n text-align: left;\n border-radius: 2px 2px 0 0;\n border-collapse: separate;\n border-spacing: 0;\n}\n.ant-table-thead > tr > th,\n.ant-table-tbody > tr > td,\n.ant-table tfoot > tr > th,\n.ant-table tfoot > tr > td {\n position: relative;\n padding: 16px 16px;\n overflow-wrap: break-word;\n}\n.ant-table-cell-ellipsis {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-table-cell-ellipsis.ant-table-cell-fix-left-last,\n.ant-table-cell-ellipsis.ant-table-cell-fix-right-first {\n overflow: visible;\n}\n.ant-table-cell-ellipsis.ant-table-cell-fix-left-last .ant-table-cell-content,\n.ant-table-cell-ellipsis.ant-table-cell-fix-right-first .ant-table-cell-content {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ant-table-cell-ellipsis .ant-table-column-title {\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-table-title {\n padding: 16px 16px;\n}\n.ant-table-footer {\n padding: 16px 16px;\n color: rgba(0, 0, 0, 0.85);\n background: #fafafa;\n}\n.ant-table-thead > tr > th {\n position: relative;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n text-align: left;\n background: #fafafa;\n border-bottom: 1px solid #f0f0f0;\n transition: background 0.3s ease;\n}\n.ant-table-thead > tr > th[colspan]:not([colspan='1']) {\n text-align: center;\n}\n.ant-table-thead > tr > th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before {\n position: absolute;\n top: 50%;\n right: 0;\n width: 1px;\n height: 1.6em;\n background-color: rgba(0, 0, 0, 0.06);\n transform: translateY(-50%);\n transition: background-color 0.3s;\n content: '';\n}\n.ant-table-thead > tr:not(:last-child) > th[colspan] {\n border-bottom: 0;\n}\n.ant-table-tbody > tr > td {\n border-bottom: 1px solid #f0f0f0;\n transition: background 0.3s;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table {\n margin: -16px -16px -16px 33px;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td {\n border-bottom: 0;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:first-child,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:first-child,\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:last-child,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:last-child {\n border-radius: 0;\n}\n.ant-table-tbody > tr.ant-table-row:hover > td {\n background: #fafafa;\n}\n.ant-table-tbody > tr.ant-table-row-selected > td {\n background: #e6f7ff;\n border-color: rgba(0, 0, 0, 0.03);\n}\n.ant-table-tbody > tr.ant-table-row-selected:hover > td {\n background: #dcf4ff;\n}\n.ant-table-summary {\n background: #fff;\n}\ndiv.ant-table-summary {\n box-shadow: 0 -1px 0 #f0f0f0;\n}\n.ant-table-summary > tr > th,\n.ant-table-summary > tr > td {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-table-pagination.ant-pagination {\n margin: 16px 0;\n}\n.ant-table-pagination {\n display: flex;\n flex-wrap: wrap;\n row-gap: 8px;\n}\n.ant-table-pagination > * {\n flex: none;\n}\n.ant-table-pagination-left {\n justify-content: flex-start;\n}\n.ant-table-pagination-center {\n justify-content: center;\n}\n.ant-table-pagination-right {\n justify-content: flex-end;\n}\n.ant-table-thead th.ant-table-column-has-sorters {\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-table-thead th.ant-table-column-has-sorters:hover {\n background: rgba(0, 0, 0, 0.04);\n}\n.ant-table-thead th.ant-table-column-has-sorters:hover::before {\n background-color: transparent !important;\n}\n.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-left:hover,\n.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-right:hover {\n background: #f5f5f5;\n}\n.ant-table-thead th.ant-table-column-sort {\n background: #f5f5f5;\n}\n.ant-table-thead th.ant-table-column-sort::before {\n background-color: transparent !important;\n}\ntd.ant-table-column-sort {\n background: #fafafa;\n}\n.ant-table-column-title {\n position: relative;\n z-index: 1;\n flex: 1;\n}\n.ant-table-column-sorters {\n display: flex;\n flex: auto;\n align-items: center;\n justify-content: space-between;\n}\n.ant-table-column-sorters::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n.ant-table-column-sorter {\n color: #bfbfbf;\n font-size: 0;\n transition: color 0.3s;\n}\n.ant-table-column-sorter-inner {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n}\n.ant-table-column-sorter-up,\n.ant-table-column-sorter-down {\n font-size: 11px;\n}\n.ant-table-column-sorter-up.active,\n.ant-table-column-sorter-down.active {\n color: #1890ff;\n}\n.ant-table-column-sorter-up + .ant-table-column-sorter-down {\n margin-top: -0.3em;\n}\n.ant-table-column-sorters:hover .ant-table-column-sorter {\n color: #a6a6a6;\n}\n.ant-table-filter-column {\n display: flex;\n justify-content: space-between;\n}\n.ant-table-filter-trigger {\n position: relative;\n display: flex;\n align-items: center;\n margin: -4px -8px -4px 4px;\n padding: 0 4px;\n color: #bfbfbf;\n font-size: 12px;\n border-radius: 2px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-table-filter-trigger:hover {\n color: rgba(0, 0, 0, 0.45);\n background: rgba(0, 0, 0, 0.04);\n}\n.ant-table-filter-trigger.active {\n color: #1890ff;\n}\n.ant-table-filter-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n min-width: 120px;\n background-color: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-table-filter-dropdown .ant-dropdown-menu {\n max-height: 264px;\n overflow-x: hidden;\n border: 0;\n box-shadow: none;\n}\n.ant-table-filter-dropdown-submenu > ul {\n max-height: calc(100vh - 130px);\n overflow-x: hidden;\n overflow-y: auto;\n}\n.ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span {\n padding-left: 8px;\n}\n.ant-table-filter-dropdown-btns {\n display: flex;\n justify-content: space-between;\n padding: 7px 8px 7px 3px;\n overflow: hidden;\n background-color: inherit;\n border-top: 1px solid #f0f0f0;\n}\n.ant-table-selection-col {\n width: 32px;\n}\n.ant-table-bordered .ant-table-selection-col {\n width: 50px;\n}\ntable tr th.ant-table-selection-column,\ntable tr td.ant-table-selection-column {\n padding-right: 8px;\n padding-left: 8px;\n text-align: center;\n}\ntable tr th.ant-table-selection-column .ant-radio-wrapper,\ntable tr td.ant-table-selection-column .ant-radio-wrapper {\n margin-right: 0;\n}\ntable tr th.ant-table-selection-column::after {\n background-color: transparent !important;\n}\n.ant-table-selection {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n}\n.ant-table-selection-extra {\n position: absolute;\n top: 0;\n z-index: 1;\n cursor: pointer;\n transition: all 0.3s;\n -webkit-margin-start: 100%;\n margin-inline-start: 100%;\n -webkit-padding-start: 4px;\n padding-inline-start: 4px;\n}\n.ant-table-selection-extra .anticon {\n color: #bfbfbf;\n font-size: 10px;\n}\n.ant-table-selection-extra .anticon:hover {\n color: #a6a6a6;\n}\n.ant-table-expand-icon-col {\n width: 48px;\n}\n.ant-table-row-expand-icon-cell {\n text-align: center;\n}\n.ant-table-row-indent {\n float: left;\n height: 1px;\n}\n.ant-table-row-expand-icon {\n color: #1890ff;\n text-decoration: none;\n cursor: pointer;\n transition: color 0.3s;\n position: relative;\n display: inline-flex;\n float: left;\n box-sizing: border-box;\n width: 17px;\n height: 17px;\n padding: 0;\n color: inherit;\n line-height: 17px;\n background: #fff;\n border: 1px solid #f0f0f0;\n border-radius: 2px;\n outline: none;\n transform: scale(0.94117647);\n transition: all 0.3s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-table-row-expand-icon:focus,\n.ant-table-row-expand-icon:hover {\n color: #40a9ff;\n}\n.ant-table-row-expand-icon:active {\n color: #096dd9;\n}\n.ant-table-row-expand-icon:focus,\n.ant-table-row-expand-icon:hover,\n.ant-table-row-expand-icon:active {\n border-color: currentColor;\n}\n.ant-table-row-expand-icon::before,\n.ant-table-row-expand-icon::after {\n position: absolute;\n background: currentColor;\n transition: transform 0.3s ease-out;\n content: '';\n}\n.ant-table-row-expand-icon::before {\n top: 7px;\n right: 3px;\n left: 3px;\n height: 1px;\n}\n.ant-table-row-expand-icon::after {\n top: 3px;\n bottom: 3px;\n left: 7px;\n width: 1px;\n transform: rotate(90deg);\n}\n.ant-table-row-expand-icon-collapsed::before {\n transform: rotate(-180deg);\n}\n.ant-table-row-expand-icon-collapsed::after {\n transform: rotate(0deg);\n}\n.ant-table-row-expand-icon-spaced {\n background: transparent;\n border: 0;\n visibility: hidden;\n}\n.ant-table-row-expand-icon-spaced::before,\n.ant-table-row-expand-icon-spaced::after {\n display: none;\n content: none;\n}\n.ant-table-row-indent + .ant-table-row-expand-icon {\n margin-top: 2.5005px;\n margin-right: 8px;\n}\ntr.ant-table-expanded-row > td,\ntr.ant-table-expanded-row:hover > td {\n background: #fbfbfb;\n}\ntr.ant-table-expanded-row .ant-descriptions-view {\n display: flex;\n}\ntr.ant-table-expanded-row .ant-descriptions-view table {\n flex: auto;\n width: auto;\n}\n.ant-table .ant-table-expanded-row-fixed {\n position: relative;\n margin: -16px -16px;\n padding: 16px 16px;\n}\n.ant-table-tbody > tr.ant-table-placeholder {\n text-align: center;\n}\n.ant-table-empty .ant-table-tbody > tr.ant-table-placeholder {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-table-tbody > tr.ant-table-placeholder:hover > td {\n background: #fff;\n}\n.ant-table-cell-fix-left,\n.ant-table-cell-fix-right {\n position: sticky !important;\n z-index: 2;\n background: #fff;\n}\n.ant-table-cell-fix-left-first::after,\n.ant-table-cell-fix-left-last::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: -1px;\n width: 30px;\n transform: translateX(100%);\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table-cell-fix-right-first::after,\n.ant-table-cell-fix-right-last::after {\n position: absolute;\n top: 0;\n bottom: -1px;\n left: 0;\n width: 30px;\n transform: translateX(-100%);\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table .ant-table-container::before,\n.ant-table .ant-table-container::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n width: 30px;\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table .ant-table-container::before {\n left: 0;\n}\n.ant-table .ant-table-container::after {\n right: 0;\n}\n.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container {\n position: relative;\n}\n.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container::before {\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-left .ant-table-cell-fix-left-first::after,\n.ant-table-ping-left .ant-table-cell-fix-left-last::after {\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-left .ant-table-cell-fix-left-last::before {\n background-color: transparent !important;\n}\n.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container {\n position: relative;\n}\n.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container::after {\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-right .ant-table-cell-fix-right-first::after,\n.ant-table-ping-right .ant-table-cell-fix-right-last::after {\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-sticky-holder {\n position: sticky;\n z-index: 3;\n}\n.ant-table-sticky-scroll {\n position: sticky;\n bottom: 0;\n z-index: 3;\n display: flex;\n align-items: center;\n background: #ffffff;\n border-top: 1px solid #f0f0f0;\n opacity: 0.6;\n}\n.ant-table-sticky-scroll:hover {\n transform-origin: center bottom;\n}\n.ant-table-sticky-scroll-bar {\n height: 8px;\n background-color: rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n}\n.ant-table-sticky-scroll-bar:hover {\n background-color: rgba(0, 0, 0, 0.8);\n}\n.ant-table-sticky-scroll-bar-active {\n background-color: rgba(0, 0, 0, 0.8);\n}\n@media all and (-ms-high-contrast: none) {\n .ant-table-ping-left .ant-table-cell-fix-left-last::after {\n box-shadow: none !important;\n }\n .ant-table-ping-right .ant-table-cell-fix-right-first::after {\n box-shadow: none !important;\n }\n}\n.ant-table {\n /* title + table */\n /* table */\n /* table + footer */\n}\n.ant-table-title {\n border-radius: 2px 2px 0 0;\n}\n.ant-table-title + .ant-table-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.ant-table-title + .ant-table-container table > thead > tr:first-child th:first-child {\n border-radius: 0;\n}\n.ant-table-title + .ant-table-container table > thead > tr:first-child th:last-child {\n border-radius: 0;\n}\n.ant-table-container {\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n}\n.ant-table-container table > thead > tr:first-child th:first-child {\n border-top-left-radius: 2px;\n}\n.ant-table-container table > thead > tr:first-child th:last-child {\n border-top-right-radius: 2px;\n}\n.ant-table-footer {\n border-radius: 0 0 2px 2px;\n}\n.ant-table-wrapper-rtl {\n direction: rtl;\n}\n.ant-table-rtl {\n direction: rtl;\n}\n.ant-table-wrapper-rtl .ant-table table {\n text-align: right;\n}\n.ant-table-wrapper-rtl .ant-table-thead > tr > th[colspan]:not([colspan='1']) {\n text-align: center;\n}\n.ant-table-wrapper-rtl .ant-table-thead > tr > th {\n text-align: right;\n}\n.ant-table-tbody > tr .ant-table-wrapper:only-child .ant-table.ant-table-rtl {\n margin: -16px 33px -16px -16px;\n}\n.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-left {\n justify-content: flex-end;\n}\n.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-right {\n justify-content: flex-start;\n}\n.ant-table-wrapper-rtl .ant-table-column-sorter {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-table-wrapper-rtl .ant-table-filter-column-title {\n padding: 16px 16px 16px 2.3em;\n}\n.ant-table-rtl .ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column-title {\n padding: 0 0 0 2.3em;\n}\n.ant-table-wrapper-rtl .ant-table-filter-trigger-container {\n right: auto;\n left: 0;\n}\n.ant-dropdown-rtl .ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-dropdown-rtl .ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span,\n.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span {\n padding-right: 8px;\n padding-left: 0;\n}\n.ant-table-wrapper-rtl .ant-table-selection {\n text-align: center;\n}\n.ant-table-wrapper-rtl .ant-table-row-indent {\n float: right;\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon {\n float: right;\n}\n.ant-table-wrapper-rtl .ant-table-row-indent + .ant-table-row-expand-icon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon::after {\n transform: rotate(-90deg);\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::before {\n transform: rotate(180deg);\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::after {\n transform: rotate(0deg);\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-timeline {\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-timeline-item {\n position: relative;\n margin: 0;\n padding-bottom: 20px;\n font-size: 14px;\n list-style: none;\n}\n.ant-timeline-item-tail {\n position: absolute;\n top: 10px;\n left: 4px;\n height: calc(100% - 10px);\n border-left: 2px solid #f0f0f0;\n}\n.ant-timeline-item-pending .ant-timeline-item-head {\n font-size: 12px;\n background-color: transparent;\n}\n.ant-timeline-item-pending .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline-item-head {\n position: absolute;\n width: 10px;\n height: 10px;\n background-color: #fff;\n border: 2px solid transparent;\n border-radius: 100px;\n}\n.ant-timeline-item-head-blue {\n color: #1890ff;\n border-color: #1890ff;\n}\n.ant-timeline-item-head-red {\n color: #ff4d4f;\n border-color: #ff4d4f;\n}\n.ant-timeline-item-head-green {\n color: #52c41a;\n border-color: #52c41a;\n}\n.ant-timeline-item-head-gray {\n color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-timeline-item-head-custom {\n position: absolute;\n top: 5.5px;\n left: 5px;\n width: auto;\n height: auto;\n margin-top: 0;\n padding: 3px 1px;\n line-height: 1;\n text-align: center;\n border: 0;\n border-radius: 0;\n transform: translate(-50%, -50%);\n}\n.ant-timeline-item-content {\n position: relative;\n top: -7.001px;\n margin: 0 0 0 26px;\n word-break: break-word;\n}\n.ant-timeline-item-last > .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline-item-last > .ant-timeline-item-content {\n min-height: 48px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-right .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-label .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head,\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n left: 50%;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head {\n margin-left: -4px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n margin-left: 1px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content {\n left: calc(50% - 4px);\n width: calc(50% - 14px);\n text-align: left;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content {\n width: calc(50% - 12px);\n margin: 0;\n text-align: right;\n}\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom {\n left: calc(100% - 4px - 2px);\n}\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content {\n width: calc(100% - 18px);\n}\n.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail {\n display: block;\n height: calc(100% - 14px);\n border-left: 2px dotted #f0f0f0;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail {\n top: 15px;\n display: block;\n height: calc(100% - 15px);\n border-left: 2px dotted #f0f0f0;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content {\n min-height: 48px;\n}\n.ant-timeline.ant-timeline-label .ant-timeline-item-label {\n position: absolute;\n top: -7.001px;\n width: calc(50% - 12px);\n text-align: right;\n}\n.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label {\n left: calc(50% + 14px);\n width: calc(50% - 14px);\n text-align: left;\n}\n.ant-timeline-rtl {\n direction: rtl;\n}\n.ant-timeline-rtl .ant-timeline-item-tail {\n right: 4px;\n left: auto;\n border-right: 2px solid #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl .ant-timeline-item-head-custom {\n right: 5px;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-timeline-rtl .ant-timeline-item-content {\n margin: 0 18px 0 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n right: 50%;\n left: auto;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head {\n margin-right: -4px;\n margin-left: 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n margin-right: 1px;\n margin-left: 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content {\n right: calc(50% - 4px);\n left: auto;\n text-align: right;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content {\n text-align: left;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom {\n right: 0;\n left: auto;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content {\n width: 100%;\n margin-right: 18px;\n text-align: right;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail {\n border-right: 2px dotted #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail {\n border-right: 2px dotted #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-label {\n text-align: left;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label {\n right: calc(50% + 14px);\n text-align: right;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n@-webkit-keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-transfer-customize-list .ant-transfer-list {\n flex: 1 1 50%;\n width: auto;\n height: auto;\n min-height: 200px;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small {\n border: 0;\n border-radius: 0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small > .ant-table-content > .ant-table-body > table > .ant-table-thead > tr > th {\n background: #fafafa;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small > .ant-table-content .ant-table-row:last-child td {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body {\n margin: 0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination {\n margin: 16px 0 4px;\n}\n.ant-transfer-customize-list .ant-input[disabled] {\n background-color: transparent;\n}\n.ant-transfer {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: flex;\n align-items: stretch;\n}\n.ant-transfer-disabled .ant-transfer-list {\n background: #f5f5f5;\n}\n.ant-transfer-list {\n display: flex;\n flex-direction: column;\n width: 180px;\n height: 200px;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n}\n.ant-transfer-list-with-pagination {\n width: 250px;\n height: auto;\n}\n.ant-transfer-list-search {\n padding-right: 24px;\n padding-left: 8px;\n}\n.ant-transfer-list-search-action {\n position: absolute;\n top: 12px;\n right: 12px;\n bottom: 12px;\n width: 28px;\n color: rgba(0, 0, 0, 0.25);\n line-height: 32px;\n text-align: center;\n}\n.ant-transfer-list-search-action .anticon {\n color: rgba(0, 0, 0, 0.25);\n transition: all 0.3s;\n}\n.ant-transfer-list-search-action .anticon:hover {\n color: rgba(0, 0, 0, 0.45);\n}\nspan.ant-transfer-list-search-action {\n pointer-events: none;\n}\n.ant-transfer-list-header {\n display: flex;\n flex: none;\n align-items: center;\n height: 40px;\n padding: 8px 12px 9px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 2px 2px 0 0;\n}\n.ant-transfer-list-header > *:not(:last-child) {\n margin-right: 4px;\n}\n.ant-transfer-list-header > * {\n flex: none;\n}\n.ant-transfer-list-header-title {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n text-overflow: ellipsis;\n}\n.ant-transfer-list-header-dropdown {\n font-size: 10px;\n transform: translateY(10%);\n cursor: pointer;\n}\n.ant-transfer-list-header-dropdown[disabled] {\n cursor: not-allowed;\n}\n.ant-transfer-list-body {\n display: flex;\n flex: auto;\n flex-direction: column;\n overflow: hidden;\n font-size: 14px;\n}\n.ant-transfer-list-body-search-wrapper {\n position: relative;\n flex: none;\n padding: 12px;\n}\n.ant-transfer-list-content {\n flex: auto;\n margin: 0;\n padding: 0;\n overflow: auto;\n list-style: none;\n}\n.ant-transfer-list-content-item {\n display: flex;\n align-items: center;\n min-height: 32px;\n padding: 6px 12px;\n line-height: 20px;\n transition: all 0.3s;\n}\n.ant-transfer-list-content-item > *:not(:last-child) {\n margin-right: 8px;\n}\n.ant-transfer-list-content-item > * {\n flex: none;\n}\n.ant-transfer-list-content-item-text {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-transfer-list-content-item-remove {\n color: #1890ff;\n text-decoration: none;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n position: relative;\n color: #d9d9d9;\n}\n.ant-transfer-list-content-item-remove:focus,\n.ant-transfer-list-content-item-remove:hover {\n color: #40a9ff;\n}\n.ant-transfer-list-content-item-remove:active {\n color: #096dd9;\n}\n.ant-transfer-list-content-item-remove::after {\n position: absolute;\n top: -6px;\n right: -50%;\n bottom: -6px;\n left: -50%;\n content: '';\n}\n.ant-transfer-list-content-item-remove:hover {\n color: #40a9ff;\n}\n.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover {\n background-color: #f5f5f5;\n cursor: pointer;\n}\n.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled).ant-transfer-list-content-item-checked:hover {\n background-color: #dcf4ff;\n}\n.ant-transfer-list-content-show-remove .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover {\n background: transparent;\n cursor: default;\n}\n.ant-transfer-list-content-item-checked {\n background-color: #e6f7ff;\n}\n.ant-transfer-list-content-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-transfer-list-pagination {\n padding: 8px 0;\n text-align: right;\n border-top: 1px solid #f0f0f0;\n}\n.ant-transfer-list-body-not-found {\n flex: none;\n width: 100%;\n margin: auto 0;\n color: rgba(0, 0, 0, 0.25);\n text-align: center;\n}\n.ant-transfer-list-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-transfer-operation {\n display: flex;\n flex: none;\n flex-direction: column;\n align-self: center;\n margin: 0 8px;\n vertical-align: middle;\n}\n.ant-transfer-operation .ant-btn {\n display: block;\n}\n.ant-transfer-operation .ant-btn:first-child {\n margin-bottom: 4px;\n}\n.ant-transfer-operation .ant-btn .anticon {\n font-size: 12px;\n}\n.ant-transfer .ant-empty-image {\n max-height: -2px;\n}\n.ant-transfer-rtl {\n direction: rtl;\n}\n.ant-transfer-rtl .ant-transfer-list-search {\n padding-right: 8px;\n padding-left: 24px;\n}\n.ant-transfer-rtl .ant-transfer-list-search-action {\n right: auto;\n left: 12px;\n}\n.ant-transfer-rtl .ant-transfer-list-header > *:not(:last-child) {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-transfer-rtl .ant-transfer-list-header {\n right: 0;\n left: auto;\n}\n.ant-transfer-rtl .ant-transfer-list-header-title {\n text-align: left;\n}\n.ant-transfer-rtl .ant-transfer-list-content-item > *:not(:last-child) {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-transfer-rtl .ant-transfer-list-pagination {\n text-align: left;\n}\n.ant-transfer-rtl .ant-transfer-list-footer {\n right: 0;\n left: auto;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line::before {\n top: auto !important;\n bottom: auto !important;\n height: 14px !important;\n}\n@-webkit-keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-select-tree-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,\n.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner,\n.ant-select-tree-checkbox-input:focus + .ant-select-tree-checkbox-inner {\n border-color: #1890ff;\n}\n.ant-select-tree-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #1890ff;\n border-radius: 2px;\n visibility: hidden;\n -webkit-animation: antCheckboxEffect 0.36s ease-in-out;\n animation: antCheckboxEffect 0.36s ease-in-out;\n -webkit-animation-fill-mode: backwards;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-select-tree-checkbox:hover::after,\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox::after {\n visibility: visible;\n}\n.ant-select-tree-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-select-tree-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 22%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-select-tree-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner {\n background-color: #1890ff;\n border-color: #1890ff;\n}\n.ant-select-tree-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n -webkit-animation-name: none;\n animation-name: none;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input {\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n -webkit-animation-name: none;\n animation-name: none;\n}\n.ant-select-tree-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-disabled:hover::after,\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-select-tree-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-select-tree-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-wrapper + .ant-select-tree-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-select-tree-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-select-tree-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-select-tree-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-select-tree-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-select-tree-checkbox-group-item + .ant-select-tree-checkbox-group-item {\n margin-left: 0;\n}\n.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #1890ff;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-tree-select-dropdown {\n padding: 8px 4px 0;\n}\n.ant-tree-select-dropdown-rtl {\n direction: rtl;\n}\n.ant-tree-select-dropdown .ant-select-tree {\n border-radius: 0;\n}\n.ant-tree-select-dropdown .ant-select-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode {\n padding-bottom: 8px;\n}\n.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode .ant-select-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-select-tree {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n border-radius: 2px;\n transition: background-color 0.3s;\n}\n.ant-select-tree-focused:not(:hover):not(.ant-select-tree-active-focused) {\n background: #e6f7ff;\n}\n.ant-select-tree-list-holder-inner {\n align-items: flex-start;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-select-tree .ant-select-tree-treenode {\n display: flex;\n align-items: flex-start;\n padding: 0 0 4px 0;\n outline: none;\n}\n.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-select-tree .ant-select-tree-treenode-active .ant-select-tree-node-content-wrapper {\n background: #f5f5f5;\n}\n.ant-select-tree .ant-select-tree-treenode:not(.ant-select-tree .ant-select-tree-treenode-disabled).filter-node .ant-select-tree-title {\n color: inherit;\n font-weight: 500;\n}\n.ant-select-tree-indent {\n align-self: stretch;\n white-space: nowrap;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-select-tree-indent-unit {\n display: inline-block;\n width: 24px;\n}\n.ant-select-tree-switcher {\n position: relative;\n flex: none;\n align-self: stretch;\n width: 24px;\n margin: 0;\n line-height: 24px;\n text-align: center;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-select-tree-switcher .ant-tree-switcher-icon,\n.ant-select-tree-switcher .ant-select-tree-switcher-icon {\n display: inline-block;\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-select-tree-switcher .ant-tree-switcher-icon svg,\n.ant-select-tree-switcher .ant-select-tree-switcher-icon svg {\n transition: transform 0.3s;\n}\n.ant-select-tree-switcher-noop {\n cursor: default;\n}\n.ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg {\n transform: rotate(-90deg);\n}\n.ant-select-tree-switcher-loading-icon {\n color: #1890ff;\n}\n.ant-select-tree-switcher-leaf-line {\n position: relative;\n z-index: 1;\n display: inline-block;\n width: 100%;\n height: 100%;\n}\n.ant-select-tree-switcher-leaf-line::before {\n position: absolute;\n top: 0;\n bottom: -4px;\n margin-left: -1px;\n border-left: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-select-tree-switcher-leaf-line::after {\n position: absolute;\n width: 10px;\n height: 14px;\n margin-left: -1px;\n border-bottom: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-select-tree-checkbox {\n top: initial;\n margin: 4px 8px 0 0;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper {\n position: relative;\n z-index: auto;\n min-height: 24px;\n margin: 0;\n padding: 0 4px;\n color: inherit;\n line-height: 24px;\n background: transparent;\n border-radius: 2px;\n cursor: pointer;\n transition: all 0.3s, border 0s, line-height 0s, box-shadow 0s;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper:hover {\n background-color: #f5f5f5;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected {\n background-color: #bae7ff;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle {\n display: inline-block;\n width: 24px;\n height: 24px;\n line-height: 24px;\n text-align: center;\n vertical-align: top;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle:empty {\n display: none;\n}\n.ant-select-tree-unselectable .ant-select-tree-node-content-wrapper:hover {\n background-color: transparent;\n}\n.ant-select-tree-node-content-wrapper[draggable='true'] {\n line-height: 24px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-select-tree-node-content-wrapper[draggable='true'] .ant-tree-drop-indicator {\n position: absolute;\n z-index: 1;\n height: 2px;\n background-color: #1890ff;\n border-radius: 1px;\n pointer-events: none;\n}\n.ant-select-tree-node-content-wrapper[draggable='true'] .ant-tree-drop-indicator::after {\n position: absolute;\n top: -3px;\n left: -6px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n border: 2px solid #1890ff;\n border-radius: 50%;\n content: '';\n}\n.ant-select-tree .ant-select-tree-treenode.drop-container > [draggable] {\n box-shadow: 0 0 0 2px #1890ff;\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit {\n position: relative;\n height: 100%;\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n border-right: 1px solid #d9d9d9;\n content: '';\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit-end::before {\n display: none;\n}\n.ant-select-tree-show-line .ant-select-tree-switcher {\n background: #fff;\n}\n.ant-select-tree-show-line .ant-select-tree-switcher-line-icon {\n vertical-align: -0.225em;\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg {\n transform: rotate(90deg);\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher-loading-icon {\n transform: scaleY(-1);\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n@-webkit-keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line::before {\n top: auto !important;\n bottom: auto !important;\n height: 14px !important;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode {\n position: relative;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 4px;\n left: 0;\n transition: background-color 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode:hover::before {\n background: #f5f5f5;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode > * {\n z-index: 1;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher {\n transition: color 0.3s;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper {\n border-radius: 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected {\n color: #fff;\n background: transparent;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover::before,\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected::before {\n background: #1890ff;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher {\n color: #fff;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper {\n color: #fff;\n background: transparent;\n}\n.ant-tree-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,\n.ant-tree-checkbox:hover .ant-tree-checkbox-inner,\n.ant-tree-checkbox-input:focus + .ant-tree-checkbox-inner {\n border-color: #1890ff;\n}\n.ant-tree-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #1890ff;\n border-radius: 2px;\n visibility: hidden;\n -webkit-animation: antCheckboxEffect 0.36s ease-in-out;\n animation: antCheckboxEffect 0.36s ease-in-out;\n -webkit-animation-fill-mode: backwards;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-tree-checkbox:hover::after,\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox::after {\n visibility: visible;\n}\n.ant-tree-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-tree-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 22%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-tree-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-tree-checkbox-checked .ant-tree-checkbox-inner {\n background-color: #1890ff;\n border-color: #1890ff;\n}\n.ant-tree-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n -webkit-animation-name: none;\n animation-name: none;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-input {\n cursor: not-allowed;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n -webkit-animation-name: none;\n animation-name: none;\n}\n.ant-tree-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tree-checkbox-disabled:hover::after,\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-tree-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-tree-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-tree-checkbox-wrapper + .ant-tree-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-tree-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-tree-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-tree-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-tree-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-tree-checkbox-group-item + .ant-tree-checkbox-group-item {\n margin-left: 0;\n}\n.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #1890ff;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-tree {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n border-radius: 2px;\n transition: background-color 0.3s;\n}\n.ant-tree-focused:not(:hover):not(.ant-tree-active-focused) {\n background: #e6f7ff;\n}\n.ant-tree-list-holder-inner {\n align-items: flex-start;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-tree .ant-tree-treenode {\n display: flex;\n align-items: flex-start;\n padding: 0 0 4px 0;\n outline: none;\n}\n.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper {\n background: #f5f5f5;\n}\n.ant-tree .ant-tree-treenode:not(.ant-tree .ant-tree-treenode-disabled).filter-node .ant-tree-title {\n color: inherit;\n font-weight: 500;\n}\n.ant-tree-indent {\n align-self: stretch;\n white-space: nowrap;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-tree-indent-unit {\n display: inline-block;\n width: 24px;\n}\n.ant-tree-switcher {\n position: relative;\n flex: none;\n align-self: stretch;\n width: 24px;\n margin: 0;\n line-height: 24px;\n text-align: center;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-tree-switcher .ant-tree-switcher-icon,\n.ant-tree-switcher .ant-select-tree-switcher-icon {\n display: inline-block;\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-tree-switcher .ant-tree-switcher-icon svg,\n.ant-tree-switcher .ant-select-tree-switcher-icon svg {\n transition: transform 0.3s;\n}\n.ant-tree-switcher-noop {\n cursor: default;\n}\n.ant-tree-switcher_close .ant-tree-switcher-icon svg {\n transform: rotate(-90deg);\n}\n.ant-tree-switcher-loading-icon {\n color: #1890ff;\n}\n.ant-tree-switcher-leaf-line {\n position: relative;\n z-index: 1;\n display: inline-block;\n width: 100%;\n height: 100%;\n}\n.ant-tree-switcher-leaf-line::before {\n position: absolute;\n top: 0;\n bottom: -4px;\n margin-left: -1px;\n border-left: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-tree-switcher-leaf-line::after {\n position: absolute;\n width: 10px;\n height: 14px;\n margin-left: -1px;\n border-bottom: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-tree-checkbox {\n top: initial;\n margin: 4px 8px 0 0;\n}\n.ant-tree .ant-tree-node-content-wrapper {\n position: relative;\n z-index: auto;\n min-height: 24px;\n margin: 0;\n padding: 0 4px;\n color: inherit;\n line-height: 24px;\n background: transparent;\n border-radius: 2px;\n cursor: pointer;\n transition: all 0.3s, border 0s, line-height 0s, box-shadow 0s;\n}\n.ant-tree .ant-tree-node-content-wrapper:hover {\n background-color: #f5f5f5;\n}\n.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected {\n background-color: #bae7ff;\n}\n.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle {\n display: inline-block;\n width: 24px;\n height: 24px;\n line-height: 24px;\n text-align: center;\n vertical-align: top;\n}\n.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty {\n display: none;\n}\n.ant-tree-unselectable .ant-tree-node-content-wrapper:hover {\n background-color: transparent;\n}\n.ant-tree-node-content-wrapper[draggable='true'] {\n line-height: 24px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.ant-tree-node-content-wrapper[draggable='true'] .ant-tree-drop-indicator {\n position: absolute;\n z-index: 1;\n height: 2px;\n background-color: #1890ff;\n border-radius: 1px;\n pointer-events: none;\n}\n.ant-tree-node-content-wrapper[draggable='true'] .ant-tree-drop-indicator::after {\n position: absolute;\n top: -3px;\n left: -6px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n border: 2px solid #1890ff;\n border-radius: 50%;\n content: '';\n}\n.ant-tree .ant-tree-treenode.drop-container > [draggable] {\n box-shadow: 0 0 0 2px #1890ff;\n}\n.ant-tree-show-line .ant-tree-indent-unit {\n position: relative;\n height: 100%;\n}\n.ant-tree-show-line .ant-tree-indent-unit::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n border-right: 1px solid #d9d9d9;\n content: '';\n}\n.ant-tree-show-line .ant-tree-indent-unit-end::before {\n display: none;\n}\n.ant-tree-show-line .ant-tree-switcher {\n background: #fff;\n}\n.ant-tree-show-line .ant-tree-switcher-line-icon {\n vertical-align: -0.225em;\n}\n.ant-tree-rtl {\n direction: rtl;\n}\n.ant-tree-rtl .ant-tree-node-content-wrapper[draggable='true'] .ant-tree-drop-indicator::after {\n right: -6px;\n left: unset;\n}\n.ant-tree .ant-tree-treenode-rtl {\n direction: rtl;\n}\n.ant-tree-rtl .ant-tree-switcher_close .ant-tree-switcher-icon svg {\n transform: rotate(90deg);\n}\n.ant-tree-rtl.ant-tree-show-line .ant-tree-indent-unit::before {\n right: auto;\n left: -13px;\n border-right: none;\n border-left: 1px solid #d9d9d9;\n}\n.ant-tree-rtl.ant-tree-checkbox {\n margin: 4px 0 0 8px;\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree-checkbox {\n margin: 4px 0 0 8px;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-typography {\n color: rgba(0, 0, 0, 0.85);\n overflow-wrap: break-word;\n}\n.ant-typography.ant-typography-secondary {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-typography.ant-typography-success {\n color: #52c41a;\n}\n.ant-typography.ant-typography-warning {\n color: #faad14;\n}\n.ant-typography.ant-typography-danger {\n color: #ff4d4f;\n}\na.ant-typography.ant-typography-danger:active,\na.ant-typography.ant-typography-danger:focus,\na.ant-typography.ant-typography-danger:hover {\n color: #ff7875;\n}\n.ant-typography.ant-typography-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\ndiv.ant-typography,\n.ant-typography p {\n margin-bottom: 1em;\n}\nh1.ant-typography,\n.ant-typography h1 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 38px;\n line-height: 1.23;\n}\nh2.ant-typography,\n.ant-typography h2 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 30px;\n line-height: 1.35;\n}\nh3.ant-typography,\n.ant-typography h3 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 24px;\n line-height: 1.35;\n}\nh4.ant-typography,\n.ant-typography h4 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 20px;\n line-height: 1.4;\n}\nh5.ant-typography,\n.ant-typography h5 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 16px;\n line-height: 1.5;\n}\n.ant-typography + h1.ant-typography,\n.ant-typography + h2.ant-typography,\n.ant-typography + h3.ant-typography,\n.ant-typography + h4.ant-typography,\n.ant-typography + h5.ant-typography {\n margin-top: 1.2em;\n}\n.ant-typography div + h1,\n.ant-typography ul + h1,\n.ant-typography li + h1,\n.ant-typography p + h1,\n.ant-typography h1 + h1,\n.ant-typography h2 + h1,\n.ant-typography h3 + h1,\n.ant-typography h4 + h1,\n.ant-typography h5 + h1,\n.ant-typography div + h2,\n.ant-typography ul + h2,\n.ant-typography li + h2,\n.ant-typography p + h2,\n.ant-typography h1 + h2,\n.ant-typography h2 + h2,\n.ant-typography h3 + h2,\n.ant-typography h4 + h2,\n.ant-typography h5 + h2,\n.ant-typography div + h3,\n.ant-typography ul + h3,\n.ant-typography li + h3,\n.ant-typography p + h3,\n.ant-typography h1 + h3,\n.ant-typography h2 + h3,\n.ant-typography h3 + h3,\n.ant-typography h4 + h3,\n.ant-typography h5 + h3,\n.ant-typography div + h4,\n.ant-typography ul + h4,\n.ant-typography li + h4,\n.ant-typography p + h4,\n.ant-typography h1 + h4,\n.ant-typography h2 + h4,\n.ant-typography h3 + h4,\n.ant-typography h4 + h4,\n.ant-typography h5 + h4,\n.ant-typography div + h5,\n.ant-typography ul + h5,\n.ant-typography li + h5,\n.ant-typography p + h5,\n.ant-typography h1 + h5,\n.ant-typography h2 + h5,\n.ant-typography h3 + h5,\n.ant-typography h4 + h5,\n.ant-typography h5 + h5 {\n margin-top: 1.2em;\n}\na.ant-typography-ellipsis,\nspan.ant-typography-ellipsis {\n display: inline-block;\n}\na.ant-typography,\n.ant-typography a {\n color: #1890ff;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n text-decoration: none;\n}\na.ant-typography:focus,\n.ant-typography a:focus,\na.ant-typography:hover,\n.ant-typography a:hover {\n color: #40a9ff;\n}\na.ant-typography:active,\n.ant-typography a:active {\n color: #096dd9;\n}\na.ant-typography:active,\n.ant-typography a:active,\na.ant-typography:hover,\n.ant-typography a:hover {\n text-decoration: none;\n}\na.ant-typography[disabled],\n.ant-typography a[disabled],\na.ant-typography.ant-typography-disabled,\n.ant-typography a.ant-typography-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\na.ant-typography[disabled]:active,\n.ant-typography a[disabled]:active,\na.ant-typography.ant-typography-disabled:active,\n.ant-typography a.ant-typography-disabled:active,\na.ant-typography[disabled]:hover,\n.ant-typography a[disabled]:hover,\na.ant-typography.ant-typography-disabled:hover,\n.ant-typography a.ant-typography-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n}\na.ant-typography[disabled]:active,\n.ant-typography a[disabled]:active,\na.ant-typography.ant-typography-disabled:active,\n.ant-typography a.ant-typography-disabled:active {\n pointer-events: none;\n}\n.ant-typography code {\n margin: 0 0.2em;\n padding: 0.2em 0.4em 0.1em;\n font-size: 85%;\n background: rgba(150, 150, 150, 0.1);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-radius: 3px;\n}\n.ant-typography kbd {\n margin: 0 0.2em;\n padding: 0.15em 0.4em 0.1em;\n font-size: 90%;\n background: rgba(150, 150, 150, 0.06);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-bottom-width: 2px;\n border-radius: 3px;\n}\n.ant-typography mark {\n padding: 0;\n background-color: #ffe58f;\n}\n.ant-typography u,\n.ant-typography ins {\n text-decoration: underline;\n -webkit-text-decoration-skip: ink;\n text-decoration-skip-ink: auto;\n}\n.ant-typography s,\n.ant-typography del {\n text-decoration: line-through;\n}\n.ant-typography strong {\n font-weight: 600;\n}\n.ant-typography-expand,\n.ant-typography-edit,\n.ant-typography-copy {\n color: #1890ff;\n text-decoration: none;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n margin-left: 4px;\n}\n.ant-typography-expand:focus,\n.ant-typography-edit:focus,\n.ant-typography-copy:focus,\n.ant-typography-expand:hover,\n.ant-typography-edit:hover,\n.ant-typography-copy:hover {\n color: #40a9ff;\n}\n.ant-typography-expand:active,\n.ant-typography-edit:active,\n.ant-typography-copy:active {\n color: #096dd9;\n}\n.ant-typography-copy-success,\n.ant-typography-copy-success:hover,\n.ant-typography-copy-success:focus {\n color: #52c41a;\n}\n.ant-typography-edit-content {\n position: relative;\n}\ndiv.ant-typography-edit-content {\n left: -12px;\n margin-top: -5px;\n margin-bottom: calc(1em - 4px - 1px);\n}\n.ant-typography-edit-content-confirm {\n position: absolute;\n right: 10px;\n bottom: 8px;\n color: rgba(0, 0, 0, 0.45);\n pointer-events: none;\n}\n.ant-typography-edit-content textarea {\n -moz-transition: none;\n}\n.ant-typography ul,\n.ant-typography ol {\n margin: 0 0 1em 0;\n padding: 0;\n}\n.ant-typography ul li,\n.ant-typography ol li {\n margin: 0 0 0 20px;\n padding: 0 0 0 4px;\n}\n.ant-typography ul {\n list-style-type: circle;\n}\n.ant-typography ul ul {\n list-style-type: disc;\n}\n.ant-typography ol {\n list-style-type: decimal;\n}\n.ant-typography pre,\n.ant-typography blockquote {\n margin: 1em 0;\n}\n.ant-typography pre {\n padding: 0.4em 0.6em;\n white-space: pre-wrap;\n word-wrap: break-word;\n background: rgba(150, 150, 150, 0.1);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-radius: 3px;\n}\n.ant-typography pre code {\n display: inline;\n margin: 0;\n padding: 0;\n font-size: inherit;\n font-family: inherit;\n background: transparent;\n border: 0;\n}\n.ant-typography blockquote {\n padding: 0 0 0 0.6em;\n border-left: 4px solid rgba(100, 100, 100, 0.2);\n opacity: 0.85;\n}\n.ant-typography-single-line {\n white-space: nowrap;\n}\n.ant-typography-ellipsis-single-line {\n overflow: hidden;\n text-overflow: ellipsis;\n}\na.ant-typography-ellipsis-single-line,\nspan.ant-typography-ellipsis-single-line {\n vertical-align: bottom;\n}\n.ant-typography-ellipsis-multiple-line {\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 3;\n /*! autoprefixer: ignore next */\n -webkit-box-orient: vertical;\n}\n.ant-typography-rtl {\n direction: rtl;\n}\n.ant-typography-rtl .ant-typography-expand,\n.ant-typography-rtl .ant-typography-edit,\n.ant-typography-rtl .ant-typography-copy {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-typography-rtl .ant-typography-expand {\n float: left;\n}\ndiv.ant-typography-edit-content.ant-typography-rtl {\n right: -12px;\n left: auto;\n}\n.ant-typography-rtl .ant-typography-edit-content-confirm {\n right: auto;\n left: 10px;\n}\n.ant-typography-rtl.ant-typography ul li,\n.ant-typography-rtl.ant-typography ol li {\n margin: 0 20px 0 0;\n padding: 0 4px 0 0;\n}\n\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-upload {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n outline: 0;\n}\n.ant-upload p {\n margin: 0;\n}\n.ant-upload-btn {\n display: block;\n width: 100%;\n outline: none;\n}\n.ant-upload input[type='file'] {\n cursor: pointer;\n}\n.ant-upload.ant-upload-select {\n display: inline-block;\n}\n.ant-upload.ant-upload-disabled {\n cursor: not-allowed;\n}\n.ant-upload.ant-upload-select-picture-card {\n width: 104px;\n height: 104px;\n margin-right: 8px;\n margin-bottom: 8px;\n text-align: center;\n vertical-align: top;\n background-color: #fafafa;\n border: 1px dashed #d9d9d9;\n border-radius: 2px;\n cursor: pointer;\n transition: border-color 0.3s;\n}\n.ant-upload.ant-upload-select-picture-card > .ant-upload {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n}\n.ant-upload.ant-upload-select-picture-card:hover {\n border-color: #1890ff;\n}\n.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover {\n border-color: #d9d9d9;\n}\n.ant-upload.ant-upload-drag {\n position: relative;\n width: 100%;\n height: 100%;\n text-align: center;\n background: #fafafa;\n border: 1px dashed #d9d9d9;\n border-radius: 2px;\n cursor: pointer;\n transition: border-color 0.3s;\n}\n.ant-upload.ant-upload-drag .ant-upload {\n padding: 16px 0;\n}\n.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled) {\n border-color: #096dd9;\n}\n.ant-upload.ant-upload-drag.ant-upload-disabled {\n cursor: not-allowed;\n}\n.ant-upload.ant-upload-drag .ant-upload-btn {\n display: table;\n height: 100%;\n}\n.ant-upload.ant-upload-drag .ant-upload-drag-container {\n display: table-cell;\n vertical-align: middle;\n}\n.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover {\n border-color: #40a9ff;\n}\n.ant-upload.ant-upload-drag p.ant-upload-drag-icon {\n margin-bottom: 20px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon {\n color: #40a9ff;\n font-size: 48px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-text {\n margin: 0 0 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-hint {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-upload.ant-upload-drag .anticon-plus {\n color: rgba(0, 0, 0, 0.25);\n font-size: 30px;\n transition: all 0.3s;\n}\n.ant-upload.ant-upload-drag .anticon-plus:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-upload.ant-upload-drag:hover .anticon-plus {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-upload-picture-card-wrapper {\n display: inline-block;\n width: 100%;\n}\n.ant-upload-picture-card-wrapper::before {\n display: table;\n content: '';\n}\n.ant-upload-picture-card-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-list {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n line-height: 1.5715;\n}\n.ant-upload-list::before {\n display: table;\n content: '';\n}\n.ant-upload-list::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-list-item {\n position: relative;\n height: 22.001px;\n margin-top: 8px;\n font-size: 14px;\n}\n.ant-upload-list-item-name {\n display: inline-block;\n width: 100%;\n padding-left: 22px;\n overflow: hidden;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-upload-list-item-card-actions {\n position: absolute;\n right: 0;\n}\n.ant-upload-list-item-card-actions-btn {\n opacity: 0;\n}\n.ant-upload-list-item-card-actions-btn.ant-btn-sm {\n height: 20px;\n line-height: 1;\n}\n.ant-upload-list-item-card-actions.picture {\n top: 22px;\n line-height: 0;\n}\n.ant-upload-list-item-card-actions-btn:focus,\n.ant-upload-list-item-card-actions.picture .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-card-actions .anticon {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-upload-list-item-info {\n height: 100%;\n padding: 0 4px;\n transition: background-color 0.3s;\n}\n.ant-upload-list-item-info > span {\n display: block;\n width: 100%;\n height: 100%;\n}\n.ant-upload-list-item-info .anticon-loading .anticon,\n.ant-upload-list-item-info .ant-upload-text-icon .anticon {\n position: absolute;\n top: 5px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-upload-list-item .anticon-close {\n position: absolute;\n top: 6px;\n right: 4px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n line-height: 0;\n cursor: pointer;\n opacity: 0;\n transition: all 0.3s;\n}\n.ant-upload-list-item .anticon-close:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-upload-list-item:hover .ant-upload-list-item-info {\n background-color: #f5f5f5;\n}\n.ant-upload-list-item:hover .anticon-close {\n opacity: 1;\n}\n.ant-upload-list-item:hover .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-error,\n.ant-upload-list-item-error .ant-upload-text-icon > .anticon,\n.ant-upload-list-item-error .ant-upload-list-item-name {\n color: #ff4d4f;\n}\n.ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon {\n color: #ff4d4f;\n}\n.ant-upload-list-item-error .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-progress {\n position: absolute;\n bottom: -12px;\n width: 100%;\n padding-left: 26px;\n font-size: 14px;\n line-height: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item,\n.ant-upload-list-picture-card .ant-upload-list-item {\n position: relative;\n height: 66px;\n padding: 8px;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n}\n.ant-upload-list-picture .ant-upload-list-item:hover,\n.ant-upload-list-picture-card .ant-upload-list-item:hover {\n background: transparent;\n}\n.ant-upload-list-picture .ant-upload-list-item-error,\n.ant-upload-list-picture-card .ant-upload-list-item-error {\n border-color: #ff4d4f;\n}\n.ant-upload-list-picture .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n padding: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info {\n background: transparent;\n}\n.ant-upload-list-picture .ant-upload-list-item-uploading,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading {\n border-style: dashed;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail {\n width: 48px;\n height: 48px;\n line-height: 54px;\n text-align: center;\n opacity: 0.8;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail .anticon,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail .anticon {\n font-size: 26px;\n}\n.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff'],\n.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff'] {\n fill: #fff2f0;\n}\n.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'],\n.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'] {\n fill: #ff4d4f;\n}\n.ant-upload-list-picture .ant-upload-list-item-icon,\n.ant-upload-list-picture-card .ant-upload-list-item-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n font-size: 26px;\n transform: translate(-50%, -50%);\n}\n.ant-upload-list-picture .ant-upload-list-item-icon .anticon,\n.ant-upload-list-picture-card .ant-upload-list-item-icon .anticon {\n font-size: 26px;\n}\n.ant-upload-list-picture .ant-upload-list-item-image,\n.ant-upload-list-picture-card .ant-upload-list-item-image {\n max-width: 100%;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail img,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img {\n display: block;\n width: 48px;\n height: 48px;\n overflow: hidden;\n}\n.ant-upload-list-picture .ant-upload-list-item-name,\n.ant-upload-list-picture-card .ant-upload-list-item-name {\n display: inline-block;\n box-sizing: border-box;\n max-width: 100%;\n margin: 0 0 0 8px;\n padding-right: 8px;\n padding-left: 48px;\n overflow: hidden;\n line-height: 44px;\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n}\n.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name {\n line-height: 28px;\n}\n.ant-upload-list-picture .ant-upload-list-item-progress,\n.ant-upload-list-picture-card .ant-upload-list-item-progress {\n bottom: 14px;\n width: calc(100% - 24px);\n margin-top: 0;\n padding-left: 56px;\n}\n.ant-upload-list-picture .anticon-close,\n.ant-upload-list-picture-card .anticon-close {\n position: absolute;\n top: 8px;\n right: 8px;\n line-height: 1;\n opacity: 1;\n}\n.ant-upload-list-picture-card-container {\n display: inline-block;\n width: 104px;\n height: 104px;\n margin: 0 8px 8px 0;\n vertical-align: top;\n}\n.ant-upload-list-picture-card.ant-upload-list::after {\n display: none;\n}\n.ant-upload-list-picture-card .ant-upload-list-item {\n height: 100%;\n margin: 0;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n position: relative;\n height: 100%;\n overflow: hidden;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info::before {\n position: absolute;\n z-index: 1;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: all 0.3s;\n content: ' ';\n}\n.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info::before {\n opacity: 1;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions {\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 10;\n white-space: nowrap;\n transform: translate(-50%, -50%);\n opacity: 0;\n transition: all 0.3s;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete {\n z-index: 10;\n width: 16px;\n margin: 0 4px;\n color: rgba(255, 255, 255, 0.85);\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover {\n color: #fff;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info:hover + .ant-upload-list-item-actions,\n.ant-upload-list-picture-card .ant-upload-list-item-actions:hover {\n opacity: 1;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img {\n position: static;\n display: block;\n width: 100%;\n height: 100%;\n -o-object-fit: contain;\n object-fit: contain;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-name {\n display: none;\n margin: 8px 0 0;\n padding: 0;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-file + .ant-upload-list-item-name {\n position: absolute;\n bottom: 10px;\n display: block;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item {\n background-color: #fafafa;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info {\n height: auto;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info::before,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete {\n display: none;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-progress {\n bottom: 32px;\n width: calc(100% - 14px);\n padding-left: 0;\n}\n.ant-upload-list-text-container,\n.ant-upload-list-picture-container {\n transition: opacity 0.3s, height 0.3s;\n}\n.ant-upload-list-text-container::before,\n.ant-upload-list-picture-container::before {\n display: table;\n width: 0;\n height: 0;\n content: '';\n}\n.ant-upload-list-text-container .ant-upload-span,\n.ant-upload-list-picture-container .ant-upload-span {\n display: block;\n flex: auto;\n}\n.ant-upload-list-text .ant-upload-span,\n.ant-upload-list-picture .ant-upload-span {\n display: flex;\n align-items: center;\n}\n.ant-upload-list-text .ant-upload-span > *,\n.ant-upload-list-picture .ant-upload-span > * {\n flex: none;\n}\n.ant-upload-list-text .ant-upload-list-item-name,\n.ant-upload-list-picture .ant-upload-list-item-name {\n flex: auto;\n padding: 0 8px;\n}\n.ant-upload-list-text .ant-upload-list-item-card-actions,\n.ant-upload-list-picture .ant-upload-list-item-card-actions {\n position: static;\n}\n.ant-upload-list-text .ant-upload-text-icon .anticon {\n position: static;\n}\n.ant-upload-list .ant-upload-animate-inline-appear,\n.ant-upload-list .ant-upload-animate-inline-enter,\n.ant-upload-list .ant-upload-animate-inline-leave {\n -webkit-animation-duration: 0.3s;\n animation-duration: 0.3s;\n -webkit-animation-fill-mode: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-fill-mode: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-upload-list .ant-upload-animate-inline-appear,\n.ant-upload-list .ant-upload-animate-inline-enter {\n -webkit-animation-name: uploadAnimateInlineIn;\n animation-name: uploadAnimateInlineIn;\n}\n.ant-upload-list .ant-upload-animate-inline-leave {\n -webkit-animation-name: uploadAnimateInlineOut;\n animation-name: uploadAnimateInlineOut;\n}\n@-webkit-keyframes uploadAnimateInlineIn {\n from {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n@keyframes uploadAnimateInlineIn {\n from {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n@-webkit-keyframes uploadAnimateInlineOut {\n to {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n@keyframes uploadAnimateInlineOut {\n to {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n.ant-upload-rtl {\n direction: rtl;\n}\n.ant-upload-rtl.ant-upload.ant-upload-select-picture-card {\n margin-right: auto;\n margin-left: 8px;\n}\n.ant-upload-list-rtl {\n direction: rtl;\n}\n.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1 {\n padding-right: 22px;\n padding-left: 14px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2 {\n padding-right: 22px;\n padding-left: 28px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-name {\n padding-right: 22px;\n padding-left: 0;\n}\n.ant-upload-list-rtl .ant-upload-list-item-name-icon-count-1 {\n padding-left: 14px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-card-actions {\n right: auto;\n left: 0;\n}\n.ant-upload-list-rtl .ant-upload-list-item-card-actions .anticon {\n padding-right: 0;\n padding-left: 5px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-info {\n padding: 0 4px 0 12px;\n}\n.ant-upload-list-rtl .ant-upload-list-item .anticon-close {\n right: auto;\n left: 4px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon {\n padding-right: 0;\n padding-left: 5px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-progress {\n padding-right: 26px;\n padding-left: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n padding: 0;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-thumbnail,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-thumbnail {\n right: 8px;\n left: auto;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-icon,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-icon {\n right: 50%;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name {\n margin: 0 8px 0 0;\n padding-right: 48px;\n padding-left: 8px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1 {\n padding-right: 48px;\n padding-left: 18px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2 {\n padding-right: 48px;\n padding-left: 36px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-progress,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-progress {\n padding-right: 0;\n padding-left: 0;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .anticon-close,\n.ant-upload-list-rtl.ant-upload-list-picture-card .anticon-close {\n right: auto;\n left: 8px;\n}\n.ant-upload-list-rtl .ant-upload-list-picture-card-container {\n margin: 0 0 8px 8px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-actions {\n right: 50%;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-file + .ant-upload-list-item-name {\n margin: 8px 0 0;\n padding: 0;\n}\n\n\n/*# sourceMappingURL=antd.css.map*/","// Config global less under antd\n[class^=~'@{ant-prefix}-'],\n[class*=~' @{ant-prefix}-'] {\n // remove the clear button of a text input control in IE10+\n &::-ms-clear,\n input::-ms-clear,\n input::-ms-reveal {\n display: none;\n }\n}\n","/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n[class^=ant-]::-ms-clear,\n[class*= ant-]::-ms-clear,\n[class^=ant-] input::-ms-clear,\n[class*= ant-] input::-ms-clear,\n[class^=ant-] input::-ms-reveal,\n[class*= ant-] input::-ms-reveal {\n display: none;\n}\n/* stylelint-disable at-rule-no-unknown */\nhtml,\nbody {\n width: 100%;\n height: 100%;\n}\ninput::-ms-clear,\ninput::-ms-reveal {\n display: none;\n}\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n@-ms-viewport {\n width: device-width;\n}\nbody {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n font-variant: tabular-nums;\n line-height: 1.5715;\n background-color: #fff;\n font-feature-settings: 'tnum';\n}\n[tabindex='-1']:focus {\n outline: none !important;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n}\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n border-bottom: 0;\n cursor: help;\n}\naddress {\n margin-bottom: 1em;\n font-style: normal;\n line-height: inherit;\n}\ninput[type='text'],\ninput[type='password'],\ninput[type='number'],\ntextarea {\n -webkit-appearance: none;\n}\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1em;\n}\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\ndt {\n font-weight: 500;\n}\ndd {\n margin-bottom: 0.5em;\n margin-left: 0;\n}\nblockquote {\n margin: 0 0 1em;\n}\ndfn {\n font-style: italic;\n}\nb,\nstrong {\n font-weight: bolder;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\na {\n color: #1890ff;\n text-decoration: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n -webkit-text-decoration-skip: objects;\n}\na:hover {\n color: #40a9ff;\n}\na:active {\n color: #096dd9;\n}\na:active,\na:hover {\n text-decoration: none;\n outline: 0;\n}\na:focus {\n text-decoration: none;\n outline: 0;\n}\na[disabled] {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\npre,\ncode,\nkbd,\nsamp {\n font-size: 1em;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\npre {\n margin-top: 0;\n margin-bottom: 1em;\n overflow: auto;\n}\nfigure {\n margin: 0 0 1em;\n}\nimg {\n vertical-align: middle;\n border-style: none;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\na,\narea,\nbutton,\n[role='button'],\ninput:not([type='range']),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\ntable {\n border-collapse: collapse;\n}\ncaption {\n padding-top: 0.75em;\n padding-bottom: 0.3em;\n color: rgba(0, 0, 0, 0.45);\n text-align: left;\n caption-side: bottom;\n}\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\nbutton,\ninput {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n -webkit-appearance: listbox;\n}\ntextarea {\n overflow: auto;\n resize: vertical;\n}\nfieldset {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: 0.5em;\n padding: 0;\n color: inherit;\n font-size: 1.5em;\n line-height: inherit;\n white-space: normal;\n}\nprogress {\n vertical-align: baseline;\n}\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n[type='search'] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\noutput {\n display: inline-block;\n}\nsummary {\n display: list-item;\n}\ntemplate {\n display: none;\n}\n[hidden] {\n display: none !important;\n}\nmark {\n padding: 0.2em;\n background-color: #feffe6;\n}\n::selection {\n color: #fff;\n background: #1890ff;\n}\n.clearfix::before {\n display: table;\n content: '';\n}\n.clearfix::after {\n display: table;\n clear: both;\n content: '';\n}\n.anticon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.anticon > * {\n line-height: 1;\n}\n.anticon svg {\n display: inline-block;\n}\n.anticon::before {\n display: none;\n}\n.anticon .anticon-icon {\n display: block;\n}\n.anticon[tabindex] {\n cursor: pointer;\n}\n.anticon-spin::before {\n display: inline-block;\n animation: loadingCircle 1s infinite linear;\n}\n.anticon-spin {\n display: inline-block;\n animation: loadingCircle 1s infinite linear;\n}\n.ant-fade-enter,\n.ant-fade-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-fade-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-fade-enter.ant-fade-enter-active,\n.ant-fade-appear.ant-fade-appear-active {\n animation-name: antFadeIn;\n animation-play-state: running;\n}\n.ant-fade-leave.ant-fade-leave-active {\n animation-name: antFadeOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-fade-enter,\n.ant-fade-appear {\n opacity: 0;\n animation-timing-function: linear;\n}\n.ant-fade-leave {\n animation-timing-function: linear;\n}\n@keyframes antFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes antFadeOut {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n.ant-move-up-enter,\n.ant-move-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-up-enter.ant-move-up-enter-active,\n.ant-move-up-appear.ant-move-up-appear-active {\n animation-name: antMoveUpIn;\n animation-play-state: running;\n}\n.ant-move-up-leave.ant-move-up-leave-active {\n animation-name: antMoveUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-up-enter,\n.ant-move-up-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-up-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-down-enter,\n.ant-move-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-down-enter.ant-move-down-enter-active,\n.ant-move-down-appear.ant-move-down-appear-active {\n animation-name: antMoveDownIn;\n animation-play-state: running;\n}\n.ant-move-down-leave.ant-move-down-leave-active {\n animation-name: antMoveDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-down-enter,\n.ant-move-down-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-down-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-left-enter,\n.ant-move-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-left-enter.ant-move-left-enter-active,\n.ant-move-left-appear.ant-move-left-appear-active {\n animation-name: antMoveLeftIn;\n animation-play-state: running;\n}\n.ant-move-left-leave.ant-move-left-leave-active {\n animation-name: antMoveLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-left-enter,\n.ant-move-left-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-left-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-right-enter,\n.ant-move-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-right-enter.ant-move-right-enter-active,\n.ant-move-right-appear.ant-move-right-appear-active {\n animation-name: antMoveRightIn;\n animation-play-state: running;\n}\n.ant-move-right-leave.ant-move-right-leave-active {\n animation-name: antMoveRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-right-enter,\n.ant-move-right-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-right-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n@keyframes antMoveDownIn {\n 0% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveDownOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveLeftIn {\n 0% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveLeftOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveRightIn {\n 0% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveRightOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveUpIn {\n 0% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveUpOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes loadingCircle {\n 100% {\n transform: rotate(360deg);\n }\n}\n[ant-click-animating='true'],\n[ant-click-animating-without-extra-node='true'] {\n position: relative;\n}\nhtml {\n --antd-wave-shadow-color: #1890ff;\n --scroll-bar: 0;\n}\n[ant-click-animating-without-extra-node='true']::after,\n.ant-click-animating-node {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n border-radius: inherit;\n box-shadow: 0 0 0 0 #1890ff;\n box-shadow: 0 0 0 0 var(--antd-wave-shadow-color);\n opacity: 0.2;\n animation: fadeEffect 2s cubic-bezier(0.08, 0.82, 0.17, 1), waveEffect 0.4s cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n@keyframes waveEffect {\n 100% {\n box-shadow: 0 0 0 #1890ff;\n box-shadow: 0 0 0 6px var(--antd-wave-shadow-color);\n }\n}\n@keyframes fadeEffect {\n 100% {\n opacity: 0;\n }\n}\n.ant-slide-up-enter,\n.ant-slide-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-up-enter.ant-slide-up-enter-active,\n.ant-slide-up-appear.ant-slide-up-appear-active {\n animation-name: antSlideUpIn;\n animation-play-state: running;\n}\n.ant-slide-up-leave.ant-slide-up-leave-active {\n animation-name: antSlideUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-up-enter,\n.ant-slide-up-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-up-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-down-enter,\n.ant-slide-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-down-enter.ant-slide-down-enter-active,\n.ant-slide-down-appear.ant-slide-down-appear-active {\n animation-name: antSlideDownIn;\n animation-play-state: running;\n}\n.ant-slide-down-leave.ant-slide-down-leave-active {\n animation-name: antSlideDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-down-enter,\n.ant-slide-down-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-down-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-left-enter,\n.ant-slide-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-left-enter.ant-slide-left-enter-active,\n.ant-slide-left-appear.ant-slide-left-appear-active {\n animation-name: antSlideLeftIn;\n animation-play-state: running;\n}\n.ant-slide-left-leave.ant-slide-left-leave-active {\n animation-name: antSlideLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-left-enter,\n.ant-slide-left-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-left-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-right-enter,\n.ant-slide-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-right-enter.ant-slide-right-enter-active,\n.ant-slide-right-appear.ant-slide-right-appear-active {\n animation-name: antSlideRightIn;\n animation-play-state: running;\n}\n.ant-slide-right-leave.ant-slide-right-leave-active {\n animation-name: antSlideRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-right-enter,\n.ant-slide-right-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-right-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n@keyframes antSlideUpIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideUpOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideDownIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n}\n@keyframes antSlideDownOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n}\n@keyframes antSlideLeftIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideLeftOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideRightIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideRightOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n}\n.ant-zoom-enter,\n.ant-zoom-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-enter.ant-zoom-enter-active,\n.ant-zoom-appear.ant-zoom-appear-active {\n animation-name: antZoomIn;\n animation-play-state: running;\n}\n.ant-zoom-leave.ant-zoom-leave-active {\n animation-name: antZoomOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-enter,\n.ant-zoom-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-enter-prepare,\n.ant-zoom-appear-prepare {\n transform: none;\n}\n.ant-zoom-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-big-enter,\n.ant-zoom-big-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-enter.ant-zoom-big-enter-active,\n.ant-zoom-big-appear.ant-zoom-big-appear-active {\n animation-name: antZoomBigIn;\n animation-play-state: running;\n}\n.ant-zoom-big-leave.ant-zoom-big-leave-active {\n animation-name: antZoomBigOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-big-enter,\n.ant-zoom-big-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-big-enter-prepare,\n.ant-zoom-big-appear-prepare {\n transform: none;\n}\n.ant-zoom-big-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-appear {\n animation-duration: 0.1s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-fast-leave {\n animation-duration: 0.1s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active,\n.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active {\n animation-name: antZoomBigIn;\n animation-play-state: running;\n}\n.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active {\n animation-name: antZoomBigOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-big-fast-enter-prepare,\n.ant-zoom-big-fast-appear-prepare {\n transform: none;\n}\n.ant-zoom-big-fast-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-up-enter,\n.ant-zoom-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-up-enter.ant-zoom-up-enter-active,\n.ant-zoom-up-appear.ant-zoom-up-appear-active {\n animation-name: antZoomUpIn;\n animation-play-state: running;\n}\n.ant-zoom-up-leave.ant-zoom-up-leave-active {\n animation-name: antZoomUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-up-enter,\n.ant-zoom-up-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-up-enter-prepare,\n.ant-zoom-up-appear-prepare {\n transform: none;\n}\n.ant-zoom-up-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-down-enter,\n.ant-zoom-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-down-enter.ant-zoom-down-enter-active,\n.ant-zoom-down-appear.ant-zoom-down-appear-active {\n animation-name: antZoomDownIn;\n animation-play-state: running;\n}\n.ant-zoom-down-leave.ant-zoom-down-leave-active {\n animation-name: antZoomDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-down-enter,\n.ant-zoom-down-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-down-enter-prepare,\n.ant-zoom-down-appear-prepare {\n transform: none;\n}\n.ant-zoom-down-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-left-enter,\n.ant-zoom-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-left-enter.ant-zoom-left-enter-active,\n.ant-zoom-left-appear.ant-zoom-left-appear-active {\n animation-name: antZoomLeftIn;\n animation-play-state: running;\n}\n.ant-zoom-left-leave.ant-zoom-left-leave-active {\n animation-name: antZoomLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-left-enter,\n.ant-zoom-left-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-left-enter-prepare,\n.ant-zoom-left-appear-prepare {\n transform: none;\n}\n.ant-zoom-left-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-right-enter,\n.ant-zoom-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-right-enter.ant-zoom-right-enter-active,\n.ant-zoom-right-appear.ant-zoom-right-appear-active {\n animation-name: antZoomRightIn;\n animation-play-state: running;\n}\n.ant-zoom-right-leave.ant-zoom-right-leave-active {\n animation-name: antZoomRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-right-enter,\n.ant-zoom-right-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-right-enter-prepare,\n.ant-zoom-right-appear-prepare {\n transform: none;\n}\n.ant-zoom-right-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n@keyframes antZoomIn {\n 0% {\n transform: scale(0.2);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes antZoomOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.2);\n opacity: 0;\n }\n}\n@keyframes antZoomBigIn {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes antZoomBigOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.8);\n opacity: 0;\n }\n}\n@keyframes antZoomUpIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n}\n@keyframes antZoomUpOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n}\n@keyframes antZoomLeftIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n}\n@keyframes antZoomLeftOut {\n 0% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n}\n@keyframes antZoomRightIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n}\n@keyframes antZoomRightOut {\n 0% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n}\n@keyframes antZoomDownIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n}\n@keyframes antZoomDownOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n}\n.ant-motion-collapse-legacy {\n overflow: hidden;\n}\n.ant-motion-collapse-legacy-active {\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n.ant-motion-collapse {\n overflow: hidden;\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n","/* stylelint-disable */\n.bezierEasingMixin() {\n@functions: ~`(function() {\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\n function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\n function C (aA1) { return 3.0 * aA1; }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\n function binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n\n function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n var BezierEasing = function (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n if (mX1 === mY1 && mX2 === mY2) {\n return x; // linear\n }\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n };\n\n this.colorEasing = BezierEasing(0.26, 0.09, 0.37, 0.18);\n // less 3 requires a return\n return '';\n})()`;\n}\n// It is hacky way to make this function will be compiled preferentially by less\n// resolve error: `ReferenceError: colorPalette is not defined`\n// https://github.com/ant-design/ant-motion/issues/44\n.bezierEasingMixin();\n","// Sizing shortcuts\n\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n\n.square(@size) {\n .size(@size; @size);\n}\n","/* stylelint-disable at-rule-no-unknown */\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n// HTML & Body reset\n@{html-selector},\nbody {\n .square(100%);\n}\n\n// remove the clear button of a text input control in IE10+\ninput::-ms-clear,\ninput::-ms-reveal {\n display: none;\n}\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\n@{html-selector} {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: fade(@black, 0%); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@-ms-viewport {\n width: device-width;\n}\n\n// Body\n//\n// 1. remove the margin in all browsers.\n// 2. As a best practice, apply a default `body-background`.\n\nbody {\n margin: 0; // 1\n color: @text-color;\n font-size: @font-size-base;\n font-family: @font-family;\n font-variant: @font-variant-base;\n line-height: @line-height-base;\n background-color: @body-background; // 2\n font-feature-settings: @font-feature-settings-base;\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex='-1']:focus {\n outline: none !important;\n}\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n//\n// Typography\n//\n\n// remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n color: @heading-color;\n font-weight: 500;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `em` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\n// Abbreviations\n//\n// 1. remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] {\n // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n border-bottom: 0; // 1\n cursor: help; // 3\n}\n\naddress {\n margin-bottom: 1em;\n font-style: normal;\n line-height: inherit;\n}\n\ninput[type='text'],\ninput[type='password'],\ninput[type='number'],\ntextarea {\n -webkit-appearance: none;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 500;\n}\n\ndd {\n margin-bottom: 0.5em;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1em;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\n\n//\n// Links\n//\n\na {\n color: @link-color;\n text-decoration: @link-decoration;\n background-color: transparent; // remove the gray background on active links in IE 10.\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n -webkit-text-decoration-skip: objects; // remove gaps in links underline in iOS 8+ and Safari 8+.\n\n &:hover {\n color: @link-hover-color;\n }\n\n &:active {\n color: @link-active-color;\n }\n\n &:active,\n &:hover {\n text-decoration: @link-hover-decoration;\n outline: 0;\n }\n\n // https://github.com/ant-design/ant-design/issues/22503\n &:focus {\n text-decoration: @link-focus-decoration;\n outline: @link-focus-outline;\n }\n\n &[disabled] {\n color: @disabled-color;\n cursor: not-allowed;\n }\n}\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n font-family: @code-family;\n}\n\npre {\n // remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `em`s\n margin-bottom: 1em;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n//\n// Figures\n//\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1em;\n}\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n// Avoid 300ms click delay on touch devices that support the `touch-action` CSS property.\n//\n// In particular, unlike most other browsers, IE11+Edge on Windows 10 on touch devices and IE Mobile 10-11\n// DON'T remove the click delay when `` is present.\n// However, they DO support emoving the click delay via `touch-action: manipulation`.\n// See:\n// * https://getbootstrap.com/docs/4.0/content/reboot/#click-delay-optimization-for-touch\n// * http://caniuse.com/#feat=css-touch-action\n// * https://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay\n\na,\narea,\nbutton,\n[role='button'],\ninput:not([type='range']),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: 0.75em;\n padding-bottom: 0.3em;\n color: @text-color-secondary;\n text-align: left;\n caption-side: bottom;\n}\n\n//\n// Forms\n//\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // remove the margin in Firefox and Safari\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n@{html-selector} [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. remove the padding in IE 10-\n}\n\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n // remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n margin: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n margin-bottom: 0.5em;\n padding: 0;\n color: inherit; // 2\n font-size: 1.5em;\n line-height: inherit;\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of incement and decement buttons in Chrome.\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type='search'] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n\nmark {\n padding: 0.2em;\n background-color: @yellow-1;\n}\n\n::selection {\n color: @text-color-inverse;\n background: @text-selection-bg;\n}\n\n// Utility classes\n.clearfix {\n .clearfix();\n}\n","// mixins for clearfix\n// ------------------------\n.clearfix() {\n // https://github.com/ant-design/ant-design/issues/21301#issuecomment-583955229\n &::before {\n display: table;\n content: '';\n }\n &::after {\n // https://github.com/ant-design/ant-design/issues/21864\n display: table;\n clear: both;\n content: '';\n }\n}\n",".iconfont-mixin() {\n display: inline-block;\n color: @icon-color;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em; // for SVG icon, see https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n > * {\n line-height: 1;\n }\n\n svg {\n display: inline-block;\n }\n\n &::before {\n display: none; // dont display old icon.\n }\n\n & &-icon {\n display: block;\n }\n}\n","@import '../themes/index';\n@import '../mixins/iconfont';\n\n.@{iconfont-css-prefix} {\n .iconfont-mixin();\n\n &[tabindex] {\n cursor: pointer;\n }\n}\n\n.@{iconfont-css-prefix}-spin::before {\n display: inline-block;\n animation: loadingCircle 1s infinite linear;\n}\n.@{iconfont-css-prefix}-spin {\n display: inline-block;\n animation: loadingCircle 1s infinite linear;\n}\n","@import '../themes/index';\n\n.motion-common(@duration: @animation-duration-base) {\n animation-duration: @duration;\n animation-fill-mode: both;\n}\n\n.motion-common-leave(@duration: @animation-duration-base) {\n animation-duration: @duration;\n animation-fill-mode: both;\n}\n\n.make-motion(@className, @keyframeName, @duration: @animation-duration-base) {\n .@{className}-enter,\n .@{className}-appear {\n .motion-common(@duration);\n\n animation-play-state: paused;\n }\n .@{className}-leave {\n .motion-common-leave(@duration);\n\n animation-play-state: paused;\n }\n .@{className}-enter.@{className}-enter-active,\n .@{className}-appear.@{className}-appear-active {\n animation-name: ~'@{keyframeName}In';\n animation-play-state: running;\n }\n .@{className}-leave.@{className}-leave-active {\n animation-name: ~'@{keyframeName}Out';\n animation-play-state: running;\n pointer-events: none;\n }\n}\n",".fade-motion(@className, @keyframeName) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName);\n .@{name}-enter,\n .@{name}-appear {\n opacity: 0;\n animation-timing-function: linear;\n }\n .@{name}-leave {\n animation-timing-function: linear;\n }\n}\n\n.fade-motion(fade, antFade);\n\n@keyframes antFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes antFadeOut {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n",".move-motion(@className, @keyframeName) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName);\n .@{name}-enter,\n .@{name}-appear {\n opacity: 0;\n animation-timing-function: @ease-out-circ;\n }\n .@{name}-leave {\n animation-timing-function: @ease-in-circ;\n }\n}\n\n.move-motion(move-up, antMoveUp);\n.move-motion(move-down, antMoveDown);\n.move-motion(move-left, antMoveLeft);\n.move-motion(move-right, antMoveRight);\n\n@keyframes antMoveDownIn {\n 0% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n\n@keyframes antMoveDownOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n\n@keyframes antMoveLeftIn {\n 0% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n\n@keyframes antMoveLeftOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n\n@keyframes antMoveRightIn {\n 0% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n\n@keyframes antMoveRightOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n\n@keyframes antMoveUpIn {\n 0% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n\n@keyframes antMoveUpOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n","@keyframes loadingCircle {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@click-animating-true: ~\"[@{ant-prefix}-click-animating='true']\";\n@click-animating-with-extra-node-true: ~\"[@{ant-prefix}-click-animating-without-extra-node='true']\";\n\n@{click-animating-true},\n@{click-animating-with-extra-node-true} {\n position: relative;\n}\n\nhtml {\n --antd-wave-shadow-color: @primary-color;\n --scroll-bar: 0;\n}\n\n@click-animating-with-extra-node-true-after: ~'@{click-animating-with-extra-node-true}::after';\n\n@{click-animating-with-extra-node-true-after},\n.@{ant-prefix}-click-animating-node {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n border-radius: inherit;\n box-shadow: 0 0 0 0 @primary-color;\n box-shadow: 0 0 0 0 var(--antd-wave-shadow-color);\n opacity: 0.2;\n animation: fadeEffect 2s @ease-out-circ, waveEffect 0.4s @ease-out-circ;\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n\n@keyframes waveEffect {\n 100% {\n box-shadow: 0 0 0 @primary-color;\n box-shadow: 0 0 0 @wave-animation-width var(--antd-wave-shadow-color);\n }\n}\n\n@keyframes fadeEffect {\n 100% {\n opacity: 0;\n }\n}\n",".slide-motion(@className, @keyframeName) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName);\n .@{name}-enter,\n .@{name}-appear {\n opacity: 0;\n animation-timing-function: @ease-out-quint;\n }\n .@{name}-leave {\n animation-timing-function: @ease-in-quint;\n }\n}\n\n.slide-motion(slide-up, antSlideUp);\n.slide-motion(slide-down, antSlideDown);\n.slide-motion(slide-left, antSlideLeft);\n.slide-motion(slide-right, antSlideRight);\n\n@keyframes antSlideUpIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n\n@keyframes antSlideUpOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n\n@keyframes antSlideDownIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n}\n\n@keyframes antSlideDownOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n}\n\n@keyframes antSlideLeftIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n\n@keyframes antSlideLeftOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n\n@keyframes antSlideRightIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n}\n\n@keyframes antSlideRightOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n}\n",".zoom-motion(@className, @keyframeName, @duration: @animation-duration-base) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName, @duration);\n .@{name}-enter,\n .@{name}-appear {\n transform: scale(0); // need this by yiminghe\n opacity: 0;\n animation-timing-function: @ease-out-circ;\n\n &-prepare {\n transform: none;\n }\n }\n .@{name}-leave {\n animation-timing-function: @ease-in-out-circ;\n }\n}\n\n// For Modal, Select choosen item\n.zoom-motion(zoom, antZoom);\n// For Popover, Popconfirm, Dropdown\n.zoom-motion(zoom-big, antZoomBig);\n// For Tooltip\n.zoom-motion(zoom-big-fast, antZoomBig, @animation-duration-fast);\n\n.zoom-motion(zoom-up, antZoomUp);\n.zoom-motion(zoom-down, antZoomDown);\n.zoom-motion(zoom-left, antZoomLeft);\n.zoom-motion(zoom-right, antZoomRight);\n\n@keyframes antZoomIn {\n 0% {\n transform: scale(0.2);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes antZoomOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.2);\n opacity: 0;\n }\n}\n\n@keyframes antZoomBigIn {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes antZoomBigOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.8);\n opacity: 0;\n }\n}\n\n@keyframes antZoomUpIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n}\n\n@keyframes antZoomUpOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n}\n\n@keyframes antZoomLeftIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n}\n\n@keyframes antZoomLeftOut {\n 0% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n}\n\n@keyframes antZoomRightIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n}\n\n@keyframes antZoomRightOut {\n 0% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n}\n\n@keyframes antZoomDownIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n}\n\n@keyframes antZoomDownOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n}\n","@import '../mixins/motion';\n@import 'motion/fade';\n@import 'motion/move';\n@import 'motion/other';\n@import 'motion/slide';\n@import 'motion/zoom';\n\n// For common/openAnimation\n.ant-motion-collapse-legacy {\n overflow: hidden;\n &-active {\n transition: height @animation-duration-base @ease-in-out,\n opacity @animation-duration-base @ease-in-out !important;\n }\n}\n\n.ant-motion-collapse {\n overflow: hidden;\n transition: height @animation-duration-base @ease-in-out,\n opacity @animation-duration-base @ease-in-out !important;\n}\n","@import '../../style/themes/index';\n\n.@{ant-prefix}-affix {\n position: fixed;\n z-index: @zindex-affix;\n}\n","@import '../themes/index';\n\n.reset-component() {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: @text-color;\n font-size: @font-size-base;\n font-variant: @font-variant-base;\n line-height: @line-height-base;\n list-style: none;\n font-feature-settings: @font-feature-settings-base;\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@alert-prefix-cls: ~'@{ant-prefix}-alert';\n\n.@{alert-prefix-cls} {\n .reset-component();\n\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px 15px;\n word-wrap: break-word;\n border-radius: @border-radius-base;\n\n &-content {\n flex: 1;\n min-width: 0;\n }\n\n &-icon {\n margin-right: @margin-xs;\n }\n\n &-description {\n display: none;\n font-size: @font-size-base;\n line-height: @font-size-base + 8px;\n }\n\n &-success {\n background-color: @alert-success-bg-color;\n border: @border-width-base @border-style-base @alert-success-border-color;\n .@{alert-prefix-cls}-icon {\n color: @alert-success-icon-color;\n }\n }\n\n &-info {\n background-color: @alert-info-bg-color;\n border: @border-width-base @border-style-base @alert-info-border-color;\n .@{alert-prefix-cls}-icon {\n color: @alert-info-icon-color;\n }\n }\n\n &-warning {\n background-color: @alert-warning-bg-color;\n border: @border-width-base @border-style-base @alert-warning-border-color;\n .@{alert-prefix-cls}-icon {\n color: @alert-warning-icon-color;\n }\n }\n\n &-error {\n background-color: @alert-error-bg-color;\n border: @border-width-base @border-style-base @alert-error-border-color;\n\n .@{alert-prefix-cls}-icon {\n color: @alert-error-icon-color;\n }\n\n .@{alert-prefix-cls}-description > pre {\n margin: 0;\n padding: 0;\n }\n }\n\n &-action {\n margin-left: @margin-xs;\n }\n\n &-close-icon {\n margin-left: @margin-xs;\n padding: 0;\n overflow: hidden;\n font-size: @font-size-sm;\n line-height: @font-size-sm;\n background-color: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n\n .@{iconfont-css-prefix}-close {\n color: @alert-close-color;\n transition: color 0.3s;\n &:hover {\n color: @alert-close-hover-color;\n }\n }\n }\n\n &-close-text {\n color: @alert-close-color;\n transition: color 0.3s;\n &:hover {\n color: @alert-close-hover-color;\n }\n }\n\n &-with-description {\n align-items: flex-start;\n padding: @alert-with-description-padding;\n }\n\n &-with-description&-no-icon {\n padding: @alert-with-description-no-icon-padding-vertical 15px;\n }\n\n &-with-description &-icon {\n margin-right: @alert-with-description-padding-vertical;\n font-size: @alert-with-description-icon-size;\n }\n &-with-description &-message {\n display: block;\n margin-bottom: 4px;\n color: @alert-message-color;\n font-size: @font-size-lg;\n }\n\n &-message {\n color: @alert-message-color;\n }\n\n &-with-description &-description {\n display: block;\n }\n\n &&-motion-leave {\n overflow: hidden;\n opacity: 1;\n transition: max-height 0.3s @ease-in-out-circ, opacity 0.3s @ease-in-out-circ,\n padding-top 0.3s @ease-in-out-circ, padding-bottom 0.3s @ease-in-out-circ,\n margin-bottom 0.3s @ease-in-out-circ;\n }\n\n &&-motion-leave-active {\n max-height: 0;\n margin-bottom: 0 !important;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n }\n\n &-banner {\n margin-bottom: 0;\n border: 0;\n border-radius: 0;\n }\n}\n\n@import './rtl';\n",".@{alert-prefix-cls} {\n &&-rtl {\n direction: rtl;\n }\n\n &&-no-icon {\n .@{alert-prefix-cls}-rtl& {\n padding: @alert-no-icon-padding-vertical 15px;\n }\n }\n\n &-icon {\n .@{alert-prefix-cls}-rtl & {\n margin-right: auto;\n margin-left: @margin-xs;\n }\n }\n\n &-action {\n .@{alert-prefix-cls}-rtl & {\n margin-right: @margin-xs;\n margin-left: auto;\n }\n }\n\n &-close-icon {\n .@{alert-prefix-cls}-rtl & {\n margin-right: @margin-xs;\n margin-left: auto;\n }\n }\n\n &-with-description &-icon {\n .@{alert-prefix-cls}-rtl& {\n margin-right: auto;\n margin-left: @alert-with-description-padding-vertical;\n }\n }\n}\n","/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.tinyColorMixin() {\n@functions: ~`(function() {\n// TinyColor v1.4.1\n// https://github.com/bgrins/TinyColor\n// 2016-07-07, Brian Grinstead, MIT License\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by inputToRgb\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n// Conversion Functions\n// --------------------\n\n// rgbToHsl, rgbToHsv, hslToRgb, hsvToRgb modified from:\n// \n\n// rgbToRgb\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// rgbToHsl\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// hslToRgb\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// rgbToHsv\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// hsvToRgb\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// rgbToHex\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// rgbaToHex\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// rgbaToArgbHex\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// equals\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// mostReadable\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via hexNames[hex]\nvar hexNames = tinycolor.hexNames = flip(names);\n\n// Utilities\n// ---------\n\n// { 'name1': 'val1' } becomes { 'val1': 'name1' }\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// isValidCSSUnit\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see matchers above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// stringInputToObject\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns { r, g, b } or { h, s, l } or { h, s, v}\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\nthis.tinycolor = tinycolor;\n\n})()`;\n}\n// It is hacky way to make this function will be compiled preferentially by less\n// resolve error: `ReferenceError: colorPalette is not defined`\n// https://github.com/ant-design/ant-motion/issues/44\n.tinyColorMixin();\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@anchor-border-width: 2px;\n\n.@{ant-prefix}-anchor {\n .reset-component();\n\n position: relative;\n padding-left: @anchor-border-width;\n\n &-wrapper {\n margin-left: -4px;\n padding-left: 4px;\n overflow: auto;\n background-color: @anchor-bg;\n }\n\n &-ink {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n &::before {\n position: relative;\n display: block;\n width: @anchor-border-width;\n height: 100%;\n margin: 0 auto;\n background-color: @anchor-border-color;\n content: ' ';\n }\n &-ball {\n position: absolute;\n left: 50%;\n display: none;\n width: 8px;\n height: 8px;\n background-color: @component-background;\n border: 2px solid @primary-color;\n border-radius: 8px;\n transform: translateX(-50%);\n transition: top 0.3s ease-in-out;\n &.visible {\n display: inline-block;\n }\n }\n }\n\n &.fixed &-ink &-ink-ball {\n display: none;\n }\n\n &-link {\n padding: @anchor-link-padding;\n line-height: 1.143;\n\n &-title {\n position: relative;\n display: block;\n margin-bottom: 6px;\n overflow: hidden;\n color: @text-color;\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n\n &:only-child {\n margin-bottom: 0;\n }\n }\n\n &-active > &-title {\n color: @primary-color;\n }\n }\n\n &-link &-link {\n padding-top: 5px;\n padding-bottom: 5px;\n }\n}\n\n@import './rtl';\n",".@{ant-prefix}-anchor {\n &-rtl {\n direction: rtl;\n }\n\n &-wrapper {\n .@{ant-prefix}-anchor-rtl& {\n margin-right: -4px;\n margin-left: 0;\n padding-right: 4px;\n padding-left: 0;\n }\n }\n\n &-ink {\n .@{ant-prefix}-anchor-rtl & {\n right: 0;\n left: auto;\n }\n\n &-ball {\n .@{ant-prefix}-anchor-rtl & {\n right: 50%;\n left: 0;\n transform: translateX(50%);\n }\n }\n }\n\n &-link {\n .@{ant-prefix}-anchor-rtl & {\n padding: @anchor-link-top @anchor-link-left @anchor-link-top 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@input-prefix-cls: ~'@{ant-prefix}-input';\n@select-prefix-cls: ~'@{ant-prefix}-select';\n@autocomplete-prefix-cls: ~'@{select-prefix-cls}-auto-complete';\n\n.@{autocomplete-prefix-cls} {\n .reset-component();\n\n // https://github.com/ant-design/ant-design/issues/22302\n .@{select-prefix-cls}-clear {\n right: 13px;\n }\n}\n","@import './index';\n\n@selection-item-padding: ceil(@font-size-base * 1.25);\n\n.@{select-prefix-cls}-single {\n // ========================= Selector =========================\n .@{select-prefix-cls}-selector {\n display: flex;\n\n .@{select-prefix-cls}-selection-search {\n position: absolute;\n top: 0;\n right: @input-padding-horizontal-base;\n bottom: 0;\n left: @input-padding-horizontal-base;\n\n &-input {\n width: 100%;\n }\n }\n\n .@{select-prefix-cls}-selection-item,\n .@{select-prefix-cls}-selection-placeholder {\n padding: 0;\n line-height: @select-height-without-border;\n transition: all 0.3s;\n\n // Firefox inline-block position calculation is not same as Chrome & Safari. Patch this:\n @supports (-moz-appearance: meterbar) {\n & {\n line-height: @select-height-without-border;\n }\n }\n }\n\n .@{select-prefix-cls}-selection-item {\n position: relative;\n user-select: none;\n }\n\n .@{select-prefix-cls}-selection-placeholder {\n pointer-events: none;\n }\n\n // For common baseline align\n &::after,\n // For '' value baseline align\n .@{select-prefix-cls}-selection-item::after,\n // For undefined value baseline align\n .@{select-prefix-cls}-selection-placeholder::after {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n }\n }\n\n // With arrow should provides `padding-right` to show the arrow\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-search {\n right: @input-padding-horizontal-base + @font-size-base;\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-item,\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-placeholder {\n padding-right: @selection-item-padding;\n }\n\n // Opacity selection if open\n &.@{select-prefix-cls}-open .@{select-prefix-cls}-selection-item {\n color: @input-placeholder-color;\n }\n\n // ========================== Input ==========================\n // We only change the style of non-customize input which is only support by `combobox` mode.\n\n // Not customize\n &:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selector {\n width: 100%;\n height: @input-height-base;\n padding: 0 @input-padding-horizontal-base;\n\n .@{select-prefix-cls}-selection-search-input {\n height: @select-height-without-border;\n }\n\n &::after {\n line-height: @select-height-without-border;\n }\n }\n }\n\n &.@{select-prefix-cls}-customize-input {\n .@{select-prefix-cls}-selector {\n &::after {\n display: none;\n }\n\n .@{select-prefix-cls}-selection-search {\n position: static;\n width: 100%;\n }\n\n .@{select-prefix-cls}-selection-placeholder {\n position: absolute;\n right: 0;\n left: 0;\n padding: 0 @input-padding-horizontal-base;\n\n &::after {\n display: none;\n }\n }\n }\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n .select-size(@suffix, @input-height) {\n @merged-cls: ~'@{select-prefix-cls}-@{suffix}';\n\n &.@{merged-cls}:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selector {\n height: @input-height;\n\n &::after,\n .@{select-prefix-cls}-selection-item,\n .@{select-prefix-cls}-selection-placeholder {\n line-height: @input-height - 2 * @border-width-base;\n }\n }\n\n // Not customize\n &:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selection-search-input {\n height: @input-height - 2 * @border-width-base;\n }\n }\n }\n }\n\n .select-size('lg', @select-single-item-height-lg);\n .select-size('sm', @input-height-sm);\n\n // Size small need additional set padding\n &.@{select-prefix-cls}-sm {\n &:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selection-search {\n right: @input-padding-horizontal-sm;\n left: @input-padding-horizontal-sm;\n }\n\n .@{select-prefix-cls}-selector {\n padding: 0 @input-padding-horizontal-sm;\n }\n\n // With arrow should provides `padding-right` to show the arrow\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-search {\n right: @input-padding-horizontal-sm + @font-size-base * 1.5;\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-item,\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-placeholder {\n padding-right: @font-size-base * 1.5;\n }\n }\n }\n\n &.@{select-prefix-cls}-lg {\n &:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selector {\n padding: 0 @input-padding-horizontal-lg;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@import './single';\n@import './multiple';\n\n@select-prefix-cls: ~'@{ant-prefix}-select';\n@select-height-without-border: @input-height-base - 2 * @border-width-base;\n@select-dropdown-edge-child-vertical-padding: @dropdown-edge-child-vertical-padding;\n\n.select-selector() {\n position: relative;\n background-color: @select-background;\n border: @border-width-base @border-style-base @select-border-color;\n border-radius: @border-radius-base;\n transition: all 0.3s @ease-in-out;\n\n input {\n cursor: pointer;\n }\n\n .@{select-prefix-cls}-show-search& {\n cursor: text;\n\n input {\n cursor: auto;\n }\n }\n\n .@{select-prefix-cls}-focused:not(.@{select-prefix-cls}-disabled)& {\n .active();\n }\n\n .@{select-prefix-cls}-disabled& {\n color: @disabled-color;\n background: @input-disabled-bg;\n cursor: not-allowed;\n\n .@{select-prefix-cls}-multiple& {\n background: @select-multiple-disabled-background;\n }\n\n input {\n cursor: not-allowed;\n }\n }\n}\n\n/* Reset search input style */\n.select-search-input-without-border() {\n .@{select-prefix-cls}-selection-search-input {\n margin: 0;\n padding: 0;\n background: transparent;\n border: none;\n outline: none;\n appearance: none;\n\n &::-webkit-search-cancel-button {\n display: none;\n -webkit-appearance: none;\n }\n }\n}\n\n.@{select-prefix-cls} {\n .reset-component();\n position: relative;\n display: inline-block;\n cursor: pointer;\n\n &:not(&-customize-input) &-selector {\n .select-selector();\n .select-search-input-without-border();\n }\n\n &:not(&-disabled):hover &-selector {\n .hover();\n }\n\n // ======================== Selection ========================\n &-selection-item {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n // IE11 css hack. `*::-ms-backdrop,` is a must have\n @media all and (-ms-high-contrast: none) {\n *::-ms-backdrop,\n & {\n flex: auto;\n }\n }\n }\n\n // ======================= Placeholder =======================\n &-selection-placeholder {\n flex: 1;\n overflow: hidden;\n color: @input-placeholder-color;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n\n // IE11 css hack. `*::-ms-backdrop,` is a must have\n @media all and (-ms-high-contrast: none) {\n *::-ms-backdrop,\n & {\n flex: auto;\n }\n }\n }\n\n // ========================== Arrow ==========================\n &-arrow {\n .iconfont-mixin();\n position: absolute;\n top: 53%;\n right: @control-padding-horizontal - 1px;\n width: @font-size-sm;\n height: @font-size-sm;\n margin-top: (-@font-size-sm / 2);\n color: @disabled-color;\n font-size: @font-size-sm;\n line-height: 1;\n text-align: center;\n pointer-events: none;\n\n .@{iconfont-css-prefix} {\n vertical-align: top;\n transition: transform 0.3s;\n\n > svg {\n vertical-align: top;\n }\n\n &:not(.@{select-prefix-cls}-suffix) {\n pointer-events: auto;\n }\n }\n\n .@{select-prefix-cls}-disabled & {\n cursor: not-allowed;\n }\n }\n\n // ========================== Clear ==========================\n &-clear {\n position: absolute;\n top: 50%;\n right: @control-padding-horizontal - 1px;\n z-index: 1;\n display: inline-block;\n width: @font-size-sm;\n height: @font-size-sm;\n margin-top: (-@font-size-sm / 2);\n color: @disabled-color;\n font-size: @font-size-sm;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n background: @select-clear-background;\n cursor: pointer;\n opacity: 0;\n transition: color 0.3s ease, opacity 0.15s ease;\n text-rendering: auto;\n &::before {\n display: block;\n }\n &:hover {\n color: @text-color-secondary;\n }\n\n .@{select-prefix-cls}:hover & {\n opacity: 1;\n }\n }\n\n // ========================== Popup ==========================\n &-dropdown {\n .reset-component();\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: @zindex-dropdown;\n box-sizing: border-box;\n padding: @select-dropdown-edge-child-vertical-padding 0;\n overflow: hidden;\n font-size: @font-size-base;\n // Fix select render lag of long text in chrome\n // https://github.com/ant-design/ant-design/issues/11456\n // https://github.com/ant-design/ant-design/issues/11843\n font-variant: initial;\n background-color: @select-dropdown-bg;\n border-radius: @border-radius-base;\n outline: none;\n box-shadow: @box-shadow-base;\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomLeft {\n animation-name: antSlideUpIn;\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft {\n animation-name: antSlideDownIn;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomLeft {\n animation-name: antSlideUpOut;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft {\n animation-name: antSlideDownOut;\n }\n\n &-hidden {\n display: none;\n }\n\n &-empty {\n color: @disabled-color;\n }\n }\n\n // ========================= Options =========================\n .item() {\n position: relative;\n display: block;\n min-height: @select-dropdown-height;\n padding: @select-dropdown-vertical-padding @control-padding-horizontal;\n color: @text-color;\n font-weight: normal;\n font-size: @select-dropdown-font-size;\n line-height: @select-dropdown-line-height;\n }\n\n &-item-empty {\n .item();\n color: @disabled-color;\n }\n\n &-item {\n .item();\n\n cursor: pointer;\n transition: background 0.3s ease;\n\n // =========== Group ============\n &-group {\n color: @text-color-secondary;\n font-size: @font-size-sm;\n cursor: default;\n }\n\n // =========== Option ===========\n &-option {\n display: flex;\n\n &-content {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-state {\n flex: none;\n }\n\n &-active:not(&-disabled) {\n background-color: @select-item-active-bg;\n }\n\n &-selected:not(&-disabled) {\n color: @select-item-selected-color;\n font-weight: @select-item-selected-font-weight;\n background-color: @select-item-selected-bg;\n\n .@{select-prefix-cls}-item-option-state {\n color: @primary-color;\n }\n }\n\n &-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n }\n\n &-grouped {\n padding-left: @control-padding-horizontal * 2;\n }\n }\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n &-lg {\n font-size: @font-size-lg;\n }\n\n // no border style\n &-borderless &-selector {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n }\n}\n\n@import './rtl';\n","@import './index';\n\n@select-overflow-prefix-cls: ~'@{select-prefix-cls}-selection-overflow';\n@select-multiple-item-border-width: 1px;\n\n@select-multiple-padding: max(\n @input-padding-vertical-base - @select-multiple-item-border-width -\n @select-multiple-item-spacing-half,\n 0\n);\n\n/**\n * Do not merge `height` & `line-height` under style with `selection` & `search`,\n * since chrome may update to redesign with its align logic.\n */\n\n// =========================== Overflow ===========================\n.@{select-overflow-prefix-cls} {\n position: relative;\n display: flex;\n flex: auto;\n flex-wrap: wrap;\n max-width: 100%;\n\n &-item {\n flex: none;\n align-self: center;\n max-width: 100%;\n }\n}\n\n.@{select-prefix-cls} {\n &-multiple {\n // ========================= Selector =========================\n .@{select-prefix-cls}-selector {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n // Multiple is little different that horizontal is follow the vertical\n padding: @select-multiple-padding @input-padding-vertical-base;\n\n .@{select-prefix-cls}-show-search& {\n cursor: text;\n }\n\n .@{select-prefix-cls}-disabled& {\n background: @select-multiple-disabled-background;\n cursor: not-allowed;\n }\n\n &::after {\n display: inline-block;\n width: 0;\n margin: @select-multiple-item-spacing-half 0;\n line-height: @select-multiple-item-height;\n content: '\\a0';\n }\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selector,\n &.@{select-prefix-cls}-allow-clear .@{select-prefix-cls}-selector {\n padding-right: @font-size-sm + @control-padding-horizontal;\n }\n\n // ======================== Selections ========================\n .@{select-prefix-cls}-selection-item {\n position: relative;\n display: flex;\n flex: none;\n box-sizing: border-box;\n max-width: 100%;\n\n height: @select-multiple-item-height;\n margin-top: @select-multiple-item-spacing-half;\n margin-bottom: @select-multiple-item-spacing-half;\n line-height: @select-multiple-item-height - @select-multiple-item-border-width * 2;\n background: @select-selection-item-bg;\n border: 1px solid @select-selection-item-border-color;\n border-radius: @border-radius-base;\n cursor: default;\n transition: font-size 0.3s, line-height 0.3s, height 0.3s;\n user-select: none;\n margin-inline-end: @input-padding-vertical-base;\n padding-inline-start: @padding-xs;\n padding-inline-end: (@padding-xs / 2);\n\n .@{select-prefix-cls}-disabled& {\n color: @select-multiple-item-disabled-color;\n border-color: @select-multiple-item-disabled-border-color;\n cursor: not-allowed;\n }\n\n // It's ok not to do this, but 24px makes bottom narrow in view should adjust\n &-content {\n display: inline-block;\n margin-right: (@padding-xs / 2);\n overflow: hidden;\n white-space: pre; // fix whitespace wrapping. custom tags display all whitespace within.\n text-overflow: ellipsis;\n }\n\n &-remove {\n .iconfont-mixin();\n display: inline-block;\n color: @text-color-secondary;\n font-weight: bold;\n font-size: 10px;\n line-height: inherit;\n cursor: pointer;\n\n > .@{iconfont-css-prefix} {\n vertical-align: -0.2em;\n }\n\n &:hover {\n color: @icon-color-hover;\n }\n }\n }\n\n // ========================== Input ==========================\n .@{select-overflow-prefix-cls}-item + .@{select-overflow-prefix-cls}-item {\n .@{select-prefix-cls}-selection-search {\n margin-inline-start: 0;\n }\n }\n\n .@{select-prefix-cls}-selection-search {\n position: relative;\n max-width: 100%;\n margin-top: @select-multiple-item-spacing-half;\n margin-bottom: @select-multiple-item-spacing-half;\n margin-inline-start: @input-padding-horizontal-base - @input-padding-vertical-base;\n\n &-input,\n &-mirror {\n height: @select-multiple-item-height;\n font-family: @font-family;\n line-height: @select-multiple-item-height;\n transition: all 0.3s;\n }\n\n &-input {\n width: 100%;\n min-width: 4.1px; // fix search cursor missing\n }\n\n &-mirror {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 999;\n white-space: pre; // fix whitespace wrapping caused width calculation bug\n visibility: hidden;\n }\n }\n\n // ======================= Placeholder =======================\n .@{select-prefix-cls}-selection-placeholder {\n position: absolute;\n top: 50%;\n right: @input-padding-horizontal;\n left: @input-padding-horizontal;\n transform: translateY(-50%);\n transition: all 0.3s;\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n .select-size(@suffix, @input-height) {\n @merged-cls: ~'@{select-prefix-cls}-@{suffix}';\n &.@{merged-cls} {\n @select-selection-height: @input-height - @input-padding-vertical-base * 2;\n @select-height-without-border: @input-height - @border-width-base * 2;\n\n .@{select-prefix-cls}-selector::after {\n line-height: @select-selection-height;\n }\n\n .@{select-prefix-cls}-selection-item {\n height: @select-selection-height;\n line-height: @select-selection-height - @border-width-base * 2;\n }\n\n .@{select-prefix-cls}-selection-search {\n height: @select-selection-height;\n line-height: @select-selection-height;\n\n &-input,\n &-mirror {\n height: @select-selection-height;\n line-height: @select-selection-height - @border-width-base * 2;\n }\n }\n }\n }\n\n .select-size('lg', @input-height-lg);\n .select-size('sm', @input-height-sm);\n\n // Size small need additional set padding\n &.@{select-prefix-cls}-sm {\n .@{select-prefix-cls}-selection-placeholder {\n left: @input-padding-horizontal-sm;\n }\n // https://github.com/ant-design/ant-design/issues/29559\n .@{select-prefix-cls}-selection-search {\n margin-inline-start: 3px;\n }\n }\n &.@{select-prefix-cls}-lg {\n .@{select-prefix-cls}-selection-item {\n height: @select-multiple-item-height-lg;\n line-height: @select-multiple-item-height-lg;\n }\n }\n }\n\n &-disabled .@{select-prefix-cls}-selection-item-remove {\n display: none;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@input-affix-with-clear-btn-width: 38px;\n\n// size mixins for input\n.input-lg() {\n padding: @input-padding-vertical-lg @input-padding-horizontal-lg;\n font-size: @font-size-lg;\n}\n\n.input-sm() {\n padding: @input-padding-vertical-sm @input-padding-horizontal-sm;\n}\n\n// input status\n// == when focus or actived\n.active(@color: @outline-color) {\n & when (@theme = dark) {\n border-color: @color;\n }\n & when not (@theme = dark) {\n border-color: ~`colorPalette('@{color}', 5) `;\n }\n border-right-width: @border-width-base !important;\n outline: 0;\n box-shadow: @input-outline-offset @outline-blur-size @outline-width fade(@color, @outline-fade);\n}\n\n// == when hoverd\n.hover(@color: @input-hover-border-color) {\n border-color: @color;\n border-right-width: @border-width-base !important;\n}\n\n.disabled() {\n color: @input-disabled-color;\n background-color: @input-disabled-bg;\n cursor: not-allowed;\n opacity: 1;\n\n &:hover {\n .hover(@input-border-color);\n }\n}\n\n// Basic style for input\n.input() {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: @input-padding-vertical-base @input-padding-horizontal-base;\n color: @input-color;\n font-size: @font-size-base;\n line-height: @line-height-base;\n background-color: @input-bg;\n background-image: none;\n border: @border-width-base @border-style-base @input-border-color;\n border-radius: @border-radius-base;\n transition: all 0.3s;\n .placeholder(); // Reset placeholder\n\n &:hover {\n .hover();\n }\n\n &:focus,\n &-focused {\n .active();\n }\n\n &-disabled {\n .disabled();\n }\n\n &[disabled] {\n .disabled();\n }\n\n &-borderless {\n &,\n &:hover,\n &:focus,\n &-focused,\n &-disabled,\n &[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n }\n }\n\n // Reset height for `textarea`s\n textarea& {\n max-width: 100%; // prevent textearea resize from coming out of its container\n height: auto;\n min-height: @input-height-base;\n line-height: @line-height-base;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n }\n\n // Size\n &-lg {\n .input-lg();\n }\n\n &-sm {\n .input-sm();\n }\n}\n\n// label input\n.input-group(@inputClass) {\n position: relative;\n display: table;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n\n // Undo padding and float of grid classes\n &[class*='col-'] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n }\n\n > [class*='col-'] {\n padding-right: 8px;\n\n &:last-child {\n padding-right: 0;\n }\n }\n\n &-addon,\n &-wrap,\n > .@{inputClass} {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n }\n\n &-addon,\n &-wrap {\n width: 1px; // To make addon/wrap as small as possible\n white-space: nowrap;\n vertical-align: middle;\n }\n\n &-wrap > * {\n display: block !important;\n }\n\n .@{inputClass} {\n float: left;\n width: 100%;\n margin-bottom: 0;\n text-align: inherit;\n\n &:focus {\n z-index: 1; // Fix https://gw.alipayobjects.com/zos/rmsportal/DHNpoqfMXSfrSnlZvhsJ.png\n border-right-width: 1px;\n }\n\n &:hover {\n z-index: 1;\n border-right-width: 1px;\n .@{ant-prefix}-input-search-with-button & {\n z-index: 0;\n }\n }\n }\n\n &-addon {\n position: relative;\n padding: 0 @input-padding-horizontal-base;\n color: @input-color;\n font-weight: normal;\n font-size: @font-size-base;\n text-align: center;\n background-color: @input-addon-bg;\n border: @border-width-base @border-style-base @input-border-color;\n border-radius: @border-radius-base;\n transition: all 0.3s;\n\n // Reset Select's style in addon\n .@{ant-prefix}-select {\n margin: -(@input-padding-vertical-base + 1px) (-@input-padding-horizontal-base);\n\n &.@{ant-prefix}-select-single:not(.@{ant-prefix}-select-customize-input)\n .@{ant-prefix}-select-selector {\n background-color: inherit;\n border: @border-width-base @border-style-base transparent;\n box-shadow: none;\n }\n\n &-open,\n &-focused {\n .@{ant-prefix}-select-selector {\n color: @primary-color;\n }\n }\n }\n }\n\n // Reset rounded corners\n > .@{inputClass}:first-child,\n &-addon:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n\n // Reset Select's style in addon\n .@{ant-prefix}-select .@{ant-prefix}-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n > .@{inputClass}-affix-wrapper {\n &:not(:first-child) .@{inputClass} {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &:not(:last-child) .@{inputClass} {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n &-addon:first-child {\n border-right: 0;\n }\n\n &-addon:last-child {\n border-left: 0;\n }\n\n > .@{inputClass}:last-child,\n &-addon:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n\n // Reset Select's style in addon\n .@{ant-prefix}-select .@{ant-prefix}-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n\n // Sizing options\n &-lg .@{inputClass},\n &-lg > &-addon {\n .input-lg();\n }\n\n &-sm .@{inputClass},\n &-sm > &-addon {\n .input-sm();\n }\n\n // Fix https://github.com/ant-design/ant-design/issues/5754\n &-lg .@{ant-prefix}-select-single .@{ant-prefix}-select-selector {\n height: @input-height-lg;\n }\n\n &-sm .@{ant-prefix}-select-single .@{ant-prefix}-select-selector {\n height: @input-height-sm;\n }\n\n .@{inputClass}-affix-wrapper {\n &:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n .@{ant-prefix}-input-search & {\n border-top-left-radius: @border-radius-base;\n border-bottom-left-radius: @border-radius-base;\n }\n }\n }\n\n &&-compact {\n display: block;\n .clearfix();\n\n &-addon,\n &-wrap,\n > .@{inputClass} {\n &:not(:first-child):not(:last-child) {\n border-right-width: @border-width-base;\n\n &:hover {\n z-index: 1;\n }\n\n &:focus {\n z-index: 1;\n }\n }\n }\n\n & > * {\n display: inline-block;\n float: none;\n vertical-align: top; // https://github.com/ant-design/ant-design-pro/issues/139\n border-radius: 0;\n }\n\n & > .@{inputClass}-affix-wrapper {\n display: inline-flex;\n }\n\n & > .@{ant-prefix}-picker-range {\n display: inline-flex;\n }\n\n & > *:not(:last-child) {\n margin-right: -@border-width-base;\n border-right-width: @border-width-base;\n }\n\n // Undo float for .ant-input-group .ant-input\n .@{inputClass} {\n float: none;\n }\n\n // reset border for Select, DatePicker, AutoComplete, Cascader, Mention, TimePicker, Input\n & > .@{ant-prefix}-select > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-select-auto-complete .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker .@{ant-prefix}-input,\n & > .@{ant-prefix}-input-group-wrapper .@{ant-prefix}-input {\n border-right-width: @border-width-base;\n border-radius: 0;\n\n &:hover {\n z-index: 1;\n }\n\n &:focus {\n z-index: 1;\n }\n }\n\n & > .@{ant-prefix}-select-focused {\n z-index: 1;\n }\n\n // update z-index for arrow icon\n & > .@{ant-prefix}-select > .@{ant-prefix}-select-arrow {\n z-index: 1; // https://github.com/ant-design/ant-design/issues/20371\n }\n\n & > *:first-child,\n & > .@{ant-prefix}-select:first-child > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-select-auto-complete:first-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker:first-child .@{ant-prefix}-input {\n border-top-left-radius: @border-radius-base;\n border-bottom-left-radius: @border-radius-base;\n }\n\n & > *:last-child,\n & > .@{ant-prefix}-select:last-child > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-cascader-picker:last-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker-focused:last-child .@{ant-prefix}-input {\n border-right-width: @border-width-base;\n border-top-right-radius: @border-radius-base;\n border-bottom-right-radius: @border-radius-base;\n }\n\n // https://github.com/ant-design/ant-design/issues/12493\n & > .@{ant-prefix}-select-auto-complete .@{ant-prefix}-input {\n vertical-align: top;\n }\n\n .@{ant-prefix}-input-group-wrapper + .@{ant-prefix}-input-group-wrapper {\n margin-left: -1px;\n .@{ant-prefix}-input-affix-wrapper {\n border-radius: 0;\n }\n }\n\n .@{ant-prefix}-input-group-wrapper:not(:last-child) {\n &.@{ant-prefix}-input-search > .@{ant-prefix}-input-group {\n & > .@{ant-prefix}-input-group-addon > .@{ant-prefix}-input-search-button {\n border-radius: 0;\n }\n\n & > .@{ant-prefix}-input {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@select-prefix-cls: ~'@{ant-prefix}-select';\n\n.@{select-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n // ========================== Arrow ==========================\n &-arrow {\n .@{select-prefix-cls}-rtl & {\n right: initial;\n left: @control-padding-horizontal - 1px;\n }\n }\n\n // ========================== Clear ==========================\n &-clear {\n .@{select-prefix-cls}-rtl & {\n right: initial;\n left: @control-padding-horizontal - 1px;\n }\n }\n\n // ========================== Popup ==========================\n &-dropdown {\n &-rtl {\n direction: rtl;\n }\n }\n\n // ========================= Options =========================\n &-item {\n &-option {\n &-grouped {\n .@{select-prefix-cls}-dropdown-rtl & {\n padding-right: @control-padding-horizontal * 2;\n padding-left: @control-padding-horizontal;\n }\n }\n }\n }\n}\n\n// multiple\n@select-multiple-item-border-width: 1px;\n@select-multiple-item-spacing-half: ceil((@input-padding-vertical-base / 2));\n@select-multiple-padding: max(\n @input-padding-vertical-base - @select-multiple-item-border-width -\n @select-multiple-item-spacing-half,\n 0\n);\n\n.@{select-prefix-cls}-multiple {\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selector,\n &.@{select-prefix-cls}-allow-clear .@{select-prefix-cls}-selector {\n .@{select-prefix-cls}-rtl& {\n padding-right: @input-padding-vertical-base;\n padding-left: @font-size-sm + @control-padding-horizontal;\n }\n }\n\n // ======================== Selections ========================\n .@{select-prefix-cls}-selection-item {\n .@{select-prefix-cls}-rtl& {\n text-align: right;\n }\n // It's ok not to do this, but 24px makes bottom narrow in view should adjust\n &-content {\n .@{select-prefix-cls}-rtl& {\n margin-right: 0;\n margin-left: (@padding-xs / 2);\n text-align: right;\n }\n }\n }\n\n // ========================== Input ==========================\n .@{select-prefix-cls}-selection-search {\n &-mirror {\n .@{select-prefix-cls}-rtl& {\n right: 0;\n left: auto;\n }\n }\n }\n\n // ======================= Placeholder =======================\n .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n right: @input-padding-horizontal;\n left: auto;\n }\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n\n // Size small need additional set padding\n &.@{select-prefix-cls}-sm {\n .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n right: @input-padding-horizontal-sm;\n }\n }\n }\n}\n\n// single\n@selection-item-padding: ceil(@font-size-base * 1.25);\n\n.@{select-prefix-cls}-single {\n // ========================= Selector =========================\n .@{select-prefix-cls}-selector {\n .@{select-prefix-cls}-selection-item,\n .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n right: 0;\n left: 9px;\n text-align: right;\n }\n }\n }\n\n // With arrow should provides `padding-right` to show the arrow\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-search {\n .@{select-prefix-cls}-rtl& {\n right: @input-padding-horizontal-base;\n left: @input-padding-horizontal-base + @font-size-base;\n }\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-item,\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: @selection-item-padding;\n }\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n\n // Size small need additional set padding\n &.@{select-prefix-cls}-sm {\n &:not(.@{select-prefix-cls}-customize-input) {\n // With arrow should provides `padding-right` to show the arrow\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-search {\n .@{select-prefix-cls}-rtl& {\n right: @input-padding-horizontal-sm - 1px;\n }\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-item,\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: @font-size-base * 1.5;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@empty-prefix-cls: ~'@{ant-prefix}-empty';\n@empty-img-prefix-cls: ~'@{ant-prefix}-empty-img';\n\n.@{empty-prefix-cls} {\n margin: 0 8px;\n font-size: @empty-font-size;\n line-height: @line-height-base;\n text-align: center;\n\n &-image {\n height: 100px;\n margin-bottom: 8px;\n\n img {\n height: 100%;\n }\n\n svg {\n height: 100%;\n margin: auto;\n }\n }\n\n &-footer {\n margin-top: 16px;\n }\n\n // antd internal empty style\n &-normal {\n margin: 32px 0;\n color: @disabled-color;\n\n .@{empty-prefix-cls}-image {\n height: 40px;\n }\n }\n\n &-small {\n margin: 8px 0;\n color: @disabled-color;\n\n .@{empty-prefix-cls}-image {\n height: 35px;\n }\n }\n}\n\n.@{empty-img-prefix-cls}-default {\n // not support the definition because the less variables have no meaning\n & when (@theme = dark) {\n &-ellipse {\n fill: @white;\n fill-opacity: 0.08;\n }\n &-path {\n &-1 {\n fill: #262626;\n }\n &-2 {\n fill: url(#linearGradient-1);\n }\n &-3 {\n fill: #595959;\n }\n &-4 {\n fill: #434343;\n }\n &-5 {\n fill: #595959;\n }\n }\n &-g {\n fill: #434343;\n }\n }\n & when not (@theme = dark) {\n &-ellipse {\n fill: #f5f5f5;\n fill-opacity: 0.8;\n }\n &-path {\n &-1 {\n fill: #aeb8c2;\n }\n &-2 {\n fill: url(#linearGradient-1);\n }\n &-3 {\n fill: #f5f5f7;\n }\n &-4 {\n fill: #dce0e6;\n }\n &-5 {\n fill: #dce0e6;\n }\n }\n &-g {\n fill: @white;\n }\n }\n}\n\n.@{empty-img-prefix-cls}-simple {\n // not support the definition because the less variables have no meaning\n & when (@theme = dark) {\n &-ellipse {\n fill: @white;\n fill-opacity: 0.08;\n }\n &-g {\n stroke: #434343;\n }\n &-path {\n fill: #262626;\n stroke: #434343;\n }\n }\n & when not (@theme = dark) {\n &-ellipse {\n fill: #f5f5f5;\n }\n &-g {\n stroke: #d9d9d9;\n }\n &-path {\n fill: #fafafa;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@empty-prefix-cls: ~'@{ant-prefix}-empty';\n\n.@{empty-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@avatar-prefix-cls: ~'@{ant-prefix}-avatar';\n\n.@{avatar-prefix-cls} {\n .reset-component();\n\n position: relative;\n display: inline-block;\n overflow: hidden;\n color: @avatar-color;\n white-space: nowrap;\n text-align: center;\n vertical-align: middle;\n background: @avatar-bg;\n\n &-image {\n background: transparent;\n }\n\n .@{ant-prefix}-image-img {\n display: block;\n }\n\n .avatar-size(@avatar-size-base, @avatar-font-size-base);\n\n &-lg {\n .avatar-size(@avatar-size-lg, @avatar-font-size-lg);\n }\n\n &-sm {\n .avatar-size(@avatar-size-sm, @avatar-font-size-sm);\n }\n\n &-square {\n border-radius: @avatar-border-radius;\n }\n\n & > img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n\n.avatar-size(@size, @font-size) {\n width: @size;\n height: @size;\n line-height: @size;\n border-radius: 50%;\n\n &-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n }\n\n &.@{avatar-prefix-cls}-icon {\n font-size: @font-size;\n\n > .@{iconfont-css-prefix} {\n margin: 0;\n }\n }\n}\n\n@import './group';\n@import './rtl';\n",".@{avatar-prefix-cls}-group {\n display: inline-flex;\n\n .@{avatar-prefix-cls} {\n border: 1px solid @avatar-group-border-color;\n\n &:not(:first-child) {\n margin-left: @avatar-group-overlapping;\n }\n }\n\n &-popover {\n .@{ant-prefix}-avatar + .@{ant-prefix}-avatar {\n margin-left: @avatar-group-space;\n }\n }\n}\n",".@{avatar-prefix-cls}-group {\n &-rtl {\n .@{avatar-prefix-cls}:not(:first-child) {\n margin-right: @avatar-group-overlapping;\n margin-left: 0;\n }\n }\n\n &-popover.@{ant-prefix}-popover-rtl {\n .@{ant-prefix}-avatar + .@{ant-prefix}-avatar {\n margin-right: @avatar-group-space;\n margin-left: 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@popover-prefix-cls: ~'@{ant-prefix}-popover';\n\n.@{popover-prefix-cls} {\n .reset-component();\n\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n font-weight: normal;\n white-space: normal;\n text-align: left;\n cursor: auto;\n user-select: text;\n\n &::after {\n position: absolute;\n background: fade(@white, 1%);\n content: '';\n }\n\n &-hidden {\n display: none;\n }\n\n // Offset the popover to account for the popover arrow\n &-placement-top,\n &-placement-topLeft,\n &-placement-topRight {\n padding-bottom: @popover-distance;\n }\n\n &-placement-right,\n &-placement-rightTop,\n &-placement-rightBottom {\n padding-left: @popover-distance;\n }\n\n &-placement-bottom,\n &-placement-bottomLeft,\n &-placement-bottomRight {\n padding-top: @popover-distance;\n }\n\n &-placement-left,\n &-placement-leftTop,\n &-placement-leftBottom {\n padding-right: @popover-distance;\n }\n\n &-inner {\n background-color: @popover-bg;\n background-clip: padding-box;\n border-radius: @border-radius-base;\n box-shadow: @box-shadow-base;\n box-shadow: ~'0 0 8px @{shadow-color} \\9';\n }\n\n @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n /* IE10+ */\n &-inner {\n box-shadow: @box-shadow-base;\n }\n }\n\n &-title {\n min-width: @popover-min-width;\n min-height: @popover-min-height;\n margin: 0; // reset heading margin\n padding: 5px @popover-padding-horizontal 4px;\n color: @heading-color;\n font-weight: 500;\n border-bottom: 1px solid @border-color-split;\n }\n\n &-inner-content {\n padding: @padding-sm @popover-padding-horizontal;\n color: @popover-color;\n }\n\n &-message {\n position: relative;\n padding: 4px 0 12px;\n color: @popover-color;\n font-size: @font-size-base;\n > .@{iconfont-css-prefix} {\n position: absolute;\n top: (\n 4px + ((@line-height-base * @font-size-base - @font-size-base) / 2)\n ); // 4px for padding-top, 4px for vertical middle\n color: @warning-color;\n font-size: @font-size-base;\n }\n &-title {\n padding-left: @font-size-base + 8px;\n }\n }\n\n &-buttons {\n margin-bottom: 4px;\n text-align: right;\n\n button {\n margin-left: 8px;\n }\n }\n\n // Arrows\n // .popover-arrow is outer, .popover-arrow:after is inner\n\n &-arrow {\n position: absolute;\n display: block;\n width: sqrt(@popover-arrow-width * @popover-arrow-width * 2);\n height: sqrt(@popover-arrow-width * @popover-arrow-width * 2);\n background: transparent;\n border-style: solid;\n border-width: (sqrt(@popover-arrow-width * @popover-arrow-width * 2) / 2);\n transform: rotate(45deg);\n }\n\n &-placement-top > &-content > &-arrow,\n &-placement-topLeft > &-content > &-arrow,\n &-placement-topRight > &-content > &-arrow {\n bottom: @popover-distance - @popover-arrow-width + 2.2px;\n border-top-color: transparent;\n border-right-color: @popover-bg;\n border-bottom-color: @popover-bg;\n border-left-color: transparent;\n box-shadow: 3px 3px 7px fade(@black, 7%);\n }\n &-placement-top > &-content > &-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n }\n &-placement-topLeft > &-content > &-arrow {\n left: 16px;\n }\n &-placement-topRight > &-content > &-arrow {\n right: 16px;\n }\n\n &-placement-right > &-content > &-arrow,\n &-placement-rightTop > &-content > &-arrow,\n &-placement-rightBottom > &-content > &-arrow {\n left: @popover-distance - @popover-arrow-width + 2px;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: @popover-bg;\n border-left-color: @popover-bg;\n box-shadow: -3px 3px 7px fade(@black, 7%);\n }\n &-placement-right > &-content > &-arrow {\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n }\n &-placement-rightTop > &-content > &-arrow {\n top: 12px;\n }\n &-placement-rightBottom > &-content > &-arrow {\n bottom: 12px;\n }\n\n &-placement-bottom > &-content > &-arrow,\n &-placement-bottomLeft > &-content > &-arrow,\n &-placement-bottomRight > &-content > &-arrow {\n top: @popover-distance - @popover-arrow-width + 2px;\n border-top-color: @popover-bg;\n border-right-color: transparent;\n border-bottom-color: transparent;\n border-left-color: @popover-bg;\n box-shadow: -2px -2px 5px fade(@black, 6%);\n }\n &-placement-bottom > &-content > &-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n }\n &-placement-bottomLeft > &-content > &-arrow {\n left: 16px;\n }\n &-placement-bottomRight > &-content > &-arrow {\n right: 16px;\n }\n\n &-placement-left > &-content > &-arrow,\n &-placement-leftTop > &-content > &-arrow,\n &-placement-leftBottom > &-content > &-arrow {\n right: @popover-distance - @popover-arrow-width + 2px;\n border-top-color: @popover-bg;\n border-right-color: @popover-bg;\n border-bottom-color: transparent;\n border-left-color: transparent;\n box-shadow: 3px -3px 7px fade(@black, 7%);\n }\n &-placement-left > &-content > &-arrow {\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n }\n &-placement-leftTop > &-content > &-arrow {\n top: 12px;\n }\n &-placement-leftBottom > &-content > &-arrow {\n bottom: 12px;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@popover-prefix-cls: ~'@{ant-prefix}-popover';\n\n.@{popover-prefix-cls} {\n &-rtl {\n direction: rtl;\n text-align: right;\n }\n\n &-message {\n &-title {\n .@{popover-prefix-cls}-rtl & {\n padding-right: @font-size-base + 8px;\n padding-left: @padding-md;\n }\n }\n }\n\n &-buttons {\n .@{popover-prefix-cls}-rtl & {\n text-align: left;\n }\n\n button {\n .@{popover-prefix-cls}-rtl & {\n margin-right: 8px;\n margin-left: 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@backtop-prefix-cls: ~'@{ant-prefix}-back-top';\n\n.@{backtop-prefix-cls} {\n .reset-component();\n\n position: fixed;\n right: 100px;\n bottom: 50px;\n z-index: @zindex-back-top;\n width: 40px;\n height: 40px;\n cursor: pointer;\n\n &:empty {\n display: none;\n }\n\n &-rtl {\n right: auto;\n left: 100px;\n direction: rtl;\n }\n\n &-content {\n width: 40px;\n height: 40px;\n overflow: hidden;\n color: @back-top-color;\n text-align: center;\n background-color: @back-top-bg;\n border-radius: 20px;\n transition: all 0.3s;\n\n &:hover {\n background-color: @back-top-hover-bg;\n transition: all 0.3s;\n }\n }\n\n &-icon {\n font-size: 24px;\n line-height: 40px;\n }\n}\n\n@import './responsive';\n","@media screen and (max-width: @screen-md) {\n .@{backtop-prefix-cls} {\n right: 60px;\n }\n}\n\n@media screen and (max-width: @screen-xs) {\n .@{backtop-prefix-cls} {\n right: 20px;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@badge-prefix-cls: ~'@{ant-prefix}-badge';\n@number-prefix-cls: ~'@{ant-prefix}-scroll-number';\n\n.@{badge-prefix-cls} {\n .reset-component();\n\n position: relative;\n display: inline-block;\n line-height: 1;\n\n &-count {\n z-index: @zindex-badge;\n min-width: @badge-height;\n height: @badge-height;\n padding: 0 6px;\n color: @badge-text-color;\n font-weight: @badge-font-weight;\n font-size: @badge-font-size;\n line-height: @badge-height;\n white-space: nowrap;\n text-align: center;\n background: @badge-color;\n border-radius: (@badge-height / 2);\n box-shadow: 0 0 0 1px @shadow-color-inverse;\n a,\n a:hover {\n color: @badge-text-color;\n }\n }\n\n &-count-sm {\n min-width: @badge-height-sm;\n height: @badge-height-sm;\n padding: 0;\n font-size: @badge-font-size-sm;\n line-height: @badge-height-sm;\n border-radius: (@badge-height-sm / 2);\n }\n\n &-multiple-words {\n padding: 0 8px;\n }\n\n &-dot {\n z-index: @zindex-badge;\n width: @badge-dot-size;\n min-width: @badge-dot-size;\n height: @badge-dot-size;\n background: @highlight-color;\n border-radius: 100%;\n box-shadow: 0 0 0 1px @shadow-color-inverse;\n }\n\n &-count,\n &-dot,\n .@{number-prefix-cls}-custom-component {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n transform-origin: 100% 0%;\n\n &.@{iconfont-css-prefix}-spin {\n animation: antBadgeLoadingCircle 1s infinite linear;\n }\n }\n\n &-status {\n line-height: inherit;\n vertical-align: baseline;\n\n &-dot {\n position: relative;\n top: -1px;\n display: inline-block;\n width: @badge-status-size;\n height: @badge-status-size;\n vertical-align: middle;\n border-radius: 50%;\n }\n &-success {\n background-color: @success-color;\n }\n &-processing {\n position: relative;\n background-color: @processing-color;\n &::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid @processing-color;\n border-radius: 50%;\n animation: antStatusProcessing 1.2s infinite ease-in-out;\n content: '';\n }\n }\n &-default {\n background-color: @normal-color;\n }\n &-error {\n background-color: @error-color;\n }\n &-warning {\n background-color: @warning-color;\n }\n\n // mixin to iterate over colors and create CSS class for each one\n .make-color-classes(@i: length(@preset-colors)) when (@i > 0) {\n .make-color-classes(@i - 1);\n @color: extract(@preset-colors, @i);\n @darkColor: '@{color}-6';\n &-@{color} {\n background: @@darkColor;\n }\n }\n .make-color-classes();\n\n &-text {\n margin-left: 8px;\n color: @text-color;\n font-size: @font-size-base;\n }\n }\n\n &-zoom-appear,\n &-zoom-enter {\n animation: antZoomBadgeIn @animation-duration-slow @ease-out-back;\n animation-fill-mode: both;\n }\n\n &-zoom-leave {\n animation: antZoomBadgeOut @animation-duration-slow @ease-in-back;\n animation-fill-mode: both;\n }\n\n &-not-a-wrapper {\n .@{badge-prefix-cls}-zoom-appear,\n .@{badge-prefix-cls}-zoom-enter {\n animation: antNoWrapperZoomBadgeIn @animation-duration-slow @ease-out-back;\n }\n\n .@{badge-prefix-cls}-zoom-leave {\n animation: antNoWrapperZoomBadgeOut @animation-duration-slow @ease-in-back;\n }\n\n &:not(.@{badge-prefix-cls}-status) {\n vertical-align: middle;\n }\n\n .@{number-prefix-cls}-custom-component {\n transform: none;\n }\n\n .@{number-prefix-cls}-custom-component,\n .@{ant-prefix}-scroll-number {\n position: relative;\n top: auto;\n display: block;\n transform-origin: 50% 50%;\n }\n\n .@{badge-prefix-cls}-count {\n transform: none;\n }\n }\n}\n\n@keyframes antStatusProcessing {\n 0% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n 100% {\n transform: scale(2.4);\n opacity: 0;\n }\n}\n\n// Safari will blink with transform when inner element has absolute style.\n.safari-fix-motion() {\n -webkit-transform-style: preserve-3d;\n -webkit-backface-visibility: hidden;\n}\n\n.@{number-prefix-cls} {\n overflow: hidden;\n &-only {\n position: relative;\n display: inline-block;\n height: @badge-height;\n transition: all @animation-duration-slow @ease-in-out;\n .safari-fix-motion;\n\n > p.@{number-prefix-cls}-only-unit {\n height: @badge-height;\n margin: 0;\n .safari-fix-motion;\n }\n }\n\n &-symbol {\n vertical-align: top;\n }\n}\n\n@keyframes antZoomBadgeIn {\n 0% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(50%, -50%);\n }\n}\n\n@keyframes antZoomBadgeOut {\n 0% {\n transform: scale(1) translate(50%, -50%);\n }\n 100% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n}\n\n@keyframes antNoWrapperZoomBadgeIn {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes antNoWrapperZoomBadgeOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n opacity: 0;\n }\n}\n\n@keyframes antBadgeLoadingCircle {\n 0% {\n transform-origin: 50%;\n }\n\n 100% {\n transform: translate(50%, -50%) rotate(360deg);\n transform-origin: 50%;\n }\n}\n\n@import './ribbon';\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@ribbon-prefix-cls: ~'@{ant-prefix}-ribbon';\n@ribbon-wrapper-prefix-cls: ~'@{ant-prefix}-ribbon-wrapper';\n\n.@{ribbon-wrapper-prefix-cls} {\n position: relative;\n}\n\n.@{ribbon-prefix-cls} {\n .reset-component();\n\n position: absolute;\n top: 8px;\n height: 22px;\n padding: 0 8px;\n color: @badge-text-color;\n line-height: 22px;\n white-space: nowrap;\n background-color: @primary-color;\n border-radius: @border-radius-sm;\n\n &-text {\n color: @white;\n }\n\n &-corner {\n position: absolute;\n top: 100%;\n width: 8px;\n height: 8px;\n color: currentColor;\n border: 4px solid;\n transform: scaleY(0.75);\n transform-origin: top;\n // If not support IE 11, use filter: brightness(75%) instead\n &::after {\n position: absolute;\n top: -4px;\n left: -4px;\n width: inherit;\n height: inherit;\n color: rgba(0, 0, 0, 0.25);\n border: inherit;\n content: '';\n }\n }\n\n // colors\n // mixin to iterate over colors and create CSS class for each one\n .make-color-classes(@i: length(@preset-colors)) when (@i > 0) {\n .make-color-classes(@i - 1);\n @color: extract(@preset-colors, @i);\n @darkColor: '@{color}-6';\n &-color-@{color} {\n color: @@darkColor;\n background: @@darkColor;\n }\n }\n .make-color-classes();\n\n // placement\n &.@{ribbon-prefix-cls}-placement-end {\n right: -8px;\n border-bottom-right-radius: 0;\n .@{ribbon-prefix-cls}-corner {\n right: 0;\n border-color: currentColor transparent transparent currentColor;\n }\n }\n\n &.@{ribbon-prefix-cls}-placement-start {\n left: -8px;\n border-bottom-left-radius: 0;\n .@{ribbon-prefix-cls}-corner {\n left: 0;\n border-color: currentColor currentColor transparent transparent;\n }\n }\n}\n",".@{badge-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-count,\n &-dot,\n .@{number-prefix-cls}-custom-component {\n .@{badge-prefix-cls}-rtl & {\n right: auto;\n left: 0;\n direction: ltr;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n }\n }\n\n .@{badge-prefix-cls}-rtl& .@{number-prefix-cls}-custom-component {\n right: auto;\n left: 0;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n }\n\n &-status {\n &-text {\n .@{badge-prefix-cls}-rtl & {\n margin-right: 8px;\n margin-left: 0;\n }\n }\n }\n\n &-zoom-appear,\n &-zoom-enter {\n .@{badge-prefix-cls}-rtl & {\n animation-name: antZoomBadgeInRtl;\n }\n }\n\n &-zoom-leave {\n .@{badge-prefix-cls}-rtl & {\n animation-name: antZoomBadgeOutRtl;\n }\n }\n\n &-not-a-wrapper {\n .@{badge-prefix-cls}-count {\n transform: none;\n }\n }\n}\n\n.@{ribbon-prefix-cls}-rtl {\n direction: rtl;\n &.@{ribbon-prefix-cls}-placement-end {\n right: unset;\n left: -8px;\n border-bottom-right-radius: @border-radius-sm;\n border-bottom-left-radius: 0;\n .@{ribbon-prefix-cls}-corner {\n right: unset;\n left: 0;\n border-color: currentColor currentColor transparent transparent;\n &::after {\n border-color: currentColor currentColor transparent transparent;\n }\n }\n }\n &.@{ribbon-prefix-cls}-placement-start {\n right: -8px;\n left: unset;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: @border-radius-sm;\n .@{ribbon-prefix-cls}-corner {\n right: 0;\n left: unset;\n border-color: currentColor transparent transparent currentColor;\n &::after {\n border-color: currentColor transparent transparent currentColor;\n }\n }\n }\n}\n\n@keyframes antZoomBadgeInRtl {\n 0% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(-50%, -50%);\n }\n}\n\n@keyframes antZoomBadgeOutRtl {\n 0% {\n transform: scale(1) translate(-50%, -50%);\n }\n 100% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@breadcrumb-prefix-cls: ~'@{ant-prefix}-breadcrumb';\n\n.@{breadcrumb-prefix-cls} {\n .reset-component();\n\n color: @breadcrumb-base-color;\n font-size: @breadcrumb-font-size;\n\n .@{iconfont-css-prefix} {\n font-size: @breadcrumb-icon-font-size;\n }\n\n a {\n color: @breadcrumb-link-color;\n transition: color 0.3s;\n &:hover {\n color: @breadcrumb-link-color-hover;\n }\n }\n\n & > span:last-child {\n color: @breadcrumb-last-item-color;\n a {\n color: @breadcrumb-last-item-color;\n }\n }\n\n & > span:last-child &-separator {\n display: none;\n }\n\n &-separator {\n margin: @breadcrumb-separator-margin;\n color: @breadcrumb-separator-color;\n }\n\n &-link {\n > .@{iconfont-css-prefix} + span,\n > .@{iconfont-css-prefix} + a {\n margin-left: 4px;\n }\n }\n\n &-overlay-link {\n > .@{iconfont-css-prefix} {\n margin-left: 4px;\n }\n }\n}\n\n@import './rtl';\n",".@{breadcrumb-prefix-cls} {\n &-rtl {\n .clearfix();\n direction: rtl;\n\n > span {\n float: right;\n }\n }\n\n &-link {\n > .@{iconfont-css-prefix} + span,\n > .@{iconfont-css-prefix} + a {\n .@{breadcrumb-prefix-cls}-rtl & {\n margin-right: 4px;\n margin-left: 0;\n }\n }\n }\n\n &-overlay-link {\n > .@{iconfont-css-prefix} {\n .@{breadcrumb-prefix-cls}-rtl & {\n margin-right: 4px;\n margin-left: 0;\n }\n }\n }\n}\n","@import './index';\n\n.@{menu-prefix-cls} {\n // Danger\n &-item-danger&-item {\n color: @menu-highlight-danger-color;\n\n &:hover,\n &-active {\n color: @menu-highlight-danger-color;\n }\n\n &:active {\n background: @menu-item-active-danger-bg;\n }\n\n &-selected {\n color: @menu-highlight-danger-color;\n > a,\n > a:hover {\n color: @menu-highlight-danger-color;\n }\n }\n\n .@{menu-prefix-cls}:not(.@{menu-prefix-cls}-horizontal) &-selected {\n background-color: @menu-item-active-danger-bg;\n }\n\n .@{menu-prefix-cls}-inline &::after {\n border-right-color: @menu-highlight-danger-color;\n }\n }\n\n // ==================== Dark ====================\n &-dark &-item-danger&-item {\n &,\n &:hover,\n & > a {\n color: @menu-dark-danger-color;\n }\n }\n\n &-dark&-dark:not(&-horizontal) &-item-danger&-item-selected {\n color: @menu-dark-highlight-color;\n background-color: @menu-dark-item-active-danger-bg;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './status';\n\n@menu-prefix-cls: ~'@{ant-prefix}-menu';\n@menu-animation-duration-normal: 0.15s;\n\n.accessibility-focus() {\n box-shadow: 0 0 0 2px fade(@primary-color, 20%);\n}\n\n// TODO: Should remove icon style compatible in v5\n\n// default theme\n.@{menu-prefix-cls} {\n .reset-component();\n\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n color: @menu-item-color;\n font-size: @menu-item-font-size;\n line-height: 0; // Fix display inline-block gap\n text-align: left;\n list-style: none;\n background: @menu-bg;\n outline: none;\n box-shadow: @box-shadow-base;\n transition: background @animation-duration-slow,\n width @animation-duration-slow cubic-bezier(0.2, 0, 0, 1) 0s;\n .clearfix();\n\n &&-root:focus-visible {\n .accessibility-focus();\n }\n\n ul,\n ol {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n // Overflow ellipsis\n &-overflow {\n display: flex;\n\n &-item {\n flex: none;\n }\n }\n\n &-hidden,\n &-submenu-hidden {\n display: none;\n }\n\n &-item-group-title {\n height: @menu-item-group-height;\n padding: 8px 16px;\n color: @menu-item-group-title-color;\n font-size: @menu-item-group-title-font-size;\n line-height: @menu-item-group-height;\n transition: all @animation-duration-slow;\n }\n\n &-horizontal &-submenu {\n transition: border-color @animation-duration-slow @ease-in-out,\n background @animation-duration-slow @ease-in-out;\n }\n &-submenu,\n &-submenu-inline {\n transition: border-color @animation-duration-slow @ease-in-out,\n background @animation-duration-slow @ease-in-out,\n padding @menu-animation-duration-normal @ease-in-out;\n }\n\n &-submenu-selected {\n color: @menu-highlight-color;\n }\n\n &-item:active,\n &-submenu-title:active {\n background: @menu-item-active-bg;\n }\n\n &-submenu &-sub {\n cursor: initial;\n transition: background @animation-duration-slow @ease-in-out,\n padding @animation-duration-slow @ease-in-out;\n }\n\n &-item a {\n color: @menu-item-color;\n &:hover {\n color: @menu-highlight-color;\n }\n &::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: transparent;\n content: '';\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/19809\n &-item > .@{ant-prefix}-badge a {\n color: @menu-item-color;\n &:hover {\n color: @menu-highlight-color;\n }\n }\n\n &-item-divider {\n height: 1px;\n overflow: hidden;\n line-height: 0;\n background-color: @border-color-split;\n }\n\n &-horizontal &-item,\n &-horizontal &-submenu {\n margin-top: -1px;\n }\n\n &-horizontal > &-item:hover,\n &-horizontal > &-item-active,\n &-horizontal > &-submenu &-submenu-title:hover {\n background-color: transparent;\n }\n\n &-item-selected {\n color: @menu-highlight-color;\n a,\n a:hover {\n color: @menu-highlight-color;\n }\n }\n\n &:not(&-horizontal) &-item-selected {\n background-color: @menu-item-active-bg;\n }\n\n &-inline,\n &-vertical,\n &-vertical-left {\n border-right: @border-width-base @border-style-base @border-color-split;\n }\n\n &-vertical-right {\n border-left: @border-width-base @border-style-base @border-color-split;\n }\n\n &-vertical&-sub,\n &-vertical-left&-sub,\n &-vertical-right&-sub {\n min-width: 160px;\n max-height: calc(100vh - 100px);\n padding: 0;\n overflow: hidden;\n border-right: 0;\n\n // https://github.com/ant-design/ant-design/issues/22244\n // https://github.com/ant-design/ant-design/issues/26812\n &:not([class*='-active']) {\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .@{menu-prefix-cls}-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n &::after {\n border-right: 0;\n }\n }\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu {\n transform-origin: 0 0;\n }\n }\n\n &-horizontal&-sub {\n min-width: 114px; // in case of submenu width is too big: https://codesandbox.io/s/qvpwm6mk66\n }\n\n &-horizontal &-item,\n &-horizontal &-submenu-title {\n transition: border-color @animation-duration-slow, background @animation-duration-slow;\n }\n\n &-item,\n &-submenu-title {\n position: relative;\n display: block;\n margin: 0;\n padding: @menu-item-padding;\n white-space: nowrap;\n cursor: pointer;\n transition: border-color @animation-duration-slow, background @animation-duration-slow,\n padding @animation-duration-slow @ease-in-out;\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n min-width: 14px;\n font-size: @menu-icon-size;\n transition: font-size @menu-animation-duration-normal @ease-out,\n margin @animation-duration-slow @ease-in-out, color @animation-duration-slow;\n + span {\n margin-left: @menu-icon-margin-right;\n opacity: 1;\n transition: opacity @animation-duration-slow @ease-in-out, margin @animation-duration-slow,\n color @animation-duration-slow;\n }\n }\n\n .@{menu-prefix-cls}-item-icon.svg {\n vertical-align: -0.125em;\n }\n\n &.@{menu-prefix-cls}-item-only-child {\n > .@{iconfont-css-prefix},\n > .@{menu-prefix-cls}-item-icon {\n margin-right: 0;\n }\n }\n\n &:focus-visible {\n .accessibility-focus();\n }\n }\n\n & > &-item-divider {\n height: 1px;\n margin: 1px 0;\n padding: 0;\n overflow: hidden;\n line-height: 0;\n background-color: @border-color-split;\n }\n\n &-submenu {\n &-popup {\n position: absolute;\n z-index: @zindex-dropdown;\n background: transparent;\n border-radius: @border-radius-base;\n box-shadow: none;\n transform-origin: 0 0;\n\n // https://github.com/ant-design/ant-design/issues/13955\n &::before {\n position: absolute;\n top: -7px;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n opacity: 0.0001;\n content: ' ';\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/13955\n &-placement-rightTop::before {\n top: 0;\n left: -7px;\n }\n\n > .@{menu-prefix-cls} {\n background-color: @menu-bg;\n border-radius: @border-radius-base;\n &-submenu-title::after {\n transition: transform @animation-duration-slow @ease-in-out;\n }\n }\n\n &-popup > .@{menu-prefix-cls} {\n background-color: @menu-popup-bg;\n }\n\n &-expand-icon,\n &-arrow {\n position: absolute;\n top: 50%;\n right: 16px;\n width: 10px;\n color: @menu-item-color;\n transform: translateY(-50%);\n transition: transform @animation-duration-slow @ease-in-out;\n }\n\n &-arrow {\n // →\n &::before,\n &::after {\n position: absolute;\n width: 6px;\n height: 1.5px;\n background-color: currentColor;\n border-radius: 2px;\n transition: background @animation-duration-slow @ease-in-out,\n transform @animation-duration-slow @ease-in-out, top @animation-duration-slow @ease-in-out,\n color @animation-duration-slow @ease-in-out;\n content: '';\n }\n &::before {\n transform: rotate(45deg) translateY(-2.5px);\n }\n &::after {\n transform: rotate(-45deg) translateY(2.5px);\n }\n }\n\n &:hover > &-title > &-expand-icon,\n &:hover > &-title > &-arrow {\n color: @menu-highlight-color;\n }\n\n .@{menu-prefix-cls}-inline-collapsed &-arrow,\n &-inline &-arrow {\n // ↓\n &::before {\n transform: rotate(-45deg) translateX(2.5px);\n }\n &::after {\n transform: rotate(45deg) translateX(-2.5px);\n }\n }\n\n &-horizontal &-arrow {\n display: none;\n }\n\n &-open&-inline > &-title > &-arrow {\n // ↑\n transform: translateY(-2px);\n &::after {\n transform: rotate(-45deg) translateX(-2.5px);\n }\n &::before {\n transform: rotate(45deg) translateX(2.5px);\n }\n }\n }\n\n &-vertical &-submenu-selected,\n &-vertical-left &-submenu-selected,\n &-vertical-right &-submenu-selected {\n color: @menu-highlight-color;\n }\n\n &-horizontal {\n line-height: @menu-horizontal-line-height;\n border: 0;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n box-shadow: none;\n\n &:not(.@{menu-prefix-cls}-dark) {\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu {\n margin-top: -1px;\n margin-bottom: 0;\n padding: @menu-item-padding;\n\n &:hover,\n &-active,\n &-open,\n &-selected {\n color: @menu-highlight-color;\n\n &::after {\n border-bottom: 2px solid @menu-highlight-color;\n }\n }\n }\n }\n\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu {\n position: relative;\n top: 1px;\n display: inline-block;\n vertical-align: bottom;\n\n &::after {\n position: absolute;\n right: @menu-item-padding-horizontal;\n bottom: 0;\n left: @menu-item-padding-horizontal;\n border-bottom: 2px solid transparent;\n transition: border-color @animation-duration-slow @ease-in-out;\n content: '';\n }\n }\n\n > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n padding: 0;\n }\n\n > .@{menu-prefix-cls}-item {\n a {\n color: @menu-item-color;\n &:hover {\n color: @menu-highlight-color;\n }\n &::before {\n bottom: -2px;\n }\n }\n &-selected a {\n color: @menu-highlight-color;\n }\n }\n\n &::after {\n display: block;\n clear: both;\n height: 0;\n content: '\\20';\n }\n }\n\n &-vertical,\n &-vertical-left,\n &-vertical-right,\n &-inline {\n .@{menu-prefix-cls}-item {\n position: relative;\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n border-right: @menu-item-active-border-width solid @menu-highlight-color;\n transform: scaleY(0.0001);\n opacity: 0;\n transition: transform @menu-animation-duration-normal @ease-out,\n opacity @menu-animation-duration-normal @ease-out;\n content: '';\n }\n }\n\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n height: @menu-item-height;\n margin-top: @menu-item-vertical-margin;\n margin-bottom: @menu-item-vertical-margin;\n padding: 0 16px;\n overflow: hidden;\n line-height: @menu-item-height;\n text-overflow: ellipsis;\n }\n\n // disable margin collapsed\n .@{menu-prefix-cls}-submenu {\n padding-bottom: 0.02px;\n }\n\n .@{menu-prefix-cls}-item:not(:last-child) {\n margin-bottom: @menu-item-boundary-margin;\n }\n\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n height: @menu-inline-toplevel-item-height;\n line-height: @menu-inline-toplevel-item-height;\n }\n }\n\n &-vertical {\n .@{menu-prefix-cls}-item-group-list .@{menu-prefix-cls}-submenu-title,\n .@{menu-prefix-cls}-submenu-title {\n padding-right: 34px;\n }\n }\n\n &-inline {\n width: 100%;\n .@{menu-prefix-cls}-selected,\n .@{menu-prefix-cls}-item-selected {\n &::after {\n transform: scaleY(1);\n opacity: 1;\n transition: transform @menu-animation-duration-normal @ease-in-out,\n opacity @menu-animation-duration-normal @ease-in-out;\n }\n }\n\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n width: ~'calc(100% + 1px)';\n }\n\n .@{menu-prefix-cls}-item-group-list .@{menu-prefix-cls}-submenu-title,\n .@{menu-prefix-cls}-submenu-title {\n padding-right: 34px;\n }\n\n // Motion enhance for first level\n &.@{menu-prefix-cls}-root {\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n display: flex;\n align-items: center;\n transition: border-color @animation-duration-slow, background @animation-duration-slow,\n padding 0.1s @ease-out;\n\n > .@{menu-prefix-cls}-title-content {\n flex: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n > * {\n flex: none;\n }\n }\n }\n }\n\n &&-inline-collapsed {\n width: @menu-collapsed-width;\n\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-item-group\n > .@{menu-prefix-cls}-item-group-list\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-item-group\n > .@{menu-prefix-cls}-item-group-list\n > .@{menu-prefix-cls}-submenu\n > .@{menu-prefix-cls}-submenu-title,\n > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n left: 0;\n padding: 0 ~'calc(50% - @{menu-icon-size-lg} / 2)';\n text-overflow: clip;\n\n .@{menu-prefix-cls}-submenu-arrow {\n opacity: 0;\n }\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n margin: 0;\n font-size: @menu-icon-size-lg;\n line-height: @menu-item-height;\n + span {\n display: inline-block;\n opacity: 0;\n }\n }\n }\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n display: inline-block;\n }\n\n &-tooltip {\n pointer-events: none;\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n display: none;\n }\n a {\n color: @text-color-dark;\n }\n }\n\n .@{menu-prefix-cls}-item-group-title {\n padding-right: 4px;\n padding-left: 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n\n &-item-group-list {\n margin: 0;\n padding: 0;\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n padding: 0 16px 0 28px;\n }\n }\n\n &-root&-vertical,\n &-root&-vertical-left,\n &-root&-vertical-right,\n &-root&-inline {\n box-shadow: none;\n }\n\n &-root&-inline-collapsed {\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu .@{menu-prefix-cls}-submenu-title {\n > .@{menu-prefix-cls}-inline-collapsed-noicon {\n font-size: @menu-icon-size-lg;\n text-align: center;\n }\n }\n }\n\n &-sub&-inline {\n padding: 0;\n background: @menu-inline-submenu-bg;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n & > .@{menu-prefix-cls}-item,\n & > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n height: @menu-item-height;\n line-height: @menu-item-height;\n list-style-position: inside;\n list-style-type: disc;\n }\n\n & .@{menu-prefix-cls}-item-group-title {\n padding-left: 32px;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &-item-disabled,\n &-submenu-disabled {\n color: @disabled-color !important;\n background: none;\n cursor: not-allowed;\n\n &::after {\n border-color: transparent !important;\n }\n\n a {\n color: @disabled-color !important;\n pointer-events: none;\n }\n > .@{menu-prefix-cls}-submenu-title {\n color: @disabled-color !important;\n cursor: not-allowed;\n > .@{menu-prefix-cls}-submenu-arrow {\n &::before,\n &::after {\n background: @disabled-color !important;\n }\n }\n }\n }\n}\n\n// Integration with header element so menu items have the same height\n.@{ant-prefix}-layout-header {\n .@{menu-prefix-cls} {\n line-height: inherit;\n }\n}\n\n@import './light';\n@import './dark';\n@import './rtl';\n",".@{menu-prefix-cls} {\n // light theme\n &-light {\n .@{menu-prefix-cls}-item:hover,\n .@{menu-prefix-cls}-item-active,\n .@{menu-prefix-cls}:not(.@{menu-prefix-cls}-inline) .@{menu-prefix-cls}-submenu-open,\n .@{menu-prefix-cls}-submenu-active,\n .@{menu-prefix-cls}-submenu-title:hover {\n color: @menu-highlight-color;\n }\n }\n}\n",".@{menu-prefix-cls} {\n // dark theme\n &&-dark,\n &-dark &-sub,\n &&-dark &-sub {\n color: @menu-dark-color;\n background: @menu-dark-bg;\n .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow {\n opacity: 0.45;\n transition: all 0.3s;\n &::after,\n &::before {\n background: @menu-dark-arrow-color;\n }\n }\n }\n\n &-dark&-submenu-popup {\n background: transparent;\n }\n\n &-dark &-inline&-sub {\n background: @menu-dark-inline-submenu-bg;\n }\n\n &-dark&-horizontal {\n border-bottom: 0;\n }\n\n &-dark&-horizontal > &-item,\n &-dark&-horizontal > &-submenu {\n top: 0;\n margin-top: 0;\n padding: @menu-item-padding;\n border-color: @menu-dark-bg;\n border-bottom: 0;\n }\n\n &-dark&-horizontal > &-item:hover {\n background-color: @menu-dark-item-active-bg;\n }\n\n &-dark&-horizontal > &-item > a::before {\n bottom: 0;\n }\n\n &-dark &-item,\n &-dark &-item-group-title,\n &-dark &-item > a,\n &-dark &-item > span > a {\n color: @menu-dark-color;\n }\n\n &-dark&-inline,\n &-dark&-vertical,\n &-dark&-vertical-left,\n &-dark&-vertical-right {\n border-right: 0;\n }\n\n &-dark&-inline &-item,\n &-dark&-vertical &-item,\n &-dark&-vertical-left &-item,\n &-dark&-vertical-right &-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n &::after {\n border-right: 0;\n }\n }\n\n &-dark&-inline &-item,\n &-dark&-inline &-submenu-title {\n width: 100%;\n }\n\n &-dark &-item:hover,\n &-dark &-item-active,\n &-dark &-submenu-active,\n &-dark &-submenu-open,\n &-dark &-submenu-selected,\n &-dark &-submenu-title:hover {\n color: @menu-dark-highlight-color;\n background-color: transparent;\n > a,\n > span > a {\n color: @menu-dark-highlight-color;\n }\n > .@{menu-prefix-cls}-submenu-title {\n > .@{menu-prefix-cls}-submenu-arrow {\n opacity: 1;\n &::after,\n &::before {\n background: @menu-dark-highlight-color;\n }\n }\n }\n }\n &-dark &-item:hover {\n background-color: @menu-dark-item-hover-bg;\n }\n\n &-dark&-dark:not(&-horizontal) &-item-selected {\n background-color: @menu-dark-item-active-bg;\n }\n\n &-dark &-item-selected {\n color: @menu-dark-highlight-color;\n border-right: 0;\n &::after {\n border-right: 0;\n }\n > a,\n > span > a,\n > a:hover,\n > span > a:hover {\n color: @menu-dark-highlight-color;\n }\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n color: @menu-dark-selected-item-icon-color;\n\n + span {\n color: @menu-dark-selected-item-text-color;\n }\n }\n }\n\n &&-dark &-item-selected,\n &-submenu-popup&-dark &-item-selected {\n background-color: @menu-dark-item-active-bg;\n }\n\n // Disabled state sets text to dark gray and nukes hover/tab effects\n &-dark &-item-disabled,\n &-dark &-submenu-disabled {\n &,\n > a,\n > span > a {\n color: @disabled-color-dark !important;\n opacity: 0.8;\n }\n > .@{menu-prefix-cls}-submenu-title {\n color: @disabled-color-dark !important;\n > .@{menu-prefix-cls}-submenu-arrow {\n &::before,\n &::after {\n background: @disabled-color-dark !important;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@menu-prefix-cls: ~'@{ant-prefix}-menu';\n\n.@{menu-prefix-cls} {\n &&-rtl {\n direction: rtl;\n text-align: right;\n }\n\n &-item-group-title {\n .@{menu-prefix-cls}-rtl & {\n text-align: right;\n }\n }\n\n &-inline,\n &-vertical {\n .@{menu-prefix-cls}-rtl& {\n border-right: none;\n border-left: @border-width-base @border-style-base @border-color-split;\n }\n }\n\n &-dark&-inline,\n &-dark&-vertical {\n .@{menu-prefix-cls}-rtl& {\n border-left: none;\n }\n }\n\n &-vertical&-sub,\n &-vertical-left&-sub,\n &-vertical-right&-sub {\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu {\n .@{menu-prefix-cls}-rtl& {\n transform-origin: top right;\n }\n }\n }\n\n &-item,\n &-submenu-title {\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n .@{menu-prefix-cls}-rtl & {\n margin-right: auto;\n margin-left: @menu-icon-margin-right;\n }\n }\n\n &.@{menu-prefix-cls}-item-only-child {\n > .@{menu-prefix-cls}-item-icon,\n > .@{iconfont-css-prefix} {\n .@{menu-prefix-cls}-rtl & {\n margin-left: 0;\n }\n }\n }\n }\n\n &-submenu {\n &-rtl.@{menu-prefix-cls}-submenu-popup {\n transform-origin: 100% 0;\n }\n\n &-vertical,\n &-vertical-left,\n &-vertical-right,\n &-inline {\n > .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow {\n .@{menu-prefix-cls}-rtl & {\n right: auto;\n left: 16px;\n }\n }\n }\n\n &-vertical,\n &-vertical-left,\n &-vertical-right {\n > .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow {\n &::before {\n .@{menu-prefix-cls}-rtl & {\n transform: rotate(-45deg) translateY(-2px);\n }\n }\n &::after {\n .@{menu-prefix-cls}-rtl & {\n transform: rotate(45deg) translateY(2px);\n }\n }\n }\n }\n }\n\n &-vertical,\n &-vertical-left,\n &-vertical-right,\n &-inline {\n .@{menu-prefix-cls}-item {\n &::after {\n .@{menu-prefix-cls}-rtl& {\n right: auto;\n left: 0;\n }\n }\n }\n\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl& {\n text-align: right;\n }\n }\n }\n\n &-inline {\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: 34px;\n }\n }\n }\n\n &-vertical {\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl& {\n padding-right: 16px;\n padding-left: 34px;\n }\n }\n }\n\n &-inline-collapsed&-vertical {\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl& {\n padding: 0 ~'calc(50% - @{menu-icon-size-lg} / 2)';\n }\n }\n }\n\n &-item-group-list {\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl & {\n padding: 0 28px 0 16px;\n }\n }\n }\n\n &-sub&-inline {\n border: 0;\n & .@{menu-prefix-cls}-item-group-title {\n .@{menu-prefix-cls}-rtl& {\n padding-right: 32px;\n padding-left: 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tooltip-prefix-cls: ~'@{ant-prefix}-tooltip';\n\n@tooltip-arrow-shadow-width: 3px;\n\n@tooltip-arrow-rotate-width: sqrt(@tooltip-arrow-width * @tooltip-arrow-width * 2) +\n @tooltip-arrow-shadow-width * 2;\n\n@tooltip-arrow-offset-vertical: 5px; // 8 - 3px\n@tooltip-arrow-offset-horizontal: 13px; // 16 - 3px\n\n// Base class\n.@{tooltip-prefix-cls} {\n .reset-component();\n\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n width: max-content;\n max-width: @tooltip-max-width;\n visibility: visible;\n\n &-hidden {\n display: none;\n }\n\n &-placement-top,\n &-placement-topLeft,\n &-placement-topRight {\n padding-bottom: @tooltip-distance;\n }\n\n &-placement-right,\n &-placement-rightTop,\n &-placement-rightBottom {\n padding-left: @tooltip-distance;\n }\n\n &-placement-bottom,\n &-placement-bottomLeft,\n &-placement-bottomRight {\n padding-top: @tooltip-distance;\n }\n\n &-placement-left,\n &-placement-leftTop,\n &-placement-leftBottom {\n padding-right: @tooltip-distance;\n }\n\n // Wrapper for the tooltip content\n &-inner {\n min-width: 30px;\n min-height: 32px;\n padding: 6px 8px;\n color: @tooltip-color;\n text-align: left;\n text-decoration: none;\n word-wrap: break-word;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n box-shadow: @box-shadow-base;\n }\n\n // Arrows\n &-arrow {\n position: absolute;\n display: block;\n width: @tooltip-arrow-rotate-width;\n height: @tooltip-arrow-rotate-width;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n\n &-content {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n width: @tooltip-arrow-width;\n height: @tooltip-arrow-width;\n margin: auto;\n background-color: @tooltip-bg;\n content: '';\n pointer-events: auto;\n }\n }\n\n &-placement-top &-arrow,\n &-placement-topLeft &-arrow,\n &-placement-topRight &-arrow {\n bottom: @tooltip-distance - @tooltip-arrow-rotate-width;\n\n &-content {\n box-shadow: @tooltip-arrow-shadow-width @tooltip-arrow-shadow-width 7px fade(@black, 7%);\n transform: translateY((-@tooltip-arrow-rotate-width / 2)) rotate(45deg);\n }\n }\n\n &-placement-top &-arrow {\n left: 50%;\n transform: translateX(-50%);\n }\n\n &-placement-topLeft &-arrow {\n left: @tooltip-arrow-offset-horizontal;\n }\n\n &-placement-topRight &-arrow {\n right: @tooltip-arrow-offset-horizontal;\n }\n\n &-placement-right &-arrow,\n &-placement-rightTop &-arrow,\n &-placement-rightBottom &-arrow {\n left: @tooltip-distance - @tooltip-arrow-rotate-width;\n\n &-content {\n box-shadow: -@tooltip-arrow-shadow-width @tooltip-arrow-shadow-width 7px fade(@black, 7%);\n transform: translateX((@tooltip-arrow-rotate-width / 2)) rotate(45deg);\n }\n }\n\n &-placement-right &-arrow {\n top: 50%;\n transform: translateY(-50%);\n }\n\n &-placement-rightTop &-arrow {\n top: @tooltip-arrow-offset-vertical;\n }\n\n &-placement-rightBottom &-arrow {\n bottom: @tooltip-arrow-offset-vertical;\n }\n\n &-placement-left &-arrow,\n &-placement-leftTop &-arrow,\n &-placement-leftBottom &-arrow {\n right: @tooltip-distance - @tooltip-arrow-rotate-width;\n\n &-content {\n box-shadow: @tooltip-arrow-shadow-width -@tooltip-arrow-shadow-width 7px fade(@black, 7%);\n transform: translateX((-@tooltip-arrow-rotate-width / 2)) rotate(45deg);\n }\n }\n\n &-placement-left &-arrow {\n top: 50%;\n transform: translateY(-50%);\n }\n\n &-placement-leftTop &-arrow {\n top: @tooltip-arrow-offset-vertical;\n }\n\n &-placement-leftBottom &-arrow {\n bottom: @tooltip-arrow-offset-vertical;\n }\n\n &-placement-bottom &-arrow,\n &-placement-bottomLeft &-arrow,\n &-placement-bottomRight &-arrow {\n top: @tooltip-distance - @tooltip-arrow-rotate-width;\n\n &-content {\n box-shadow: -@tooltip-arrow-shadow-width -@tooltip-arrow-shadow-width 7px fade(@black, 7%);\n transform: translateY((@tooltip-arrow-rotate-width / 2)) rotate(45deg);\n }\n }\n\n &-placement-bottom &-arrow {\n left: 50%;\n transform: translateX(-50%);\n }\n\n &-placement-bottomLeft &-arrow {\n left: @tooltip-arrow-offset-horizontal;\n }\n\n &-placement-bottomRight &-arrow {\n right: @tooltip-arrow-offset-horizontal;\n }\n}\n\n.generator-tooltip-preset-color(@i: length(@preset-colors)) when (@i > 0) {\n .generator-tooltip-preset-color(@i - 1);\n @color: extract(@preset-colors, @i);\n @lightColor: '@{color}-6';\n .@{tooltip-prefix-cls}-@{color} {\n .@{tooltip-prefix-cls}-inner {\n background-color: @@lightColor;\n }\n .@{tooltip-prefix-cls}-arrow {\n &-content {\n background-color: @@lightColor;\n }\n }\n }\n}\n.generator-tooltip-preset-color();\n\n@import './rtl';\n","@tooltip-prefix-cls: ~'@{ant-prefix}-tooltip';\n\n// Base class\n.@{tooltip-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n // Wrapper for the tooltip content\n &-inner {\n .@{tooltip-prefix-cls}-rtl & {\n text-align: right;\n }\n }\n}\n","@import './index';\n\n.@{dropdown-prefix-cls}-menu-item {\n &&-danger {\n color: @error-color;\n\n &:hover {\n color: @text-color-inverse;\n background-color: @error-color;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './status';\n\n@dropdown-prefix-cls: ~'@{ant-prefix}-dropdown';\n\n.@{dropdown-prefix-cls} {\n .reset-component();\n\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: @zindex-dropdown;\n display: block;\n\n &::before {\n position: absolute;\n top: -@popover-distance + @popover-arrow-width;\n right: 0;\n bottom: -@popover-distance + @popover-arrow-width;\n left: -7px;\n z-index: -9999;\n opacity: 0.0001;\n content: ' ';\n }\n\n &-wrap {\n position: relative;\n\n .@{ant-prefix}-btn > .@{iconfont-css-prefix}-down {\n font-size: 10px;\n }\n\n .@{iconfont-css-prefix}-down::before {\n transition: transform @animation-duration-base;\n }\n }\n\n &-wrap-open {\n .@{iconfont-css-prefix}-down::before {\n transform: rotate(180deg);\n }\n }\n\n &-hidden,\n &-menu-hidden,\n &-menu-submenu-hidden {\n display: none;\n }\n\n // Offset the popover to account for the dropdown arrow\n &-show-arrow&-placement-topCenter,\n &-show-arrow&-placement-topLeft,\n &-show-arrow&-placement-topRight {\n padding-bottom: @popover-distance;\n }\n\n &-show-arrow&-placement-bottomCenter,\n &-show-arrow&-placement-bottomLeft,\n &-show-arrow&-placement-bottomRight {\n padding-top: @popover-distance;\n }\n\n // Arrows\n // .popover-arrow is outer, .popover-arrow:after is inner\n\n &-arrow {\n position: absolute;\n z-index: 1; // lift it up so the menu wouldn't cask shadow on it\n display: block;\n width: sqrt(@popover-arrow-width * @popover-arrow-width * 2);\n height: sqrt(@popover-arrow-width * @popover-arrow-width * 2);\n background: transparent;\n border-style: solid;\n border-width: (sqrt(@popover-arrow-width * @popover-arrow-width * 2) / 2);\n transform: rotate(45deg);\n }\n\n &-placement-topCenter > &-arrow,\n &-placement-topLeft > &-arrow,\n &-placement-topRight > &-arrow {\n bottom: @popover-distance - @popover-arrow-width + 2.2px;\n border-top-color: transparent;\n border-right-color: @popover-bg;\n border-bottom-color: @popover-bg;\n border-left-color: transparent;\n box-shadow: 3px 3px 7px fade(@black, 7%);\n }\n &-placement-topCenter > &-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n }\n &-placement-topLeft > &-arrow {\n left: 16px;\n }\n &-placement-topRight > &-arrow {\n right: 16px;\n }\n\n &-placement-bottomCenter > &-arrow,\n &-placement-bottomLeft > &-arrow,\n &-placement-bottomRight > &-arrow {\n top: @popover-distance - @popover-arrow-width + 2px;\n border-top-color: @popover-bg;\n border-right-color: transparent;\n border-bottom-color: transparent;\n border-left-color: @popover-bg;\n box-shadow: -2px -2px 5px fade(@black, 6%);\n }\n &-placement-bottomCenter > &-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n }\n &-placement-bottomLeft > &-arrow {\n left: 16px;\n }\n &-placement-bottomRight > &-arrow {\n right: 16px;\n }\n\n &-menu {\n position: relative;\n margin: 0;\n padding: @dropdown-edge-child-vertical-padding 0;\n text-align: left;\n list-style-type: none;\n background-color: @dropdown-menu-bg;\n background-clip: padding-box;\n border-radius: @border-radius-base;\n outline: none;\n box-shadow: @box-shadow-base;\n\n &-item-group-title {\n padding: 5px @control-padding-horizontal;\n color: @text-color-secondary;\n transition: all @animation-duration-slow;\n }\n\n &-submenu-popup {\n position: absolute;\n z-index: @zindex-dropdown;\n background: transparent;\n box-shadow: none;\n transform-origin: 0 0;\n\n ul,\n li {\n list-style: none;\n }\n\n ul {\n margin-right: 0.3em;\n margin-left: 0.3em;\n }\n }\n\n // ======================= Item Content =======================\n &-item {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n &-item-icon {\n min-width: 12px;\n margin-right: 8px;\n font-size: @font-size-sm;\n }\n\n &-title-content {\n flex: auto;\n\n > a {\n color: inherit;\n transition: all @animation-duration-slow;\n\n &:hover {\n color: inherit;\n }\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n content: '';\n }\n }\n }\n\n // =========================== Item ===========================\n &-item,\n &-submenu-title {\n clear: both;\n margin: 0;\n padding: @dropdown-vertical-padding @control-padding-horizontal;\n color: @text-color;\n font-weight: normal;\n font-size: @dropdown-font-size;\n line-height: @dropdown-line-height;\n white-space: nowrap;\n cursor: pointer;\n transition: all @animation-duration-slow;\n\n &:first-child {\n & when (@dropdown-edge-child-vertical-padding = 0) {\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n }\n\n &:last-child {\n & when (@dropdown-edge-child-vertical-padding = 0) {\n border-radius: 0 0 @border-radius-base @border-radius-base;\n }\n }\n\n &-selected {\n color: @dropdown-selected-color;\n background-color: @item-active-bg;\n }\n\n &:hover {\n background-color: @item-hover-bg;\n }\n\n &-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n\n &:hover {\n color: @disabled-color;\n background-color: @dropdown-menu-submenu-disabled-bg;\n cursor: not-allowed;\n }\n\n a {\n pointer-events: none;\n }\n }\n\n &-divider {\n height: 1px;\n margin: 4px 0;\n overflow: hidden;\n line-height: 0;\n background-color: @border-color-split;\n }\n\n .@{dropdown-prefix-cls}-menu-submenu-expand-icon {\n position: absolute;\n right: @padding-xs;\n\n .@{dropdown-prefix-cls}-menu-submenu-arrow-icon {\n margin-right: 0 !important;\n color: @text-color-secondary;\n font-size: 10px;\n font-style: normal;\n }\n }\n }\n\n &-item-group-list {\n margin: 0 8px;\n padding: 0;\n list-style: none;\n }\n\n &-submenu-title {\n padding-right: @control-padding-horizontal + @font-size-sm;\n }\n\n &-submenu-vertical {\n position: relative;\n }\n\n &-submenu-vertical > & {\n position: absolute;\n top: 0;\n left: 100%;\n min-width: 100%;\n margin-left: 4px;\n transform-origin: 0 0;\n }\n\n &-submenu&-submenu-disabled .@{dropdown-prefix-cls}-menu-submenu-title {\n &,\n .@{dropdown-prefix-cls}-menu-submenu-arrow-icon {\n color: @disabled-color;\n background-color: @dropdown-menu-submenu-disabled-bg;\n cursor: not-allowed;\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/19264\n &-submenu-selected &-submenu-title {\n color: @primary-color;\n }\n }\n\n &.@{ant-prefix}-slide-down-enter.@{ant-prefix}-slide-down-enter-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-down-appear.@{ant-prefix}-slide-down-appear-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-down-enter.@{ant-prefix}-slide-down-enter-active&-placement-bottomCenter,\n &.@{ant-prefix}-slide-down-appear.@{ant-prefix}-slide-down-appear-active&-placement-bottomCenter,\n &.@{ant-prefix}-slide-down-enter.@{ant-prefix}-slide-down-enter-active&-placement-bottomRight,\n &.@{ant-prefix}-slide-down-appear.@{ant-prefix}-slide-down-appear-active&-placement-bottomRight {\n animation-name: antSlideUpIn;\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topCenter,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topCenter,\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topRight,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topRight {\n animation-name: antSlideDownIn;\n }\n\n &.@{ant-prefix}-slide-down-leave.@{ant-prefix}-slide-down-leave-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-down-leave.@{ant-prefix}-slide-down-leave-active&-placement-bottomCenter,\n &.@{ant-prefix}-slide-down-leave.@{ant-prefix}-slide-down-leave-active&-placement-bottomRight {\n animation-name: antSlideUpOut;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topCenter,\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topRight {\n animation-name: antSlideDownOut;\n }\n}\n\n.@{dropdown-prefix-cls}-trigger,\n.@{dropdown-prefix-cls}-link,\n.@{dropdown-prefix-cls}-button {\n > .@{iconfont-css-prefix}.@{iconfont-css-prefix}-down {\n font-size: 10px;\n vertical-align: baseline;\n }\n}\n\n.@{dropdown-prefix-cls}-button {\n white-space: nowrap;\n\n &.@{ant-prefix}-btn-group\n > .@{ant-prefix}-btn:last-child:not(:first-child):not(.@{ant-prefix}-btn-icon-only) {\n padding-right: @padding-xs;\n padding-left: @padding-xs;\n }\n}\n\n// https://github.com/ant-design/ant-design/issues/4903\n.@{dropdown-prefix-cls}-menu-dark {\n &,\n .@{dropdown-prefix-cls}-menu {\n background: @menu-dark-bg;\n }\n .@{dropdown-prefix-cls}-menu-item,\n .@{dropdown-prefix-cls}-menu-submenu-title,\n .@{dropdown-prefix-cls}-menu-item > a,\n .@{dropdown-prefix-cls}-menu-item > .@{iconfont-css-prefix} + span > a {\n color: @text-color-secondary-dark;\n .@{dropdown-prefix-cls}-menu-submenu-arrow::after {\n color: @text-color-secondary-dark;\n }\n &:hover {\n color: @text-color-inverse;\n background: transparent;\n }\n }\n .@{dropdown-prefix-cls}-menu-item-selected {\n &,\n &:hover,\n > a {\n color: @text-color-inverse;\n background: @primary-color;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@dropdown-prefix-cls: ~'@{ant-prefix}-dropdown';\n\n.@{dropdown-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &::before {\n .@{dropdown-prefix-cls}-rtl& {\n right: -7px;\n left: 0;\n }\n }\n\n &-menu {\n &&-rtl {\n direction: rtl;\n text-align: right;\n }\n\n &-item-group-title {\n .@{dropdown-prefix-cls}-rtl & {\n direction: rtl;\n text-align: right;\n }\n }\n\n &-submenu-popup {\n &.@{dropdown-prefix-cls}-menu-submenu-rtl {\n transform-origin: 100% 0;\n }\n\n ul,\n li {\n .@{dropdown-prefix-cls}-rtl & {\n text-align: right;\n }\n }\n }\n\n &-item,\n &-submenu-title {\n .@{dropdown-prefix-cls}-rtl & {\n text-align: right;\n }\n\n > .@{iconfont-css-prefix}:first-child,\n > span > .@{iconfont-css-prefix}:first-child {\n .@{dropdown-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 8px;\n }\n }\n\n .@{dropdown-prefix-cls}-menu-submenu-arrow {\n .@{dropdown-prefix-cls}-rtl & {\n right: auto;\n left: @padding-xs;\n }\n\n &-icon {\n .@{dropdown-prefix-cls}-rtl & {\n margin-left: 0 !important;\n transform: scaleX(-1);\n }\n }\n }\n }\n\n &-submenu-title {\n .@{dropdown-prefix-cls}-rtl & {\n padding-right: @control-padding-horizontal;\n padding-left: @control-padding-horizontal + @font-size-sm;\n }\n }\n\n &-submenu-vertical > & {\n .@{dropdown-prefix-cls}-rtl & {\n right: 100%;\n left: 0;\n margin-right: 4px;\n margin-left: 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './mixin';\n\n@btn-prefix-cls: ~'@{ant-prefix}-btn';\n\n// for compatible\n@btn-ghost-color: @text-color;\n@btn-ghost-bg: transparent;\n@btn-ghost-border: @border-color-base;\n\n// Button styles\n// -----------------------------\n.@{btn-prefix-cls} {\n // Fixing https://github.com/ant-design/ant-design/issues/12978\n // Fixing https://github.com/ant-design/ant-design/issues/20058\n // Fixing https://github.com/ant-design/ant-design/issues/19972\n // Fixing https://github.com/ant-design/ant-design/issues/18107\n // Fixing https://github.com/ant-design/ant-design/issues/13214\n // It is a render problem of chrome, which is only happened in the codesandbox demo\n // 0.001px solution works and I don't why\n line-height: @btn-line-height;\n .btn();\n .btn-default();\n\n // Fix loading button animation\n // https://github.com/ant-design/ant-design/issues/24323\n > span {\n display: inline-block;\n }\n\n &-primary {\n .btn-primary();\n\n .@{btn-prefix-cls}-group &:not(:first-child):not(:last-child) {\n border-right-color: @btn-group-border;\n border-left-color: @btn-group-border;\n\n &:disabled {\n border-color: @btn-default-border;\n }\n }\n\n .@{btn-prefix-cls}-group &:first-child {\n &:not(:last-child) {\n border-right-color: @btn-group-border;\n\n &[disabled] {\n border-right-color: @btn-default-border;\n }\n }\n }\n\n .@{btn-prefix-cls}-group &:last-child:not(:first-child),\n .@{btn-prefix-cls}-group & + & {\n border-left-color: @btn-group-border;\n\n &[disabled] {\n border-left-color: @btn-default-border;\n }\n }\n }\n\n &-ghost {\n .btn-ghost();\n }\n\n &-dashed {\n .btn-dashed();\n }\n\n // type=\"danger\" will deprecated\n // use danger instead\n &-danger {\n .btn-danger();\n }\n\n &-link {\n .btn-link();\n }\n\n &-text {\n .btn-text();\n }\n\n &-dangerous {\n .btn-danger-default();\n }\n\n &-dangerous&-primary {\n .btn-danger();\n }\n\n &-dangerous&-link {\n .btn-danger-link();\n }\n\n &-dangerous&-text {\n .btn-danger-text();\n }\n\n &-icon-only {\n .btn-square(@btn-prefix-cls);\n vertical-align: -1px;\n }\n\n &-round {\n .btn-round(@btn-prefix-cls);\n &.@{btn-prefix-cls}-icon-only {\n width: auto;\n }\n }\n\n &-circle {\n .btn-circle(@btn-prefix-cls);\n }\n\n &::before {\n position: absolute;\n top: -@btn-border-width;\n right: -@btn-border-width;\n bottom: -@btn-border-width;\n left: -@btn-border-width;\n z-index: 1;\n display: none;\n background: @component-background;\n border-radius: inherit;\n opacity: 0.35;\n transition: opacity 0.2s;\n content: '';\n pointer-events: none;\n }\n\n .@{iconfont-css-prefix} {\n transition: margin-left 0.3s @ease-in-out;\n\n // Follow icon blur under windows. Change the render.\n // https://github.com/ant-design/ant-design/issues/13924\n &.@{iconfont-css-prefix}-plus,\n &.@{iconfont-css-prefix}-minus {\n > svg {\n shape-rendering: optimizeSpeed;\n }\n }\n }\n\n &&-loading {\n position: relative;\n &:not([disabled]) {\n pointer-events: none;\n }\n\n &::before {\n display: block;\n }\n }\n\n & > &-loading-icon {\n transition: all 0.3s @ease-in-out;\n\n .@{iconfont-css-prefix} {\n padding-right: @padding-xs;\n animation: none;\n // for smooth button padding transition\n svg {\n animation: loadingCircle 1s infinite linear;\n }\n }\n\n &:only-child {\n .@{iconfont-css-prefix} {\n padding-right: 0;\n }\n }\n }\n\n &-group {\n .btn-group(@btn-prefix-cls);\n }\n\n // http://stackoverflow.com/a/21281554/3040605\n &:focus > span,\n &:active > span {\n position: relative;\n }\n\n // To ensure that a space will be placed between character and `Icon`.\n > .@{iconfont-css-prefix} + span,\n > span + .@{iconfont-css-prefix} {\n margin-left: @margin-xs;\n }\n\n &-background-ghost {\n color: @btn-default-ghost-color;\n background: @btn-default-ghost-bg !important;\n border-color: @btn-default-ghost-border;\n }\n\n &-background-ghost&-primary {\n .button-variant-ghost(@btn-primary-bg);\n }\n\n &-background-ghost&-danger {\n .button-variant-ghost(@btn-danger-border);\n }\n\n &-background-ghost&-dangerous {\n .button-variant-ghost(@btn-danger-border);\n }\n\n &-background-ghost&-dangerous&-link {\n .button-variant-ghost(@btn-danger-border, transparent);\n }\n\n &-two-chinese-chars::first-letter {\n letter-spacing: 0.34em;\n }\n\n &-two-chinese-chars > *:not(.@{iconfont-css-prefix}) {\n margin-right: -0.34em;\n letter-spacing: 0.34em;\n }\n\n &-block {\n width: 100%;\n }\n\n // https://github.com/ant-design/ant-design/issues/12681\n // same method as Select\n &:empty {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n }\n}\n\na.@{btn-prefix-cls} {\n // Fixing https://github.com/ant-design/ant-design/issues/12978\n // https://github.com/ant-design/ant-design/issues/29978\n // It is a render problem of chrome, which is only happened in the codesandbox demo\n // 0.1px for padding-top solution works and I don't why\n padding-top: 0.01px !important;\n line-height: @btn-height-base - 2px;\n\n &-lg {\n line-height: @btn-height-lg - 2px;\n }\n &-sm {\n line-height: @btn-height-sm - 2px;\n }\n}\n\n@import './rtl';\n","// mixins for button\n// ------------------------\n.button-size(@height; @padding-horizontal; @font-size; @border-radius) {\n @padding-vertical: max(\n (round(((@height - @font-size * @line-height-base) / 2) * 10) / 10) - @border-width-base,\n 0\n );\n height: @height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n border-radius: @border-radius;\n}\n\n.button-disabled(@color: @btn-disable-color; @background: @btn-disable-bg; @border: @btn-disable-border) {\n &[disabled] {\n &,\n &:hover,\n &:focus,\n &:active {\n .button-color(@color; @background; @border);\n\n text-shadow: none;\n box-shadow: none;\n }\n }\n}\n\n.button-variant-primary(@color; @background) {\n .button-color(@color; @background; @background);\n\n text-shadow: @btn-text-shadow;\n box-shadow: @btn-primary-shadow;\n\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(\n @color; ~`colorPalette('@{background}', 7) `; ~`colorPalette('@{background}', 7) `\n );\n }\n & when not (@theme = dark) {\n .button-color(\n @color; ~`colorPalette('@{background}', 5) `; ~`colorPalette('@{background}', 5) `\n );\n }\n }\n\n &:active {\n & when (@theme = dark) {\n .button-color(\n @color; ~`colorPalette('@{background}', 5) `; ~`colorPalette('@{background}', 5) `\n );\n }\n & when not (@theme = dark) {\n .button-color(\n @color; ~`colorPalette('@{background}', 7) `; ~`colorPalette('@{background}', 7) `\n );\n }\n }\n\n .button-disabled();\n}\n\n.button-variant-other(@color; @background; @border) {\n .button-color(@color; @background; @border);\n\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(@primary-5; @background; @primary-5);\n }\n & when not (@theme = dark) {\n .button-color(\n ~`colorPalette('@{btn-primary-bg}', 5) `; @background;\n ~`colorPalette('@{btn-primary-bg}', 5) `\n );\n }\n }\n &:active {\n & when (@theme = dark) {\n .button-color(@primary-7; @background; @primary-7);\n }\n & when not (@theme = dark) {\n .button-color(\n ~`colorPalette('@{btn-primary-bg}', 7) `; @background;\n ~`colorPalette('@{btn-primary-bg}', 7) `\n );\n }\n }\n .button-disabled();\n}\n.button-variant-ghost(@color; @border: @color) {\n .button-color(@color; transparent; @border);\n text-shadow: none;\n &:hover,\n &:focus {\n & when (@border = transparent) {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{color}', 7) `; transparent; transparent);\n }\n & when not (@theme = dark) {\n .button-color(~`colorPalette('@{color}', 5) `; transparent; transparent);\n }\n }\n & when not (@border = transparent) {\n & when (@theme = dark) {\n .button-color(\n ~`colorPalette('@{color}', 7) `; transparent; ~`colorPalette('@{color}', 7) `\n );\n }\n & when not (@theme = dark) {\n .button-color(\n ~`colorPalette('@{color}', 5) `; transparent; ~`colorPalette('@{color}', 5) `\n );\n }\n }\n }\n &:active {\n & when (@border = transparent) {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{color}', 5) `; transparent; transparent);\n }\n & when not (@theme = dark) {\n .button-color(~`colorPalette('@{color}', 7) `; transparent; transparent);\n }\n }\n & when not(@border = transparent) {\n & when (@theme = dark) {\n .button-color(\n ~`colorPalette('@{color}', 5) `; transparent; ~`colorPalette('@{color}', 5) `\n );\n }\n & when not (@theme = dark) {\n .button-color(\n ~`colorPalette('@{color}', 7) `; transparent; ~`colorPalette('@{color}', 7) `\n );\n }\n }\n }\n .button-disabled();\n}\n.button-color(@color; @background; @border) {\n color: @color;\n background: @background;\n border-color: @border; // a inside Button which only work in Chrome\n // http://stackoverflow.com/a/17253457\n > a:only-child {\n color: currentColor;\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n }\n }\n}\n.button-group-base(@btnClassName) {\n position: relative;\n display: inline-flex;\n > .@{btnClassName},\n > span > .@{btnClassName} {\n position: relative;\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n &[disabled] {\n z-index: 0;\n }\n }\n .@{btnClassName}-icon-only {\n font-size: @font-size-base;\n }\n // size\n &-lg > .@{btnClassName},\n &-lg > span > .@{btnClassName} {\n .button-size(@btn-height-lg; @btn-padding-horizontal-lg; @btn-font-size-lg; 0);\n }\n &-lg .@{btnClassName}.@{btnClassName}-icon-only {\n .square(@btn-height-lg);\n padding-right: 0;\n padding-left: 0;\n }\n &-sm > .@{btnClassName},\n &-sm > span > .@{btnClassName} {\n .button-size(@btn-height-sm; @btn-padding-horizontal-sm; @font-size-base; 0);\n > .@{iconfont-css-prefix} {\n font-size: @font-size-base;\n }\n }\n &-sm .@{btnClassName}.@{btnClassName}-icon-only {\n .square(@btn-height-sm);\n padding-right: 0;\n padding-left: 0;\n }\n}\n// Base styles of buttons\n// --------------------------------------------------\n.btn() {\n position: relative;\n display: inline-block;\n font-weight: @btn-font-weight;\n white-space: nowrap;\n text-align: center;\n background-image: none;\n border: @btn-border-width @btn-border-style transparent;\n box-shadow: @btn-shadow;\n cursor: pointer;\n transition: all 0.3s @ease-in-out;\n user-select: none;\n touch-action: manipulation;\n .button-size(\n @btn-height-base; @btn-padding-horizontal-base; @font-size-base; @btn-border-radius-base\n );\n > .@{iconfont-css-prefix} {\n line-height: 1;\n }\n &,\n &:active,\n &:focus {\n outline: 0;\n }\n &:not([disabled]):hover {\n text-decoration: none;\n }\n &:not([disabled]):active {\n outline: 0;\n box-shadow: none;\n }\n &[disabled] {\n cursor: not-allowed;\n > * {\n pointer-events: none;\n }\n }\n &-lg {\n .button-size(\n @btn-height-lg; @btn-padding-horizontal-lg; @btn-font-size-lg; @btn-border-radius-base\n );\n }\n &-sm {\n .button-size(\n @btn-height-sm; @btn-padding-horizontal-sm; @btn-font-size-sm; @btn-border-radius-sm\n );\n }\n}\n// primary button style\n.btn-primary() {\n .button-variant-primary(@btn-primary-color; @btn-primary-bg);\n}\n// default button style\n.btn-default() {\n .button-variant-other(@btn-default-color; @btn-default-bg; @btn-default-border);\n &:hover,\n &:focus,\n &:active {\n text-decoration: none;\n background: @btn-default-bg;\n }\n}\n// ghost button style\n.btn-ghost() {\n .button-variant-other(@btn-ghost-color, @btn-ghost-bg, @btn-ghost-border);\n}\n// dashed button style\n.btn-dashed() {\n .button-variant-other(@btn-default-color, @btn-default-bg, @btn-default-border);\n border-style: dashed;\n}\n// danger button style\n.btn-danger() {\n .button-variant-primary(@btn-danger-color, @btn-danger-bg);\n}\n// danger default button style\n.btn-danger-default() {\n .button-color(@error-color, @btn-default-bg, @error-color);\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(\n ~`colorPalette('@{error-color}', 7) `; @btn-default-bg; ~`colorPalette('@{error-color}', 7)\n `\n );\n }\n & when not (@theme = dark) {\n .button-color(\n ~`colorPalette('@{error-color}', 5) `; @btn-default-bg; ~`colorPalette('@{error-color}', 5)\n `\n );\n }\n }\n &:active {\n & when (@theme = dark) {\n .button-color(\n ~`colorPalette('@{error-color}', 5) `; @btn-default-bg; ~`colorPalette('@{error-color}', 5)\n `\n );\n }\n & when not (@theme = dark) {\n .button-color(\n ~`colorPalette('@{error-color}', 7) `; @btn-default-bg; ~`colorPalette('@{error-color}', 7)\n `\n );\n }\n }\n .button-disabled();\n}\n// danger link button style\n.btn-danger-link() {\n .button-variant-other(@error-color, transparent, transparent);\n box-shadow: none;\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 7) `; transparent; transparent);\n }\n & when not (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 5) `; transparent; transparent);\n }\n }\n &:active {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 5) `; transparent; transparent);\n }\n & when not (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 7) `; transparent; transparent);\n }\n }\n .button-disabled(@disabled-color; transparent; transparent);\n}\n// link button style\n.btn-link() {\n .button-variant-other(@link-color, transparent, transparent);\n box-shadow: none;\n &:hover {\n background: @btn-link-hover-bg;\n }\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n .button-disabled(@disabled-color; transparent; transparent);\n}\n// text button style\n.btn-text() {\n .button-variant-other(@text-color, transparent, transparent);\n box-shadow: none;\n &:hover,\n &:focus {\n color: @text-color;\n background: @btn-text-hover-bg;\n border-color: transparent;\n }\n\n &:active {\n color: @text-color;\n background: fadein(@btn-text-hover-bg, 1%);\n border-color: transparent;\n }\n\n .button-disabled(@disabled-color; transparent; transparent);\n}\n.btn-danger-text() {\n .button-variant-other(@error-color, transparent, transparent);\n box-shadow: none;\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 7) `; @btn-text-hover-bg; transparent);\n }\n & when not (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 5) `; @btn-text-hover-bg; transparent);\n }\n }\n\n &:active {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 5) `; fadein(@btn-text-hover-bg, 1%); transparent);\n }\n & when not (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 7) `; fadein(@btn-text-hover-bg, 1%); transparent);\n }\n }\n .button-disabled(@disabled-color; transparent; transparent);\n}\n// round button\n.btn-round(@btnClassName: btn) {\n .button-size(@btn-circle-size; (@btn-circle-size / 2); @font-size-base; @btn-circle-size);\n &.@{btnClassName}-lg {\n .button-size(\n @btn-circle-size-lg; (@btn-circle-size-lg / 2); @btn-font-size-lg; @btn-circle-size-lg\n );\n }\n &.@{btnClassName}-sm {\n .button-size(\n @btn-circle-size-sm; (@btn-circle-size-sm / 2); @font-size-base; @btn-circle-size-sm\n );\n }\n}\n// square button: the content only contains icon\n.btn-square(@btnClassName: btn) {\n .square(@btn-square-size);\n .button-size(@btn-square-size; 0; @btn-square-only-icon-size; @btn-border-radius-base);\n & > * {\n font-size: @btn-square-only-icon-size;\n }\n &.@{btnClassName}-lg {\n .square(@btn-square-size-lg);\n .button-size(@btn-square-size-lg; 0; @btn-square-only-icon-size-lg; @btn-border-radius-base);\n & > * {\n font-size: @btn-square-only-icon-size-lg;\n }\n }\n &.@{btnClassName}-sm {\n .square(@btn-square-size-sm);\n .button-size(@btn-square-size-sm; 0; @btn-square-only-icon-size-sm; @btn-border-radius-base);\n & > * {\n font-size: @btn-square-only-icon-size-sm;\n }\n }\n}\n// circle button: the content only contains icon\n.btn-circle(@btnClassName: btn) {\n min-width: @btn-height-base;\n padding-right: 0;\n padding-left: 0;\n text-align: center;\n border-radius: 50%;\n &.@{btnClassName}-lg {\n min-width: @btn-height-lg;\n border-radius: 50%;\n }\n &.@{btnClassName}-sm {\n min-width: @btn-height-sm;\n border-radius: 50%;\n }\n}\n// Horizontal button groups style\n// --------------------------------------------------\n.btn-group(@btnClassName: btn) {\n .button-group-base(@btnClassName);\n .@{btnClassName} + .@{btnClassName},\n .@{btnClassName} + &,\n span + .@{btnClassName},\n .@{btnClassName} + span,\n > span + span,\n & + .@{btnClassName},\n & + & {\n margin-left: -1px;\n }\n .@{btnClassName}-primary + .@{btnClassName}:not(.@{btnClassName}-primary):not([disabled]) {\n border-left-color: transparent;\n }\n .@{btnClassName} {\n border-radius: 0;\n }\n > .@{btnClassName}:first-child,\n > span:first-child > .@{btnClassName} {\n margin-left: 0;\n }\n > .@{btnClassName}:only-child {\n border-radius: @btn-border-radius-base;\n }\n > span:only-child > .@{btnClassName} {\n border-radius: @btn-border-radius-base;\n }\n > .@{btnClassName}:first-child:not(:last-child),\n > span:first-child:not(:last-child) > .@{btnClassName} {\n border-top-left-radius: @btn-border-radius-base;\n border-bottom-left-radius: @btn-border-radius-base;\n }\n > .@{btnClassName}:last-child:not(:first-child),\n > span:last-child:not(:first-child) > .@{btnClassName} {\n border-top-right-radius: @btn-border-radius-base;\n border-bottom-right-radius: @btn-border-radius-base;\n }\n &-sm {\n > .@{btnClassName}:only-child {\n border-radius: @btn-border-radius-sm;\n }\n > span:only-child > .@{btnClassName} {\n border-radius: @btn-border-radius-sm;\n }\n > .@{btnClassName}:first-child:not(:last-child),\n > span:first-child:not(:last-child) > .@{btnClassName} {\n border-top-left-radius: @btn-border-radius-sm;\n border-bottom-left-radius: @btn-border-radius-sm;\n }\n > .@{btnClassName}:last-child:not(:first-child),\n > span:last-child:not(:first-child) > .@{btnClassName} {\n border-top-right-radius: @btn-border-radius-sm;\n border-bottom-right-radius: @btn-border-radius-sm;\n }\n }\n & > & {\n float: left;\n }\n & > &:not(:first-child):not(:last-child) > .@{btnClassName} {\n border-radius: 0;\n }\n & > &:first-child:not(:last-child) {\n > .@{btnClassName}:last-child {\n padding-right: 8px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n & > &:last-child:not(:first-child) > .@{btnClassName}:first-child {\n padding-left: 8px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n}\n",".@{btn-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-primary {\n .@{btn-prefix-cls}-group &:last-child:not(:first-child),\n .@{btn-prefix-cls}-group & + & {\n .@{btn-prefix-cls}-group-rtl& {\n border-right-color: @btn-group-border;\n border-left-color: @btn-default-border;\n }\n &[disabled] {\n .@{btn-prefix-cls}-group-rtl& {\n border-right-color: @btn-default-border;\n border-left-color: @btn-group-border;\n }\n }\n }\n }\n\n & > &-loading-icon {\n .@{iconfont-css-prefix} {\n .@{btn-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: @margin-xs;\n }\n }\n\n &:only-child {\n .@{iconfont-css-prefix} {\n padding-right: 0;\n padding-left: 0;\n }\n }\n }\n\n > .@{iconfont-css-prefix} + span,\n > span + .@{iconfont-css-prefix} {\n .@{btn-prefix-cls}-rtl& {\n margin-right: 8px;\n margin-left: 0;\n }\n }\n}\n\n// mixin\n.btn-group(@btnClassName: btn) {\n .@{btnClassName} + .@{btnClassName},\n .@{btnClassName} + &,\n span + .@{btnClassName},\n .@{btnClassName} + span,\n > span + span,\n & + .@{btnClassName},\n & + & {\n .@{btnClassName}-rtl&,\n .@{btnClassName}-group-rtl& {\n margin-right: -1px;\n margin-left: auto;\n }\n }\n\n &.@{btnClassName}-group-rtl {\n direction: rtl;\n }\n\n > .@{btnClassName}:first-child:not(:last-child),\n > span:first-child:not(:last-child) > .@{btnClassName} {\n .@{btnClassName}-group-rtl& {\n border-top-left-radius: 0;\n border-top-right-radius: @btn-border-radius-base;\n border-bottom-right-radius: @btn-border-radius-base;\n border-bottom-left-radius: 0;\n }\n }\n\n > .@{btnClassName}:last-child:not(:first-child),\n > span:last-child:not(:first-child) > .@{btnClassName} {\n .@{btnClassName}-group-rtl& {\n border-top-left-radius: @btn-border-radius-base;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: @btn-border-radius-base;\n }\n }\n\n &-sm {\n > .@{btnClassName}:first-child:not(:last-child),\n > span:first-child:not(:last-child) > .@{btnClassName} {\n .@{btnClassName}-group-rtl& {\n border-top-left-radius: 0;\n border-top-right-radius: @btn-border-radius-sm;\n border-bottom-right-radius: @btn-border-radius-sm;\n border-bottom-left-radius: 0;\n }\n }\n\n > .@{btnClassName}:last-child:not(:first-child),\n > span:last-child:not(:first-child) > .@{btnClassName} {\n .@{btnClassName}-group-rtl& {\n border-top-left-radius: @btn-border-radius-sm;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: @btn-border-radius-sm;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@calendar-prefix-cls: ~'@{ant-prefix}-picker-calendar';\n@calendar-picker-prefix-cls: ~'@{ant-prefix}-picker';\n\n.@{calendar-prefix-cls} {\n .reset-component();\n background: @calendar-full-bg;\n\n // ========================= Header =========================\n &-header {\n display: flex;\n justify-content: flex-end;\n padding: @padding-sm 0;\n\n .@{calendar-prefix-cls}-year-select {\n min-width: 80px;\n }\n\n .@{calendar-prefix-cls}-month-select {\n min-width: 70px;\n margin-left: @padding-xs;\n }\n\n .@{calendar-prefix-cls}-mode-switch {\n margin-left: @padding-xs;\n }\n }\n\n .@{calendar-picker-prefix-cls}-panel {\n background: @calendar-full-panel-bg;\n border: 0;\n border-top: @border-width-base @border-style-base @border-color-split;\n border-radius: 0;\n\n .@{calendar-picker-prefix-cls}-month-panel,\n .@{calendar-picker-prefix-cls}-date-panel {\n width: auto;\n }\n\n .@{calendar-picker-prefix-cls}-body {\n padding: @padding-xs 0;\n }\n\n .@{calendar-picker-prefix-cls}-content {\n width: 100%;\n }\n }\n\n // ========================== Mini ==========================\n &-mini {\n border-radius: @border-radius-base;\n\n .@{calendar-picker-prefix-cls}-calendar-header {\n padding-right: @padding-xs;\n padding-left: @padding-xs;\n }\n\n .@{calendar-picker-prefix-cls}-panel {\n border-radius: 0 0 @border-radius-base @border-radius-base;\n }\n\n .@{calendar-picker-prefix-cls}-content {\n height: 256px;\n\n th {\n height: auto;\n padding: 0;\n line-height: 18px;\n }\n }\n }\n\n // ========================== Full ==========================\n &-full {\n .@{calendar-picker-prefix-cls}-panel {\n display: block;\n width: 100%;\n text-align: right;\n background: @calendar-full-bg;\n border: 0;\n\n .@{calendar-picker-prefix-cls}-body {\n th,\n td {\n padding: 0;\n }\n\n th {\n height: auto;\n padding: 0 12px 5px 0;\n line-height: 18px;\n }\n }\n\n // Cell\n .@{calendar-picker-prefix-cls}-cell {\n &::before {\n display: none;\n }\n\n &:hover {\n .@{calendar-prefix-cls}-date {\n background: @item-hover-bg;\n }\n }\n\n .@{calendar-prefix-cls}-date-today::before {\n display: none;\n }\n\n &-selected,\n &-selected:hover {\n .@{calendar-prefix-cls}-date,\n .@{calendar-prefix-cls}-date-today {\n background: @calendar-item-active-bg;\n\n .@{calendar-prefix-cls}-date-value {\n color: @primary-color;\n }\n }\n }\n }\n\n // Cell date\n .@{calendar-prefix-cls}-date {\n display: block;\n width: auto;\n height: auto;\n margin: 0 (@padding-xs / 2);\n padding: (@padding-xs / 2) @padding-xs 0;\n border: 0;\n border-top: 2px solid @border-color-split;\n border-radius: 0;\n transition: background 0.3s;\n\n &-value {\n line-height: 24px;\n transition: color 0.3s;\n }\n\n &-content {\n position: static;\n width: auto;\n height: 86px;\n overflow-y: auto;\n color: @text-color;\n line-height: @line-height-base;\n text-align: left;\n }\n\n &-today {\n border-color: @primary-color;\n\n .@{calendar-prefix-cls}-date-value {\n color: @text-color;\n }\n }\n }\n }\n }\n}\n\n@media only screen and (max-width: @screen-xs) {\n .@{calendar-prefix-cls} {\n &-header {\n display: block;\n\n .@{calendar-prefix-cls}-year-select {\n width: 50%;\n }\n\n .@{calendar-prefix-cls}-month-select {\n width: ~'calc(50% - @{padding-xs})';\n }\n\n .@{calendar-prefix-cls}-mode-switch {\n width: 100%;\n margin-top: @padding-xs;\n margin-left: 0;\n\n > label {\n width: 50%;\n text-align: center;\n }\n }\n }\n }\n}\n\n@import './rtl';\n",".@{calendar-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-header {\n .@{calendar-prefix-cls}-month-select {\n .@{calendar-prefix-cls}-rtl & {\n margin-right: @padding-xs;\n margin-left: 0;\n }\n }\n\n .@{calendar-prefix-cls}-mode-switch {\n .@{calendar-prefix-cls}-rtl & {\n margin-right: @padding-xs;\n margin-left: 0;\n }\n }\n }\n\n // ========================== Full ==========================\n &-full {\n .@{calendar-picker-prefix-cls}-panel {\n .@{calendar-prefix-cls}-rtl& {\n text-align: left;\n }\n\n .@{calendar-picker-prefix-cls}-body {\n th {\n .@{calendar-prefix-cls}-rtl& {\n padding: 0 0 5px 12px;\n }\n }\n }\n\n .@{calendar-prefix-cls}-date {\n &-content {\n .@{calendar-prefix-cls}-rtl& {\n text-align: right;\n }\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@radio-prefix-cls: ~'@{ant-prefix}-radio';\n@radio-group-prefix-cls: ~'@{radio-prefix-cls}-group';\n@radio-inner-prefix-cls: ~'@{radio-prefix-cls}-inner';\n@radio-duration: 0.3s;\n@radio-focus-shadow: 0 0 0 3px fade(@radio-dot-color, 8%);\n@radio-button-focus-shadow: @radio-focus-shadow;\n\n.@{radio-group-prefix-cls} {\n .reset-component();\n\n display: inline-block;\n font-size: 0;\n line-height: unset;\n\n .@{ant-prefix}-badge-count {\n z-index: 1;\n }\n\n > .@{ant-prefix}-badge:not(:first-child) > .@{radio-prefix-cls}-button-wrapper {\n border-left: none;\n }\n}\n\n// 一般状态\n.@{radio-prefix-cls}-wrapper {\n .reset-component();\n position: relative;\n display: inline-flex;\n align-items: baseline;\n margin-right: @radio-wrapper-margin-right;\n cursor: pointer;\n\n &::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n }\n}\n\n.@{radio-prefix-cls} {\n .reset-component();\n\n position: relative;\n top: @radio-top;\n display: inline-block;\n outline: none;\n cursor: pointer;\n\n .@{radio-prefix-cls}-wrapper:hover &,\n &:hover .@{radio-inner-prefix-cls},\n &-input:focus + .@{radio-inner-prefix-cls} {\n border-color: @radio-dot-color;\n }\n\n &-input:focus + .@{radio-inner-prefix-cls} {\n box-shadow: @radio-focus-shadow;\n }\n\n &-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid @radio-dot-color;\n border-radius: 50%;\n visibility: hidden;\n animation: antRadioEffect 0.36s ease-in-out;\n animation-fill-mode: both;\n content: '';\n }\n\n &:hover::after,\n .@{radio-prefix-cls}-wrapper:hover &::after {\n visibility: visible;\n }\n\n &-inner {\n &::after {\n position: absolute;\n top: ((@radio-size - @radio-dot-size) / 2) - @radio-border-width;\n left: ((@radio-size - @radio-dot-size) / 2) - @radio-border-width;\n display: block;\n width: @radio-dot-size;\n height: @radio-dot-size;\n background-color: @radio-dot-color;\n border-top: 0;\n border-left: 0;\n border-radius: @radio-dot-size;\n transform: scale(0);\n opacity: 0;\n transition: all @radio-duration @ease-in-out-circ;\n content: ' ';\n }\n\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: @radio-size;\n height: @radio-size;\n background-color: @radio-button-bg;\n border-color: @border-color-base;\n border-style: solid;\n border-width: @radio-border-width;\n border-radius: 50%;\n transition: all @radio-duration;\n }\n\n &-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n cursor: pointer;\n opacity: 0;\n }\n}\n\n// 选中状态\n.@{radio-prefix-cls}-checked {\n .@{radio-inner-prefix-cls} {\n border-color: @radio-dot-color;\n &::after {\n transform: scale(1);\n opacity: 1;\n transition: all @radio-duration @ease-in-out-circ;\n }\n }\n}\n\n.@{radio-prefix-cls}-disabled {\n cursor: not-allowed;\n\n .@{radio-inner-prefix-cls} {\n background-color: @input-disabled-bg;\n border-color: @border-color-base !important;\n cursor: not-allowed;\n &::after {\n background-color: @radio-dot-disabled-color;\n }\n }\n\n .@{radio-prefix-cls}-input {\n cursor: not-allowed;\n }\n\n & + span {\n color: @disabled-color;\n cursor: not-allowed;\n }\n}\n\nspan.@{radio-prefix-cls} + * {\n padding-right: 8px;\n padding-left: 8px;\n}\n\n.@{radio-prefix-cls}-button-wrapper {\n position: relative;\n display: inline-block;\n height: @btn-height-base;\n margin: 0;\n padding: 0 @padding-md - 1px;\n color: @radio-button-color;\n font-size: @font-size-base;\n line-height: @btn-height-base - 2px;\n background: @radio-button-bg;\n border: @border-width-base @border-style-base @border-color-base;\n // strange align fix for chrome but works\n // https://gw.alipayobjects.com/zos/rmsportal/VFTfKXJuogBAXcvfAUWJ.gif\n border-top-width: @border-width-base + 0.02px;\n border-left-width: 0;\n cursor: pointer;\n transition: color 0.3s, background 0.3s, border-color 0.3s, box-shadow 0.3s;\n\n a {\n color: @radio-button-color;\n }\n\n > .@{radio-prefix-cls}-button {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n }\n\n .@{radio-group-prefix-cls}-large & {\n height: @input-height-lg;\n font-size: @font-size-lg;\n line-height: @input-height-lg - 2px;\n }\n\n .@{radio-group-prefix-cls}-small & {\n height: @input-height-sm;\n padding: 0 @control-padding-horizontal-sm - 1px;\n line-height: @input-height-sm - 2px;\n }\n\n &:not(:first-child) {\n &::before {\n position: absolute;\n top: @border-width-base * -1;\n left: -1px;\n display: block;\n box-sizing: content-box;\n width: 1px;\n height: 100%;\n padding: @border-width-base 0;\n background-color: @border-color-base;\n transition: background-color 0.3s;\n content: '';\n }\n }\n\n &:first-child {\n border-left: @border-width-base @border-style-base @border-color-base;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n\n &:last-child {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n\n &:first-child:last-child {\n border-radius: @border-radius-base;\n }\n\n &:hover {\n position: relative;\n color: @radio-dot-color;\n }\n\n &:focus-within {\n box-shadow: @radio-button-focus-shadow;\n }\n\n .@{radio-prefix-cls}-inner,\n input[type='checkbox'],\n input[type='radio'] {\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: none;\n }\n\n &-checked:not(&-disabled) {\n z-index: 1;\n color: @radio-dot-color;\n background: @radio-button-checked-bg;\n border-color: @radio-dot-color;\n\n &::before {\n background-color: @radio-dot-color;\n }\n\n &:first-child {\n border-color: @radio-dot-color;\n }\n\n &:hover {\n color: @radio-button-hover-color;\n border-color: @radio-button-hover-color;\n &::before {\n background-color: @radio-button-hover-color;\n }\n }\n\n &:active {\n color: @radio-button-active-color;\n border-color: @radio-button-active-color;\n &::before {\n background-color: @radio-button-active-color;\n }\n }\n\n &:focus-within {\n box-shadow: @radio-button-focus-shadow;\n }\n }\n\n .@{radio-group-prefix-cls}-solid &-checked:not(&-disabled) {\n color: @radio-solid-checked-color;\n background: @radio-dot-color;\n border-color: @radio-dot-color;\n &:hover {\n color: @radio-solid-checked-color;\n background: @radio-button-hover-color;\n border-color: @radio-button-hover-color;\n }\n &:active {\n color: @radio-solid-checked-color;\n background: @radio-button-active-color;\n border-color: @radio-button-active-color;\n }\n &:focus-within {\n box-shadow: @radio-button-focus-shadow;\n }\n }\n\n &-disabled {\n color: @disabled-color;\n background-color: @input-disabled-bg;\n border-color: @border-color-base;\n cursor: not-allowed;\n\n &:first-child,\n &:hover {\n color: @disabled-color;\n background-color: @input-disabled-bg;\n border-color: @border-color-base;\n }\n &:first-child {\n border-left-color: @border-color-base;\n }\n }\n\n &-disabled&-checked {\n color: @radio-disabled-button-checked-color;\n background-color: @radio-disabled-button-checked-bg;\n border-color: @border-color-base;\n box-shadow: none;\n }\n}\n\n@keyframes antRadioEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@radio-prefix-cls: ~'@{ant-prefix}-radio';\n@radio-group-prefix-cls: ~'@{radio-prefix-cls}-group';\n@radio-prefix-cls-button-wrapper: ~'@{radio-prefix-cls}-button-wrapper';\n\n.@{radio-group-prefix-cls} {\n &&-rtl {\n direction: rtl;\n }\n}\n\n// 一般状态\n.@{radio-prefix-cls}-wrapper {\n &&-rtl {\n margin-right: 0;\n margin-left: @radio-wrapper-margin-right;\n direction: rtl;\n }\n}\n\n.@{radio-prefix-cls-button-wrapper} {\n &&-rtl {\n border-right-width: 0;\n border-left-width: @border-width-base;\n }\n\n &:not(:first-child) {\n &::before {\n .@{radio-prefix-cls-button-wrapper}.@{radio-prefix-cls-button-wrapper}-rtl& {\n right: -1px;\n left: 0;\n }\n }\n }\n\n &:first-child {\n .@{radio-prefix-cls-button-wrapper}.@{radio-prefix-cls-button-wrapper}-rtl& {\n border-right: @border-width-base @border-style-base @border-color-base;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n .@{radio-prefix-cls-button-wrapper}-checked:not([class*=~\"' @{radio-prefix-cls}-button-wrapper-disabled'\"])& {\n border-right-color: @radio-button-hover-color;\n }\n }\n\n &:last-child {\n .@{radio-prefix-cls-button-wrapper}.@{radio-prefix-cls-button-wrapper}-rtl& {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n &-disabled {\n &:first-child {\n .@{radio-prefix-cls-button-wrapper}.@{radio-prefix-cls-button-wrapper}-rtl& {\n border-right-color: @border-color-base;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@picker-prefix-cls: ~'@{ant-prefix}-picker';\n\n.picker-padding(@input-height, @font-size, @padding-horizontal) {\n // font height probably 22.0001, So use floor better\n @font-height: floor(@font-size * @line-height-base) + 2;\n @padding-top: max(((@input-height - @font-height) / 2), 0);\n @padding-bottom: max(@input-height - @font-height - @padding-top, 0);\n padding: @padding-top @padding-horizontal @padding-bottom;\n}\n\n.@{picker-prefix-cls} {\n @arrow-size: 10px;\n\n .reset-component();\n .picker-padding(@input-height-base, @font-size-base, @input-padding-horizontal-base);\n position: relative;\n display: inline-flex;\n align-items: center;\n background: @picker-bg;\n border: @border-width-base @border-style-base @select-border-color;\n border-radius: @border-radius-base;\n transition: border @animation-duration-slow, box-shadow @animation-duration-slow;\n\n &:hover,\n &-focused {\n .hover();\n }\n\n &-focused {\n .active();\n }\n\n &&-disabled {\n background: @input-disabled-bg;\n border-color: @select-border-color;\n cursor: not-allowed;\n }\n\n &&-disabled &-suffix {\n color: @disabled-color;\n }\n\n &&-borderless {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n }\n\n // ======================== Input =========================\n &-input {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n\n > input {\n .input();\n flex: auto;\n\n // Fix Firefox flex not correct:\n // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553\n min-width: 1px;\n height: auto;\n padding: 0;\n background: transparent;\n\n border: 0;\n\n &:focus {\n box-shadow: none;\n }\n\n &[disabled] {\n background: transparent;\n }\n }\n\n &:hover {\n .@{picker-prefix-cls}-clear {\n opacity: 1;\n }\n }\n\n &-placeholder {\n > input {\n color: @input-placeholder-color;\n }\n }\n }\n\n // Size\n &-large {\n .picker-padding(@input-height-lg, @font-size-lg, @input-padding-horizontal-lg);\n\n .@{picker-prefix-cls}-input > input {\n font-size: @font-size-lg;\n }\n }\n\n &-small {\n .picker-padding(@input-height-sm, @font-size-base, @input-padding-horizontal-sm);\n }\n\n &-suffix {\n align-self: center;\n margin-left: (@padding-xs / 2);\n color: @disabled-color;\n line-height: 1;\n pointer-events: none;\n\n > * {\n vertical-align: top;\n }\n }\n\n &-clear {\n position: absolute;\n top: 50%;\n right: 0;\n color: @disabled-color;\n line-height: 1;\n background: @component-background;\n transform: translateY(-50%);\n cursor: pointer;\n opacity: 0;\n transition: opacity @animation-duration-slow, color @animation-duration-slow;\n\n > * {\n vertical-align: top;\n }\n\n &:hover {\n color: @text-color-secondary;\n }\n }\n\n &-separator {\n position: relative;\n display: inline-block;\n width: 1em;\n height: @font-size-lg;\n color: @disabled-color;\n font-size: @font-size-lg;\n vertical-align: top;\n cursor: default;\n\n .@{picker-prefix-cls}-focused & {\n color: @text-color-secondary;\n }\n\n .@{picker-prefix-cls}-range-separator & {\n .@{picker-prefix-cls}-disabled & {\n cursor: not-allowed;\n }\n }\n }\n\n // ======================== Range =========================\n &-range {\n position: relative;\n display: inline-flex;\n\n // Clear\n .@{picker-prefix-cls}-clear {\n right: @input-padding-horizontal-base;\n }\n\n &:hover {\n .@{picker-prefix-cls}-clear {\n opacity: 1;\n }\n }\n\n // Active bar\n .@{picker-prefix-cls}-active-bar {\n bottom: -@border-width-base;\n height: 2px;\n margin-left: @input-padding-horizontal-base;\n background: @primary-color;\n opacity: 0;\n transition: all @animation-duration-slow ease-out;\n pointer-events: none;\n }\n\n &.@{picker-prefix-cls}-focused {\n .@{picker-prefix-cls}-active-bar {\n opacity: 1;\n }\n }\n\n &-separator {\n align-items: center;\n padding: 0 @padding-xs;\n line-height: 1;\n }\n\n &.@{picker-prefix-cls}-small {\n .@{picker-prefix-cls}-clear {\n right: @input-padding-horizontal-sm;\n }\n\n .@{picker-prefix-cls}-active-bar {\n margin-left: @input-padding-horizontal-sm;\n }\n }\n }\n\n // ======================= Dropdown =======================\n &-dropdown {\n .reset-component();\n position: absolute;\n z-index: @zindex-picker;\n\n &-hidden {\n display: none;\n }\n\n &-placement-bottomLeft {\n .@{picker-prefix-cls}-range-arrow {\n top: (@arrow-size / 2) - (@arrow-size / 3);\n display: block;\n transform: rotate(-45deg);\n }\n }\n\n &-placement-topLeft {\n .@{picker-prefix-cls}-range-arrow {\n bottom: (@arrow-size / 2) - (@arrow-size / 3);\n display: block;\n transform: rotate(135deg);\n }\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topRight,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topRight {\n animation-name: antSlideDownIn;\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomRight,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomRight {\n animation-name: antSlideUpIn;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topRight {\n animation-name: antSlideDownOut;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomRight {\n animation-name: antSlideUpOut;\n }\n }\n\n &-dropdown-range {\n padding: (@arrow-size * 2 / 3) 0;\n\n &-hidden {\n display: none;\n }\n }\n\n // Time picker with additional style\n &-dropdown &-panel > &-time-panel {\n padding-top: (@padding-xs / 2);\n }\n\n // ======================== Ranges ========================\n &-ranges {\n margin-bottom: 0;\n padding: (@padding-xs / 2) @padding-sm;\n overflow: hidden;\n line-height: @picker-text-height - 2 * @border-width-base - (@padding-xs / 2);\n text-align: left;\n list-style: none;\n\n > li {\n display: inline-block;\n }\n\n // https://github.com/ant-design/ant-design/issues/23687\n .@{picker-prefix-cls}-preset > .@{ant-prefix}-tag-blue {\n color: @primary-color;\n background: @primary-1;\n border-color: @primary-3;\n cursor: pointer;\n }\n\n .@{picker-prefix-cls}-ok {\n float: right;\n margin-left: @padding-xs;\n }\n }\n\n &-range-wrapper {\n display: flex;\n }\n\n &-range-arrow {\n position: absolute;\n z-index: 1;\n display: none;\n width: @arrow-size;\n height: @arrow-size;\n margin-left: @input-padding-horizontal-base * 1.5;\n box-shadow: 2px -2px 6px fade(@black, 6%);\n transition: left @animation-duration-slow ease-out;\n\n &::after {\n position: absolute;\n top: @border-width-base;\n right: @border-width-base;\n width: @arrow-size;\n height: @arrow-size;\n border: (@arrow-size / 2) solid @border-color-split;\n border-color: @calendar-bg @calendar-bg transparent transparent;\n content: '';\n }\n }\n\n &-panel-container {\n overflow: hidden;\n vertical-align: top;\n background: @calendar-bg;\n border-radius: @border-radius-base;\n box-shadow: @box-shadow-base;\n transition: margin @animation-duration-slow;\n\n .@{picker-prefix-cls}-panels {\n display: inline-flex;\n flex-wrap: nowrap;\n direction: ltr;\n }\n\n .@{picker-prefix-cls}-panel {\n vertical-align: top;\n background: transparent;\n border-width: 0 0 @border-width-base 0;\n border-radius: 0;\n\n &-focused {\n border-color: @border-color-split;\n }\n }\n }\n}\n\n@import './panel';\n@import './rtl';\n","// Compatibility for browsers.\n\n// Placeholder text\n.placeholder(@color: @input-placeholder-color) {\n // Firefox\n &::-moz-placeholder {\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n\n &::placeholder {\n color: @color;\n }\n\n &:placeholder-shown {\n text-overflow: ellipsis;\n }\n}\n","@picker-cell-inner-cls: ~'@{picker-prefix-cls}-cell-inner';\n\n.@{picker-prefix-cls} {\n @picker-arrow-size: 7px;\n @picker-year-month-cell-width: 60px;\n @picker-panel-width: @picker-panel-cell-width * 7 + @padding-sm * 2 + 4;\n\n &-panel {\n display: inline-flex;\n flex-direction: column;\n text-align: center;\n background: @calendar-bg;\n border: @border-width-base @border-style-base @picker-border-color;\n border-radius: @border-radius-base;\n outline: none;\n\n &-focused {\n border-color: @primary-color;\n }\n }\n\n // ========================================================\n // = Shared Panel =\n // ========================================================\n &-decade-panel,\n &-year-panel,\n &-quarter-panel,\n &-month-panel,\n &-week-panel,\n &-date-panel,\n &-time-panel {\n display: flex;\n flex-direction: column;\n width: @picker-panel-width;\n }\n\n // ======================= Header =======================\n &-header {\n display: flex;\n padding: 0 @padding-xs;\n color: @heading-color;\n border-bottom: @border-width-base @border-style-base @picker-border-color;\n\n > * {\n flex: none;\n }\n\n button {\n padding: 0;\n color: @disabled-color;\n line-height: @picker-text-height;\n background: transparent;\n border: 0;\n cursor: pointer;\n transition: color @animation-duration-slow;\n }\n\n > button {\n min-width: 1.6em;\n font-size: @font-size-base;\n\n &:hover {\n color: @text-color;\n }\n }\n\n &-view {\n flex: auto;\n font-weight: 500;\n line-height: @picker-text-height;\n\n button {\n color: inherit;\n font-weight: inherit;\n\n &:not(:first-child) {\n margin-left: @padding-xs;\n }\n\n &:hover {\n color: @primary-color;\n }\n }\n }\n }\n\n // Arrow button\n &-prev-icon,\n &-next-icon,\n &-super-prev-icon,\n &-super-next-icon {\n position: relative;\n display: inline-block;\n width: @picker-arrow-size;\n height: @picker-arrow-size;\n\n &::before {\n position: absolute;\n top: 0;\n left: 0;\n display: inline-block;\n width: @picker-arrow-size;\n height: @picker-arrow-size;\n border: 0 solid currentColor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n }\n }\n\n &-super-prev-icon,\n &-super-next-icon {\n &::after {\n position: absolute;\n top: ceil((@picker-arrow-size / 2));\n left: ceil((@picker-arrow-size / 2));\n display: inline-block;\n width: @picker-arrow-size;\n height: @picker-arrow-size;\n border: 0 solid currentColor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n }\n }\n\n &-prev-icon,\n &-super-prev-icon {\n transform: rotate(-45deg);\n }\n\n &-next-icon,\n &-super-next-icon {\n transform: rotate(135deg);\n }\n\n // ======================== Body ========================\n &-content {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n\n th,\n td {\n position: relative;\n min-width: 24px;\n font-weight: 400;\n }\n\n th {\n height: 30px;\n color: @text-color;\n line-height: 30px;\n }\n }\n\n .picker-cell-inner(@cellClassName) {\n &::before {\n position: absolute;\n top: 50%;\n right: 0;\n left: 0;\n z-index: 1;\n height: @picker-panel-cell-height;\n transform: translateY(-50%);\n content: '';\n }\n\n // >>> Default\n .@{cellClassName} {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: @picker-panel-cell-height;\n height: @picker-panel-cell-height;\n line-height: @picker-panel-cell-height;\n border-radius: @border-radius-base;\n transition: background @animation-duration-slow, border @animation-duration-slow;\n }\n\n // >>> Hover\n &:hover:not(&-in-view),\n &:hover:not(&-selected):not(&-range-start):not(&-range-end):not(&-range-hover-start):not(&-range-hover-end) {\n .@{cellClassName} {\n background: @picker-basic-cell-hover-color;\n }\n }\n\n // >>> Today\n &-in-view&-today .@{cellClassName} {\n &::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n border: @border-width-base @border-style-base @primary-color;\n border-radius: @border-radius-base;\n content: '';\n }\n }\n\n // >>> In Range\n &-in-view&-in-range {\n position: relative;\n\n &::before {\n background: @picker-basic-cell-active-with-range-color;\n }\n }\n\n // >>> Selected\n &-in-view&-selected .@{cellClassName},\n &-in-view&-range-start .@{cellClassName},\n &-in-view&-range-end .@{cellClassName} {\n color: @text-color-inverse;\n background: @primary-color;\n }\n\n &-in-view&-range-start:not(&-range-start-single),\n &-in-view&-range-end:not(&-range-end-single) {\n &::before {\n background: @picker-basic-cell-active-with-range-color;\n }\n }\n\n &-in-view&-range-start::before {\n left: 50%;\n }\n\n &-in-view&-range-end::before {\n right: 50%;\n }\n\n // >>> Range Hover\n &-in-view&-range-hover-start:not(&-in-range):not(&-range-start):not(&-range-end),\n &-in-view&-range-hover-end:not(&-in-range):not(&-range-start):not(&-range-end),\n &-in-view&-range-hover-start&-range-start-single,\n &-in-view&-range-hover-start&-range-start&-range-end&-range-end-near-hover,\n &-in-view&-range-hover-end&-range-start&-range-end&-range-start-near-hover,\n &-in-view&-range-hover-end&-range-end-single,\n &-in-view&-range-hover:not(&-in-range) {\n &::after {\n position: absolute;\n top: 50%;\n z-index: 0;\n height: 24px;\n border-top: @border-width-base dashed @picker-date-hover-range-border-color;\n border-bottom: @border-width-base dashed @picker-date-hover-range-border-color;\n transform: translateY(-50%);\n content: '';\n }\n }\n\n // Add space for stash\n &-range-hover-start::after,\n &-range-hover-end::after,\n &-range-hover::after {\n right: 0;\n left: 2px;\n }\n\n // Hover with in range\n &-in-view&-in-range&-range-hover::before,\n &-in-view&-range-start&-range-hover::before,\n &-in-view&-range-end&-range-hover::before,\n &-in-view&-range-start:not(&-range-start-single)&-range-hover-start::before,\n &-in-view&-range-end:not(&-range-end-single)&-range-hover-end::before,\n .@{picker-prefix-cls}-panel\n > :not(.@{picker-prefix-cls}-date-panel)\n &-in-view&-in-range&-range-hover-start::before,\n .@{picker-prefix-cls}-panel\n > :not(.@{picker-prefix-cls}-date-panel)\n &-in-view&-in-range&-range-hover-end::before {\n background: @picker-date-hover-range-color;\n }\n\n // range start border-radius\n &-in-view&-range-start:not(&-range-start-single):not(&-range-end) .@{cellClassName} {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n // range end border-radius\n &-in-view&-range-end:not(&-range-end-single):not(&-range-start) .@{cellClassName} {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n\n // DatePanel only\n .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-start .@{cellClassName},\n .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName} {\n &::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: -1;\n background: @picker-date-hover-range-color;\n content: '';\n }\n }\n .@{picker-prefix-cls}-date-panel\n &-in-view&-in-range&-range-hover-start\n .@{cellClassName}::after {\n right: -5px - @border-width-base;\n left: 0;\n }\n .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName}::after {\n right: 0;\n left: -5px - @border-width-base;\n }\n\n // Hover with range start & end\n &-range-hover&-range-start::after {\n right: 50%;\n }\n &-range-hover&-range-end::after {\n left: 50%;\n }\n\n // Edge start\n tr > &-in-view&-range-hover:first-child::after,\n tr > &-in-view&-range-hover-end:first-child::after,\n &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after,\n &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after,\n &-in-view&-range-hover-start::after {\n left: 6px;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-top-left-radius: @border-radius-base;\n border-bottom-left-radius: @border-radius-base;\n }\n\n // Edge end\n tr > &-in-view&-range-hover:last-child::after,\n tr > &-in-view&-range-hover-start:last-child::after,\n &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after,\n &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after,\n &-in-view&-range-hover-end::after {\n right: 6px;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-top-right-radius: @border-radius-base;\n border-bottom-right-radius: @border-radius-base;\n }\n\n // >>> Disabled\n &-disabled {\n pointer-events: none;\n\n .@{cellClassName} {\n color: @disabled-color;\n background: transparent;\n }\n\n &::before {\n background: @picker-basic-cell-disabled-bg;\n }\n }\n &-disabled&-today .@{cellClassName}::before {\n border-color: @disabled-color;\n }\n }\n\n &-cell {\n padding: 3px 0;\n color: @disabled-color;\n cursor: pointer;\n\n // In view\n &-in-view {\n color: @text-color;\n }\n\n // Disabled\n &-disabled {\n cursor: not-allowed;\n }\n\n .picker-cell-inner(~'@{picker-cell-inner-cls}');\n }\n\n &-decade-panel,\n &-year-panel,\n &-quarter-panel,\n &-month-panel {\n .@{picker-prefix-cls}-content {\n height: @picker-panel-without-time-cell-height * 4;\n }\n\n .@{picker-cell-inner-cls} {\n padding: 0 @padding-xs;\n }\n\n .@{picker-prefix-cls}-cell {\n &-disabled .@{picker-cell-inner-cls} {\n background: @picker-basic-cell-disabled-bg;\n }\n }\n }\n\n &-quarter-panel {\n .@{picker-prefix-cls}-content {\n height: 56px;\n }\n }\n\n // ======================== Footer ========================\n &-footer {\n width: min-content;\n min-width: 100%;\n line-height: @picker-text-height - 2 * @border-width-base;\n text-align: center;\n border-bottom: @border-width-base @border-style-base transparent;\n\n .@{picker-prefix-cls}-panel & {\n border-top: @border-width-base @border-style-base @picker-border-color;\n }\n\n &-extra {\n padding: 0 @padding-sm;\n line-height: @picker-text-height - 2 * @border-width-base;\n text-align: left;\n\n &:not(:last-child) {\n border-bottom: @border-width-base @border-style-base @picker-border-color;\n }\n }\n }\n\n &-now {\n text-align: left;\n }\n\n &-today-btn {\n color: @link-color;\n\n &:hover {\n color: @link-hover-color;\n }\n\n &:active {\n color: @link-active-color;\n }\n\n &&-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n }\n }\n\n // ========================================================\n // = Special =\n // ========================================================\n\n // ===================== Decade Panel =====================\n &-decade-panel {\n .@{picker-cell-inner-cls} {\n padding: 0 (@padding-xs / 2);\n }\n\n .@{picker-prefix-cls}-cell::before {\n display: none;\n }\n }\n\n // ============= Year & Quarter & Month Panel =============\n &-year-panel,\n &-quarter-panel,\n &-month-panel {\n @hover-cell-fixed-distance: (\n (((@picker-panel-width - @padding-xs * 2) / 3) - @picker-year-month-cell-width) / 2\n );\n\n .@{picker-prefix-cls}-body {\n padding: 0 @padding-xs;\n }\n\n .@{picker-cell-inner-cls} {\n width: @picker-year-month-cell-width;\n }\n\n .@{picker-prefix-cls}-cell-range-hover-start::after {\n left: @hover-cell-fixed-distance;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n\n .@{picker-prefix-cls}-panel-rtl & {\n right: @hover-cell-fixed-distance;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n .@{picker-prefix-cls}-cell-range-hover-end::after {\n right: @hover-cell-fixed-distance;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n\n .@{picker-prefix-cls}-panel-rtl & {\n left: @hover-cell-fixed-distance;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n }\n\n // ====================== Week Panel ======================\n &-week-panel {\n .@{picker-prefix-cls}-body {\n padding: @padding-xs @padding-sm;\n }\n\n // Clear cell style\n .@{picker-prefix-cls}-cell {\n &:hover .@{picker-cell-inner-cls},\n &-selected .@{picker-cell-inner-cls},\n .@{picker-cell-inner-cls} {\n background: transparent !important;\n }\n }\n\n &-row {\n td {\n transition: background @animation-duration-slow;\n }\n\n &:hover td {\n background: @picker-basic-cell-hover-color;\n }\n\n &-selected td,\n &-selected:hover td {\n background: @primary-color;\n\n &.@{picker-prefix-cls}-cell-week {\n color: fade(@text-color-inverse, 50%);\n }\n\n &.@{picker-prefix-cls}-cell-today .@{picker-cell-inner-cls}::before {\n border-color: @text-color-inverse;\n }\n\n .@{picker-cell-inner-cls} {\n color: @text-color-inverse;\n }\n }\n }\n }\n\n // ====================== Date Panel ======================\n &-date-panel {\n .@{picker-prefix-cls}-body {\n padding: @padding-xs @padding-sm;\n }\n\n .@{picker-prefix-cls}-content {\n width: @picker-panel-cell-width * 7;\n\n th {\n width: @picker-panel-cell-width;\n }\n }\n }\n\n // ==================== Datetime Panel ====================\n &-datetime-panel {\n display: flex;\n\n .@{picker-prefix-cls}-time-panel {\n border-left: @border-width-base @border-style-base @picker-border-color;\n }\n\n .@{picker-prefix-cls}-date-panel,\n .@{picker-prefix-cls}-time-panel {\n transition: opacity @animation-duration-slow;\n }\n\n // Keyboard\n &-active {\n .@{picker-prefix-cls}-date-panel,\n .@{picker-prefix-cls}-time-panel {\n opacity: 0.3;\n\n &-active {\n opacity: 1;\n }\n }\n }\n }\n\n // ====================== Time Panel ======================\n &-time-panel {\n width: auto;\n min-width: auto;\n\n .@{picker-prefix-cls}-content {\n display: flex;\n flex: auto;\n height: @picker-time-panel-column-height;\n }\n\n &-column {\n flex: 1 0 auto;\n width: @picker-time-panel-column-width;\n margin: 0;\n padding: 0;\n overflow-y: hidden;\n text-align: left;\n list-style: none;\n transition: background @animation-duration-slow;\n\n &::after {\n display: block;\n height: @picker-time-panel-column-height - @picker-time-panel-cell-height;\n content: '';\n .@{picker-prefix-cls}-datetime-panel & {\n height: @picker-time-panel-column-height - @picker-time-panel-cell-height + 2 *\n @border-width-base;\n }\n }\n\n &:not(:first-child) {\n border-left: @border-width-base @border-style-base @picker-border-color;\n }\n\n &-active {\n background: fade(@calendar-item-active-bg, 20%);\n }\n\n &:hover {\n overflow-y: auto;\n }\n\n > li {\n margin: 0;\n padding: 0;\n\n &.@{picker-prefix-cls}-time-panel-cell {\n .@{picker-prefix-cls}-time-panel-cell-inner {\n display: block;\n width: 100%;\n height: @picker-time-panel-cell-height;\n margin: 0;\n padding: 0 0 0 ((@picker-time-panel-column-width - 28px) / 2);\n color: @text-color;\n line-height: @picker-time-panel-cell-height;\n border-radius: 0;\n cursor: pointer;\n transition: background @animation-duration-slow;\n\n &:hover {\n background: @item-hover-bg;\n }\n }\n\n &-selected {\n .@{picker-prefix-cls}-time-panel-cell-inner {\n background: @calendar-item-active-bg;\n }\n }\n\n &-disabled {\n .@{picker-prefix-cls}-time-panel-cell-inner {\n color: @disabled-color;\n background: transparent;\n cursor: not-allowed;\n }\n }\n }\n }\n }\n }\n}\n\n// Fix IE11 render bug by css hacks\n// https://github.com/ant-design/ant-design/issues/21559\n// https://codepen.io/afc163-1472555193/pen/mdJRaNj?editors=0110\n/* stylelint-disable-next-line */\n_:-ms-fullscreen,\n:root {\n .@{picker-prefix-cls}-range-wrapper {\n .@{picker-prefix-cls}-month-panel .@{picker-prefix-cls}-cell,\n .@{picker-prefix-cls}-year-panel .@{picker-prefix-cls}-cell {\n padding: 21px 0;\n }\n }\n}\n",".@{picker-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-suffix {\n .@{picker-prefix-cls}-rtl & {\n margin-right: (@padding-xs / 2);\n margin-left: 0;\n }\n }\n\n &-clear {\n .@{picker-prefix-cls}-rtl & {\n right: auto;\n left: 0;\n }\n }\n\n &-separator {\n .@{picker-prefix-cls}-rtl & {\n transform: rotate(180deg);\n }\n }\n\n &-header {\n &-view {\n button {\n &:not(:first-child) {\n .@{picker-prefix-cls}-panel-rtl & {\n margin-right: @padding-xs;\n margin-left: 0;\n }\n }\n }\n }\n }\n\n // ======================== Range =========================\n &-range {\n // Clear\n .@{picker-prefix-cls}-clear {\n .@{picker-prefix-cls}-rtl& {\n right: auto;\n left: @input-padding-horizontal-base;\n }\n }\n\n // Active bar\n .@{picker-prefix-cls}-active-bar {\n .@{picker-prefix-cls}-rtl& {\n margin-right: @input-padding-horizontal-base;\n margin-left: 0;\n }\n }\n\n &.@{picker-prefix-cls}-small {\n .@{picker-prefix-cls}-active-bar {\n .@{picker-prefix-cls}-rtl& {\n margin-right: @input-padding-horizontal-sm;\n }\n }\n }\n }\n\n // ======================== Ranges ========================\n &-ranges {\n .@{picker-prefix-cls}-dropdown-rtl & {\n text-align: right;\n }\n\n .@{picker-prefix-cls}-ok {\n .@{picker-prefix-cls}-dropdown-rtl & {\n float: left;\n margin-right: @padding-xs;\n margin-left: 0;\n }\n }\n }\n\n // ======================== Panel ========================\n &-panel {\n &-rtl {\n direction: rtl;\n }\n }\n\n &-prev-icon,\n &-super-prev-icon {\n .@{picker-prefix-cls}-panel-rtl & {\n transform: rotate(135deg);\n }\n }\n\n &-next-icon,\n &-super-next-icon {\n .@{picker-prefix-cls}-panel-rtl & {\n transform: rotate(-45deg);\n }\n }\n\n &-cell {\n .picker-cell-inner(~'@{picker-cell-inner-cls}');\n }\n\n // ======================== Body ==========================\n .picker-cell-inner(@cellClassName) {\n .@{cellClassName} {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: @picker-panel-cell-height;\n height: @picker-panel-cell-height;\n line-height: @picker-panel-cell-height;\n border-radius: @border-radius-base;\n transition: background @animation-duration-slow, border @animation-duration-slow;\n }\n\n &-in-view&-range-start::before {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 50%;\n left: 0;\n }\n }\n\n &-in-view&-range-end::before {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 0;\n left: 50%;\n }\n }\n\n &-in-view&-range-start&-range-end::before {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 50%;\n left: 50%;\n }\n }\n\n .@{picker-prefix-cls}-date-panel\n &-in-view&-in-range&-range-hover-start\n .@{cellClassName}::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 0;\n left: -5px - @border-width-base;\n }\n }\n\n .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName}::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: -5px - @border-width-base;\n left: 0;\n }\n }\n\n // Hover with range start & end\n &-range-hover&-range-start::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 0;\n left: 50%;\n }\n }\n\n &-range-hover&-range-end::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 50%;\n left: 0;\n }\n }\n\n // range start border-radius\n &-in-view&-range-start:not(&-range-start-single):not(&-range-end) .@{cellClassName} {\n .@{picker-prefix-cls}-panel-rtl & {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n\n // range end border-radius\n &-in-view&-range-end:not(&-range-end-single):not(&-range-start) .@{cellClassName} {\n .@{picker-prefix-cls}-panel-rtl & {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n // Edge start\n tr > &-in-view&-range-hover:not(&-selected):first-child::after,\n &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after,\n &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after,\n &-in-view&-range-hover-start::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 6px;\n left: 0;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-left: none;\n border-top-left-radius: 0;\n border-top-right-radius: @border-radius-base;\n border-bottom-right-radius: @border-radius-base;\n border-bottom-left-radius: 0;\n }\n }\n\n // Edge end\n tr > &-in-view&-range-hover:not(&-selected):last-child::after,\n &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after,\n &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after,\n &-in-view&-range-hover-end::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 0;\n left: 6px;\n border-right: none;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-top-left-radius: @border-radius-base;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: @border-radius-base;\n }\n }\n\n tr > &-in-view&-range-hover-start:last-child::after,\n tr > &-in-view&-range-hover-end:first-child::after,\n &-in-view&-start&-range-hover-edge-start:not(&-range-hover)::after,\n &-in-view&-start&-range-hover-end&-range-hover-edge-start:not(&-range-hover)::after,\n &-in-view&-end&-range-hover-start&-range-hover-edge-end:not(&-range-hover)::after,\n tr > &-in-view&-start&-range-hover&-range-hover-edge-start:last-child::after,\n tr > &-in-view&-end&-range-hover&-range-hover-edge-end:first-child::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 6px;\n left: 6px;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: @border-radius-base;\n }\n }\n }\n\n // ======================== Footer ========================\n &-footer {\n &-extra {\n .@{picker-prefix-cls}-dropdown-rtl & {\n direction: rtl;\n text-align: right;\n }\n }\n }\n\n // ====================== Time Panel ======================\n &-time-panel {\n .@{picker-prefix-cls}-panel-rtl & {\n direction: ltr;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tag-prefix-cls: ~'@{ant-prefix}-tag';\n\n.@{tag-prefix-cls} {\n .reset-component();\n\n display: inline-block;\n height: auto;\n margin-right: 8px;\n padding: 0 7px;\n font-size: @tag-font-size;\n line-height: @tag-line-height;\n white-space: nowrap;\n background: @tag-default-bg;\n border: @border-width-base @border-style-base @border-color-base;\n border-radius: @border-radius-base;\n opacity: 1;\n transition: all 0.3s;\n\n &,\n a,\n a:hover {\n color: @tag-default-color;\n }\n\n > a:first-child:last-child {\n display: inline-block;\n margin: 0 -8px;\n padding: 0 8px;\n }\n\n &-close-icon {\n margin-left: 3px;\n color: @text-color-secondary;\n font-size: 10px;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n color: @heading-color;\n }\n }\n\n &-has-color {\n border-color: transparent;\n &,\n a,\n a:hover,\n .@{iconfont-css-prefix}-close,\n .@{iconfont-css-prefix}-close:hover {\n color: @text-color-inverse;\n }\n }\n\n &-checkable {\n background-color: transparent;\n border-color: transparent;\n cursor: pointer;\n &:not(&-checked):hover {\n color: @primary-color;\n }\n &:active,\n &-checked {\n color: @text-color-inverse;\n }\n &-checked {\n background-color: @primary-6;\n }\n &:active {\n background-color: @primary-7;\n }\n }\n\n &-hidden {\n display: none;\n }\n\n // mixin to iterate over colors and create CSS class for each one\n .make-color-classes(@i: length(@preset-colors)) when (@i > 0) {\n .make-color-classes(@i - 1);\n @color: extract(@preset-colors, @i);\n @lightColor: '@{color}-1';\n @lightBorderColor: '@{color}-3';\n @darkColor: '@{color}-6';\n @textColor: '@{color}-7';\n &-@{color} {\n color: @@textColor;\n background: @@lightColor;\n border-color: @@lightBorderColor;\n }\n &-@{color}-inverse {\n color: @text-color-inverse;\n background: @@darkColor;\n border-color: @@darkColor;\n }\n }\n\n .make-status-color-classes(@color, @status) {\n @lightColor: '@{color}-1';\n @lightBorderColor: '@{color}-3';\n @darkColor: '@{color}-6';\n &-@{status} {\n color: @@darkColor;\n background: @@lightColor;\n border-color: @@lightBorderColor;\n }\n }\n\n .make-color-classes();\n\n .make-status-color-classes('green', success);\n .make-status-color-classes('blue', processing);\n .make-status-color-classes('red', error);\n .make-status-color-classes('orange', warning);\n\n // To ensure that a space will be placed between character and `Icon`.\n > .@{iconfont-css-prefix} + span,\n > span + .@{iconfont-css-prefix} {\n margin-left: 7px;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tag-prefix-cls: ~'@{ant-prefix}-tag';\n\n.@{tag-prefix-cls} {\n &&-rtl {\n margin-right: 0;\n margin-left: 8px;\n direction: rtl;\n text-align: right;\n }\n\n &-close-icon {\n .@{tag-prefix-cls}-rtl & {\n margin-right: 3px;\n margin-left: 0;\n }\n }\n\n > .@{iconfont-css-prefix} + span,\n > span + .@{iconfont-css-prefix} {\n .@{tag-prefix-cls}-rtl& {\n margin-right: 7px;\n margin-left: 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@card-prefix-cls: ~'@{ant-prefix}-card';\n@card-hoverable-hover-border: transparent;\n@card-action-icon-size: 16px;\n\n@gradient-min: fade(@card-skeleton-bg, 20%);\n@gradient-max: fade(@card-skeleton-bg, 40%);\n\n.@{card-prefix-cls} {\n .reset-component();\n\n position: relative;\n background: @card-background;\n border-radius: @card-radius;\n\n &-rtl {\n direction: rtl;\n }\n\n &-hoverable {\n cursor: pointer;\n transition: box-shadow 0.3s, border-color 0.3s;\n\n &:hover {\n border-color: @card-hoverable-hover-border;\n box-shadow: @card-shadow;\n }\n }\n\n &-bordered {\n border: @border-width-base @border-style-base @border-color-split;\n }\n\n &-head {\n min-height: @card-head-height;\n margin-bottom: -1px; // Fix card grid overflow bug: https://gw.alipayobjects.com/zos/rmsportal/XonYxBikwpgbqIQBeuhk.png\n padding: 0 @card-padding-base;\n color: @card-head-color;\n font-weight: 500;\n font-size: @card-head-font-size;\n background: @card-head-background;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n border-radius: @card-radius @card-radius 0 0;\n .clearfix();\n\n &-wrapper {\n display: flex;\n align-items: center;\n }\n\n &-title {\n display: inline-block;\n flex: 1;\n padding: @card-head-padding 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n > .@{ant-prefix}-typography,\n > .@{ant-prefix}-typography-edit-content {\n left: 0;\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n\n .@{ant-prefix}-tabs {\n clear: both;\n margin-bottom: @card-head-tabs-margin-bottom;\n color: @text-color;\n font-weight: normal;\n font-size: @font-size-base;\n\n &-bar {\n border-bottom: @border-width-base @border-style-base @border-color-split;\n }\n }\n }\n\n &-extra {\n float: right;\n // https://stackoverflow.com/a/22429853/3040605\n margin-left: auto;\n padding: @card-head-padding 0;\n color: @card-head-extra-color;\n font-weight: normal;\n font-size: @font-size-base;\n\n .@{card-prefix-cls}-rtl & {\n margin-right: auto;\n margin-left: 0;\n }\n }\n\n &-body {\n padding: @card-padding-base;\n .clearfix();\n }\n\n &-contain-grid:not(&-loading) &-body {\n margin: -1px 0 0 -1px;\n padding: 0;\n }\n\n &-grid {\n float: left;\n width: 33.33%;\n padding: @card-padding-base;\n border: 0;\n border-radius: 0;\n box-shadow: 1px 0 0 0 @border-color-split, 0 1px 0 0 @border-color-split,\n 1px 1px 0 0 @border-color-split, 1px 0 0 0 @border-color-split inset,\n 0 1px 0 0 @border-color-split inset;\n transition: all 0.3s;\n\n .@{card-prefix-cls}-rtl & {\n float: right;\n }\n\n &-hoverable {\n &:hover {\n position: relative;\n z-index: 1;\n box-shadow: @card-shadow;\n }\n }\n }\n\n &-contain-tabs > &-head &-head-title {\n min-height: @card-head-height - @card-head-padding;\n padding-bottom: 0;\n }\n\n &-contain-tabs > &-head &-extra {\n padding-bottom: 0;\n }\n\n &-bordered &-cover {\n margin-top: -1px;\n margin-right: -1px;\n margin-left: -1px;\n }\n\n &-cover {\n > * {\n display: block;\n width: 100%;\n }\n\n img {\n border-radius: @card-radius @card-radius 0 0;\n }\n }\n\n &-actions {\n margin: 0;\n padding: 0;\n list-style: none;\n background: @card-actions-background;\n border-top: @border-width-base @border-style-base @border-color-split;\n .clearfix();\n\n & > li {\n float: left;\n margin: @card-actions-li-margin;\n color: @text-color-secondary;\n text-align: center;\n\n .@{card-prefix-cls}-rtl & {\n float: right;\n }\n\n > span {\n position: relative;\n display: block;\n min-width: 32px;\n font-size: @font-size-base;\n line-height: @line-height-base;\n cursor: pointer;\n\n &:hover {\n color: @primary-color;\n transition: color 0.3s;\n }\n\n a:not(.@{ant-prefix}-btn),\n > .@{iconfont-css-prefix} {\n display: inline-block;\n width: 100%;\n color: @text-color-secondary;\n line-height: 22px;\n transition: color 0.3s;\n\n &:hover {\n color: @primary-color;\n }\n }\n\n > .@{iconfont-css-prefix} {\n font-size: @card-action-icon-size;\n line-height: 22px;\n }\n }\n\n &:not(:last-child) {\n border-right: @border-width-base @border-style-base @border-color-split;\n\n .@{card-prefix-cls}-rtl & {\n border-right: none;\n border-left: @border-width-base @border-style-base @border-color-split;\n }\n }\n }\n }\n\n &-type-inner &-head {\n padding: 0 @card-padding-base;\n background: @background-color-light;\n\n &-title {\n padding: @card-inner-head-padding 0;\n font-size: @font-size-base;\n }\n }\n\n &-type-inner &-body {\n padding: 16px @card-padding-base;\n }\n\n &-type-inner &-extra {\n padding: @card-inner-head-padding + 1.5px 0;\n }\n\n &-meta {\n margin: -4px 0;\n .clearfix();\n\n &-avatar {\n float: left;\n padding-right: 16px;\n\n .@{card-prefix-cls}-rtl & {\n float: right;\n padding-right: 0;\n padding-left: 16px;\n }\n }\n\n &-detail {\n overflow: hidden;\n > div:not(:last-child) {\n margin-bottom: @margin-xs;\n }\n }\n\n &-title {\n overflow: hidden;\n color: @card-head-color;\n font-weight: 500;\n font-size: @font-size-lg;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-description {\n color: @text-color-secondary;\n }\n }\n\n &-loading {\n overflow: hidden;\n }\n\n &-loading &-body {\n user-select: none;\n }\n\n &-loading-content {\n p {\n margin: 0;\n }\n }\n\n &-loading-block {\n height: 14px;\n margin: 4px 0;\n background: linear-gradient(90deg, @gradient-min, @gradient-max, @gradient-min);\n background-size: 600% 600%;\n border-radius: @card-radius;\n animation: card-loading 1.4s ease infinite;\n }\n}\n\n@keyframes card-loading {\n 0%,\n 100% {\n background-position: 0 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n}\n\n@import './size';\n",".@{card-prefix-cls}-small {\n > .@{card-prefix-cls}-head {\n min-height: @card-head-height-sm;\n padding: 0 @card-padding-base-sm;\n font-size: @card-head-font-size-sm;\n\n > .@{card-prefix-cls}-head-wrapper {\n > .@{card-prefix-cls}-head-title {\n padding: @card-head-padding-sm 0;\n }\n > .@{card-prefix-cls}-extra {\n padding: @card-head-padding-sm 0;\n font-size: @card-head-font-size-sm;\n }\n }\n }\n > .@{card-prefix-cls}-body {\n padding: @card-padding-base-sm;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './index';\n\n.@{tab-prefix-cls} {\n &-small {\n > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n padding: @tabs-horizontal-padding-sm;\n font-size: @tabs-title-font-size-sm;\n }\n }\n }\n\n &-large {\n > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n padding: @tabs-horizontal-padding-lg;\n font-size: @tabs-title-font-size-lg;\n }\n }\n }\n\n &-card {\n &.@{tab-prefix-cls}-small {\n > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n padding: @tabs-card-horizontal-padding-sm;\n }\n }\n }\n\n &.@{tab-prefix-cls}-large {\n > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n padding: @tabs-card-horizontal-padding-lg;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './size';\n@import './rtl';\n@import './position';\n@import './dropdown';\n@import './card';\n\n@tab-prefix-cls: ~'@{ant-prefix}-tabs';\n\n.@{tab-prefix-cls} {\n .reset-component();\n\n display: flex;\n overflow: hidden;\n\n // ========================== Navigation ==========================\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n position: relative;\n display: flex;\n flex: none;\n align-items: center;\n\n .@{tab-prefix-cls}-nav-wrap {\n position: relative;\n display: inline-block;\n display: flex;\n flex: auto;\n align-self: stretch;\n overflow: hidden;\n white-space: nowrap;\n transform: translate(0); // Fix chrome render bug\n\n // >>>>> Ping shadow\n &::before,\n &::after {\n position: absolute;\n z-index: 1;\n opacity: 0;\n transition: opacity @animation-duration-slow;\n content: '';\n pointer-events: none;\n }\n }\n\n .@{tab-prefix-cls}-nav-list {\n position: relative;\n display: flex;\n transition: transform @animation-duration-slow;\n }\n\n // >>>>>>>> Operations\n .@{tab-prefix-cls}-nav-operations {\n display: flex;\n align-self: stretch;\n\n &-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n }\n }\n\n .@{tab-prefix-cls}-nav-more {\n position: relative;\n padding: @tabs-card-horizontal-padding;\n background: transparent;\n border: 0;\n\n &::after {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px;\n transform: translateY(100%);\n content: '';\n }\n }\n\n .@{tab-prefix-cls}-nav-add {\n min-width: @tabs-card-height;\n padding: 0 @padding-xs;\n background: @tabs-card-head-background;\n border: @border-width-base @border-style-base @border-color-split;\n border-radius: @border-radius-base @border-radius-base 0 0;\n outline: none;\n cursor: pointer;\n transition: all @animation-duration-slow @ease-in-out;\n\n &:hover {\n color: @tabs-hover-color;\n }\n\n &:active,\n &:focus {\n color: @tabs-active-color;\n }\n }\n }\n\n &-extra-content {\n flex: none;\n }\n\n &-centered {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-nav-wrap {\n &:not([class*='@{tab-prefix-cls}-nav-wrap-ping']) {\n justify-content: center;\n }\n }\n }\n }\n\n // ============================ InkBar ============================\n &-ink-bar {\n position: absolute;\n background: @tabs-ink-bar-color;\n pointer-events: none;\n }\n\n // ============================= Tabs =============================\n &-tab {\n position: relative;\n display: inline-flex;\n align-items: center;\n padding: @tabs-horizontal-padding;\n font-size: @tabs-title-font-size;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n\n &-btn,\n &-remove {\n &:focus,\n &:active {\n color: @tabs-active-color;\n }\n }\n\n &-btn {\n outline: none;\n transition: all 0.3s;\n }\n\n &-remove {\n flex: none;\n margin-right: -@margin-xss;\n margin-left: @margin-xs;\n color: @text-color-secondary;\n font-size: @font-size-sm;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n transition: all @animation-duration-slow;\n\n &:hover {\n color: @heading-color;\n }\n }\n\n &:hover {\n color: @tabs-hover-color;\n }\n\n &&-active &-btn {\n color: @tabs-highlight-color;\n text-shadow: 0 0 0.25px currentColor;\n }\n\n &&-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n }\n\n &&-disabled &-btn,\n &&-disabled &-remove {\n &:focus,\n &:active {\n color: @disabled-color;\n }\n }\n\n & &-remove .@{iconfont-css-prefix} {\n margin: 0;\n }\n\n .@{iconfont-css-prefix} {\n margin-right: @margin-sm;\n }\n }\n\n &-tab + &-tab {\n margin: @tabs-horizontal-margin;\n }\n\n // =========================== TabPanes ===========================\n &-content {\n &-holder {\n flex: auto;\n min-width: 0;\n min-height: 0;\n }\n\n display: flex;\n width: 100%;\n\n &-animated {\n transition: margin @animation-duration-slow;\n }\n }\n\n &-tabpane {\n flex: none;\n width: 100%;\n outline: none;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tab-prefix-cls: ~'@{ant-prefix}-tabs';\n\n.@{tab-prefix-cls} {\n &-rtl {\n direction: rtl;\n\n .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n margin: @tabs-horizontal-margin-rtl;\n\n &:last-of-type {\n margin-left: 0;\n }\n\n .@{iconfont-css-prefix} {\n margin-right: 0;\n margin-left: @margin-sm;\n }\n\n .@{tab-prefix-cls}-tab-remove {\n margin-right: @margin-xs;\n margin-left: -@margin-xss;\n\n .@{iconfont-css-prefix} {\n margin: 0;\n }\n }\n }\n }\n\n &.@{tab-prefix-cls}-left {\n > .@{tab-prefix-cls}-nav {\n order: 1;\n }\n > .@{tab-prefix-cls}-content-holder {\n order: 0;\n }\n }\n\n &.@{tab-prefix-cls}-right {\n > .@{tab-prefix-cls}-nav {\n order: 0;\n }\n > .@{tab-prefix-cls}-content-holder {\n order: 1;\n }\n }\n }\n\n // ====================== Card ======================\n &-card {\n &.@{tab-prefix-cls}-top,\n &.@{tab-prefix-cls}-bottom {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab + .@{tab-prefix-cls}-tab {\n .@{tab-prefix-cls}-rtl& {\n margin-right: 0;\n margin-left: @tabs-card-gutter;\n }\n }\n }\n }\n }\n}\n\n.@{tab-prefix-cls}-dropdown {\n &-rtl {\n direction: rtl;\n }\n &-menu-item {\n .@{tab-prefix-cls}-dropdown-rtl & {\n text-align: right;\n }\n }\n}\n","@import './index';\n\n.@{tab-prefix-cls} {\n // ========================== Top & Bottom ==========================\n &-top,\n &-bottom {\n flex-direction: column;\n\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n margin: @tabs-bar-margin;\n\n &::before {\n position: absolute;\n right: 0;\n left: 0;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n content: '';\n }\n\n .@{tab-prefix-cls}-ink-bar {\n height: 2px;\n\n &-animated {\n transition: width @animation-duration-slow, left @animation-duration-slow,\n right @animation-duration-slow;\n }\n }\n\n .@{tab-prefix-cls}-nav-wrap {\n &::before,\n &::after {\n top: 0;\n bottom: 0;\n width: 30px;\n }\n\n &::before {\n left: 0;\n box-shadow: inset 10px 0 8px -8px fade(@shadow-color, 8%);\n }\n &::after {\n right: 0;\n box-shadow: inset -10px 0 8px -8px fade(@shadow-color, 8%);\n }\n\n &.@{tab-prefix-cls}-nav-wrap-ping-left::before {\n opacity: 1;\n }\n &.@{tab-prefix-cls}-nav-wrap-ping-right::after {\n opacity: 1;\n }\n }\n }\n }\n\n &-top {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n &::before {\n bottom: 0;\n }\n\n .@{tab-prefix-cls}-ink-bar {\n bottom: 0;\n }\n }\n }\n\n &-bottom {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n order: 1;\n margin-top: @margin-md;\n margin-bottom: 0;\n\n &::before {\n top: 0;\n }\n\n .@{tab-prefix-cls}-ink-bar {\n top: 0;\n }\n }\n\n > .@{tab-prefix-cls}-content-holder,\n > div > .@{tab-prefix-cls}-content-holder {\n order: 0;\n }\n }\n\n // ========================== Left & Right ==========================\n &-left,\n &-right {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n flex-direction: column;\n min-width: 50px;\n\n // >>>>>>>>>>> Tab\n .@{tab-prefix-cls}-tab {\n padding: @tabs-vertical-padding;\n text-align: center;\n }\n\n .@{tab-prefix-cls}-tab + .@{tab-prefix-cls}-tab {\n margin: @tabs-vertical-margin;\n }\n\n // >>>>>>>>>>> Nav\n .@{tab-prefix-cls}-nav-wrap {\n flex-direction: column;\n\n &::before,\n &::after {\n right: 0;\n left: 0;\n height: 30px;\n }\n\n &::before {\n top: 0;\n box-shadow: inset 0 10px 8px -8px fade(@shadow-color, 8%);\n }\n &::after {\n bottom: 0;\n box-shadow: inset 0 -10px 8px -8px fade(@shadow-color, 8%);\n }\n\n &.@{tab-prefix-cls}-nav-wrap-ping-top::before {\n opacity: 1;\n }\n &.@{tab-prefix-cls}-nav-wrap-ping-bottom::after {\n opacity: 1;\n }\n }\n\n // >>>>>>>>>>> Ink Bar\n .@{tab-prefix-cls}-ink-bar {\n width: 2px;\n\n &-animated {\n transition: height @animation-duration-slow, top @animation-duration-slow;\n }\n }\n\n .@{tab-prefix-cls}-nav-list,\n .@{tab-prefix-cls}-nav-operations {\n flex: 1 0 auto; // fix safari scroll problem\n flex-direction: column;\n }\n }\n }\n\n &-left {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-ink-bar {\n right: 0;\n }\n }\n\n > .@{tab-prefix-cls}-content-holder,\n > div > .@{tab-prefix-cls}-content-holder {\n margin-left: -@border-width-base;\n border-left: @border-width-base @border-style-base @border-color-split;\n\n > .@{tab-prefix-cls}-content > .@{tab-prefix-cls}-tabpane {\n padding-left: @padding-lg;\n }\n }\n }\n\n &-right {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n order: 1;\n\n .@{tab-prefix-cls}-ink-bar {\n left: 0;\n }\n }\n\n > .@{tab-prefix-cls}-content-holder,\n > div > .@{tab-prefix-cls}-content-holder {\n order: 0;\n margin-right: -@border-width-base;\n border-right: @border-width-base @border-style-base @border-color-split;\n\n > .@{tab-prefix-cls}-content > .@{tab-prefix-cls}-tabpane {\n padding-right: @padding-lg;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './index';\n\n.@{tab-prefix-cls}-dropdown {\n .reset-component();\n\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: @zindex-dropdown;\n display: block;\n\n &-hidden {\n display: none;\n }\n\n &-menu {\n max-height: 200px;\n margin: 0;\n padding: @dropdown-edge-child-vertical-padding 0;\n overflow-x: hidden;\n overflow-y: auto;\n text-align: left;\n list-style-type: none;\n background-color: @dropdown-menu-bg;\n background-clip: padding-box;\n border-radius: @border-radius-base;\n outline: none;\n box-shadow: @box-shadow-base;\n\n &-item {\n min-width: 120px;\n margin: 0;\n padding: @dropdown-vertical-padding @control-padding-horizontal;\n overflow: hidden;\n color: @text-color;\n font-weight: normal;\n font-size: @dropdown-font-size;\n line-height: @dropdown-line-height;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n background: @item-hover-bg;\n }\n\n &-disabled {\n &,\n &:hover {\n color: @disabled-color;\n background: transparent;\n cursor: not-allowed;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './index';\n\n.@{tab-prefix-cls}-card {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n margin: 0;\n padding: @tabs-card-horizontal-padding;\n background: @tabs-card-head-background;\n border: @border-width-base @border-style-base @border-color-split;\n transition: all @animation-duration-slow @ease-in-out;\n\n &-active {\n color: @tabs-card-active-color;\n background: @component-background;\n }\n }\n\n .@{tab-prefix-cls}-ink-bar {\n visibility: hidden;\n }\n }\n\n // ========================== Top & Bottom ==========================\n &.@{tab-prefix-cls}-top,\n &.@{tab-prefix-cls}-bottom {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab + .@{tab-prefix-cls}-tab {\n margin-left: @tabs-card-gutter;\n }\n }\n }\n\n &.@{tab-prefix-cls}-top {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n border-radius: @border-radius-base @border-radius-base 0 0;\n\n &-active {\n border-bottom-color: @component-background;\n }\n }\n }\n }\n &.@{tab-prefix-cls}-bottom {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n border-radius: 0 0 @border-radius-base @border-radius-base;\n\n &-active {\n border-top-color: @component-background;\n }\n }\n }\n }\n\n // ========================== Left & Right ==========================\n &.@{tab-prefix-cls}-left,\n &.@{tab-prefix-cls}-right {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab + .@{tab-prefix-cls}-tab {\n margin-top: @tabs-card-gutter;\n }\n }\n }\n\n &.@{tab-prefix-cls}-left {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n\n &-active {\n border-right-color: @component-background;\n }\n }\n }\n }\n &.@{tab-prefix-cls}-right {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n\n &-active {\n border-left-color: @component-background;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './mixin';\n\n// Grid system\n.@{ant-prefix}-row {\n display: flex;\n flex-flow: row wrap;\n\n &::before,\n &::after {\n display: flex;\n }\n\n // No wrap of flex\n &-no-wrap {\n flex-wrap: nowrap;\n }\n}\n\n// x轴原点\n.@{ant-prefix}-row-start {\n justify-content: flex-start;\n}\n\n// x轴居中\n.@{ant-prefix}-row-center {\n justify-content: center;\n}\n\n// x轴反方向\n.@{ant-prefix}-row-end {\n justify-content: flex-end;\n}\n\n// x轴平分\n.@{ant-prefix}-row-space-between {\n justify-content: space-between;\n}\n\n// x轴有间隔地平分\n.@{ant-prefix}-row-space-around {\n justify-content: space-around;\n}\n\n// 顶部对齐\n.@{ant-prefix}-row-top {\n align-items: flex-start;\n}\n\n// 居中对齐\n.@{ant-prefix}-row-middle {\n align-items: center;\n}\n\n// 底部对齐\n.@{ant-prefix}-row-bottom {\n align-items: flex-end;\n}\n\n.@{ant-prefix}-col {\n position: relative;\n max-width: 100%;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n}\n\n.make-grid();\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(-xs);\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(-sm);\n}\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(-md);\n}\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(-lg);\n}\n\n// Extra Large grid\n//\n// Columns, offsets, pushes, and pulls for the full hd device range.\n\n@media (min-width: @screen-xl-min) {\n .make-grid(-xl);\n}\n\n// Extra Extra Large grid\n//\n// Columns, offsets, pushes, and pulls for the full hd device range.\n\n@media (min-width: @screen-xxl-min) {\n .make-grid(-xxl);\n}\n\n@import './rtl';\n","@import '../../style/mixins/index';\n\n// mixins for grid system\n// ------------------------\n\n.loop-grid-columns(@index, @class) when (@index > 0) {\n .@{ant-prefix}-col@{class}-@{index} {\n display: block;\n flex: 0 0 percentage((@index / @grid-columns));\n max-width: percentage((@index / @grid-columns));\n }\n .@{ant-prefix}-col@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n .@{ant-prefix}-col@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n .@{ant-prefix}-col@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n .@{ant-prefix}-col@{class}-order-@{index} {\n order: @index;\n }\n .loop-grid-columns((@index - 1), @class);\n}\n\n.loop-grid-columns(@index, @class) when (@index = 0) {\n .@{ant-prefix}-col@{class}-@{index} {\n display: none;\n }\n .@{ant-prefix}-col-push-@{index} {\n left: auto;\n }\n .@{ant-prefix}-col-pull-@{index} {\n right: auto;\n }\n .@{ant-prefix}-col@{class}-push-@{index} {\n left: auto;\n }\n .@{ant-prefix}-col@{class}-pull-@{index} {\n right: auto;\n }\n .@{ant-prefix}-col@{class}-offset-@{index} {\n margin-left: 0;\n }\n .@{ant-prefix}-col@{class}-order-@{index} {\n order: 0;\n }\n}\n\n.make-grid(@class: ~'') {\n .loop-grid-columns(@grid-columns, @class);\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n.@{ant-prefix}-row {\n &-rtl {\n direction: rtl;\n }\n}\n\n// mixin\n.loop-grid-columns(@index, @class) when (@index > 0) {\n .@{ant-prefix}-col@{class}-push-@{index} {\n // reset property in RTL direction\n &.@{ant-prefix}-col-rtl {\n right: percentage((@index / @grid-columns));\n left: auto;\n }\n }\n\n .@{ant-prefix}-col@{class}-pull-@{index} {\n // reset property in RTL direction\n &.@{ant-prefix}-col-rtl {\n right: auto;\n left: percentage((@index / @grid-columns));\n }\n }\n\n .@{ant-prefix}-col@{class}-offset-@{index} {\n // reset property in RTL direction\n &.@{ant-prefix}-col-rtl {\n margin-right: percentage((@index / @grid-columns));\n margin-left: 0;\n }\n }\n}\n\n.loop-grid-columns(@index, @class) when (@index = 0) {\n .@{ant-prefix}-col-push-@{index} {\n // reset property in RTL direction\n &.@{ant-prefix}-col-rtl {\n right: auto;\n }\n }\n\n .@{ant-prefix}-col-pull-@{index} {\n &.@{ant-prefix}-col-rtl {\n left: auto;\n }\n }\n\n .@{ant-prefix}-col@{class}-push-@{index} {\n &.@{ant-prefix}-col-rtl {\n right: auto;\n }\n }\n\n .@{ant-prefix}-col@{class}-pull-@{index} {\n &.@{ant-prefix}-col-rtl {\n left: auto;\n }\n }\n\n .@{ant-prefix}-col@{class}-offset-@{index} {\n &.@{ant-prefix}-col-rtl {\n margin-right: 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@carousel-prefix-cls: ~'@{ant-prefix}-carousel';\n\n.@{carousel-prefix-cls} {\n .reset-component();\n\n .slick-slider {\n position: relative;\n display: block;\n box-sizing: border-box;\n -ms-touch-action: pan-y;\n touch-action: pan-y;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: transparent;\n }\n\n .slick-list {\n position: relative;\n display: block;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n &:focus {\n outline: none;\n }\n\n &.dragging {\n cursor: pointer;\n }\n\n .slick-slide {\n pointer-events: none;\n\n // https://github.com/ant-design/ant-design/issues/23294\n input.@{ant-prefix}-radio-input,\n input.@{ant-prefix}-checkbox-input {\n visibility: hidden;\n }\n\n &.slick-active {\n pointer-events: auto;\n\n input.@{ant-prefix}-radio-input,\n input.@{ant-prefix}-checkbox-input {\n visibility: visible;\n }\n }\n\n // fix Carousel content height not match parent node\n // when children is empty node\n // https://github.com/ant-design/ant-design/issues/25878\n > div > div {\n vertical-align: bottom;\n }\n }\n }\n\n .slick-slider .slick-track,\n .slick-slider .slick-list {\n transform: translate3d(0, 0, 0);\n touch-action: pan-y;\n }\n\n .slick-track {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n\n &::before,\n &::after {\n display: table;\n content: '';\n }\n\n &::after {\n clear: both;\n }\n\n .slick-loading & {\n visibility: hidden;\n }\n }\n\n .slick-slide {\n display: none;\n float: left;\n height: 100%;\n min-height: 1px;\n\n img {\n display: block;\n }\n\n &.slick-loading img {\n display: none;\n }\n\n &.dragging img {\n pointer-events: none;\n }\n }\n\n .slick-initialized .slick-slide {\n display: block;\n }\n\n .slick-loading .slick-slide {\n visibility: hidden;\n }\n\n .slick-vertical .slick-slide {\n display: block;\n height: auto;\n }\n .slick-arrow.slick-hidden {\n display: none;\n }\n\n // Arrows\n .slick-prev,\n .slick-next {\n position: absolute;\n top: 50%;\n display: block;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n padding: 0;\n color: transparent;\n font-size: 0;\n line-height: 0;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n &:hover,\n &:focus {\n color: transparent;\n background: transparent;\n outline: none;\n &::before {\n opacity: 1;\n }\n }\n &.slick-disabled::before {\n opacity: 0.25;\n }\n }\n\n .slick-prev {\n left: -25px;\n\n &::before {\n content: '←';\n }\n }\n\n .slick-next {\n right: -25px;\n &::before {\n content: '→';\n }\n }\n\n // Dots\n .slick-dots {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex !important;\n justify-content: center;\n margin-right: 15%;\n margin-left: 15%;\n padding-left: 0;\n list-style: none;\n\n &-bottom {\n bottom: 12px;\n }\n &-top {\n top: 12px;\n bottom: auto;\n }\n li {\n position: relative;\n display: inline-block;\n flex: 0 1 auto;\n box-sizing: content-box;\n width: @carousel-dot-width;\n height: @carousel-dot-height;\n margin: 0 2px;\n margin-right: 3px;\n margin-left: 3px;\n padding: 0;\n text-align: center;\n text-indent: -999px;\n vertical-align: top;\n transition: all 0.5s;\n button {\n display: block;\n width: 100%;\n height: @carousel-dot-height;\n padding: 0;\n color: transparent;\n font-size: 0;\n background: @component-background;\n border: 0;\n border-radius: 1px;\n outline: none;\n cursor: pointer;\n opacity: 0.3;\n transition: all 0.5s;\n &:hover,\n &:focus {\n opacity: 0.75;\n }\n }\n &.slick-active {\n width: @carousel-dot-active-width;\n & button {\n background: @component-background;\n opacity: 1;\n }\n &:hover,\n &:focus {\n opacity: 1;\n }\n }\n }\n }\n}\n\n.@{ant-prefix}-carousel-vertical {\n .slick-dots {\n top: 50%;\n bottom: auto;\n flex-direction: column;\n width: @carousel-dot-height;\n height: auto;\n margin: 0;\n transform: translateY(-50%);\n\n &-left {\n right: auto;\n left: 12px;\n }\n &-right {\n right: 12px;\n left: auto;\n }\n li {\n width: @carousel-dot-height;\n height: @carousel-dot-width;\n margin: 4px 2px;\n vertical-align: baseline;\n button {\n width: @carousel-dot-height;\n height: @carousel-dot-width;\n }\n &.slick-active {\n width: @carousel-dot-height;\n height: @carousel-dot-active-width;\n\n button {\n width: @carousel-dot-height;\n height: @carousel-dot-active-width;\n }\n }\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@carousel-prefix-cls: ~'@{ant-prefix}-carousel';\n\n.@{carousel-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n .slick-track {\n .@{carousel-prefix-cls}-rtl & {\n right: 0;\n left: auto;\n }\n }\n\n .slick-prev {\n .@{carousel-prefix-cls}-rtl & {\n right: -25px;\n left: auto;\n &::before {\n content: '→';\n }\n }\n }\n\n .slick-next {\n .@{carousel-prefix-cls}-rtl & {\n right: auto;\n left: -25px;\n &::before {\n content: '←';\n }\n }\n }\n\n // Dots\n .slick-dots {\n .@{carousel-prefix-cls}-rtl& {\n flex-direction: row-reverse;\n }\n }\n}\n\n.@{ant-prefix}-carousel-vertical {\n .slick-dots {\n .@{carousel-prefix-cls}-rtl& {\n flex-direction: column;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@cascader-prefix-cls: ~'@{ant-prefix}-cascader';\n\n.@{cascader-prefix-cls} {\n .reset-component();\n\n &-input.@{ant-prefix}-input {\n // Keep it static for https://github.com/ant-design/ant-design/issues/16738\n position: static;\n width: 100%;\n // https://github.com/ant-design/ant-design/issues/17582\n padding-right: 24px;\n // Add important to fix https://github.com/ant-design/ant-design/issues/5078\n // because input.less will compile after cascader.less\n background-color: transparent !important;\n cursor: pointer;\n }\n\n &-picker-show-search &-input.@{ant-prefix}-input {\n position: relative;\n }\n\n &-picker {\n .reset-component();\n\n position: relative;\n display: inline-block;\n background-color: @cascader-bg;\n border-radius: @border-radius-base;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n\n &-with-value &-label {\n color: transparent;\n }\n\n &-disabled {\n color: @disabled-color;\n background: @input-disabled-bg;\n cursor: not-allowed;\n .@{cascader-prefix-cls}-input {\n cursor: not-allowed;\n }\n }\n\n &:focus .@{cascader-prefix-cls}-input {\n .active();\n }\n\n &-borderless .@{cascader-prefix-cls}-input {\n border-color: transparent !important;\n box-shadow: none !important;\n }\n\n &-show-search&-focused {\n color: @disabled-color;\n }\n\n &-label {\n position: absolute;\n top: 50%;\n left: 0;\n width: 100%;\n height: 20px;\n margin-top: -10px;\n padding: 0 20px 0 @control-padding-horizontal;\n overflow: hidden;\n line-height: 20px;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-clear {\n position: absolute;\n top: 50%;\n right: @control-padding-horizontal;\n z-index: 2;\n width: 12px;\n height: 12px;\n margin-top: -6px;\n color: @disabled-color;\n font-size: @font-size-sm;\n line-height: 12px;\n background: @component-background;\n cursor: pointer;\n opacity: 0;\n transition: color 0.3s ease, opacity 0.15s ease;\n &:hover {\n color: @text-color-secondary;\n }\n }\n\n &:hover &-clear {\n opacity: 1;\n }\n\n // arrow\n &-arrow {\n position: absolute;\n top: 50%;\n right: @control-padding-horizontal;\n z-index: 1;\n width: 12px;\n height: 12px;\n margin-top: -6px;\n color: @disabled-color;\n font-size: 12px;\n line-height: 12px;\n }\n }\n\n // https://github.com/ant-design/ant-design/pull/12407#issuecomment-424657810\n &-picker-label:hover + &-input {\n &:not(.@{cascader-prefix-cls}-picker-disabled &) {\n .hover();\n }\n }\n\n &-picker-small &-picker-clear,\n &-picker-small &-picker-arrow {\n right: @control-padding-horizontal-sm;\n }\n\n &-menus {\n position: absolute;\n z-index: @zindex-dropdown;\n font-size: @cascader-dropdown-font-size;\n white-space: nowrap;\n background: @cascader-menu-bg;\n border-radius: @border-radius-base;\n box-shadow: @box-shadow-base;\n\n ul,\n ol {\n margin: 0;\n list-style: none;\n }\n\n &-empty,\n &-hidden {\n display: none;\n }\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomLeft {\n animation-name: antSlideUpIn;\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft {\n animation-name: antSlideDownIn;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomLeft {\n animation-name: antSlideUpOut;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft {\n animation-name: antSlideDownOut;\n }\n }\n &-menu {\n display: inline-block;\n min-width: 111px;\n height: 180px;\n margin: 0;\n padding: @cascader-dropdown-edge-child-vertical-padding 0;\n overflow: auto;\n vertical-align: top;\n list-style: none;\n border-right: @border-width-base @border-style-base @cascader-menu-border-color-split;\n -ms-overflow-style: -ms-autohiding-scrollbar; // https://github.com/ant-design/ant-design/issues/11857\n\n &:first-child {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n &:last-child {\n margin-right: -1px;\n border-right-color: transparent;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n &:only-child {\n border-radius: @border-radius-base;\n }\n }\n &-menu-item {\n padding: @cascader-dropdown-vertical-padding @control-padding-horizontal;\n overflow: hidden;\n line-height: @cascader-dropdown-line-height;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n &:hover {\n background: @item-hover-bg;\n }\n &-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n &:hover {\n background: transparent;\n }\n }\n .@{cascader-prefix-cls}-menu-empty & {\n color: @disabled-color;\n cursor: default;\n pointer-events: none;\n }\n &-active:not(&-disabled) {\n &,\n &:hover {\n font-weight: @select-item-selected-font-weight;\n background-color: @cascader-item-selected-bg;\n }\n }\n &-expand {\n position: relative;\n padding-right: 24px;\n }\n\n &-expand &-expand-icon,\n &-loading-icon {\n position: absolute;\n right: @control-padding-horizontal;\n color: @text-color-secondary;\n font-size: 10px;\n\n .@{cascader-prefix-cls}-menu-item-disabled& {\n color: @disabled-color;\n }\n }\n\n & &-keyword {\n color: @highlight-color;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@cascader-prefix-cls: ~'@{ant-prefix}-cascader';\n@picker-rtl-cls: ~'@{cascader-prefix-cls}-picker-rtl';\n@menu-rtl-cls: ~'@{cascader-prefix-cls}-menu-rtl';\n\n.@{cascader-prefix-cls} {\n &-input.@{ant-prefix}-input {\n .@{picker-rtl-cls} & {\n padding-right: @input-padding-horizontal-base;\n padding-left: 24px;\n text-align: right;\n }\n }\n\n &-picker {\n &-rtl {\n direction: rtl;\n }\n\n &-label {\n .@{picker-rtl-cls} & {\n padding: 0 @control-padding-horizontal 0 20px;\n text-align: right;\n }\n }\n\n &-clear {\n .@{picker-rtl-cls} & {\n right: auto;\n left: @control-padding-horizontal;\n }\n }\n\n &-arrow {\n .@{picker-rtl-cls} & {\n right: auto;\n left: @control-padding-horizontal;\n }\n }\n }\n\n &-picker-small &-picker-clear,\n &-picker-small &-picker-arrow {\n .@{picker-rtl-cls}& {\n right: auto;\n left: @control-padding-horizontal-sm;\n }\n }\n\n &-menu {\n &-rtl & {\n direction: rtl;\n border-right: none;\n border-left: @border-width-base @border-style-base @border-color-split;\n &:first-child {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n &:last-child {\n margin-right: 0;\n margin-left: -1px;\n border-left-color: transparent;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n &:only-child {\n border-radius: @border-radius-base;\n }\n }\n }\n\n &-menu-item {\n &-expand {\n .@{menu-rtl-cls} & {\n padding-right: @control-padding-horizontal;\n padding-left: 24px;\n }\n }\n\n &-expand &-expand-icon,\n &-loading-icon {\n .@{menu-rtl-cls} & {\n right: auto;\n left: @control-padding-horizontal;\n }\n }\n\n &-loading-icon {\n .@{menu-rtl-cls} & {\n transform: scaleY(-1);\n }\n }\n }\n}\n","@import './index';\n@import './mixin';\n\n@input-affix-margin: 4px;\n\n.@{ant-prefix}-input {\n &-affix-wrapper {\n .input();\n display: inline-flex;\n\n &:not(&-disabled):hover {\n .hover();\n z-index: 1;\n .@{ant-prefix}-input-search-with-button & {\n z-index: 0;\n }\n }\n\n &-focused,\n &:focus {\n z-index: 1;\n }\n\n &-disabled {\n .@{ant-prefix}-input[disabled] {\n background: transparent;\n }\n }\n\n > input.@{ant-prefix}-input {\n padding: 0;\n border: none;\n outline: none;\n\n &:focus {\n box-shadow: none;\n }\n }\n\n &::before {\n width: 0;\n visibility: hidden;\n content: '\\a0';\n }\n }\n\n &-prefix,\n &-suffix {\n display: flex;\n flex: none;\n align-items: center;\n }\n\n &-prefix {\n margin-right: @input-affix-margin;\n }\n\n &-suffix {\n margin-left: @input-affix-margin;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './mixin';\n@import './affix';\n@import './allow-clear';\n\n// Input styles\n.@{ant-prefix}-input {\n .reset-component();\n .input();\n\n //== Style for input-group: input with label, with button or dropdown...\n &-group {\n .reset-component();\n .input-group(~'@{ant-prefix}-input');\n &-wrapper {\n display: inline-block;\n width: 100%;\n text-align: start;\n vertical-align: top; // https://github.com/ant-design/ant-design/issues/6403\n }\n }\n\n &-password-icon {\n color: @text-color-secondary;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n color: @input-icon-hover-color;\n }\n }\n\n &[type='color'] {\n height: @input-height-base;\n\n &.@{ant-prefix}-input-lg {\n height: @input-height-lg;\n }\n &.@{ant-prefix}-input-sm {\n height: @input-height-sm;\n padding-top: 3px;\n padding-bottom: 3px;\n }\n }\n\n &-textarea {\n &-show-count::after {\n float: right;\n color: @text-color-secondary;\n white-space: nowrap;\n content: attr(data-count);\n pointer-events: none;\n }\n }\n}\n\n@import './search-input';\n@import './rtl';\n@import './IE11';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n//== Style for input-group: input with label, with button or dropdown...\n.@{ant-prefix}-input-group {\n &-wrapper {\n &-rtl {\n direction: rtl;\n }\n }\n &-rtl {\n direction: rtl;\n }\n}\n\n// affix\n@input-affix-margin: 4px;\n\n.@{ant-prefix}-input {\n &-affix-wrapper&-affix-wrapper-rtl {\n > input.@{ant-prefix}-input {\n border: none;\n outline: none;\n }\n }\n\n &-affix-wrapper-rtl {\n .@{ant-prefix}-input-prefix {\n margin: 0 0 0 @input-affix-margin;\n }\n\n .@{ant-prefix}-input-suffix {\n margin: 0 @input-affix-margin 0 0;\n }\n }\n\n &-textarea {\n &-rtl {\n direction: rtl;\n }\n\n &-rtl&-show-count::after {\n text-align: left;\n }\n }\n}\n\n// allow-clear\n.@{ant-prefix}-input-clear-icon {\n &:last-child {\n .@{ant-prefix}-input-affix-wrapper-rtl & {\n margin-right: @input-affix-margin;\n margin-left: 0;\n }\n }\n\n .@{ant-prefix}-input-affix-wrapper-rtl & {\n right: auto;\n left: 8px;\n }\n}\n\n// mixin\n@input-rtl-cls: ~'@{ant-prefix}-input-rtl';\n\n.active() {\n .@{input-rtl-cls} & {\n border-right-width: 0;\n border-left-width: @border-width-base !important;\n }\n}\n\n.hover() {\n .@{input-rtl-cls} & {\n border-right-width: 0;\n border-left-width: @border-width-base !important;\n }\n}\n\n.input() {\n &-rtl {\n direction: rtl;\n }\n}\n\n// label input\n.input-group(@inputClass) {\n > .@{inputClass}-rtl:first-child,\n &-rtl &-addon:first-child {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n\n &-addon:first-child {\n .@{inputClass}-group-rtl & {\n border-right: @border-width-base @border-style-base @input-border-color;\n border-left: 0;\n }\n }\n\n &-addon:last-child {\n .@{inputClass}-group-rtl & {\n border-right: 0;\n border-left: @border-width-base @border-style-base @input-border-color;\n }\n }\n\n > .@{inputClass}:last-child,\n &-addon:last-child {\n .@{inputClass}-group-rtl& {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n .@{inputClass}-affix-wrapper {\n &:not(:first-child) {\n .@{inputClass}-group-rtl& {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n &:not(:last-child) {\n .@{inputClass}-group-rtl& {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n }\n\n &&-compact {\n & > *:not(:last-child) {\n .@{inputClass}-group-rtl& {\n margin-right: 0;\n margin-left: -@border-width-base;\n border-left-width: @border-width-base;\n }\n }\n\n & > *:first-child,\n & > .@{ant-prefix}-select:first-child > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-select-auto-complete:first-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker:first-child .@{ant-prefix}-input {\n .@{inputClass}-group-rtl& {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n\n & > *:last-child,\n & > .@{ant-prefix}-select:last-child > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-select-auto-complete:last-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker:last-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker-focused:last-child .@{ant-prefix}-input {\n .@{inputClass}-group-rtl& {\n border-left-width: @border-width-base;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n .@{ant-prefix}-input-group-wrapper-rtl + .@{ant-prefix}-input-group-wrapper-rtl {\n margin-right: -1px;\n margin-left: 0;\n }\n\n .@{ant-prefix}-input-group-wrapper-rtl:not(:last-child) {\n &.@{ant-prefix}-input-search > .@{ant-prefix}-input-group {\n & > .@{ant-prefix}-input {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n }\n }\n}\n\n// search-input\n@search-prefix: ~'@{ant-prefix}-input-search';\n@search-rtl-cls: ~'@{search-prefix}-rtl';\n\n.@{search-prefix}-rtl {\n direction: rtl;\n\n .@{ant-prefix}-input {\n &:hover,\n &:focus {\n + .@{ant-prefix}-input-group-addon .@{search-prefix}-button:not(.@{ant-prefix}-btn-primary) {\n border-right-color: @input-hover-border-color;\n border-left-color: @border-color-base;\n }\n }\n }\n\n > .@{ant-prefix}-input-group {\n > .@{ant-prefix}-input-affix-wrapper {\n &:hover,\n &-focused {\n border-right-color: @input-hover-border-color;\n }\n }\n\n > .@{ant-prefix}-input-group-addon {\n right: -1px;\n left: auto;\n .@{search-prefix}-button {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n }\n}\n","@import './index';\n\n// ========================= Input =========================\n.@{ant-prefix}-input-clear-icon {\n margin: 0 @input-affix-margin;\n color: @disabled-color;\n font-size: @font-size-sm;\n vertical-align: -1px;\n // https://github.com/ant-design/ant-design/pull/18151\n // https://codesandbox.io/s/wizardly-sun-u10br\n cursor: pointer;\n transition: color 0.3s;\n\n &:hover {\n color: @text-color-secondary;\n }\n\n &:active {\n color: @text-color;\n }\n\n &-hidden {\n visibility: hidden;\n }\n\n &:last-child {\n margin-right: 0;\n }\n}\n\n// ======================= TextArea ========================\n.@{ant-prefix}-input-affix-wrapper-textarea-with-clear-btn {\n padding: 0 !important;\n border: 0 !important;\n\n .@{ant-prefix}-input-clear-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../button/style/mixin';\n@import './mixin';\n\n@search-prefix: ~'@{ant-prefix}-input-search';\n\n.@{search-prefix} {\n .@{ant-prefix}-input {\n &:hover,\n &:focus {\n border-color: @input-hover-border-color;\n\n + .@{ant-prefix}-input-group-addon .@{search-prefix}-button:not(.@{ant-prefix}-btn-primary) {\n border-left-color: @input-hover-border-color;\n }\n }\n }\n\n .@{ant-prefix}-input-affix-wrapper {\n border-radius: 0;\n }\n\n // fix slight height diff in Firefox:\n // https://ant.design/components/auto-complete-cn/#components-auto-complete-demo-certain-category\n .@{ant-prefix}-input-lg {\n line-height: @line-height-base - 0.0002;\n }\n\n > .@{ant-prefix}-input-group {\n > .@{ant-prefix}-input-group-addon:last-child {\n left: -1px;\n padding: 0;\n border: 0;\n\n .@{search-prefix}-button {\n padding-top: 0;\n padding-bottom: 0;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n\n .@{search-prefix}-button:not(.@{ant-prefix}-btn-primary) {\n color: @text-color-secondary;\n\n &.@{ant-prefix}-btn-loading::before {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n }\n }\n }\n\n &-button {\n height: @input-height-base;\n\n &:hover,\n &:focus {\n z-index: 1;\n }\n }\n\n &-large &-button {\n height: @input-height-lg;\n }\n\n &-small &-button {\n height: @input-height-sm;\n }\n}\n","// Fix Input component height issue in IE11\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .@{ant-prefix}-input {\n height: @input-height-base;\n\n &-lg {\n height: @input-height-lg;\n }\n\n &-sm {\n height: @input-height-sm;\n }\n\n &-affix-wrapper {\n > input.@{ant-prefix}-input {\n height: auto;\n }\n }\n }\n}\n","@import '../../style/mixins/index';\n\n.antCheckboxFn(@checkbox-prefix-cls: ~'@{ant-prefix}-checkbox') {\n @checkbox-inner-prefix-cls: ~'@{checkbox-prefix-cls}-inner';\n // 一般状态\n .@{checkbox-prefix-cls} {\n .reset-component();\n\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n\n .@{checkbox-prefix-cls}-wrapper:hover &-inner,\n &:hover &-inner,\n &-input:focus + &-inner {\n border-color: @checkbox-color;\n }\n\n &-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid @checkbox-color;\n border-radius: @border-radius-base;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n }\n\n &:hover::after,\n .@{checkbox-prefix-cls}-wrapper:hover &::after {\n visibility: visible;\n }\n\n &-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: @checkbox-size;\n height: @checkbox-size;\n direction: ltr;\n background-color: @checkbox-check-bg;\n border: @checkbox-border-width @border-style-base @border-color-base;\n border-radius: @border-radius-base;\n // Fix IE checked style\n // https://github.com/ant-design/ant-design/issues/12597\n border-collapse: separate;\n transition: all 0.3s;\n\n &::after {\n @check-width: (@checkbox-size / 14) * 5px;\n @check-height: (@checkbox-size / 14) * 8px;\n\n position: absolute;\n top: 50%;\n left: 22%;\n display: table;\n width: @check-width;\n height: @check-height;\n border: 2px solid @checkbox-check-color;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s @ease-in-back, opacity 0.1s;\n content: ' ';\n }\n }\n\n &-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n }\n }\n\n // 选中状态\n .@{checkbox-prefix-cls}-checked .@{checkbox-inner-prefix-cls}::after {\n position: absolute;\n display: table;\n border: 2px solid @checkbox-check-color;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s @ease-out-back 0.1s;\n content: ' ';\n }\n\n .@{checkbox-prefix-cls}-checked {\n .@{checkbox-inner-prefix-cls} {\n background-color: @checkbox-color;\n border-color: @checkbox-color;\n }\n }\n\n .@{checkbox-prefix-cls}-disabled {\n cursor: not-allowed;\n\n &.@{checkbox-prefix-cls}-checked {\n .@{checkbox-inner-prefix-cls}::after {\n border-color: @disabled-color;\n animation-name: none;\n }\n }\n\n .@{checkbox-prefix-cls}-input {\n cursor: not-allowed;\n }\n\n .@{checkbox-inner-prefix-cls} {\n background-color: @input-disabled-bg;\n border-color: @border-color-base !important;\n &::after {\n border-color: @input-disabled-bg;\n border-collapse: separate;\n animation-name: none;\n }\n }\n\n & + span {\n color: @disabled-color;\n cursor: not-allowed;\n }\n\n // Not show highlight border of checkbox when disabled\n &:hover::after,\n .@{checkbox-prefix-cls}-wrapper:hover &::after {\n visibility: hidden;\n }\n }\n\n .@{checkbox-prefix-cls}-wrapper {\n .reset-component();\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n\n &::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n }\n\n &.@{checkbox-prefix-cls}-wrapper-disabled {\n cursor: not-allowed;\n }\n\n & + & {\n margin-left: 8px;\n }\n }\n\n .@{checkbox-prefix-cls} + span {\n padding-right: 8px;\n padding-left: 8px;\n }\n\n .@{checkbox-prefix-cls}-group {\n .reset-component();\n display: inline-block;\n\n &-item {\n margin-right: @checkbox-group-item-margin-right;\n &:last-child {\n margin-right: 0;\n }\n }\n &-item + &-item {\n margin-left: 0;\n }\n }\n\n // 半选状态\n .@{checkbox-prefix-cls}-indeterminate {\n .@{checkbox-inner-prefix-cls} {\n background-color: @checkbox-check-bg;\n border-color: @border-color-base;\n }\n .@{checkbox-inner-prefix-cls}::after {\n @indeterminate-width: @checkbox-size - 8px;\n @indeterminate-height: @checkbox-size - 8px;\n\n top: 50%;\n left: 50%;\n width: @indeterminate-width;\n height: @indeterminate-height;\n background-color: @checkbox-color;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n }\n\n &.@{checkbox-prefix-cls}-disabled .@{checkbox-inner-prefix-cls}::after {\n background-color: @disabled-color;\n border-color: @disabled-color;\n }\n }\n}\n\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n","/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-checkbox-wrapper:hover .ant-checkbox-inner,\n.ant-checkbox:hover .ant-checkbox-inner,\n.ant-checkbox-input:focus + .ant-checkbox-inner {\n border-color: #1890ff;\n}\n.ant-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #1890ff;\n border-radius: 2px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-checkbox:hover::after,\n.ant-checkbox-wrapper:hover .ant-checkbox::after {\n visibility: visible;\n}\n.ant-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 22%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-checkbox-checked .ant-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-checkbox-checked .ant-checkbox-inner {\n background-color: #1890ff;\n border-color: #1890ff;\n}\n.ant-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-checkbox-disabled .ant-checkbox-input {\n cursor: not-allowed;\n}\n.ant-checkbox-disabled .ant-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-checkbox-disabled .ant-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-checkbox-disabled:hover::after,\n.ant-checkbox-wrapper:hover .ant-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-checkbox-wrapper + .ant-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-checkbox-group-item + .ant-checkbox-group-item {\n margin-left: 0;\n}\n.ant-checkbox-indeterminate .ant-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #1890ff;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-checkbox-rtl {\n direction: rtl;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item + .ant-checkbox-group-item {\n margin-left: 8px;\n}\n","@import '../../style/mixins/index';\n\n.antCheckboxFn(@checkbox-prefix-cls: ~'@{ant-prefix}-checkbox') {\n .@{checkbox-prefix-cls}-rtl {\n direction: rtl;\n }\n\n .@{checkbox-prefix-cls}-group {\n &-item {\n .@{checkbox-prefix-cls}-group-rtl & {\n margin-right: 0;\n margin-left: @checkbox-group-item-margin-right;\n }\n &:last-child {\n .@{checkbox-prefix-cls}-group-rtl & {\n margin-left: 0 !important;\n }\n }\n }\n &-item + &-item {\n .@{checkbox-prefix-cls}-group-rtl & {\n margin-left: @checkbox-group-item-margin-right;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@collapse-prefix-cls: ~'@{ant-prefix}-collapse';\n\n.@{collapse-prefix-cls} {\n .reset-component();\n\n background-color: @collapse-header-bg;\n border: @border-width-base @border-style-base @border-color-base;\n border-bottom: 0;\n border-radius: @collapse-panel-border-radius;\n\n & > &-item {\n border-bottom: @border-width-base @border-style-base @border-color-base;\n\n &:last-child {\n &,\n & > .@{collapse-prefix-cls}-header {\n border-radius: 0 0 @collapse-panel-border-radius @collapse-panel-border-radius;\n }\n }\n\n > .@{collapse-prefix-cls}-header {\n position: relative;\n padding: @collapse-header-padding;\n color: @heading-color;\n line-height: @line-height-base;\n cursor: pointer;\n transition: all 0.3s, visibility 0s;\n .clearfix();\n\n .@{collapse-prefix-cls}-arrow {\n display: inline-block;\n margin-right: 12px;\n font-size: @font-size-sm;\n vertical-align: -1px;\n\n & svg {\n transition: transform 0.24s;\n }\n }\n\n .@{collapse-prefix-cls}-extra {\n float: right;\n }\n\n &:focus {\n outline: none;\n }\n }\n\n .@{collapse-prefix-cls}-header-collapsible-only {\n cursor: default;\n .@{collapse-prefix-cls}-header-text {\n cursor: pointer;\n }\n }\n\n &.@{collapse-prefix-cls}-no-arrow {\n > .@{collapse-prefix-cls}-header {\n padding-left: 12px;\n }\n }\n }\n\n // Expand Icon right\n &-icon-position-right {\n & > .@{collapse-prefix-cls}-item {\n > .@{collapse-prefix-cls}-header {\n padding: @collapse-header-padding;\n padding-right: @collapse-header-padding-extra;\n\n .@{collapse-prefix-cls}-arrow {\n position: absolute;\n top: 50%;\n right: @padding-md;\n left: auto;\n margin: 0;\n transform: translateY(-50%);\n }\n }\n }\n }\n\n &-content {\n color: @text-color;\n background-color: @collapse-content-bg;\n border-top: @border-width-base @border-style-base @border-color-base;\n\n & > &-box {\n padding: @collapse-content-padding;\n }\n\n &-hidden {\n display: none;\n }\n }\n\n &-item:last-child {\n > .@{collapse-prefix-cls}-content {\n border-radius: 0 0 @collapse-panel-border-radius @collapse-panel-border-radius;\n }\n }\n\n &-borderless {\n background-color: @collapse-header-bg;\n border: 0;\n }\n\n &-borderless > &-item {\n border-bottom: 1px solid @border-color-base;\n }\n\n &-borderless > &-item:last-child,\n &-borderless > &-item:last-child &-header {\n border-radius: 0;\n }\n\n &-borderless > &-item > &-content {\n background-color: transparent;\n border-top: 0;\n }\n\n &-borderless > &-item > &-content > &-content-box {\n padding-top: 4px;\n }\n\n &-ghost {\n background-color: transparent;\n border: 0;\n > .@{collapse-prefix-cls}-item {\n border-bottom: 0;\n > .@{collapse-prefix-cls}-content {\n background-color: transparent;\n border-top: 0;\n > .@{collapse-prefix-cls}-content-box {\n padding-top: 12px;\n padding-bottom: 12px;\n }\n }\n }\n }\n\n & &-item-disabled > &-header {\n &,\n & > .arrow {\n color: @disabled-color;\n cursor: not-allowed;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@collapse-prefix-cls: ~'@{ant-prefix}-collapse';\n\n.@{collapse-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n & > &-item {\n > .@{collapse-prefix-cls}-header {\n .@{collapse-prefix-cls}-rtl & {\n padding: @collapse-header-padding;\n padding-right: @collapse-header-padding-extra;\n }\n\n .@{collapse-prefix-cls}-arrow {\n & svg {\n .@{collapse-prefix-cls}-rtl& {\n transform: rotate(180deg);\n }\n }\n }\n\n .@{collapse-prefix-cls}-extra {\n .@{collapse-prefix-cls}-rtl& {\n float: left;\n }\n }\n }\n\n &.@{collapse-prefix-cls}-no-arrow {\n > .@{collapse-prefix-cls}-header {\n .@{collapse-prefix-cls}-rtl& {\n padding-right: 12px;\n padding-left: 0;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@comment-prefix-cls: ~'@{ant-prefix}-comment';\n\n.@{comment-prefix-cls} {\n position: relative;\n background-color: @comment-bg;\n\n &-inner {\n display: flex;\n padding: @comment-padding-base;\n }\n\n &-avatar {\n position: relative;\n flex-shrink: 0;\n margin-right: @margin-sm;\n cursor: pointer;\n\n img {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n }\n }\n\n &-content {\n position: relative;\n flex: 1 1 auto;\n min-width: 1px;\n font-size: @comment-font-size-base;\n word-wrap: break-word;\n\n &-author {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin-bottom: @margin-xss;\n font-size: @comment-font-size-base;\n & > a,\n & > span {\n padding-right: @padding-xs;\n font-size: @comment-font-size-sm;\n line-height: 18px;\n }\n\n &-name {\n color: @comment-author-name-color;\n font-size: @comment-font-size-base;\n transition: color 0.3s;\n > * {\n color: @comment-author-name-color;\n &:hover {\n color: @comment-author-name-color;\n }\n }\n }\n\n &-time {\n color: @comment-author-time-color;\n white-space: nowrap;\n cursor: auto;\n }\n }\n\n &-detail p {\n margin-bottom: @comment-content-detail-p-margin-bottom;\n white-space: pre-wrap;\n }\n }\n\n &-actions {\n margin-top: @comment-actions-margin-top;\n margin-bottom: @comment-actions-margin-bottom;\n padding-left: 0;\n\n > li {\n display: inline-block;\n color: @comment-action-color;\n > span {\n margin-right: 10px;\n color: @comment-action-color;\n font-size: @comment-font-size-sm;\n cursor: pointer;\n transition: color 0.3s;\n user-select: none;\n\n &:hover {\n color: @comment-action-hover-color;\n }\n }\n }\n }\n\n &-nested {\n margin-left: @comment-nest-indent;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@comment-prefix-cls: ~'@{ant-prefix}-comment';\n\n.@{comment-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-avatar {\n .@{comment-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 12px;\n }\n }\n\n &-content {\n &-author {\n & > a,\n & > span {\n .@{comment-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: 8px;\n }\n }\n }\n }\n\n &-actions {\n .@{comment-prefix-cls}-rtl & {\n padding-right: 0;\n }\n > li {\n > span {\n .@{comment-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 10px;\n }\n }\n }\n }\n\n &-nested {\n .@{comment-prefix-cls}-rtl & {\n margin-right: @comment-nest-indent;\n margin-left: 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@descriptions-prefix-cls: ~'@{ant-prefix}-descriptions';\n\n.@{descriptions-prefix-cls} {\n &-header {\n display: flex;\n align-items: center;\n margin-bottom: @descriptions-title-margin-bottom;\n }\n\n &-title {\n flex: auto;\n overflow: hidden;\n color: @heading-color;\n font-weight: bold;\n font-size: @font-size-lg;\n line-height: @line-height-base;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-extra {\n margin-left: auto;\n color: @descriptions-extra-color;\n font-size: @font-size-base;\n }\n\n &-view {\n width: 100%;\n overflow: hidden;\n border-radius: @border-radius-base;\n table {\n width: 100%;\n table-layout: fixed;\n }\n }\n\n &-row {\n > th,\n > td {\n padding-bottom: @descriptions-item-padding-bottom;\n }\n &:last-child {\n border-bottom: none;\n }\n }\n\n &-item-label {\n color: @heading-color;\n font-weight: normal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n text-align: start;\n\n &::after {\n & when (@descriptions-item-trailing-colon=true) {\n content: ':';\n }\n & when not (@descriptions-item-trailing-colon=true) {\n content: ' ';\n }\n\n position: relative;\n top: -0.5px;\n margin: 0 @descriptions-item-label-colon-margin-right 0\n @descriptions-item-label-colon-margin-left;\n }\n\n &.@{descriptions-prefix-cls}-item-no-colon::after {\n content: ' ';\n }\n }\n\n &-item-no-label {\n &::after {\n margin: 0;\n content: '';\n }\n }\n\n &-item-content {\n display: table-cell;\n flex: 1;\n color: @text-color;\n font-size: @font-size-base;\n line-height: @line-height-base;\n word-break: break-word;\n overflow-wrap: break-word;\n }\n\n &-item {\n padding-bottom: 0;\n vertical-align: top;\n\n &-container {\n display: flex;\n\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n display: inline-flex;\n align-items: baseline;\n }\n }\n }\n\n &-middle {\n .@{descriptions-prefix-cls}-row {\n > th,\n > td {\n padding-bottom: @padding-sm;\n }\n }\n }\n\n &-small {\n .@{descriptions-prefix-cls}-row {\n > th,\n > td {\n padding-bottom: @padding-xs;\n }\n }\n }\n\n &-bordered {\n .@{descriptions-prefix-cls}-view {\n border: 1px solid @border-color-split;\n > table {\n table-layout: auto;\n }\n }\n\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n padding: @descriptions-default-padding;\n border-right: 1px solid @border-color-split;\n\n &:last-child {\n border-right: none;\n }\n }\n\n .@{descriptions-prefix-cls}-item-label {\n background-color: @descriptions-bg;\n &::after {\n display: none;\n }\n }\n\n .@{descriptions-prefix-cls}-row {\n border-bottom: 1px solid @border-color-split;\n &:last-child {\n border-bottom: none;\n }\n }\n\n &.@{descriptions-prefix-cls}-middle {\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n padding: @descriptions-middle-padding;\n }\n }\n\n &.@{descriptions-prefix-cls}-small {\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n padding: @descriptions-small-padding;\n }\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/default';\n@import '../../style/mixins/index';\n\n@descriptions-prefix-cls: ~'@{ant-prefix}-descriptions';\n\n.@{descriptions-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-item-label {\n &::after {\n .@{descriptions-prefix-cls}-rtl & {\n margin: 0 @descriptions-item-label-colon-margin-left 0\n @descriptions-item-label-colon-margin-right;\n }\n }\n }\n\n &-bordered {\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n .@{descriptions-prefix-cls}-rtl& {\n border-right: none;\n border-left: 1px solid @border-color-split;\n\n &:last-child {\n border-left: none;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@divider-prefix-cls: ~'@{ant-prefix}-divider';\n\n.@{divider-prefix-cls} {\n .reset-component();\n\n border-top: @border-width-base solid @divider-color;\n\n &-vertical {\n position: relative;\n top: -0.06em;\n display: inline-block;\n height: 0.9em;\n margin: 0 8px;\n vertical-align: middle;\n border-top: 0;\n border-left: @border-width-base solid @divider-color;\n }\n\n &-horizontal {\n display: flex;\n clear: both;\n width: 100%;\n min-width: 100%; // Fix https://github.com/ant-design/ant-design/issues/10914\n margin: 24px 0;\n }\n\n &-horizontal&-with-text {\n display: flex;\n margin: 16px 0;\n color: @heading-color;\n font-weight: 500;\n font-size: @font-size-lg;\n white-space: nowrap;\n text-align: center;\n border-top: 0;\n border-top-color: @divider-color;\n\n &::before,\n &::after {\n position: relative;\n top: 50%;\n width: 50%;\n border-top: @border-width-base solid transparent;\n // Chrome not accept `inherit` in `border-top`\n border-top-color: inherit;\n border-bottom: 0;\n transform: translateY(50%);\n content: '';\n }\n }\n\n &-horizontal&-with-text-left {\n &::before {\n top: 50%;\n width: @divider-orientation-margin;\n }\n &::after {\n top: 50%;\n width: 100% - @divider-orientation-margin;\n }\n }\n\n &-horizontal&-with-text-right {\n &::before {\n top: 50%;\n width: 100% - @divider-orientation-margin;\n }\n &::after {\n top: 50%;\n width: @divider-orientation-margin;\n }\n }\n\n &-inner-text {\n display: inline-block;\n padding: 0 @divider-text-padding;\n }\n\n &-dashed {\n background: none;\n border-color: @divider-color;\n border-style: dashed;\n border-width: @border-width-base 0 0;\n }\n\n &-horizontal&-with-text&-dashed {\n border-top: 0;\n &::before,\n &::after {\n border-style: dashed none none;\n }\n }\n\n &-vertical&-dashed {\n border-width: 0 0 0 @border-width-base;\n }\n\n &-plain&-with-text {\n color: @text-color;\n font-weight: normal;\n font-size: @font-size-base;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@divider-prefix-cls: ~'@{ant-prefix}-divider';\n\n.@{divider-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-horizontal&-with-text-left {\n &::before {\n .@{divider-prefix-cls}-rtl& {\n width: 100% - @divider-orientation-margin;\n }\n }\n &::after {\n .@{divider-prefix-cls}-rtl& {\n width: @divider-orientation-margin;\n }\n }\n }\n\n &-horizontal&-with-text-right {\n &::before {\n .@{divider-prefix-cls}-rtl& {\n width: @divider-orientation-margin;\n }\n }\n &::after {\n .@{divider-prefix-cls}-rtl& {\n width: 100% - @divider-orientation-margin;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n\n@drawer-prefix-cls: ~'@{ant-prefix}-drawer';\n@picker-prefix-cls: ~'@{ant-prefix}-picker';\n\n.@{drawer-prefix-cls} {\n @drawer-header-close-padding: ceil(((@drawer-header-close-size - @font-size-lg) / 2));\n\n position: fixed;\n z-index: @zindex-modal;\n width: 0%;\n height: 100%;\n transition: transform @animation-duration-slow @ease-base-out,\n height 0s ease @animation-duration-slow, width 0s ease @animation-duration-slow;\n > * {\n transition: transform @animation-duration-slow @ease-base-out,\n box-shadow @animation-duration-slow @ease-base-out;\n }\n\n &-content-wrapper {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .@{drawer-prefix-cls}-content {\n width: 100%;\n height: 100%;\n }\n\n &-left,\n &-right {\n top: 0;\n width: 0%;\n height: 100%;\n .@{drawer-prefix-cls}-content-wrapper {\n height: 100%;\n }\n &.@{drawer-prefix-cls}-open {\n width: 100%;\n transition: transform @animation-duration-slow @ease-base-out;\n }\n }\n\n &-left {\n left: 0;\n\n .@{drawer-prefix-cls} {\n &-content-wrapper {\n left: 0;\n }\n }\n\n &.@{drawer-prefix-cls}-open {\n .@{drawer-prefix-cls}-content-wrapper {\n box-shadow: @shadow-1-right;\n }\n }\n }\n\n &-right {\n right: 0;\n\n .@{drawer-prefix-cls} {\n &-content-wrapper {\n right: 0;\n }\n }\n &.@{drawer-prefix-cls}-open {\n .@{drawer-prefix-cls}-content-wrapper {\n box-shadow: @shadow-1-left;\n }\n // https://github.com/ant-design/ant-design/issues/18607, Avoid edge alignment bug.\n &.no-mask {\n right: 1px;\n transform: translateX(1px);\n }\n }\n }\n\n &-top,\n &-bottom {\n left: 0;\n width: 100%;\n height: 0%;\n\n .@{drawer-prefix-cls}-content-wrapper {\n width: 100%;\n }\n &.@{drawer-prefix-cls}-open {\n height: 100%;\n transition: transform @animation-duration-slow @ease-base-out;\n }\n }\n\n &-top {\n top: 0;\n\n &.@{drawer-prefix-cls}-open {\n .@{drawer-prefix-cls}-content-wrapper {\n box-shadow: @shadow-1-down;\n }\n }\n }\n\n &-bottom {\n bottom: 0;\n\n .@{drawer-prefix-cls} {\n &-content-wrapper {\n bottom: 0;\n }\n }\n &.@{drawer-prefix-cls}-open {\n .@{drawer-prefix-cls}-content-wrapper {\n box-shadow: @shadow-1-up;\n }\n &.no-mask {\n bottom: 1px;\n transform: translateY(1px);\n }\n }\n }\n\n &.@{drawer-prefix-cls}-open .@{drawer-prefix-cls}-mask {\n height: 100%;\n opacity: 1;\n transition: none;\n animation: antdDrawerFadeIn @animation-duration-slow @ease-base-out;\n pointer-events: auto;\n }\n\n &-title {\n margin: 0;\n color: @heading-color;\n font-weight: 500;\n font-size: @font-size-lg;\n line-height: 22px;\n }\n\n &-content {\n position: relative;\n z-index: 1;\n overflow: auto;\n background-color: @drawer-bg;\n background-clip: padding-box;\n border: 0;\n }\n\n &-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: @zindex-popup-close;\n display: block;\n padding: @drawer-header-close-padding;\n color: @modal-close-color;\n font-weight: 700;\n font-size: @font-size-lg;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color @animation-duration-slow;\n text-rendering: auto;\n\n &:focus,\n &:hover {\n color: @icon-color-hover;\n text-decoration: none;\n }\n\n .@{drawer-prefix-cls}-header-no-title & {\n margin-right: var(--scroll-bar);\n /* stylelint-disable-next-line function-calc-no-invalid */\n padding-right: ~'calc(@{drawer-header-close-padding} - var(--scroll-bar))';\n }\n }\n\n &-header {\n position: relative;\n padding: @drawer-header-padding;\n color: @text-color;\n background: @drawer-bg;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n\n &-header-no-title {\n color: @text-color;\n background: @drawer-bg;\n }\n\n &-wrapper-body {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n width: 100%;\n height: 100%;\n }\n\n &-body {\n flex-grow: 1;\n padding: @drawer-body-padding;\n overflow: auto;\n font-size: @font-size-base;\n line-height: @line-height-base;\n word-wrap: break-word;\n }\n\n &-footer {\n flex-shrink: 0;\n padding: @drawer-footer-padding-vertical @drawer-footer-padding-horizontal;\n border-top: @border-width-base @border-style-base @border-color-split;\n }\n\n &-mask {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 0;\n background-color: @modal-mask-bg;\n opacity: 0;\n filter: ~'alpha(opacity=45)';\n transition: opacity @animation-duration-slow linear, height 0s ease @animation-duration-slow;\n pointer-events: none;\n }\n\n &-open {\n &-content {\n box-shadow: @shadow-2;\n }\n }\n\n // =================== Hook Components ===================\n .@{picker-prefix-cls} {\n &-clear {\n background: @popover-background;\n }\n }\n}\n\n@keyframes antdDrawerFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n","/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-drawer {\n position: fixed;\n z-index: 1000;\n width: 0%;\n height: 100%;\n transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1), height 0s ease 0.3s, width 0s ease 0.3s;\n}\n.ant-drawer > * {\n transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1), box-shadow 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n.ant-drawer-content-wrapper {\n position: absolute;\n width: 100%;\n height: 100%;\n}\n.ant-drawer .ant-drawer-content {\n width: 100%;\n height: 100%;\n}\n.ant-drawer-left,\n.ant-drawer-right {\n top: 0;\n width: 0%;\n height: 100%;\n}\n.ant-drawer-left .ant-drawer-content-wrapper,\n.ant-drawer-right .ant-drawer-content-wrapper {\n height: 100%;\n}\n.ant-drawer-left.ant-drawer-open,\n.ant-drawer-right.ant-drawer-open {\n width: 100%;\n transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n.ant-drawer-left {\n left: 0;\n}\n.ant-drawer-left .ant-drawer-content-wrapper {\n left: 0;\n}\n.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper {\n box-shadow: 6px 0 16px -8px rgba(0, 0, 0, 0.08), 9px 0 28px 0 rgba(0, 0, 0, 0.05), 12px 0 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-right {\n right: 0;\n}\n.ant-drawer-right .ant-drawer-content-wrapper {\n right: 0;\n}\n.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper {\n box-shadow: -6px 0 16px -8px rgba(0, 0, 0, 0.08), -9px 0 28px 0 rgba(0, 0, 0, 0.05), -12px 0 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-right.ant-drawer-open.no-mask {\n right: 1px;\n transform: translateX(1px);\n}\n.ant-drawer-top,\n.ant-drawer-bottom {\n left: 0;\n width: 100%;\n height: 0%;\n}\n.ant-drawer-top .ant-drawer-content-wrapper,\n.ant-drawer-bottom .ant-drawer-content-wrapper {\n width: 100%;\n}\n.ant-drawer-top.ant-drawer-open,\n.ant-drawer-bottom.ant-drawer-open {\n height: 100%;\n transition: transform 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n.ant-drawer-top {\n top: 0;\n}\n.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper {\n box-shadow: 0 6px 16px -8px rgba(0, 0, 0, 0.08), 0 9px 28px 0 rgba(0, 0, 0, 0.05), 0 12px 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-bottom {\n bottom: 0;\n}\n.ant-drawer-bottom .ant-drawer-content-wrapper {\n bottom: 0;\n}\n.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper {\n box-shadow: 0 -6px 16px -8px rgba(0, 0, 0, 0.08), 0 -9px 28px 0 rgba(0, 0, 0, 0.05), 0 -12px 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-bottom.ant-drawer-open.no-mask {\n bottom: 1px;\n transform: translateY(1px);\n}\n.ant-drawer.ant-drawer-open .ant-drawer-mask {\n height: 100%;\n opacity: 1;\n transition: none;\n animation: antdDrawerFadeIn 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);\n pointer-events: auto;\n}\n.ant-drawer-title {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 22px;\n}\n.ant-drawer-content {\n position: relative;\n z-index: 1;\n overflow: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n}\n.ant-drawer-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 10;\n display: block;\n padding: 20px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: 700;\n font-size: 16px;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n text-rendering: auto;\n}\n.ant-drawer-close:focus,\n.ant-drawer-close:hover {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n}\n.ant-drawer-header-no-title .ant-drawer-close {\n margin-right: var(--scroll-bar);\n /* stylelint-disable-next-line function-calc-no-invalid */\n padding-right: calc(20px - var(--scroll-bar));\n}\n.ant-drawer-header {\n position: relative;\n padding: 16px 24px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 2px 2px 0 0;\n}\n.ant-drawer-header-no-title {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n}\n.ant-drawer-wrapper-body {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n width: 100%;\n height: 100%;\n}\n.ant-drawer-body {\n flex-grow: 1;\n padding: 24px;\n overflow: auto;\n font-size: 14px;\n line-height: 1.5715;\n word-wrap: break-word;\n}\n.ant-drawer-footer {\n flex-shrink: 0;\n padding: 10px 16px;\n border-top: 1px solid #f0f0f0;\n}\n.ant-drawer-mask {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 0;\n background-color: rgba(0, 0, 0, 0.45);\n opacity: 0;\n filter: alpha(opacity=45);\n transition: opacity 0.3s linear, height 0s ease 0.3s;\n pointer-events: none;\n}\n.ant-drawer-open-content {\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-drawer .ant-picker-clear {\n background: #fff;\n}\n@keyframes antdDrawerFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n.ant-drawer-rtl {\n direction: rtl;\n}\n.ant-drawer-rtl .ant-drawer-close {\n right: auto;\n left: 0;\n}\n","@import '../../style/themes/index';\n\n@drawer-prefix-cls: ~'@{ant-prefix}-drawer';\n\n.@{drawer-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-close {\n .@{drawer-prefix-cls}-rtl & {\n right: auto;\n left: 0;\n }\n }\n}\n","@import './index';\n\n// ================================================================\n// = Children Component =\n// ================================================================\n.@{form-item-prefix-cls} {\n .@{ant-prefix}-mentions,\n textarea.@{ant-prefix}-input {\n height: auto;\n }\n\n // input[type=file]\n .@{ant-prefix}-upload {\n background: transparent;\n }\n .@{ant-prefix}-upload.@{ant-prefix}-upload-drag {\n background: @background-color-light;\n }\n\n input[type='radio'],\n input[type='checkbox'] {\n width: 14px;\n height: 14px;\n }\n\n // Radios and checkboxes on same line\n .@{ant-prefix}-radio-inline,\n .@{ant-prefix}-checkbox-inline {\n display: inline-block;\n margin-left: 8px;\n font-weight: normal;\n vertical-align: middle;\n cursor: pointer;\n\n &:first-child {\n margin-left: 0;\n }\n }\n\n .@{ant-prefix}-checkbox-vertical,\n .@{ant-prefix}-radio-vertical {\n display: block;\n }\n\n .@{ant-prefix}-checkbox-vertical + .@{ant-prefix}-checkbox-vertical,\n .@{ant-prefix}-radio-vertical + .@{ant-prefix}-radio-vertical {\n margin-left: 0;\n }\n\n .@{ant-prefix}-input-number {\n + .@{form-prefix-cls}-text {\n margin-left: 8px;\n }\n &-handler-wrap {\n z-index: 2; // https://github.com/ant-design/ant-design/issues/6289\n }\n }\n\n .@{ant-prefix}-select,\n .@{ant-prefix}-cascader-picker {\n width: 100%;\n }\n\n // Don't impact select inside input group and calendar header select\n .@{ant-prefix}-picker-calendar-year-select,\n .@{ant-prefix}-picker-calendar-month-select,\n .@{ant-prefix}-input-group .@{ant-prefix}-select,\n .@{ant-prefix}-input-group .@{ant-prefix}-cascader-picker {\n width: auto;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import '../../button/style/mixin';\n@import '../../grid/style/mixin';\n@import './components';\n@import './inline';\n@import './horizontal';\n@import './vertical';\n@import './status';\n@import './mixin';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n@form-font-height: ceil(@font-size-base * @line-height-base);\n\n.@{form-prefix-cls} {\n .reset-component();\n .reset-form();\n\n .@{form-prefix-cls}-text {\n display: inline-block;\n padding-right: 8px;\n }\n\n // ================================================================\n // = Size =\n // ================================================================\n .formSize(@input-height) {\n .@{form-item-prefix-cls}-label > label {\n height: @input-height;\n }\n\n .@{form-item-prefix-cls}-control-input {\n min-height: @input-height;\n }\n }\n\n &-small {\n .formSize(@input-height-sm);\n }\n &-large {\n .formSize(@input-height-lg);\n }\n}\n\n.explainAndExtraDistance(@num) when (@num >= 0) {\n padding-top: floor(@num);\n}\n\n.explainAndExtraDistance(@num) when (@num < 0) {\n margin-top: ceil(@num);\n margin-bottom: ceil(@num);\n}\n\n// ================================================================\n// = Item =\n// ================================================================\n.@{form-item-prefix-cls} {\n .reset-component();\n\n margin-bottom: @form-item-margin-bottom;\n vertical-align: top;\n\n &-with-help {\n margin-bottom: 0;\n }\n\n &-hidden,\n &-hidden.@{ant-prefix}-row {\n // https://github.com/ant-design/ant-design/issues/26141\n display: none;\n }\n\n // ==============================================================\n // = Label =\n // ==============================================================\n &-label {\n display: inline-block;\n flex-grow: 0;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n vertical-align: middle;\n\n &-left {\n text-align: left;\n }\n\n > label {\n position: relative;\n // display: inline;\n display: inline-flex;\n align-items: center;\n height: @form-item-label-height;\n color: @label-color;\n font-size: @form-item-label-font-size;\n\n > .@{iconfont-css-prefix} {\n font-size: @form-item-label-font-size;\n vertical-align: top;\n }\n\n // Required mark\n &.@{form-item-prefix-cls}-required:not(.@{form-item-prefix-cls}-required-mark-optional)::before {\n display: inline-block;\n margin-right: 4px;\n color: @label-required-color;\n font-size: @form-item-label-font-size;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n\n .@{form-prefix-cls}-hide-required-mark & {\n display: none;\n }\n }\n\n // Optional mark\n .@{form-item-prefix-cls}-optional {\n display: inline-block;\n margin-left: @margin-xss;\n color: @text-color-secondary;\n\n .@{form-prefix-cls}-hide-required-mark & {\n display: none;\n }\n }\n\n // Optional mark\n .@{form-item-prefix-cls}-tooltip {\n color: @text-color-secondary;\n cursor: help;\n writing-mode: horizontal-tb;\n margin-inline-start: @margin-xss;\n }\n\n &::after {\n & when (@form-item-trailing-colon=true) {\n content: ':';\n }\n & when not (@form-item-trailing-colon=true) {\n content: ' ';\n }\n\n position: relative;\n top: -0.5px;\n margin: 0 @form-item-label-colon-margin-right 0 @form-item-label-colon-margin-left;\n }\n\n &.@{form-item-prefix-cls}-no-colon::after {\n content: ' ';\n }\n }\n }\n\n // ==============================================================\n // = Input =\n // ==============================================================\n &-control {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n\n &:first-child:not([class^=~\"'@{ant-prefix}-col-'\"]):not([class*=~\"' @{ant-prefix}-col-'\"]) {\n width: 100%;\n }\n }\n\n &-control-input {\n position: relative;\n display: flex;\n align-items: center;\n min-height: @input-height-base;\n\n &-content {\n flex: auto;\n max-width: 100%;\n }\n }\n\n &-explain,\n &-extra {\n clear: both;\n min-height: @form-item-margin-bottom;\n color: @text-color-secondary;\n font-size: @font-size-base;\n line-height: @line-height-base;\n transition: color 0.3s @ease-out; // sync input color transition\n .explainAndExtraDistance((@form-item-margin-bottom - @form-font-height) / 2);\n }\n\n .@{ant-prefix}-input-textarea-show-count {\n &::after {\n margin-bottom: -22px;\n }\n }\n}\n\n.show-help-motion(@className, @keyframeName, @duration: @animation-duration-slow) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName, @duration);\n .@{name}-enter,\n .@{name}-appear {\n opacity: 0;\n animation-timing-function: @ease-in-out;\n }\n .@{name}-leave {\n animation-timing-function: @ease-in-out;\n }\n}\n\n.show-help-motion(show-help, antShowHelp, 0.3s);\n\n@keyframes antShowHelpIn {\n 0% {\n transform: translateY(-5px);\n opacity: 0;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@keyframes antShowHelpOut {\n to {\n transform: translateY(-5px);\n opacity: 0;\n }\n}\n\n// need there different zoom animation\n// otherwise won't trigger anim\n@keyframes diffZoomIn1 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes diffZoomIn2 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes diffZoomIn3 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@import './rtl';\n","@import './index';\n\n.@{form-prefix-cls}-inline {\n display: flex;\n flex-wrap: wrap;\n\n .@{form-prefix-cls}-item {\n flex: none;\n flex-wrap: nowrap;\n margin-right: 16px;\n margin-bottom: 0;\n\n &-with-help {\n margin-bottom: @form-item-margin-bottom;\n }\n\n > .@{form-item-prefix-cls}-label,\n > .@{form-item-prefix-cls}-control {\n display: inline-block;\n vertical-align: top;\n }\n\n > .@{form-item-prefix-cls}-label {\n flex: none;\n }\n\n .@{form-prefix-cls}-text {\n display: inline-block;\n }\n\n .@{form-item-prefix-cls}-has-feedback {\n display: inline-block;\n }\n }\n}\n","@import './index';\n\n.@{form-prefix-cls}-horizontal {\n .@{form-item-prefix-cls}-label {\n flex-grow: 0;\n }\n .@{form-item-prefix-cls}-control {\n flex: 1 1 0;\n }\n}\n","@import './index';\n\n// ================== Label ==================\n.make-vertical-layout-label() {\n & when (@form-vertical-label-margin > 0) {\n margin: @form-vertical-label-margin;\n }\n padding: @form-vertical-label-padding;\n line-height: @line-height-base;\n white-space: initial;\n text-align: left;\n\n > label {\n margin: 0;\n\n &::after {\n display: none;\n }\n }\n}\n\n.make-vertical-layout() {\n .@{form-prefix-cls}-item .@{form-prefix-cls}-item-label {\n .make-vertical-layout-label();\n }\n .@{form-prefix-cls} {\n .@{form-prefix-cls}-item {\n flex-wrap: wrap;\n .@{form-prefix-cls}-item-label,\n .@{form-prefix-cls}-item-control {\n flex: 0 0 100%;\n max-width: 100%;\n }\n }\n }\n}\n\n.@{form-prefix-cls}-vertical {\n .@{form-item-prefix-cls} {\n flex-direction: column;\n\n &-label > label {\n height: auto;\n }\n }\n}\n\n.@{form-prefix-cls}-vertical .@{form-item-prefix-cls}-label,\n // when labelCol is 24, it is a vertical form\n.@{ant-prefix}-col-24.@{form-item-prefix-cls}-label,\n.@{ant-prefix}-col-xl-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n}\n\n@media (max-width: @screen-xs-max) {\n .make-vertical-layout();\n .@{ant-prefix}-col-xs-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n\n@media (max-width: @screen-sm-max) {\n .@{ant-prefix}-col-sm-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n\n@media (max-width: @screen-md-max) {\n .@{ant-prefix}-col-md-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n\n@media (max-width: @screen-lg-max) {\n .@{ant-prefix}-col-lg-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n\n@media (max-width: @screen-xl-max) {\n .@{ant-prefix}-col-xl-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import '../../button/style/mixin';\n@import '../../grid/style/mixin';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n\n.@{form-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n}\n\n// ================================================================\n// = Item =\n// ================================================================\n.@{form-item-prefix-cls} {\n // ==============================================================\n // = Label =\n // ==============================================================\n &-label {\n .@{form-prefix-cls}-rtl & {\n text-align: left;\n }\n\n > label {\n &.@{form-item-prefix-cls}-required::before {\n .@{form-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n &::after {\n .@{form-prefix-cls}-rtl & {\n margin: 0 @form-item-label-colon-margin-left 0 @form-item-label-colon-margin-right;\n }\n }\n\n .@{form-item-prefix-cls}-optional {\n .@{form-prefix-cls}-rtl & {\n margin-right: @margin-xss;\n margin-left: 0;\n }\n }\n }\n }\n\n // ==============================================================\n // = Input =\n // ==============================================================\n &-control {\n .@{ant-prefix}-col-rtl &:first-child {\n width: 100%;\n }\n }\n\n // status\n &-has-feedback {\n .@{ant-prefix}-input {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-base;\n padding-left: 24px;\n }\n }\n\n .@{ant-prefix}-input-affix-wrapper {\n .@{ant-prefix}-input-suffix {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-base;\n padding-left: 18px;\n }\n }\n .@{ant-prefix}-input {\n .@{form-prefix-cls}-rtl & {\n padding: 0;\n }\n }\n }\n\n .@{ant-prefix}-input-search:not(.@{ant-prefix}-input-search-enter-button) {\n .@{ant-prefix}-input-suffix {\n .@{form-prefix-cls}-rtl & {\n right: auto;\n left: 28px;\n }\n }\n }\n\n .@{ant-prefix}-input-number {\n .@{form-prefix-cls}-rtl & {\n padding-left: 18px;\n }\n }\n\n > .@{ant-prefix}-select .@{ant-prefix}-select-arrow,\n > .@{ant-prefix}-select .@{ant-prefix}-select-clear,\n :not(.@{ant-prefix}-input-group-addon) > .@{ant-prefix}-select .@{ant-prefix}-select-arrow,\n :not(.@{ant-prefix}-input-group-addon) > .@{ant-prefix}-select .@{ant-prefix}-select-clear {\n .@{form-prefix-cls}-rtl & {\n right: auto;\n left: 32px;\n }\n }\n\n > .@{ant-prefix}-select .@{ant-prefix}-select-selection-selected-value,\n :not(.@{ant-prefix}-input-group-addon)\n > .@{ant-prefix}-select\n .@{ant-prefix}-select-selection-selected-value {\n .@{form-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: 42px;\n }\n }\n\n .@{ant-prefix}-cascader-picker {\n &-arrow {\n .@{form-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 19px;\n }\n }\n &-clear {\n .@{form-prefix-cls}-rtl & {\n right: auto;\n left: 32px;\n }\n }\n }\n\n .@{ant-prefix}-picker {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-base;\n padding-left: @input-padding-horizontal-base + @font-size-base * 1.3;\n }\n\n &-large {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-lg;\n padding-left: @input-padding-horizontal-lg + @font-size-base * 1.3;\n }\n }\n\n &-small {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-sm;\n padding-left: @input-padding-horizontal-sm + @font-size-base * 1.3;\n }\n }\n }\n\n &.@{form-item-prefix-cls} {\n &-has-success,\n &-has-warning,\n &-has-error,\n &-is-validating {\n // ====================== Icon ======================\n .@{form-item-prefix-cls}-children-icon {\n .@{form-prefix-cls}-rtl & {\n right: auto;\n left: 0;\n }\n }\n }\n }\n }\n}\n\n// inline\n.@{form-prefix-cls}-inline {\n .@{form-prefix-cls}-item {\n .@{form-prefix-cls}-rtl& {\n margin-right: 0;\n margin-left: 16px;\n }\n }\n}\n\n// vertical\n.make-vertical-layout-label() {\n .@{form-prefix-cls}-rtl& {\n text-align: right;\n }\n}\n","@import './index.less';\n\n.@{form-item-prefix-cls} {\n // ================================================================\n // = Status =\n // ================================================================\n /* Some non-status related component style is in `components.less` */\n\n // ========================= Explain =========================\n /* To support leave along ErrorList. We add additional className to handle explain style */\n &-explain {\n &&-error {\n color: @error-color;\n }\n\n &&-warning {\n color: @warning-color;\n }\n }\n\n &-has-feedback {\n // ========================= Input =========================\n .@{ant-prefix}-input {\n padding-right: 24px;\n }\n // https://github.com/ant-design/ant-design/issues/19884\n .@{ant-prefix}-input-affix-wrapper {\n .@{ant-prefix}-input-suffix {\n padding-right: 18px;\n }\n }\n\n // Fix issue: https://github.com/ant-design/ant-design/issues/7854\n .@{ant-prefix}-input-search:not(.@{ant-prefix}-input-search-enter-button) {\n .@{ant-prefix}-input-suffix {\n right: 28px;\n }\n }\n\n // ======================== Switch =========================\n .@{ant-prefix}-switch {\n margin: 2px 0 4px;\n }\n\n // ======================== Select =========================\n // Fix overlapping between feedback icon and \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar hasher = require('./hasher.js');\n\nconst sha = name => async data => new Uint8Array(await crypto.subtle.digest(name, data));\nconst sha256 = hasher.from({\n name: 'sha2-256',\n code: 18,\n encode: sha('SHA-256')\n});\nconst sha512 = hasher.from({\n name: 'sha2-512',\n code: 19,\n encode: sha('SHA-512')\n});\n\nexports.sha256 = sha256;\nexports.sha512 = sha512;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { arrayify } from \"@ethersproject/bytes\";\nexport function getUrl(href, options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (options == null) {\n options = {};\n }\n const request = {\n method: (options.method || \"GET\"),\n headers: (options.headers || {}),\n body: (options.body || undefined),\n };\n if (options.skipFetchSetup !== true) {\n request.mode = \"cors\"; // no-cors, cors, *same-origin\n request.cache = \"no-cache\"; // *default, no-cache, reload, force-cache, only-if-cached\n request.credentials = \"same-origin\"; // include, *same-origin, omit\n request.redirect = \"follow\"; // manual, *follow, error\n request.referrer = \"client\"; // no-referrer, *client\n }\n ;\n const response = yield fetch(href, request);\n const body = yield response.arrayBuffer();\n const headers = {};\n if (response.headers.forEach) {\n response.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n }\n else {\n ((response.headers).keys)().forEach((key) => {\n headers[key.toLowerCase()] = response.headers.get(key);\n });\n }\n return {\n headers: headers,\n statusCode: response.status,\n statusMessage: response.statusText,\n body: arrayify(new Uint8Array(body)),\n };\n });\n}\n//# sourceMappingURL=geturl.js.map","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { isMemo } from 'react-is';\nexport function fillRef(ref, node) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (_typeof(ref) === 'object' && ref && 'current' in ref) {\n ref.current = node;\n }\n}\n/**\n * Merge refs into one ref function to support ref passing.\n */\n\nexport function composeRef() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n\n return function (node) {\n refs.forEach(function (ref) {\n fillRef(ref, node);\n });\n };\n}\nexport function supportRef(nodeOrComponent) {\n var _type$prototype, _nodeOrComponent$prot;\n\n var type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type; // Function component node\n\n if (typeof type === 'function' && !((_type$prototype = type.prototype) === null || _type$prototype === void 0 ? void 0 : _type$prototype.render)) {\n return false;\n } // Class component\n\n\n if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) === null || _nodeOrComponent$prot === void 0 ? void 0 : _nodeOrComponent$prot.render)) {\n return false;\n }\n\n return true;\n}\n/* eslint-enable */","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction concat(arrays, length) {\n if (!length) {\n length = arrays.reduce((acc, curr) => acc + curr.length, 0);\n }\n const output = new Uint8Array(length);\n let offset = 0;\n for (const arr of arrays) {\n output.set(arr, offset);\n offset += arr.length;\n }\n return output;\n}\n\nexports.concat = concat;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction objectToCamel(obj) {\n if (obj == null) {\n return obj;\n }\n const caps = /^[A-Z]+$/;\n const output = {};\n return Object.keys(obj).reduce((camelObj, k) => {\n if (caps.test(k)) {\n camelObj[k.toLowerCase()] = obj[k];\n } else if (caps.test(k[0])) {\n camelObj[k[0].toLowerCase() + k.slice(1)] = obj[k];\n } else {\n camelObj[k] = obj[k];\n }\n return camelObj;\n }, output);\n}\n\nexports.objectToCamel = objectToCamel;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport ClearableLabeledInput, { hasPrefixSuffix } from './ClearableLabeledInput';\nimport { ConfigConsumer } from '../config-provider';\nimport SizeContext from '../config-provider/SizeContext';\nimport devWarning from '../_util/devWarning';\nexport function fixControlledValue(value) {\n if (typeof value === 'undefined' || value === null) {\n return '';\n }\n\n return value;\n}\nexport function resolveOnChange(target, e, onChange, targetValue) {\n if (!onChange) {\n return;\n }\n\n var event = e;\n var originalInputValue = target.value;\n\n if (e.type === 'click') {\n // click clear icon\n event = Object.create(e);\n event.target = target;\n event.currentTarget = target; // change target ref value cause e.target.value should be '' when clear input\n\n target.value = '';\n onChange(event); // reset target ref value\n\n target.value = originalInputValue;\n return;\n } // Trigger by composition event, this means we need force change the input value\n\n\n if (targetValue !== undefined) {\n event = Object.create(e);\n event.target = target;\n event.currentTarget = target;\n target.value = targetValue;\n onChange(event);\n return;\n }\n\n onChange(event);\n}\nexport function getInputClassName(prefixCls, bordered, size, disabled, direction) {\n var _classNames;\n\n return classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-sm\"), size === 'small'), _defineProperty(_classNames, \"\".concat(prefixCls, \"-lg\"), size === 'large'), _defineProperty(_classNames, \"\".concat(prefixCls, \"-disabled\"), disabled), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _defineProperty(_classNames, \"\".concat(prefixCls, \"-borderless\"), !bordered), _classNames));\n}\nexport function triggerFocus(element, option) {\n if (!element) return;\n element.focus(option); // Selection content\n\n var _ref = option || {},\n cursor = _ref.cursor;\n\n if (cursor) {\n var len = element.value.length;\n\n switch (cursor) {\n case 'start':\n element.setSelectionRange(0, 0);\n break;\n\n case 'end':\n element.setSelectionRange(len, len);\n break;\n\n default:\n element.setSelectionRange(0, len);\n }\n }\n}\n\nvar Input = /*#__PURE__*/function (_React$Component) {\n _inherits(Input, _React$Component);\n\n var _super = _createSuper(Input);\n\n function Input(props) {\n var _this;\n\n _classCallCheck(this, Input);\n\n _this = _super.call(this, props);\n _this.direction = 'ltr';\n\n _this.focus = function (option) {\n triggerFocus(_this.input, option);\n };\n\n _this.saveClearableInput = function (input) {\n _this.clearableInput = input;\n };\n\n _this.saveInput = function (input) {\n _this.input = input;\n };\n\n _this.onFocus = function (e) {\n var onFocus = _this.props.onFocus;\n\n _this.setState({\n focused: true\n }, _this.clearPasswordValueAttribute);\n\n onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);\n };\n\n _this.onBlur = function (e) {\n var onBlur = _this.props.onBlur;\n\n _this.setState({\n focused: false\n }, _this.clearPasswordValueAttribute);\n\n onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);\n };\n\n _this.handleReset = function (e) {\n _this.setValue('', function () {\n _this.focus();\n });\n\n resolveOnChange(_this.input, e, _this.props.onChange);\n };\n\n _this.renderInput = function (prefixCls, size, bordered) {\n var input = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _this$props = _this.props,\n className = _this$props.className,\n addonBefore = _this$props.addonBefore,\n addonAfter = _this$props.addonAfter,\n customizeSize = _this$props.size,\n disabled = _this$props.disabled; // Fix https://fb.me/react-unknown-prop\n\n var otherProps = omit(_this.props, ['prefixCls', 'onPressEnter', 'addonBefore', 'addonAfter', 'prefix', 'suffix', 'allowClear', // Input elements must be either controlled or uncontrolled,\n // specify either the value prop, or the defaultValue prop, but not both.\n 'defaultValue', 'size', 'inputType', 'bordered']);\n return /*#__PURE__*/React.createElement(\"input\", _extends({\n autoComplete: input.autoComplete\n }, otherProps, {\n onChange: _this.handleChange,\n onFocus: _this.onFocus,\n onBlur: _this.onBlur,\n onKeyDown: _this.handleKeyDown,\n className: classNames(getInputClassName(prefixCls, bordered, customizeSize || size, disabled, _this.direction), _defineProperty({}, className, className && !addonBefore && !addonAfter)),\n ref: _this.saveInput\n }));\n };\n\n _this.clearPasswordValueAttribute = function () {\n // https://github.com/ant-design/ant-design/issues/20541\n _this.removePasswordTimeout = setTimeout(function () {\n if (_this.input && _this.input.getAttribute('type') === 'password' && _this.input.hasAttribute('value')) {\n _this.input.removeAttribute('value');\n }\n });\n };\n\n _this.handleChange = function (e) {\n _this.setValue(e.target.value, _this.clearPasswordValueAttribute);\n\n resolveOnChange(_this.input, e, _this.props.onChange);\n };\n\n _this.handleKeyDown = function (e) {\n var _this$props2 = _this.props,\n onPressEnter = _this$props2.onPressEnter,\n onKeyDown = _this$props2.onKeyDown;\n\n if (onPressEnter && e.keyCode === 13) {\n onPressEnter(e);\n }\n\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);\n };\n\n _this.renderComponent = function (_ref2) {\n var getPrefixCls = _ref2.getPrefixCls,\n direction = _ref2.direction,\n input = _ref2.input;\n var _this$state = _this.state,\n value = _this$state.value,\n focused = _this$state.focused;\n var _this$props3 = _this.props,\n customizePrefixCls = _this$props3.prefixCls,\n _this$props3$bordered = _this$props3.bordered,\n bordered = _this$props3$bordered === void 0 ? true : _this$props3$bordered;\n var prefixCls = getPrefixCls('input', customizePrefixCls);\n _this.direction = direction;\n return /*#__PURE__*/React.createElement(SizeContext.Consumer, null, function (size) {\n return /*#__PURE__*/React.createElement(ClearableLabeledInput, _extends({\n size: size\n }, _this.props, {\n prefixCls: prefixCls,\n inputType: \"input\",\n value: fixControlledValue(value),\n element: _this.renderInput(prefixCls, size, bordered, input),\n handleReset: _this.handleReset,\n ref: _this.saveClearableInput,\n direction: direction,\n focused: focused,\n triggerFocus: _this.focus,\n bordered: bordered\n }));\n });\n };\n\n var value = typeof props.value === 'undefined' ? props.defaultValue : props.value;\n _this.state = {\n value: value,\n focused: false,\n // eslint-disable-next-line react/no-unused-state\n prevValue: props.value\n };\n return _this;\n }\n\n _createClass(Input, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.clearPasswordValueAttribute();\n } // Since polyfill `getSnapshotBeforeUpdate` need work with `componentDidUpdate`.\n // We keep an empty function here.\n\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {}\n }, {\n key: \"getSnapshotBeforeUpdate\",\n value: function getSnapshotBeforeUpdate(prevProps) {\n if (hasPrefixSuffix(prevProps) !== hasPrefixSuffix(this.props)) {\n devWarning(this.input !== document.activeElement, 'Input', \"When Input is focused, dynamic add or remove prefix / suffix will make it lose focus caused by dom structure change. Read more: https://ant.design/components/input/#FAQ\");\n }\n\n return null;\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.removePasswordTimeout) {\n clearTimeout(this.removePasswordTimeout);\n }\n }\n }, {\n key: \"blur\",\n value: function blur() {\n this.input.blur();\n }\n }, {\n key: \"setSelectionRange\",\n value: function setSelectionRange(start, end, direction) {\n this.input.setSelectionRange(start, end, direction);\n }\n }, {\n key: \"select\",\n value: function select() {\n this.input.select();\n }\n }, {\n key: \"setValue\",\n value: function setValue(value, callback) {\n if (this.props.value === undefined) {\n this.setState({\n value: value\n }, callback);\n } else {\n callback === null || callback === void 0 ? void 0 : callback();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React.createElement(ConfigConsumer, null, this.renderComponent);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, _ref3) {\n var prevValue = _ref3.prevValue;\n var newState = {\n prevValue: nextProps.value\n };\n\n if (nextProps.value !== undefined || prevValue !== nextProps.value) {\n newState.value = nextProps.value;\n }\n\n return newState;\n }\n }]);\n\n return Input;\n}(React.Component);\n\nInput.defaultProps = {\n type: 'text'\n};\nexport default Input;","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction equals(a, b) {\n if (a === b) {\n return true;\n }\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\nexports.equals = equals;\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isIpfs = require('is-ipfs');\nvar cid = require('multiformats/cid');\nvar key = require('interface-datastore/key');\nvar errCode = require('err-code');\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\nvar toCidAndPath = require('ipfs-core-utils/to-cid-and-path');\nvar dagPB = require('@ipld/dag-pb');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar isIpfs__default = /*#__PURE__*/_interopDefaultLegacy(isIpfs);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar dagPB__namespace = /*#__PURE__*/_interopNamespace(dagPB);\n\nconst ERR_BAD_PATH = 'ERR_BAD_PATH';\nconst OFFLINE_ERROR = 'This command must be run in online mode. Try running \\'ipfs daemon\\' first.';\nconst MFS_ROOT_KEY = new key.Key('/local/filesroot');\nconst MFS_MAX_CHUNK_SIZE = 262144;\nconst MFS_MAX_LINKS = 174;\nconst normalizePath = pathStr => {\n const cid$1 = cid.CID.asCID(pathStr);\n if (cid$1) {\n return `/ipfs/${ pathStr }`;\n }\n const str = pathStr.toString();\n try {\n return `/ipfs/${ cid.CID.parse(str) }`;\n } catch {\n }\n if (isIpfs__default[\"default\"].path(str)) {\n return str;\n } else {\n throw errCode__default[\"default\"](new Error(`invalid path: ${ pathStr }`), ERR_BAD_PATH);\n }\n};\nconst normalizeCidPath = path => {\n if (path instanceof Uint8Array) {\n return cid.CID.decode(path).toString();\n }\n path = path.toString();\n if (path.indexOf('/ipfs/') === 0) {\n path = path.substring('/ipfs/'.length);\n }\n if (path.charAt(path.length - 1) === '/') {\n path = path.substring(0, path.length - 1);\n }\n return path;\n};\nconst resolvePath = async function (repo, codecs, ipfsPath, options = {}) {\n const {cid: cid$1, path} = toCidAndPath.toCidAndPath(ipfsPath);\n if (path) {\n options.path = path;\n }\n let lastCid = cid$1;\n let lastRemainderPath = options.path || '';\n if (lastRemainderPath.startsWith('/')) {\n lastRemainderPath = lastRemainderPath.substring(1);\n }\n if (options.path) {\n try {\n for await (const {value, remainderPath} of resolve(cid$1, options.path, codecs, repo, { signal: options.signal })) {\n if (!cid.CID.asCID(value)) {\n break;\n }\n lastRemainderPath = remainderPath;\n lastCid = value;\n }\n } catch (err) {\n if (err.message.startsWith('Object has no property')) {\n err.message = `no link named \"${ lastRemainderPath.split('/')[0] }\" under ${ lastCid }`;\n err.code = 'ERR_NO_LINK';\n }\n throw err;\n }\n }\n return {\n cid: lastCid,\n remainderPath: lastRemainderPath || ''\n };\n};\nconst mapFile = file => {\n if (file.type !== 'file' && file.type !== 'directory' && file.type !== 'raw') {\n throw new Error(`Unknown node type '${ file.type }'`);\n }\n const output = {\n cid: file.cid,\n path: file.path,\n name: file.name,\n size: file.size,\n type: 'file'\n };\n if (file.type === 'directory') {\n output.type = 'dir';\n }\n if (file.type === 'file') {\n output.size = file.unixfs.fileSize();\n }\n if (file.type === 'file' || file.type === 'directory') {\n output.mode = file.unixfs.mode;\n if (file.unixfs.mtime !== undefined) {\n output.mtime = file.unixfs.mtime;\n }\n }\n return output;\n};\nconst withTimeout = withTimeoutOption.withTimeoutOption(async (promise, _options) => await promise);\nconst resolve = async function* (cid$1, path, codecs, repo, options) {\n const load = async cid => {\n const codec = await codecs.getCodec(cid.code);\n const block = await repo.blocks.get(cid, options);\n return codec.decode(block);\n };\n const parts = path.split('/').filter(Boolean);\n let value = await load(cid$1);\n let lastCid = cid$1;\n while (parts.length) {\n const key = parts.shift();\n if (!key) {\n throw errCode__default[\"default\"](new Error(`Could not resolve path \"${ path }\"`), 'ERR_INVALID_PATH');\n }\n if (cid$1.code === dagPB__namespace.code && Array.isArray(value.Links)) {\n const link = value.Links.find(l => l.Name === key);\n if (link) {\n yield {\n value: link.Hash,\n remainderPath: parts.join('/')\n };\n value = await load(link.Hash);\n lastCid = link.Hash;\n continue;\n }\n }\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n value = value[key];\n yield {\n value,\n remainderPath: parts.join('/')\n };\n } else {\n throw errCode__default[\"default\"](new Error(`no link named \"${ key }\" under ${ lastCid }`), 'ERR_NO_LINK');\n }\n if (cid.CID.asCID(value)) {\n lastCid = value;\n value = await load(value);\n }\n }\n yield {\n value,\n remainderPath: ''\n };\n};\n\nexports.MFS_MAX_CHUNK_SIZE = MFS_MAX_CHUNK_SIZE;\nexports.MFS_MAX_LINKS = MFS_MAX_LINKS;\nexports.MFS_ROOT_KEY = MFS_ROOT_KEY;\nexports.OFFLINE_ERROR = OFFLINE_ERROR;\nexports.mapFile = mapFile;\nexports.normalizeCidPath = normalizeCidPath;\nexports.normalizePath = normalizePath;\nexports.resolve = resolve;\nexports.resolvePath = resolvePath;\nexports.withTimeout = withTimeout;\n","'use strict'\n\nlet impl\n\nif (globalThis.AbortController && globalThis.AbortSignal) {\n impl = globalThis\n} else {\n impl = require('abort-controller')\n}\n\nmodule.exports.AbortSignal = impl.AbortSignal\nmodule.exports.AbortController = impl.AbortController\n","\"use strict\";\nimport { getAddress, getContractAddress } from \"@ethersproject/address\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { hexDataLength, hexDataSlice, hexValue, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { AddressZero } from \"@ethersproject/constants\";\nimport { shallowCopy } from \"@ethersproject/properties\";\nimport { accessListify, parse as parseTransaction } from \"@ethersproject/transactions\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nexport class Formatter {\n constructor() {\n logger.checkNew(new.target, Formatter);\n this.formats = this.getDefaultFormats();\n }\n getDefaultFormats() {\n const formats = ({});\n const address = this.address.bind(this);\n const bigNumber = this.bigNumber.bind(this);\n const blockTag = this.blockTag.bind(this);\n const data = this.data.bind(this);\n const hash = this.hash.bind(this);\n const hex = this.hex.bind(this);\n const number = this.number.bind(this);\n const type = this.type.bind(this);\n const strictData = (v) => { return this.data(v, true); };\n formats.transaction = {\n hash: hash,\n type: type,\n accessList: Formatter.allowNull(this.accessList.bind(this), null),\n blockHash: Formatter.allowNull(hash, null),\n blockNumber: Formatter.allowNull(number, null),\n transactionIndex: Formatter.allowNull(number, null),\n confirmations: Formatter.allowNull(number, null),\n from: address,\n // either (gasPrice) or (maxPriorityFeePerGas + maxFeePerGas)\n // must be set\n gasPrice: Formatter.allowNull(bigNumber),\n maxPriorityFeePerGas: Formatter.allowNull(bigNumber),\n maxFeePerGas: Formatter.allowNull(bigNumber),\n gasLimit: bigNumber,\n to: Formatter.allowNull(address, null),\n value: bigNumber,\n nonce: number,\n data: data,\n r: Formatter.allowNull(this.uint256),\n s: Formatter.allowNull(this.uint256),\n v: Formatter.allowNull(number),\n creates: Formatter.allowNull(address, null),\n raw: Formatter.allowNull(data),\n };\n formats.transactionRequest = {\n from: Formatter.allowNull(address),\n nonce: Formatter.allowNull(number),\n gasLimit: Formatter.allowNull(bigNumber),\n gasPrice: Formatter.allowNull(bigNumber),\n maxPriorityFeePerGas: Formatter.allowNull(bigNumber),\n maxFeePerGas: Formatter.allowNull(bigNumber),\n to: Formatter.allowNull(address),\n value: Formatter.allowNull(bigNumber),\n data: Formatter.allowNull(strictData),\n type: Formatter.allowNull(number),\n accessList: Formatter.allowNull(this.accessList.bind(this), null),\n };\n formats.receiptLog = {\n transactionIndex: number,\n blockNumber: number,\n transactionHash: hash,\n address: address,\n topics: Formatter.arrayOf(hash),\n data: data,\n logIndex: number,\n blockHash: hash,\n };\n formats.receipt = {\n to: Formatter.allowNull(this.address, null),\n from: Formatter.allowNull(this.address, null),\n contractAddress: Formatter.allowNull(address, null),\n transactionIndex: number,\n // should be allowNull(hash), but broken-EIP-658 support is handled in receipt\n root: Formatter.allowNull(hex),\n gasUsed: bigNumber,\n logsBloom: Formatter.allowNull(data),\n blockHash: hash,\n transactionHash: hash,\n logs: Formatter.arrayOf(this.receiptLog.bind(this)),\n blockNumber: number,\n confirmations: Formatter.allowNull(number, null),\n cumulativeGasUsed: bigNumber,\n effectiveGasPrice: Formatter.allowNull(bigNumber),\n status: Formatter.allowNull(number),\n type: type\n };\n formats.block = {\n hash: hash,\n parentHash: hash,\n number: number,\n timestamp: number,\n nonce: Formatter.allowNull(hex),\n difficulty: this.difficulty.bind(this),\n gasLimit: bigNumber,\n gasUsed: bigNumber,\n miner: address,\n extraData: data,\n transactions: Formatter.allowNull(Formatter.arrayOf(hash)),\n baseFeePerGas: Formatter.allowNull(bigNumber)\n };\n formats.blockWithTransactions = shallowCopy(formats.block);\n formats.blockWithTransactions.transactions = Formatter.allowNull(Formatter.arrayOf(this.transactionResponse.bind(this)));\n formats.filter = {\n fromBlock: Formatter.allowNull(blockTag, undefined),\n toBlock: Formatter.allowNull(blockTag, undefined),\n blockHash: Formatter.allowNull(hash, undefined),\n address: Formatter.allowNull(address, undefined),\n topics: Formatter.allowNull(this.topics.bind(this), undefined),\n };\n formats.filterLog = {\n blockNumber: Formatter.allowNull(number),\n blockHash: Formatter.allowNull(hash),\n transactionIndex: number,\n removed: Formatter.allowNull(this.boolean.bind(this)),\n address: address,\n data: Formatter.allowFalsish(data, \"0x\"),\n topics: Formatter.arrayOf(hash),\n transactionHash: hash,\n logIndex: number,\n };\n return formats;\n }\n accessList(accessList) {\n return accessListify(accessList || []);\n }\n // Requires a BigNumberish that is within the IEEE754 safe integer range; returns a number\n // Strict! Used on input.\n number(number) {\n if (number === \"0x\") {\n return 0;\n }\n return BigNumber.from(number).toNumber();\n }\n type(number) {\n if (number === \"0x\" || number == null) {\n return 0;\n }\n return BigNumber.from(number).toNumber();\n }\n // Strict! Used on input.\n bigNumber(value) {\n return BigNumber.from(value);\n }\n // Requires a boolean, \"true\" or \"false\"; returns a boolean\n boolean(value) {\n if (typeof (value) === \"boolean\") {\n return value;\n }\n if (typeof (value) === \"string\") {\n value = value.toLowerCase();\n if (value === \"true\") {\n return true;\n }\n if (value === \"false\") {\n return false;\n }\n }\n throw new Error(\"invalid boolean - \" + value);\n }\n hex(value, strict) {\n if (typeof (value) === \"string\") {\n if (!strict && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n if (isHexString(value)) {\n return value.toLowerCase();\n }\n }\n return logger.throwArgumentError(\"invalid hash\", \"value\", value);\n }\n data(value, strict) {\n const result = this.hex(value, strict);\n if ((result.length % 2) !== 0) {\n throw new Error(\"invalid data; odd-length - \" + value);\n }\n return result;\n }\n // Requires an address\n // Strict! Used on input.\n address(value) {\n return getAddress(value);\n }\n callAddress(value) {\n if (!isHexString(value, 32)) {\n return null;\n }\n const address = getAddress(hexDataSlice(value, 12));\n return (address === AddressZero) ? null : address;\n }\n contractAddress(value) {\n return getContractAddress(value);\n }\n // Strict! Used on input.\n blockTag(blockTag) {\n if (blockTag == null) {\n return \"latest\";\n }\n if (blockTag === \"earliest\") {\n return \"0x0\";\n }\n if (blockTag === \"latest\" || blockTag === \"pending\") {\n return blockTag;\n }\n if (typeof (blockTag) === \"number\" || isHexString(blockTag)) {\n return hexValue(blockTag);\n }\n throw new Error(\"invalid blockTag\");\n }\n // Requires a hash, optionally requires 0x prefix; returns prefixed lowercase hash.\n hash(value, strict) {\n const result = this.hex(value, strict);\n if (hexDataLength(result) !== 32) {\n return logger.throwArgumentError(\"invalid hash\", \"value\", value);\n }\n return result;\n }\n // Returns the difficulty as a number, or if too large (i.e. PoA network) null\n difficulty(value) {\n if (value == null) {\n return null;\n }\n const v = BigNumber.from(value);\n try {\n return v.toNumber();\n }\n catch (error) { }\n return null;\n }\n uint256(value) {\n if (!isHexString(value)) {\n throw new Error(\"invalid uint256\");\n }\n return hexZeroPad(value, 32);\n }\n _block(value, format) {\n if (value.author != null && value.miner == null) {\n value.miner = value.author;\n }\n // The difficulty may need to come from _difficulty in recursed blocks\n const difficulty = (value._difficulty != null) ? value._difficulty : value.difficulty;\n const result = Formatter.check(format, value);\n result._difficulty = ((difficulty == null) ? null : BigNumber.from(difficulty));\n return result;\n }\n block(value) {\n return this._block(value, this.formats.block);\n }\n blockWithTransactions(value) {\n return this._block(value, this.formats.blockWithTransactions);\n }\n // Strict! Used on input.\n transactionRequest(value) {\n return Formatter.check(this.formats.transactionRequest, value);\n }\n transactionResponse(transaction) {\n // Rename gas to gasLimit\n if (transaction.gas != null && transaction.gasLimit == null) {\n transaction.gasLimit = transaction.gas;\n }\n // Some clients (TestRPC) do strange things like return 0x0 for the\n // 0 address; correct this to be a real address\n if (transaction.to && BigNumber.from(transaction.to).isZero()) {\n transaction.to = \"0x0000000000000000000000000000000000000000\";\n }\n // Rename input to data\n if (transaction.input != null && transaction.data == null) {\n transaction.data = transaction.input;\n }\n // If to and creates are empty, populate the creates from the transaction\n if (transaction.to == null && transaction.creates == null) {\n transaction.creates = this.contractAddress(transaction);\n }\n if ((transaction.type === 1 || transaction.type === 2) && transaction.accessList == null) {\n transaction.accessList = [];\n }\n const result = Formatter.check(this.formats.transaction, transaction);\n if (transaction.chainId != null) {\n let chainId = transaction.chainId;\n if (isHexString(chainId)) {\n chainId = BigNumber.from(chainId).toNumber();\n }\n result.chainId = chainId;\n }\n else {\n let chainId = transaction.networkId;\n // geth-etc returns chainId\n if (chainId == null && result.v == null) {\n chainId = transaction.chainId;\n }\n if (isHexString(chainId)) {\n chainId = BigNumber.from(chainId).toNumber();\n }\n if (typeof (chainId) !== \"number\" && result.v != null) {\n chainId = (result.v - 35) / 2;\n if (chainId < 0) {\n chainId = 0;\n }\n chainId = parseInt(chainId);\n }\n if (typeof (chainId) !== \"number\") {\n chainId = 0;\n }\n result.chainId = chainId;\n }\n // 0x0000... should actually be null\n if (result.blockHash && result.blockHash.replace(/0/g, \"\") === \"x\") {\n result.blockHash = null;\n }\n return result;\n }\n transaction(value) {\n return parseTransaction(value);\n }\n receiptLog(value) {\n return Formatter.check(this.formats.receiptLog, value);\n }\n receipt(value) {\n const result = Formatter.check(this.formats.receipt, value);\n // RSK incorrectly implemented EIP-658, so we munge things a bit here for it\n if (result.root != null) {\n if (result.root.length <= 4) {\n // Could be 0x00, 0x0, 0x01 or 0x1\n const value = BigNumber.from(result.root).toNumber();\n if (value === 0 || value === 1) {\n // Make sure if both are specified, they match\n if (result.status != null && (result.status !== value)) {\n logger.throwArgumentError(\"alt-root-status/status mismatch\", \"value\", { root: result.root, status: result.status });\n }\n result.status = value;\n delete result.root;\n }\n else {\n logger.throwArgumentError(\"invalid alt-root-status\", \"value.root\", result.root);\n }\n }\n else if (result.root.length !== 66) {\n // Must be a valid bytes32\n logger.throwArgumentError(\"invalid root hash\", \"value.root\", result.root);\n }\n }\n if (result.status != null) {\n result.byzantium = true;\n }\n return result;\n }\n topics(value) {\n if (Array.isArray(value)) {\n return value.map((v) => this.topics(v));\n }\n else if (value != null) {\n return this.hash(value, true);\n }\n return null;\n }\n filter(value) {\n return Formatter.check(this.formats.filter, value);\n }\n filterLog(value) {\n return Formatter.check(this.formats.filterLog, value);\n }\n static check(format, object) {\n const result = {};\n for (const key in format) {\n try {\n const value = format[key](object[key]);\n if (value !== undefined) {\n result[key] = value;\n }\n }\n catch (error) {\n error.checkKey = key;\n error.checkValue = object[key];\n throw error;\n }\n }\n return result;\n }\n // if value is null-ish, nullValue is returned\n static allowNull(format, nullValue) {\n return (function (value) {\n if (value == null) {\n return nullValue;\n }\n return format(value);\n });\n }\n // If value is false-ish, replaceValue is returned\n static allowFalsish(format, replaceValue) {\n return (function (value) {\n if (!value) {\n return replaceValue;\n }\n return format(value);\n });\n }\n // Requires an Array satisfying check\n static arrayOf(format) {\n return (function (array) {\n if (!Array.isArray(array)) {\n throw new Error(\"not an array\");\n }\n const result = [];\n array.forEach(function (value) {\n result.push(format(value));\n });\n return result;\n });\n }\n}\nexport function isCommunityResourcable(value) {\n return (value && typeof (value.isCommunityResource) === \"function\");\n}\nexport function isCommunityResource(value) {\n return (isCommunityResourcable(value) && value.isCommunityResource());\n}\n// Show the throttle message only once\nlet throttleMessage = false;\nexport function showThrottleMessage() {\n if (throttleMessage) {\n return;\n }\n throttleMessage = true;\n console.log(\"========= NOTICE =========\");\n console.log(\"Request-Rate Exceeded (this message will not be repeated)\");\n console.log(\"\");\n console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n console.log(\"community resource for low-traffic projects and early prototyping.\");\n console.log(\"\");\n console.log(\"While your application will continue to function, we highly recommended\");\n console.log(\"signing up for your own API keys to improve performance, increase your\");\n console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n console.log(\"\");\n console.log(\"For more details: https:/\\/docs.ethers.io/api-keys/\");\n console.log(\"==========================\");\n}\n//# sourceMappingURL=formatter.js.map","\"use strict\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n bytes = arrayify(bytes);\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.checkNormalize();\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return arrayify(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","'use strict';\n\nvar isHexPrefixed = require('is-hex-prefixed');\nvar stripHexPrefix = require('strip-hex-prefix');\n\n/**\n * Pads a `String` to have an even length\n * @param {String} value\n * @return {String} output\n */\nfunction padToEven(value) {\n var a = value; // eslint-disable-line\n\n if (typeof a !== 'string') {\n throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');\n }\n\n if (a.length % 2) {\n a = '0' + a;\n }\n\n return a;\n}\n\n/**\n * Converts a `Number` into a hex `String`\n * @param {Number} i\n * @return {String}\n */\nfunction intToHex(i) {\n var hex = i.toString(16); // eslint-disable-line\n\n return '0x' + hex;\n}\n\n/**\n * Converts an `Number` to a `Buffer`\n * @param {Number} i\n * @return {Buffer}\n */\nfunction intToBuffer(i) {\n var hex = intToHex(i);\n\n return new Buffer(padToEven(hex.slice(2)), 'hex');\n}\n\n/**\n * Get the binary size of a string\n * @param {String} str\n * @return {Number}\n */\nfunction getBinarySize(str) {\n if (typeof str !== 'string') {\n throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \\'str\\' to be type String, got \\'' + typeof str + '\\'.');\n }\n\n return Buffer.byteLength(str, 'utf8');\n}\n\n/**\n * Returns TRUE if the first specified array contains all elements\n * from the second one. FALSE otherwise.\n *\n * @param {array} superset\n * @param {array} subset\n *\n * @returns {boolean}\n */\nfunction arrayContainsArray(superset, subset, some) {\n if (Array.isArray(superset) !== true) {\n throw new Error('[ethjs-util] method arrayContainsArray requires input \\'superset\\' to be an array got type \\'' + typeof superset + '\\'');\n }\n if (Array.isArray(subset) !== true) {\n throw new Error('[ethjs-util] method arrayContainsArray requires input \\'subset\\' to be an array got type \\'' + typeof subset + '\\'');\n }\n\n return subset[Boolean(some) && 'some' || 'every'](function (value) {\n return superset.indexOf(value) >= 0;\n });\n}\n\n/**\n * Should be called to get utf8 from it's hex representation\n *\n * @method toUtf8\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nfunction toUtf8(hex) {\n var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');\n\n return bufferValue.toString('utf8');\n}\n\n/**\n * Should be called to get ascii from it's hex representation\n *\n * @method toAscii\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nfunction toAscii(hex) {\n var str = ''; // eslint-disable-line\n var i = 0,\n l = hex.length; // eslint-disable-line\n\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n\n for (; i < l; i += 2) {\n var code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n\n return str;\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @method fromUtf8\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nfunction fromUtf8(stringValue) {\n var str = new Buffer(stringValue, 'utf8');\n\n return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @method fromAscii\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nfunction fromAscii(stringValue) {\n var hex = ''; // eslint-disable-line\n for (var i = 0; i < stringValue.length; i++) {\n // eslint-disable-line\n var code = stringValue.charCodeAt(i);\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return '0x' + hex;\n}\n\n/**\n * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]\n *\n * @method getKeys get specific key from inner object array of objects\n * @param {String} params\n * @param {String} key\n * @param {Boolean} allowEmpty\n * @returns {Array} output just a simple array of output keys\n */\nfunction getKeys(params, key, allowEmpty) {\n if (!Array.isArray(params)) {\n throw new Error('[ethjs-util] method getKeys expecting type Array as \\'params\\' input, got \\'' + typeof params + '\\'');\n }\n if (typeof key !== 'string') {\n throw new Error('[ethjs-util] method getKeys expecting type String for input \\'key\\' got \\'' + typeof key + '\\'.');\n }\n\n var result = []; // eslint-disable-line\n\n for (var i = 0; i < params.length; i++) {\n // eslint-disable-line\n var value = params[i][key]; // eslint-disable-line\n if (allowEmpty && !value) {\n value = '';\n } else if (typeof value !== 'string') {\n throw new Error('invalid abi');\n }\n result.push(value);\n }\n\n return result;\n}\n\n/**\n * Is the string a hex string.\n *\n * @method check if string is hex string of specific length\n * @param {String} value\n * @param {Number} length\n * @returns {Boolean} output the string is a hex string\n */\nfunction isHexString(value, length) {\n if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n\n if (length && value.length !== 2 + 2 * length) {\n return false;\n }\n\n return true;\n}\n\nmodule.exports = {\n arrayContainsArray: arrayContainsArray,\n intToBuffer: intToBuffer,\n getBinarySize: getBinarySize,\n isHexPrefixed: isHexPrefixed,\n stripHexPrefix: stripHexPrefix,\n padToEven: padToEven,\n intToHex: intToHex,\n fromAscii: fromAscii,\n fromUtf8: fromUtf8,\n toAscii: toAscii,\n toUtf8: toUtf8,\n getKeys: getKeys,\n isHexString: isHexString\n};","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.js');\n\nconst base32 = base.rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n});\nconst base32upper = base.rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n});\nconst base32pad = base.rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n});\nconst base32padupper = base.rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n});\nconst base32hex = base.rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n});\nconst base32hexupper = base.rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n});\nconst base32hexpad = base.rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n});\nconst base32hexpadupper = base.rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n});\nconst base32z = base.rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n});\n\nexports.base32 = base32;\nexports.base32hex = base32hex;\nexports.base32hexpad = base32hexpad;\nexports.base32hexpadupper = base32hexpadupper;\nexports.base32hexupper = base32hexupper;\nexports.base32pad = base32pad;\nexports.base32padupper = base32padupper;\nexports.base32upper = base32upper;\nexports.base32z = base32z;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar bytes = require('../bytes.js');\nvar varint = require('../varint.js');\n\nconst create = (code, digest) => {\n const size = digest.byteLength;\n const sizeOffset = varint.encodingLength(code);\n const digestOffset = sizeOffset + varint.encodingLength(size);\n const bytes = new Uint8Array(digestOffset + size);\n varint.encodeTo(code, bytes, 0);\n varint.encodeTo(size, bytes, sizeOffset);\n bytes.set(digest, digestOffset);\n return new Digest(code, size, digest, bytes);\n};\nconst decode = multihash => {\n const bytes$1 = bytes.coerce(multihash);\n const [code, sizeOffset] = varint.decode(bytes$1);\n const [size, digestOffset] = varint.decode(bytes$1.subarray(sizeOffset));\n const digest = bytes$1.subarray(sizeOffset + digestOffset);\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length');\n }\n return new Digest(code, size, digest, bytes$1);\n};\nconst equals = (a, b) => {\n if (a === b) {\n return true;\n } else {\n return a.code === b.code && a.size === b.size && bytes.equals(a.bytes, b.bytes);\n }\n};\nclass Digest {\n constructor(code, size, digest, bytes) {\n this.code = code;\n this.size = size;\n this.digest = digest;\n this.bytes = bytes;\n }\n}\n\nexports.Digest = Digest;\nexports.create = create;\nexports.decode = decode;\nexports.equals = equals;\n","// https://stackoverflow.com/questions/46176165/ways-to-get-string-literal-type-of-array-values-without-enum-overhead\nexport var tuple = function tuple() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return args;\n};\nexport var tupleNum = function tupleNum() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return args;\n};","module.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n","'use strict'\n\nconst { Buffer } = require('buffer')\nconst symbol = Symbol.for('BufferList')\n\nfunction BufferList (buf) {\n if (!(this instanceof BufferList)) {\n return new BufferList(buf)\n }\n\n BufferList._init.call(this, buf)\n}\n\nBufferList._init = function _init (buf) {\n Object.defineProperty(this, symbol, { value: true })\n\n this._bufs = []\n this.length = 0\n\n if (buf) {\n this.append(buf)\n }\n}\n\nBufferList.prototype._new = function _new (buf) {\n return new BufferList(buf)\n}\n\nBufferList.prototype._offset = function _offset (offset) {\n if (offset === 0) {\n return [0, 0]\n }\n\n let tot = 0\n\n for (let i = 0; i < this._bufs.length; i++) {\n const _t = tot + this._bufs[i].length\n if (offset < _t || i === this._bufs.length - 1) {\n return [i, offset - tot]\n }\n tot = _t\n }\n}\n\nBufferList.prototype._reverseOffset = function (blOffset) {\n const bufferId = blOffset[0]\n let offset = blOffset[1]\n\n for (let i = 0; i < bufferId; i++) {\n offset += this._bufs[i].length\n }\n\n return offset\n}\n\nBufferList.prototype.get = function get (index) {\n if (index > this.length || index < 0) {\n return undefined\n }\n\n const offset = this._offset(index)\n\n return this._bufs[offset[0]][offset[1]]\n}\n\nBufferList.prototype.slice = function slice (start, end) {\n if (typeof start === 'number' && start < 0) {\n start += this.length\n }\n\n if (typeof end === 'number' && end < 0) {\n end += this.length\n }\n\n return this.copy(null, 0, start, end)\n}\n\nBufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {\n if (typeof srcStart !== 'number' || srcStart < 0) {\n srcStart = 0\n }\n\n if (typeof srcEnd !== 'number' || srcEnd > this.length) {\n srcEnd = this.length\n }\n\n if (srcStart >= this.length) {\n return dst || Buffer.alloc(0)\n }\n\n if (srcEnd <= 0) {\n return dst || Buffer.alloc(0)\n }\n\n const copy = !!dst\n const off = this._offset(srcStart)\n const len = srcEnd - srcStart\n let bytes = len\n let bufoff = (copy && dstStart) || 0\n let start = off[1]\n\n // copy/slice everything\n if (srcStart === 0 && srcEnd === this.length) {\n if (!copy) {\n // slice, but full concat if multiple buffers\n return this._bufs.length === 1\n ? this._bufs[0]\n : Buffer.concat(this._bufs, this.length)\n }\n\n // copy, need to copy individual buffers\n for (let i = 0; i < this._bufs.length; i++) {\n this._bufs[i].copy(dst, bufoff)\n bufoff += this._bufs[i].length\n }\n\n return dst\n }\n\n // easy, cheap case where it's a subset of one of the buffers\n if (bytes <= this._bufs[off[0]].length - start) {\n return copy\n ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)\n : this._bufs[off[0]].slice(start, start + bytes)\n }\n\n if (!copy) {\n // a slice, we need something to copy in to\n dst = Buffer.allocUnsafe(len)\n }\n\n for (let i = off[0]; i < this._bufs.length; i++) {\n const l = this._bufs[i].length - start\n\n if (bytes > l) {\n this._bufs[i].copy(dst, bufoff, start)\n bufoff += l\n } else {\n this._bufs[i].copy(dst, bufoff, start, start + bytes)\n bufoff += l\n break\n }\n\n bytes -= l\n\n if (start) {\n start = 0\n }\n }\n\n // safeguard so that we don't return uninitialized memory\n if (dst.length > bufoff) return dst.slice(0, bufoff)\n\n return dst\n}\n\nBufferList.prototype.shallowSlice = function shallowSlice (start, end) {\n start = start || 0\n end = typeof end !== 'number' ? this.length : end\n\n if (start < 0) {\n start += this.length\n }\n\n if (end < 0) {\n end += this.length\n }\n\n if (start === end) {\n return this._new()\n }\n\n const startOffset = this._offset(start)\n const endOffset = this._offset(end)\n const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)\n\n if (endOffset[1] === 0) {\n buffers.pop()\n } else {\n buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1])\n }\n\n if (startOffset[1] !== 0) {\n buffers[0] = buffers[0].slice(startOffset[1])\n }\n\n return this._new(buffers)\n}\n\nBufferList.prototype.toString = function toString (encoding, start, end) {\n return this.slice(start, end).toString(encoding)\n}\n\nBufferList.prototype.consume = function consume (bytes) {\n // first, normalize the argument, in accordance with how Buffer does it\n bytes = Math.trunc(bytes)\n // do nothing if not a positive number\n if (Number.isNaN(bytes) || bytes <= 0) return this\n\n while (this._bufs.length) {\n if (bytes >= this._bufs[0].length) {\n bytes -= this._bufs[0].length\n this.length -= this._bufs[0].length\n this._bufs.shift()\n } else {\n this._bufs[0] = this._bufs[0].slice(bytes)\n this.length -= bytes\n break\n }\n }\n\n return this\n}\n\nBufferList.prototype.duplicate = function duplicate () {\n const copy = this._new()\n\n for (let i = 0; i < this._bufs.length; i++) {\n copy.append(this._bufs[i])\n }\n\n return copy\n}\n\nBufferList.prototype.append = function append (buf) {\n if (buf == null) {\n return this\n }\n\n if (buf.buffer) {\n // append a view of the underlying ArrayBuffer\n this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength))\n } else if (Array.isArray(buf)) {\n for (let i = 0; i < buf.length; i++) {\n this.append(buf[i])\n }\n } else if (this._isBufferList(buf)) {\n // unwrap argument into individual BufferLists\n for (let i = 0; i < buf._bufs.length; i++) {\n this.append(buf._bufs[i])\n }\n } else {\n // coerce number arguments to strings, since Buffer(number) does\n // uninitialized memory allocation\n if (typeof buf === 'number') {\n buf = buf.toString()\n }\n\n this._appendBuffer(Buffer.from(buf))\n }\n\n return this\n}\n\nBufferList.prototype._appendBuffer = function appendBuffer (buf) {\n this._bufs.push(buf)\n this.length += buf.length\n}\n\nBufferList.prototype.indexOf = function (search, offset, encoding) {\n if (encoding === undefined && typeof offset === 'string') {\n encoding = offset\n offset = undefined\n }\n\n if (typeof search === 'function' || Array.isArray(search)) {\n throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.')\n } else if (typeof search === 'number') {\n search = Buffer.from([search])\n } else if (typeof search === 'string') {\n search = Buffer.from(search, encoding)\n } else if (this._isBufferList(search)) {\n search = search.slice()\n } else if (Array.isArray(search.buffer)) {\n search = Buffer.from(search.buffer, search.byteOffset, search.byteLength)\n } else if (!Buffer.isBuffer(search)) {\n search = Buffer.from(search)\n }\n\n offset = Number(offset || 0)\n\n if (isNaN(offset)) {\n offset = 0\n }\n\n if (offset < 0) {\n offset = this.length + offset\n }\n\n if (offset < 0) {\n offset = 0\n }\n\n if (search.length === 0) {\n return offset > this.length ? this.length : offset\n }\n\n const blOffset = this._offset(offset)\n let blIndex = blOffset[0] // index of which internal buffer we're working on\n let buffOffset = blOffset[1] // offset of the internal buffer we're working on\n\n // scan over each buffer\n for (; blIndex < this._bufs.length; blIndex++) {\n const buff = this._bufs[blIndex]\n\n while (buffOffset < buff.length) {\n const availableWindow = buff.length - buffOffset\n\n if (availableWindow >= search.length) {\n const nativeSearchResult = buff.indexOf(search, buffOffset)\n\n if (nativeSearchResult !== -1) {\n return this._reverseOffset([blIndex, nativeSearchResult])\n }\n\n buffOffset = buff.length - search.length + 1 // end of native search window\n } else {\n const revOffset = this._reverseOffset([blIndex, buffOffset])\n\n if (this._match(revOffset, search)) {\n return revOffset\n }\n\n buffOffset++\n }\n }\n\n buffOffset = 0\n }\n\n return -1\n}\n\nBufferList.prototype._match = function (offset, search) {\n if (this.length - offset < search.length) {\n return false\n }\n\n for (let searchOffset = 0; searchOffset < search.length; searchOffset++) {\n if (this.get(offset + searchOffset) !== search[searchOffset]) {\n return false\n }\n }\n return true\n}\n\n;(function () {\n const methods = {\n readDoubleBE: 8,\n readDoubleLE: 8,\n readFloatBE: 4,\n readFloatLE: 4,\n readInt32BE: 4,\n readInt32LE: 4,\n readUInt32BE: 4,\n readUInt32LE: 4,\n readInt16BE: 2,\n readInt16LE: 2,\n readUInt16BE: 2,\n readUInt16LE: 2,\n readInt8: 1,\n readUInt8: 1,\n readIntBE: null,\n readIntLE: null,\n readUIntBE: null,\n readUIntLE: null\n }\n\n for (const m in methods) {\n (function (m) {\n if (methods[m] === null) {\n BufferList.prototype[m] = function (offset, byteLength) {\n return this.slice(offset, offset + byteLength)[m](0, byteLength)\n }\n } else {\n BufferList.prototype[m] = function (offset = 0) {\n return this.slice(offset, offset + methods[m])[m](0)\n }\n }\n }(m))\n }\n}())\n\n// Used internally by the class and also as an indicator of this object being\n// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser\n// environment because there could be multiple different copies of the\n// BufferList class and some `BufferList`s might be `BufferList`s.\nBufferList.prototype._isBufferList = function _isBufferList (b) {\n return b instanceof BufferList || BufferList.isBufferList(b)\n}\n\nBufferList.isBufferList = function isBufferList (b) {\n return b != null && b[symbol]\n}\n\nmodule.exports = BufferList\n","export default function canUseDom() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}","module.exports = require(\"regenerator-runtime\");\n","/*\n * Utils functions\n *\n */\n\nvar crypt = require('crypto');\n\n/**\n * Break string str each maxLen symbols\n * @param str\n * @param maxLen\n * @returns {string}\n */\nmodule.exports.linebrk = function (str, maxLen) {\n var res = '';\n var i = 0;\n while (i + maxLen < str.length) {\n res += str.substring(i, i + maxLen) + \"\\n\";\n i += maxLen;\n }\n return res + str.substring(i, str.length);\n};\n\nmodule.exports.detectEnvironment = function () {\n if (typeof(window) !== 'undefined' && window && !(process && process.title === 'node')) {\n return 'browser';\n }\n\n return 'node';\n};\n\n/**\n * Trying get a 32-bit unsigned integer from the partial buffer\n * @param buffer\n * @param offset\n * @returns {Number}\n */\nmodule.exports.get32IntFromBuffer = function (buffer, offset) {\n offset = offset || 0;\n var size = 0;\n if ((size = buffer.length - offset) > 0) {\n if (size >= 4) {\n return buffer.readUIntBE(offset, size);\n } else {\n var res = 0;\n for (var i = offset + size, d = 0; i > offset; i--, d += 2) {\n res += buffer[i - 1] * Math.pow(16, d);\n }\n return res;\n }\n } else {\n return NaN;\n }\n};\n\nmodule.exports._ = {\n isObject: function (value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n },\n\n isString: function (value) {\n return typeof value == 'string' || value instanceof String;\n },\n\n isNumber: function (value) {\n return typeof value == 'number' || !isNaN(parseFloat(value)) && isFinite(value);\n },\n\n /**\n * Returns copy of `obj` without `removeProp` field.\n * @param obj\n * @param removeProp\n * @returns Object\n */\n omit: function (obj, removeProp) {\n var newObj = {};\n for (var prop in obj) {\n if (!obj.hasOwnProperty(prop) || prop === removeProp) {\n continue;\n }\n newObj[prop] = obj[prop];\n }\n\n return newObj;\n }\n};\n\n/**\n * Strips everything around the opening and closing lines, including the lines\n * themselves.\n */\nmodule.exports.trimSurroundingText = function (data, opening, closing) {\n var trimStartIndex = 0;\n var trimEndIndex = data.length;\n\n var openingBoundaryIndex = data.indexOf(opening);\n if (openingBoundaryIndex >= 0) {\n trimStartIndex = openingBoundaryIndex + opening.length;\n }\n\n var closingBoundaryIndex = data.indexOf(closing, openingBoundaryIndex);\n if (closingBoundaryIndex >= 0) {\n trimEndIndex = closingBoundaryIndex;\n }\n\n return data.substring(trimStartIndex, trimEndIndex);\n}","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass Type {\n constructor(major, name, terminal) {\n this.major = major;\n this.majorEncoded = major << 5;\n this.name = name;\n this.terminal = terminal;\n }\n toString() {\n return `Type[${ this.major }].${ this.name }`;\n }\n compare(typ) {\n return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0;\n }\n}\nType.uint = new Type(0, 'uint', true);\nType.negint = new Type(1, 'negint', true);\nType.bytes = new Type(2, 'bytes', true);\nType.string = new Type(3, 'string', true);\nType.array = new Type(4, 'array', false);\nType.map = new Type(5, 'map', false);\nType.tag = new Type(6, 'tag', false);\nType.float = new Type(7, 'float', true);\nType.false = new Type(7, 'false', true);\nType.true = new Type(7, 'true', true);\nType.null = new Type(7, 'null', true);\nType.undefined = new Type(7, 'undefined', true);\nType.break = new Type(7, 'break', true);\nclass Token {\n constructor(type, value, encodedLength) {\n this.type = type;\n this.value = value;\n this.encodedLength = encodedLength;\n this.encodedBytes = undefined;\n }\n toString() {\n return `Token[${ this.type }].${ this.value }`;\n }\n}\n\nexports.Token = Token;\nexports.Type = Type;\n","'use strict'\n\n/**\n * Takes an (async) iterable and returns one with each item mapped by the passed\n * function.\n *\n * @template I,O\n * @param {AsyncIterable|Iterable} source\n * @param {function(I):O|Promise} func\n * @returns {AsyncIterable}\n */\nconst map = async function * (source, func) {\n for await (const val of source) {\n yield func(val)\n }\n}\n\nmodule.exports = map\n","import { useEffect, useRef } from \"react\";\nvar usePoller = function (fn, delay) {\n var savedCallback = useRef();\n // Remember the latest fn.\n useEffect(function () {\n savedCallback.current = fn;\n }, [fn]);\n // Set up the interval.\n // eslint-disable-next-line consistent-return\n useEffect(function () {\n function tick() {\n if (savedCallback.current)\n savedCallback.current();\n }\n if (delay !== null) {\n var id_1 = setInterval(tick, delay);\n return function () { return clearInterval(id_1); };\n }\n }, [delay]);\n // run at start too\n useEffect(function () {\n fn();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n};\nexport default usePoller;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { useState, useEffect } from \"react\";\nimport { getAddress } from \"@ethersproject/address\";\nvar lookupAddress = function (provider, address) { return __awaiter(void 0, void 0, void 0, function () {\n var reportedName, resolvedAddress, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n return [4 /*yield*/, provider.lookupAddress(address)];\n case 1:\n reportedName = _a.sent();\n return [4 /*yield*/, provider.resolveName(reportedName)];\n case 2:\n resolvedAddress = _a.sent();\n if (getAddress(address) === getAddress(resolvedAddress)) {\n return [2 /*return*/, reportedName];\n }\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/, \"\"];\n }\n });\n}); };\nvar useLookupAddress = function (provider, address) {\n var _a = __read(useState(address), 2), ensName = _a[0], setEnsName = _a[1];\n useEffect(function () {\n if (provider) {\n lookupAddress(provider, address).then(function (name) { return setEnsName(name); });\n }\n }, [provider, address]);\n return ensName;\n};\nexport default useLookupAddress;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { useState } from \"react\";\nimport usePoller from \"./Poller\";\nimport { BLOCK_TIME } from \"./constants\";\nvar useNonce = function (provider, address, pollTime) {\n if (pollTime === void 0) { pollTime = BLOCK_TIME / 2; }\n var _a = __read(useState(0), 2), nonce = _a[0], setNonce = _a[1];\n usePoller(function () {\n var getTransactionCount = function () { return __awaiter(void 0, void 0, void 0, function () {\n var nextNonce;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, provider.getTransactionCount(address)];\n case 1:\n nextNonce = _a.sent();\n if (nextNonce !== nonce) {\n setNonce(nextNonce);\n }\n return [2 /*return*/];\n }\n });\n }); };\n if (typeof provider !== \"undefined\")\n getTransactionCount();\n }, pollTime);\n return nonce;\n};\nexport default useNonce;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { useState } from \"react\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport usePoller from \"./Poller\";\nimport { BLOCK_TIME } from \"./constants\";\nvar useTokenBalance = function (contract, address, pollTime) {\n if (pollTime === void 0) { pollTime = 2 * BLOCK_TIME; }\n var _a = __read(useState(BigNumber.from(0)), 2), balance = _a[0], setBalance = _a[1];\n usePoller(function () {\n var pollBalance = function () { return __awaiter(void 0, void 0, void 0, function () {\n var newBalance, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, contract.balanceOf(address)];\n case 1:\n newBalance = _a.sent();\n if (newBalance !== balance) {\n setBalance(newBalance);\n }\n return [3 /*break*/, 3];\n case 2:\n e_1 = _a.sent();\n // eslint-disable-next-line no-console\n console.log(e_1);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n }); };\n if (address && contract)\n pollBalance();\n }, pollTime);\n return balance;\n};\nexport default useTokenBalance;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { useState, useEffect } from \"react\";\nvar useUserAddress = function (provider) {\n var _a = __read(useState(\"\"), 2), userAddress = _a[0], setUserAddress = _a[1];\n useEffect(function () {\n var getUserAddress = function (injectedProvider) { return __awaiter(void 0, void 0, void 0, function () {\n var signer, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n signer = injectedProvider.getSigner();\n if (!signer) return [3 /*break*/, 2];\n _a = setUserAddress;\n return [4 /*yield*/, signer.getAddress()];\n case 1:\n _a.apply(void 0, [_b.sent()]);\n _b.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); };\n if (provider)\n getUserAddress(provider);\n }, [provider]);\n return userAddress;\n};\nexport default useUserAddress;\n","\"use strict\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n;\nconst _constructorGuard = {};\nlet ModifiersBytes = { calldata: true, memory: true, storage: true };\nlet ModifiersNest = { calldata: true, memory: true };\nfunction checkModifier(type, name) {\n if (type === \"bytes\" || type === \"string\") {\n if (ModifiersBytes[name]) {\n return true;\n }\n }\n else if (type === \"address\") {\n if (name === \"payable\") {\n return true;\n }\n }\n else if (type.indexOf(\"[\") >= 0 || type === \"tuple\") {\n if (ModifiersNest[name]) {\n return true;\n }\n }\n if (ModifiersBytes[name] || name === \"payable\") {\n logger.throwArgumentError(\"invalid modifier\", \"name\", name);\n }\n return false;\n}\n// @TODO: Make sure that children of an indexed tuple are marked with a null indexed\nfunction parseParamType(param, allowIndexed) {\n let originalParam = param;\n function throwError(i) {\n logger.throwArgumentError(`unexpected character at position ${i}`, \"param\", param);\n }\n param = param.replace(/\\s/g, \" \");\n function newNode(parent) {\n let node = { type: \"\", name: \"\", parent: parent, state: { allowType: true } };\n if (allowIndexed) {\n node.indexed = false;\n }\n return node;\n }\n let parent = { type: \"\", name: \"\", state: { allowType: true } };\n let node = parent;\n for (let i = 0; i < param.length; i++) {\n let c = param[i];\n switch (c) {\n case \"(\":\n if (node.state.allowType && node.type === \"\") {\n node.type = \"tuple\";\n }\n else if (!node.state.allowParams) {\n throwError(i);\n }\n node.state.allowType = false;\n node.type = verifyType(node.type);\n node.components = [newNode(node)];\n node = node.components[0];\n break;\n case \")\":\n delete node.state;\n if (node.name === \"indexed\") {\n if (!allowIndexed) {\n throwError(i);\n }\n node.indexed = true;\n node.name = \"\";\n }\n if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n node.type = verifyType(node.type);\n let child = node;\n node = node.parent;\n if (!node) {\n throwError(i);\n }\n delete child.parent;\n node.state.allowParams = false;\n node.state.allowName = true;\n node.state.allowArray = true;\n break;\n case \",\":\n delete node.state;\n if (node.name === \"indexed\") {\n if (!allowIndexed) {\n throwError(i);\n }\n node.indexed = true;\n node.name = \"\";\n }\n if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n node.type = verifyType(node.type);\n let sibling = newNode(node.parent);\n //{ type: \"\", name: \"\", parent: node.parent, state: { allowType: true } };\n node.parent.components.push(sibling);\n delete node.parent;\n node = sibling;\n break;\n // Hit a space...\n case \" \":\n // If reading type, the type is done and may read a param or name\n if (node.state.allowType) {\n if (node.type !== \"\") {\n node.type = verifyType(node.type);\n delete node.state.allowType;\n node.state.allowName = true;\n node.state.allowParams = true;\n }\n }\n // If reading name, the name is done\n if (node.state.allowName) {\n if (node.name !== \"\") {\n if (node.name === \"indexed\") {\n if (!allowIndexed) {\n throwError(i);\n }\n if (node.indexed) {\n throwError(i);\n }\n node.indexed = true;\n node.name = \"\";\n }\n else if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n else {\n node.state.allowName = false;\n }\n }\n }\n break;\n case \"[\":\n if (!node.state.allowArray) {\n throwError(i);\n }\n node.type += c;\n node.state.allowArray = false;\n node.state.allowName = false;\n node.state.readArray = true;\n break;\n case \"]\":\n if (!node.state.readArray) {\n throwError(i);\n }\n node.type += c;\n node.state.readArray = false;\n node.state.allowArray = true;\n node.state.allowName = true;\n break;\n default:\n if (node.state.allowType) {\n node.type += c;\n node.state.allowParams = true;\n node.state.allowArray = true;\n }\n else if (node.state.allowName) {\n node.name += c;\n delete node.state.allowArray;\n }\n else if (node.state.readArray) {\n node.type += c;\n }\n else {\n throwError(i);\n }\n }\n }\n if (node.parent) {\n logger.throwArgumentError(\"unexpected eof\", \"param\", param);\n }\n delete parent.state;\n if (node.name === \"indexed\") {\n if (!allowIndexed) {\n throwError(originalParam.length - 7);\n }\n if (node.indexed) {\n throwError(originalParam.length - 7);\n }\n node.indexed = true;\n node.name = \"\";\n }\n else if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n parent.type = verifyType(parent.type);\n return parent;\n}\nfunction populate(object, params) {\n for (let key in params) {\n defineReadOnly(object, key, params[key]);\n }\n}\nexport const FormatTypes = Object.freeze({\n // Bare formatting, as is needed for computing a sighash of an event or function\n sighash: \"sighash\",\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n minimal: \"minimal\",\n // Human-Readable with nice spacing, including all names\n full: \"full\",\n // JSON-format a la Solidity\n json: \"json\"\n});\nconst paramTypeArray = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nexport class ParamType {\n constructor(constructorGuard, params) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"use fromString\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new ParamType()\"\n });\n }\n populate(this, params);\n let match = this.type.match(paramTypeArray);\n if (match) {\n populate(this, {\n arrayLength: parseInt(match[2] || \"-1\"),\n arrayChildren: ParamType.fromObject({\n type: match[1],\n components: this.components\n }),\n baseType: \"array\"\n });\n }\n else {\n populate(this, {\n arrayLength: null,\n arrayChildren: null,\n baseType: ((this.components != null) ? \"tuple\" : this.type)\n });\n }\n this._isParamType = true;\n Object.freeze(this);\n }\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.json) {\n let result = {\n type: ((this.baseType === \"tuple\") ? \"tuple\" : this.type),\n name: (this.name || undefined)\n };\n if (typeof (this.indexed) === \"boolean\") {\n result.indexed = this.indexed;\n }\n if (this.components) {\n result.components = this.components.map((comp) => JSON.parse(comp.format(format)));\n }\n return JSON.stringify(result);\n }\n let result = \"\";\n // Array\n if (this.baseType === \"array\") {\n result += this.arrayChildren.format(format);\n result += \"[\" + (this.arrayLength < 0 ? \"\" : String(this.arrayLength)) + \"]\";\n }\n else {\n if (this.baseType === \"tuple\") {\n if (format !== FormatTypes.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map((comp) => comp.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \")\";\n }\n else {\n result += this.type;\n }\n }\n if (format !== FormatTypes.sighash) {\n if (this.indexed === true) {\n result += \" indexed\";\n }\n if (format === FormatTypes.full && this.name) {\n result += \" \" + this.name;\n }\n }\n return result;\n }\n static from(value, allowIndexed) {\n if (typeof (value) === \"string\") {\n return ParamType.fromString(value, allowIndexed);\n }\n return ParamType.fromObject(value);\n }\n static fromObject(value) {\n if (ParamType.isParamType(value)) {\n return value;\n }\n return new ParamType(_constructorGuard, {\n name: (value.name || null),\n type: verifyType(value.type),\n indexed: ((value.indexed == null) ? null : !!value.indexed),\n components: (value.components ? value.components.map(ParamType.fromObject) : null)\n });\n }\n static fromString(value, allowIndexed) {\n function ParamTypify(node) {\n return ParamType.fromObject({\n name: node.name,\n type: node.type,\n indexed: node.indexed,\n components: node.components\n });\n }\n return ParamTypify(parseParamType(value, !!allowIndexed));\n }\n static isParamType(value) {\n return !!(value != null && value._isParamType);\n }\n}\n;\nfunction parseParams(value, allowIndex) {\n return splitNesting(value).map((param) => ParamType.fromString(param, allowIndex));\n}\nexport class Fragment {\n constructor(constructorGuard, params) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"use a static from method\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new Fragment()\"\n });\n }\n populate(this, params);\n this._isFragment = true;\n Object.freeze(this);\n }\n static from(value) {\n if (Fragment.isFragment(value)) {\n return value;\n }\n if (typeof (value) === \"string\") {\n return Fragment.fromString(value);\n }\n return Fragment.fromObject(value);\n }\n static fromObject(value) {\n if (Fragment.isFragment(value)) {\n return value;\n }\n switch (value.type) {\n case \"function\":\n return FunctionFragment.fromObject(value);\n case \"event\":\n return EventFragment.fromObject(value);\n case \"constructor\":\n return ConstructorFragment.fromObject(value);\n case \"error\":\n return ErrorFragment.fromObject(value);\n case \"fallback\":\n case \"receive\":\n // @TODO: Something? Maybe return a FunctionFragment? A custom DefaultFunctionFragment?\n return null;\n }\n return logger.throwArgumentError(\"invalid fragment object\", \"value\", value);\n }\n static fromString(value) {\n // Make sure the \"returns\" is surrounded by a space and all whitespace is exactly one space\n value = value.replace(/\\s/g, \" \");\n value = value.replace(/\\(/g, \" (\").replace(/\\)/g, \") \").replace(/\\s+/g, \" \");\n value = value.trim();\n if (value.split(\" \")[0] === \"event\") {\n return EventFragment.fromString(value.substring(5).trim());\n }\n else if (value.split(\" \")[0] === \"function\") {\n return FunctionFragment.fromString(value.substring(8).trim());\n }\n else if (value.split(\"(\")[0].trim() === \"constructor\") {\n return ConstructorFragment.fromString(value.trim());\n }\n else if (value.split(\" \")[0] === \"error\") {\n return ErrorFragment.fromString(value.substring(5).trim());\n }\n return logger.throwArgumentError(\"unsupported fragment\", \"value\", value);\n }\n static isFragment(value) {\n return !!(value && value._isFragment);\n }\n}\nexport class EventFragment extends Fragment {\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format)))\n });\n }\n let result = \"\";\n if (format !== FormatTypes.sighash) {\n result += \"event \";\n }\n result += this.name + \"(\" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \") \";\n if (format !== FormatTypes.sighash) {\n if (this.anonymous) {\n result += \"anonymous \";\n }\n }\n return result.trim();\n }\n static from(value) {\n if (typeof (value) === \"string\") {\n return EventFragment.fromString(value);\n }\n return EventFragment.fromObject(value);\n }\n static fromObject(value) {\n if (EventFragment.isEventFragment(value)) {\n return value;\n }\n if (value.type !== \"event\") {\n logger.throwArgumentError(\"invalid event object\", \"value\", value);\n }\n const params = {\n name: verifyIdentifier(value.name),\n anonymous: value.anonymous,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),\n type: \"event\"\n };\n return new EventFragment(_constructorGuard, params);\n }\n static fromString(value) {\n let match = value.match(regexParen);\n if (!match) {\n logger.throwArgumentError(\"invalid event string\", \"value\", value);\n }\n let anonymous = false;\n match[3].split(\" \").forEach((modifier) => {\n switch (modifier.trim()) {\n case \"anonymous\":\n anonymous = true;\n break;\n case \"\":\n break;\n default:\n logger.warn(\"unknown modifier: \" + modifier);\n }\n });\n return EventFragment.fromObject({\n name: match[1].trim(),\n anonymous: anonymous,\n inputs: parseParams(match[2], true),\n type: \"event\"\n });\n }\n static isEventFragment(value) {\n return (value && value._isFragment && value.type === \"event\");\n }\n}\nfunction parseGas(value, params) {\n params.gas = null;\n let comps = value.split(\"@\");\n if (comps.length !== 1) {\n if (comps.length > 2) {\n logger.throwArgumentError(\"invalid human-readable ABI signature\", \"value\", value);\n }\n if (!comps[1].match(/^[0-9]+$/)) {\n logger.throwArgumentError(\"invalid human-readable ABI signature gas\", \"value\", value);\n }\n params.gas = BigNumber.from(comps[1]);\n return comps[0];\n }\n return value;\n}\nfunction parseModifiers(value, params) {\n params.constant = false;\n params.payable = false;\n params.stateMutability = \"nonpayable\";\n value.split(\" \").forEach((modifier) => {\n switch (modifier.trim()) {\n case \"constant\":\n params.constant = true;\n break;\n case \"payable\":\n params.payable = true;\n params.stateMutability = \"payable\";\n break;\n case \"nonpayable\":\n params.payable = false;\n params.stateMutability = \"nonpayable\";\n break;\n case \"pure\":\n params.constant = true;\n params.stateMutability = \"pure\";\n break;\n case \"view\":\n params.constant = true;\n params.stateMutability = \"view\";\n break;\n case \"external\":\n case \"public\":\n case \"\":\n break;\n default:\n console.log(\"unknown modifier: \" + modifier);\n }\n });\n}\nfunction verifyState(value) {\n let result = {\n constant: false,\n payable: true,\n stateMutability: \"payable\"\n };\n if (value.stateMutability != null) {\n result.stateMutability = value.stateMutability;\n // Set (and check things are consistent) the constant property\n result.constant = (result.stateMutability === \"view\" || result.stateMutability === \"pure\");\n if (value.constant != null) {\n if ((!!value.constant) !== result.constant) {\n logger.throwArgumentError(\"cannot have constant function with mutability \" + result.stateMutability, \"value\", value);\n }\n }\n // Set (and check things are consistent) the payable property\n result.payable = (result.stateMutability === \"payable\");\n if (value.payable != null) {\n if ((!!value.payable) !== result.payable) {\n logger.throwArgumentError(\"cannot have payable function with mutability \" + result.stateMutability, \"value\", value);\n }\n }\n }\n else if (value.payable != null) {\n result.payable = !!value.payable;\n // If payable we can assume non-constant; otherwise we can't assume\n if (value.constant == null && !result.payable && value.type !== \"constructor\") {\n logger.throwArgumentError(\"unable to determine stateMutability\", \"value\", value);\n }\n result.constant = !!value.constant;\n if (result.constant) {\n result.stateMutability = \"view\";\n }\n else {\n result.stateMutability = (result.payable ? \"payable\" : \"nonpayable\");\n }\n if (result.payable && result.constant) {\n logger.throwArgumentError(\"cannot have constant payable function\", \"value\", value);\n }\n }\n else if (value.constant != null) {\n result.constant = !!value.constant;\n result.payable = !result.constant;\n result.stateMutability = (result.constant ? \"view\" : \"payable\");\n }\n else if (value.type !== \"constructor\") {\n logger.throwArgumentError(\"unable to determine stateMutability\", \"value\", value);\n }\n return result;\n}\nexport class ConstructorFragment extends Fragment {\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: (this.gas ? this.gas.toNumber() : undefined),\n inputs: this.inputs.map((input) => JSON.parse(input.format(format)))\n });\n }\n if (format === FormatTypes.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"format(sighash)\"\n });\n }\n let result = \"constructor(\" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \") \";\n if (this.stateMutability && this.stateMutability !== \"nonpayable\") {\n result += this.stateMutability + \" \";\n }\n return result.trim();\n }\n static from(value) {\n if (typeof (value) === \"string\") {\n return ConstructorFragment.fromString(value);\n }\n return ConstructorFragment.fromObject(value);\n }\n static fromObject(value) {\n if (ConstructorFragment.isConstructorFragment(value)) {\n return value;\n }\n if (value.type !== \"constructor\") {\n logger.throwArgumentError(\"invalid constructor object\", \"value\", value);\n }\n let state = verifyState(value);\n if (state.constant) {\n logger.throwArgumentError(\"constructor cannot be constant\", \"value\", value);\n }\n const params = {\n name: null,\n type: value.type,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),\n payable: state.payable,\n stateMutability: state.stateMutability,\n gas: (value.gas ? BigNumber.from(value.gas) : null)\n };\n return new ConstructorFragment(_constructorGuard, params);\n }\n static fromString(value) {\n let params = { type: \"constructor\" };\n value = parseGas(value, params);\n let parens = value.match(regexParen);\n if (!parens || parens[1].trim() !== \"constructor\") {\n logger.throwArgumentError(\"invalid constructor string\", \"value\", value);\n }\n params.inputs = parseParams(parens[2].trim(), false);\n parseModifiers(parens[3].trim(), params);\n return ConstructorFragment.fromObject(params);\n }\n static isConstructorFragment(value) {\n return (value && value._isFragment && value.type === \"constructor\");\n }\n}\nexport class FunctionFragment extends ConstructorFragment {\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability : undefined),\n payable: this.payable,\n gas: (this.gas ? this.gas.toNumber() : undefined),\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n outputs: this.outputs.map((output) => JSON.parse(output.format(format))),\n });\n }\n let result = \"\";\n if (format !== FormatTypes.sighash) {\n result += \"function \";\n }\n result += this.name + \"(\" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \") \";\n if (format !== FormatTypes.sighash) {\n if (this.stateMutability) {\n if (this.stateMutability !== \"nonpayable\") {\n result += (this.stateMutability + \" \");\n }\n }\n else if (this.constant) {\n result += \"view \";\n }\n if (this.outputs && this.outputs.length) {\n result += \"returns (\" + this.outputs.map((output) => output.format(format)).join(\", \") + \") \";\n }\n if (this.gas != null) {\n result += \"@\" + this.gas.toString() + \" \";\n }\n }\n return result.trim();\n }\n static from(value) {\n if (typeof (value) === \"string\") {\n return FunctionFragment.fromString(value);\n }\n return FunctionFragment.fromObject(value);\n }\n static fromObject(value) {\n if (FunctionFragment.isFunctionFragment(value)) {\n return value;\n }\n if (value.type !== \"function\") {\n logger.throwArgumentError(\"invalid function object\", \"value\", value);\n }\n let state = verifyState(value);\n const params = {\n type: value.type,\n name: verifyIdentifier(value.name),\n constant: state.constant,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),\n outputs: (value.outputs ? value.outputs.map(ParamType.fromObject) : []),\n payable: state.payable,\n stateMutability: state.stateMutability,\n gas: (value.gas ? BigNumber.from(value.gas) : null)\n };\n return new FunctionFragment(_constructorGuard, params);\n }\n static fromString(value) {\n let params = { type: \"function\" };\n value = parseGas(value, params);\n let comps = value.split(\" returns \");\n if (comps.length > 2) {\n logger.throwArgumentError(\"invalid function string\", \"value\", value);\n }\n let parens = comps[0].match(regexParen);\n if (!parens) {\n logger.throwArgumentError(\"invalid function signature\", \"value\", value);\n }\n params.name = parens[1].trim();\n if (params.name) {\n verifyIdentifier(params.name);\n }\n params.inputs = parseParams(parens[2], false);\n parseModifiers(parens[3].trim(), params);\n // We have outputs\n if (comps.length > 1) {\n let returns = comps[1].match(regexParen);\n if (returns[1].trim() != \"\" || returns[3].trim() != \"\") {\n logger.throwArgumentError(\"unexpected tokens\", \"value\", value);\n }\n params.outputs = parseParams(returns[2], false);\n }\n else {\n params.outputs = [];\n }\n return FunctionFragment.fromObject(params);\n }\n static isFunctionFragment(value) {\n return (value && value._isFragment && value.type === \"function\");\n }\n}\n//export class StructFragment extends Fragment {\n//}\nfunction checkForbidden(fragment) {\n const sig = fragment.format();\n if (sig === \"Error(string)\" || sig === \"Panic(uint256)\") {\n logger.throwArgumentError(`cannot specify user defined ${sig} error`, \"fragment\", fragment);\n }\n return fragment;\n}\nexport class ErrorFragment extends Fragment {\n format(format) {\n if (!format) {\n format = FormatTypes.sighash;\n }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n let result = \"\";\n if (format !== FormatTypes.sighash) {\n result += \"error \";\n }\n result += this.name + \"(\" + this.inputs.map((input) => input.format(format)).join((format === FormatTypes.full) ? \", \" : \",\") + \") \";\n return result.trim();\n }\n static from(value) {\n if (typeof (value) === \"string\") {\n return ErrorFragment.fromString(value);\n }\n return ErrorFragment.fromObject(value);\n }\n static fromObject(value) {\n if (ErrorFragment.isErrorFragment(value)) {\n return value;\n }\n if (value.type !== \"error\") {\n logger.throwArgumentError(\"invalid error object\", \"value\", value);\n }\n const params = {\n type: value.type,\n name: verifyIdentifier(value.name),\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : [])\n };\n return checkForbidden(new ErrorFragment(_constructorGuard, params));\n }\n static fromString(value) {\n let params = { type: \"error\" };\n let parens = value.match(regexParen);\n if (!parens) {\n logger.throwArgumentError(\"invalid error signature\", \"value\", value);\n }\n params.name = parens[1].trim();\n if (params.name) {\n verifyIdentifier(params.name);\n }\n params.inputs = parseParams(parens[2], false);\n return checkForbidden(ErrorFragment.fromObject(params));\n }\n static isErrorFragment(value) {\n return (value && value._isFragment && value.type === \"error\");\n }\n}\nfunction verifyType(type) {\n // These need to be transformed to their full description\n if (type.match(/^uint($|[^1-9])/)) {\n type = \"uint256\" + type.substring(4);\n }\n else if (type.match(/^int($|[^1-9])/)) {\n type = \"int256\" + type.substring(3);\n }\n // @TODO: more verification\n return type;\n}\n// See: https://github.com/ethereum/solidity/blob/1f8f1a3db93a548d0555e3e14cfc55a10e25b60e/docs/grammar/SolidityLexer.g4#L234\nconst regexIdentifier = new RegExp(\"^[a-zA-Z$_][a-zA-Z0-9$_]*$\");\nfunction verifyIdentifier(value) {\n if (!value || !value.match(regexIdentifier)) {\n logger.throwArgumentError(`invalid identifier \"${value}\"`, \"value\", value);\n }\n return value;\n}\nconst regexParen = new RegExp(\"^([^)(]*)\\\\((.*)\\\\)([^)(]*)$\");\nfunction splitNesting(value) {\n value = value.trim();\n let result = [];\n let accum = \"\";\n let depth = 0;\n for (let offset = 0; offset < value.length; offset++) {\n let c = value[offset];\n if (c === \",\" && depth === 0) {\n result.push(accum);\n accum = \"\";\n }\n else {\n accum += c;\n if (c === \"(\") {\n depth++;\n }\n else if (c === \")\") {\n depth--;\n if (depth === -1) {\n logger.throwArgumentError(\"unbalanced parenthesis\", \"value\", value);\n }\n }\n }\n }\n if (accum) {\n result.push(accum);\n }\n return result;\n}\n//# sourceMappingURL=fragments.js.map","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","\"use strict\";\n\nconst Debug = require('debug');\n\nconst {\n string,\n number,\n object,\n mixed,\n boolean,\n array\n} = require('yup');\n\nconst {\n getAddress,\n namehash\n} = require('ethers').utils;\n\nconst {\n humanToMultiaddrBuffer,\n utf8ToBuffer,\n encodeTag,\n bytes32Regex,\n parseRLC,\n parseEth\n} = require('./utils');\n\nconst {\n paramsKeyName,\n storageProviders\n} = require('./params-utils');\n\nconst {\n ValidationError\n} = require('./errors');\n\nconst {\n wrapCall\n} = require('./errorWrappers');\n\nconst debug = Debug('validators');\n\nconst stringNumberSchema = function () {\n let {\n message\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return string().transform(value => {\n const trimed = value.replace(/^0+/, '');\n return trimed.length > 0 ? trimed : '0';\n }).matches(/^[0-9]*$/, message || '${originalValue} is not a valid number');\n};\n\nconst integerSchema = () => number().integer();\n\nconst positiveIntSchema = () => integerSchema().min(0).max(Number.MAX_SAFE_INTEGER - 1);\n\nconst positiveStrictIntSchema = () => integerSchema().min(1).max(Number.MAX_SAFE_INTEGER - 1);\n\nconst hexnumberSchema = () => string().lowercase().matches(/^(0x)([0-9a-f]{2})*$/, '${originalValue} is not a valid hex number');\n\nconst uint256Schema = () => stringNumberSchema({\n message: '${originalValue} is not a valid uint256'\n});\n\nconst amontErrorMessage = _ref => {\n let {\n originalValue\n } = _ref;\n return \"\".concat(Array.isArray(originalValue) ? originalValue.join(' ') : originalValue, \" is not a valid amount\");\n};\n\nconst nRlcAmountSchema = function () {\n let {\n defaultUnit = 'nRLC'\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return string().transform((value, originalValue) => {\n if (Array.isArray(originalValue)) {\n if (originalValue.length > 2) {\n throw new ValidationError(amontErrorMessage({\n originalValue\n }));\n }\n\n if (originalValue.length === 2 && originalValue[1]) {\n return \"\".concat(originalValue[0], \" \").concat(originalValue[1]);\n }\n\n return \"\".concat(originalValue[0]);\n }\n\n return value;\n }).transform(value => {\n const [amount, unit] = value.split(' ');\n const trimed = amount.replace(/^0+/, '');\n const trimedAmount = trimed.length > 0 ? trimed : '0';\n return unit !== undefined ? [trimedAmount, unit].join(' ') : trimedAmount;\n }).transform((value, originalValue) => {\n try {\n return parseRLC(value, defaultUnit).toString();\n } catch (e) {\n throw new ValidationError(amontErrorMessage({\n originalValue\n }));\n }\n }).matches(/^[0-9]*$/, amontErrorMessage);\n};\n\nconst weiAmountSchema = function () {\n let {\n defaultUnit = 'wei'\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return string().transform((value, originalValue) => {\n if (Array.isArray(originalValue)) {\n if (originalValue.length > 2) {\n throw new ValidationError(amontErrorMessage({\n originalValue\n }));\n }\n\n if (originalValue.length === 2 && originalValue[1]) {\n return \"\".concat(originalValue[0], \" \").concat(originalValue[1]);\n }\n\n return \"\".concat(originalValue[0]);\n }\n\n return value;\n }).transform(value => {\n const [amount, unit] = value.split(' ');\n const trimed = amount.replace(/^0+/, '');\n const trimedAmount = trimed.length > 0 ? trimed : '0';\n return unit !== undefined ? [trimedAmount, unit].join(' ') : trimedAmount;\n }).transform((value, originalValue) => {\n try {\n return parseEth(value, defaultUnit).toString();\n } catch (e) {\n throw new ValidationError(amontErrorMessage({\n originalValue\n }));\n }\n }).matches(/^[0-9]*$/, amontErrorMessage);\n};\n\nconst chainIdSchema = () => stringNumberSchema({\n message: '${originalValue} is not a valid chainId'\n});\n\nconst addressSchema = function () {\n let {\n ethProvider\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return mixed().transform(value => {\n try {\n if (typeof value === 'string') {\n if (value.match(/^.*\\.eth$/)) {\n if (ethProvider && ethProvider.resolveName && typeof ethProvider.resolveName === 'function') {\n debug('resolving ENS', value);\n const addressPromise = wrapCall(ethProvider.resolveName(value)).then(resolved => {\n debug('resolved ENS', resolved);\n return resolved;\n }).catch(error => {\n debug('ENS resolution error', error);\n return null;\n });\n return addressPromise;\n }\n\n debug(\"no ethProvider ENS can't be resolved\");\n }\n\n return getAddress(value.toLowerCase());\n }\n } catch (e) {\n debug('Error', e);\n }\n\n return value;\n }).test('resolve-ens', 'Unable to resolve ENS ${originalValue}', async value => {\n if (value === undefined) {\n return true;\n }\n\n if (typeof value === 'string') {\n if (value.match(/^.*\\.eth$/)) {\n return false;\n }\n\n return true;\n }\n\n try {\n const address = await value;\n if (!address) return false;\n getAddress(address);\n return true;\n } catch (e) {\n debug('resolve-ens', e);\n return false;\n }\n }).test('is-address', '${originalValue} is not a valid ethereum address', async value => {\n const resolvedValue = typeof value === 'string' ? value : await value;\n\n try {\n getAddress(resolvedValue);\n return true;\n } catch (e) {\n return false;\n }\n });\n};\n\nconst bytes32Schema = () => string().lowercase().matches(bytes32Regex, '${originalValue} is not a bytes32 hexstring');\n\nconst orderSignSchema = () => string().matches(/^(0x)([0-9a-f]{2})*/, '${originalValue} is not a valid signature');\n\nconst salted = () => ({\n salt: bytes32Schema().required()\n});\n\nconst signed = () => ({\n sign: orderSignSchema().required()\n});\n\nconst catidSchema = () => uint256Schema();\n\nconst objParamsSchema = () => object({\n [paramsKeyName.IEXEC_ARGS]: string(),\n [paramsKeyName.IEXEC_INPUT_FILES]: array().of(string().url('${path} ${originalValue} is not a valid URL')),\n [paramsKeyName.IEXEC_RESULT_ENCRYPTION]: boolean(),\n [paramsKeyName.IEXEC_RESULT_STORAGE_PROVIDER]: string().when('$isCallback', {\n is: true,\n then: string().notRequired(),\n otherwise: string().default('ipfs').when('$isTee', {\n is: true,\n then: string().oneOf(storageProviders(), '${path} \"${value}\" is not supported for TEE tasks use one of supported storage providers (${values})'),\n otherwise: string().oneOf(['ipfs'], '${path} \"${value}\" is not supported for non TEE tasks use supported storage provider ${values}')\n }).required()\n }),\n [paramsKeyName.IEXEC_RESULT_STORAGE_PROXY]: string().when(\"\".concat(paramsKeyName.IEXEC_RESULT_STORAGE_PROVIDER), {\n is: 'ipfs',\n then: string().when('$resultProxyURL', (resultProxyURL, schema) => schema.default(resultProxyURL)).required('${path} is required field with \"ipfs\" storage'),\n otherwise: string().notRequired()\n }),\n [paramsKeyName.IEXEC_DEVELOPER_LOGGER]: boolean().notRequired()\n}).noUnknown(true, 'Unknown key \"${unknown}\" in params');\n\nconst paramsSchema = () => string().transform((value, originalValue) => {\n if (typeof originalValue === 'object') {\n return JSON.stringify(originalValue);\n }\n\n return value;\n}).test('is-json', '${originalValue} is not a valid params, must be a json', value => {\n if (value === undefined) {\n return true;\n }\n\n try {\n JSON.parse(value);\n return true;\n } catch (e) {\n return false;\n }\n});\n\nconst paramsArgsSchema = () => string();\n\nconst paramsInputFilesArraySchema = () => array().transform((value, originalValue) => {\n if (Array.isArray(originalValue)) {\n return originalValue;\n }\n\n if (typeof originalValue === 'string') {\n return originalValue.split(',');\n }\n\n return value;\n}).of(string().url('\"${value}\" is not a valid URL').required('\"${value}\" is not a valid URL'));\n\nconst paramsEncryptResultSchema = () => boolean();\n\nconst paramsStorageProviderSchema = () => string().oneOf(storageProviders(), '\"${value}\" is not a valid storage provider use one of ${values}');\n\nconst tagSchema = () => mixed().transform(value => {\n if (Array.isArray(value)) {\n try {\n const bytes32Tag = encodeTag(value);\n return bytes32Tag;\n } catch (e) {\n return e.message;\n }\n }\n\n if (typeof value === 'string') {\n const lowerCase = value.toLowerCase();\n if (lowerCase.substr(0, 2) === '0x') return lowerCase;\n\n try {\n const bytes32Tag = encodeTag(value.split(','));\n return bytes32Tag;\n } catch (e) {\n return e.message;\n }\n }\n\n return 'Invalid tag';\n}).test('no-transform-error', _ref2 => {\n let {\n originalValue,\n value\n } = _ref2;\n return \"\".concat(originalValue, \" is not a valid tag. \").concat(value);\n}, value => {\n if (value.substr(0, 2) !== '0x') return false;\n return true;\n}).test('is-bytes32', '${originalValue} is not a valid bytes32 hexstring', async value => {\n try {\n await bytes32Schema().validate(value);\n return true;\n } catch (e) {\n return false;\n }\n});\n\nconst apporderSchema = opt => object({\n app: addressSchema(opt).required(),\n appprice: nRlcAmountSchema().required(),\n volume: uint256Schema().required(),\n tag: tagSchema().required(),\n datasetrestrict: addressSchema(opt).required(),\n workerpoolrestrict: addressSchema(opt).required(),\n requesterrestrict: addressSchema(opt).required()\n}, '${originalValue} is not a valid apporder');\n\nconst saltedApporderSchema = opt => apporderSchema(opt).shape(salted(), '${originalValue} is not a valid salted apporder');\n\nconst signedApporderSchema = opt => saltedApporderSchema(opt).shape(signed(), '${originalValue} is not a valid signed apporder');\n\nconst datasetorderSchema = opt => object({\n dataset: addressSchema(opt).required(),\n datasetprice: nRlcAmountSchema().required(),\n volume: uint256Schema().required(),\n tag: tagSchema().required(),\n apprestrict: addressSchema(opt).required(),\n workerpoolrestrict: addressSchema(opt).required(),\n requesterrestrict: addressSchema(opt).required()\n}, '${originalValue} is not a valid datasetorder');\n\nconst saltedDatasetorderSchema = opt => datasetorderSchema(opt).shape(salted(), '${originalValue} is not a valid salted datasetorder');\n\nconst signedDatasetorderSchema = opt => saltedDatasetorderSchema(opt).shape(signed(), '${originalValue} is not a valid signed datasetorder');\n\nconst workerpoolorderSchema = opt => object({\n workerpool: addressSchema(opt).required(),\n workerpoolprice: nRlcAmountSchema().required(),\n volume: uint256Schema().required(),\n tag: tagSchema().required(),\n category: catidSchema().required(),\n trust: uint256Schema().required(),\n apprestrict: addressSchema(opt).required(),\n datasetrestrict: addressSchema(opt).required(),\n requesterrestrict: addressSchema(opt).required()\n}, '${originalValue} is not a valid workerpoolorder');\n\nconst saltedWorkerpoolorderSchema = opt => workerpoolorderSchema(opt).shape(salted(), '${originalValue} is not a valid salted workerpoolorder');\n\nconst signedWorkerpoolorderSchema = opt => saltedWorkerpoolorderSchema(opt).shape(signed(), '${originalValue} is not a valid signed workerpoolorder');\n\nconst requestorderSchema = opt => object({\n app: addressSchema(opt).required(),\n appmaxprice: nRlcAmountSchema().required(),\n dataset: addressSchema(opt).required(),\n datasetmaxprice: nRlcAmountSchema().required(),\n workerpool: addressSchema(opt).required(),\n workerpoolmaxprice: nRlcAmountSchema().required(),\n requester: addressSchema(opt).required(),\n volume: uint256Schema().required(),\n tag: tagSchema().required(),\n category: catidSchema().required(),\n trust: uint256Schema().required(),\n beneficiary: addressSchema(opt).required(),\n callback: addressSchema(opt).required(),\n params: paramsSchema()\n}, '${originalValue} is not a valid requestorder');\n\nconst saltedRequestorderSchema = opt => requestorderSchema(opt).shape(salted(), '${originalValue} is not a valid salted requestorder');\n\nconst signedRequestorderSchema = opt => saltedRequestorderSchema(opt).shape(signed(), '${originalValue} is not a valid signed requestorder');\n\nconst multiaddressSchema = () => mixed().transform(value => {\n if (value instanceof Uint8Array) return value;\n\n if (typeof value === 'string') {\n return humanToMultiaddrBuffer(value, {\n strict: false\n });\n }\n\n throw new ValidationError('${originalValue} is not a valid multiaddr');\n});\n\nconst objMrenclaveSchema = () => object({\n provider: string().required(),\n version: string().required(),\n entrypoint: string().required(),\n heapSize: positiveIntSchema().required(),\n fingerprint: string().required()\n}).noUnknown(true, 'Unknown key \"${unknown}\" in mrenclave');\n\nconst mrenclaveSchema = () => mixed().transform(value => {\n if (value instanceof Uint8Array) {\n return value;\n }\n\n if (typeof value === 'string') {\n return utf8ToBuffer(value);\n }\n\n if (typeof value === 'object') {\n return utf8ToBuffer(JSON.stringify(value));\n }\n\n return utf8ToBuffer('');\n}).test('is-valid-mrenclave', '${path} is not a valid mrenclave', async (value, _ref3) => {\n let {\n originalValue,\n createError\n } = _ref3;\n let stringValue;\n let objValue;\n\n if (originalValue instanceof Uint8Array) {\n try {\n stringValue = Buffer.from(originalValue).toString();\n } catch (e) {\n return false;\n }\n } else if (typeof originalValue === 'string') {\n stringValue = originalValue;\n } else if (originalValue && typeof originalValue === 'object') {\n objValue = originalValue;\n } else if (originalValue !== undefined) {\n return false;\n }\n\n try {\n if (stringValue !== undefined && stringValue !== '') {\n objValue = JSON.parse(stringValue);\n }\n\n if (objValue) {\n await objMrenclaveSchema().validate(objValue, {\n stripUnknown: false\n });\n }\n\n return true;\n } catch (e) {\n if (e instanceof ValidationError) {\n return createError({\n message: e.message\n });\n }\n\n return false;\n }\n}).default(() => utf8ToBuffer(''));\n\nconst appTypeSchema = () => string().oneOf(['DOCKER'], '${originalValue} is not a valid type');\n\nconst appSchema = opt => object({\n owner: addressSchema(opt).required(),\n name: string().required(),\n type: appTypeSchema().required(),\n multiaddr: multiaddressSchema().required(),\n checksum: bytes32Schema().required(),\n mrenclave: mrenclaveSchema().required()\n});\n\nconst datasetSchema = opt => object({\n owner: addressSchema(opt).required(),\n name: string().required(),\n multiaddr: multiaddressSchema().required(),\n checksum: bytes32Schema().required()\n});\n\nconst workerpoolSchema = opt => object({\n owner: addressSchema(opt).required(),\n description: string().required()\n});\n\nconst categorySchema = () => object({\n name: string().required(),\n description: string().required(),\n workClockTimeRef: uint256Schema().required()\n});\n\nconst fileBufferSchema = () => mixed().transform(value => {\n try {\n if (typeof value === 'string') {\n throw Error('unsupported string');\n }\n\n const buffer = Buffer.from(value);\n return buffer;\n } catch (e) {\n throw new ValidationError('Invalid file buffer, must be ArrayBuffer or Buffer');\n }\n});\n\nconst base64Encoded256bitsKeySchema = () => string().test('is-base64-256bits-key', '${originalValue} is not a valid encryption key (must be base64 encoded 256 bits key)', async value => {\n try {\n const keyBuffer = Buffer.from(value, 'base64');\n\n if (keyBuffer.length !== 32) {\n throw Error('Invalid key length');\n }\n\n return true;\n } catch (e) {\n debug('is-base64-256bits-key', e);\n return false;\n }\n});\n\nconst ensDomainSchema = () => string().test('no-empty-label', '${originalValue} is not a valid ENS domain (domain cannot have empty labels)', async value => {\n try {\n const nameArray = value.split('.');\n const hasEmptyLabels = nameArray.filter(e => e.length < 1).length > 0;\n if (hasEmptyLabels) throw new Error('Domain cannot have empty labels');\n return true;\n } catch (e) {\n debug('ensDomainSchema no-empty-label', e);\n return false;\n }\n}).test('valid-namehash', '${originalValue} is not a valid ENS domain (domain cannot contain unsupported characters)', value => {\n try {\n namehash(value);\n return true;\n } catch (e) {\n debug('ensDomainSchema valid-namehash', e);\n return false;\n }\n}).test('no-uppercase', '${originalValue} is not a valid ENS domain (domain cannot contain uppercase characters)', value => {\n try {\n if (value !== value.toLowerCase()) {\n throw Error('Domain cannot have uppercase characters');\n }\n\n return true;\n } catch (e) {\n debug('ensDomainSchema no-uppercase', e);\n return false;\n }\n});\n\nconst ensLabelSchema = () => string().test('no-dot', '${originalValue} is not a valid ENS label (label cannot have `.`)', async value => {\n try {\n const hasDot = value.indexOf('.') !== -1;\n if (hasDot) throw new Error('Label cannot have `.`');\n return true;\n } catch (e) {\n debug('ensLabelSchema no-dot', e);\n return false;\n }\n}).test('valid-namehash', '${originalValue} is not a valid ENS label (label cannot contain unsupported characters)', value => {\n try {\n namehash(value);\n return true;\n } catch (e) {\n debug('ensLabelSchema valid-namehash', e);\n return false;\n }\n}).test('no-uppercase', '${originalValue} is not a valid ENS label (label cannot contain uppercase characters)', value => {\n try {\n if (value !== value.toLowerCase()) {\n throw Error('Label cannot have uppercase characters');\n }\n\n return true;\n } catch (e) {\n debug('ensLabelSchema no-uppercase', e);\n return false;\n }\n});\n\nconst throwIfMissing = () => {\n throw new ValidationError('Missing parameter');\n};\n\nmodule.exports = {\n throwIfMissing,\n stringSchema: string,\n uint256Schema,\n nRlcAmountSchema,\n weiAmountSchema,\n addressSchema,\n bytes32Schema,\n apporderSchema,\n saltedApporderSchema,\n signedApporderSchema,\n datasetorderSchema,\n signedDatasetorderSchema,\n saltedDatasetorderSchema,\n workerpoolorderSchema,\n saltedWorkerpoolorderSchema,\n signedWorkerpoolorderSchema,\n requestorderSchema,\n saltedRequestorderSchema,\n signedRequestorderSchema,\n catidSchema,\n paramsSchema,\n objParamsSchema,\n paramsArgsSchema,\n paramsInputFilesArraySchema,\n paramsEncryptResultSchema,\n paramsStorageProviderSchema,\n tagSchema,\n chainIdSchema,\n hexnumberSchema,\n positiveIntSchema,\n positiveStrictIntSchema,\n mrenclaveSchema,\n appTypeSchema,\n appSchema,\n datasetSchema,\n categorySchema,\n workerpoolSchema,\n base64Encoded256bitsKeySchema,\n fileBufferSchema,\n ensDomainSchema,\n ensLabelSchema,\n ValidationError\n};","'use strict'\n\n/**\n * Returns the last item of an (async) iterable, unless empty, in which case\n * return `undefined`.\n *\n * @template T\n * @param {AsyncIterable|Iterable} source\n */\nconst last = async (source) => {\n let res\n\n for await (const entry of source) {\n res = entry\n }\n\n return res\n}\n\nmodule.exports = last\n","'use strict'\n\n/**\n * Drains an (async) iterable discarding its' content and does not return\n * anything.\n *\n * @template T\n * @param {AsyncIterable|Iterable} source\n * @returns {Promise}\n */\nconst drain = async (source) => {\n for await (const _ of source) { } // eslint-disable-line no-unused-vars,no-empty\n}\n\nmodule.exports = drain\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defineReadOnly, getStatic } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { JsonRpcProvider } from \"./json-rpc-provider\";\n// A StaticJsonRpcProvider is useful when you *know* for certain that\n// the backend will never change, as it never calls eth_chainId to\n// verify its backend. However, if the backend does change, the effects\n// are undefined and may include:\n// - inconsistent results\n// - locking up the UI\n// - block skew warnings\n// - wrong results\n// If the network is not explicit (i.e. auto-detection is expected), the\n// node MUST be running and available to respond to requests BEFORE this\n// is instantiated.\nexport class StaticJsonRpcProvider extends JsonRpcProvider {\n detectNetwork() {\n const _super = Object.create(null, {\n detectNetwork: { get: () => super.detectNetwork }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let network = this.network;\n if (network == null) {\n network = yield _super.detectNetwork.call(this);\n if (!network) {\n logger.throwError(\"no network detected\", Logger.errors.UNKNOWN_ERROR, {});\n }\n // If still not set, set it\n if (this._network == null) {\n // A static network does not support \"any\"\n defineReadOnly(this, \"_network\", network);\n this.emit(\"network\", network, null);\n }\n }\n return network;\n });\n }\n}\nexport class UrlJsonRpcProvider extends StaticJsonRpcProvider {\n constructor(network, apiKey) {\n logger.checkAbstract(new.target, UrlJsonRpcProvider);\n // Normalize the Network and API Key\n network = getStatic(new.target, \"getNetwork\")(network);\n apiKey = getStatic(new.target, \"getApiKey\")(apiKey);\n const connection = getStatic(new.target, \"getUrl\")(network, apiKey);\n super(connection, network);\n if (typeof (apiKey) === \"string\") {\n defineReadOnly(this, \"apiKey\", apiKey);\n }\n else if (apiKey != null) {\n Object.keys(apiKey).forEach((key) => {\n defineReadOnly(this, key, apiKey[key]);\n });\n }\n }\n _startPending() {\n logger.warn(\"WARNING: API provider does not support pending filters\");\n }\n isCommunityResource() {\n return false;\n }\n getSigner(address) {\n return logger.throwError(\"API provider does not support signing\", Logger.errors.UNSUPPORTED_OPERATION, { operation: \"getSigner\" });\n }\n listAccounts() {\n return Promise.resolve([]);\n }\n // Return a defaultApiKey if null, otherwise validate the API key\n static getApiKey(apiKey) {\n return apiKey;\n }\n // Returns the url or connection for the given network and API key. The\n // API key will have been sanitized by the getApiKey first, so any validation\n // or transformations can be done there.\n static getUrl(network, apiKey) {\n return logger.throwError(\"not implemented; sub-classes must override getUrl\", Logger.errors.NOT_IMPLEMENTED, {\n operation: \"getUrl\"\n });\n }\n}\n//# sourceMappingURL=url-json-rpc-provider.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Signer } from \"@ethersproject/abstract-signer\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { hexlify, hexValue, isHexString } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport { checkProperties, deepCopy, defineReadOnly, getStatic, resolveProperties, shallowCopy } from \"@ethersproject/properties\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchJson, poll } from \"@ethersproject/web\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { BaseProvider } from \"./base-provider\";\nconst errorGas = [\"call\", \"estimateGas\"];\nfunction checkError(method, error, params) {\n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && error.code === Logger.errors.SERVER_ERROR) {\n const e = error.error;\n if (e && e.message.match(\"reverted\") && isHexString(e.data)) {\n return e.data;\n }\n logger.throwError(\"missing revert data in call exception\", Logger.errors.CALL_EXCEPTION, {\n error, data: \"0x\"\n });\n }\n let message = error.message;\n if (error.code === Logger.errors.SERVER_ERROR && error.error && typeof (error.error.message) === \"string\") {\n message = error.error.message;\n }\n else if (typeof (error.body) === \"string\") {\n message = error.body;\n }\n else if (typeof (error.responseText) === \"string\") {\n message = error.responseText;\n }\n message = (message || \"\").toLowerCase();\n const transaction = params.transaction || params.signedTransaction;\n // \"insufficient funds for gas * price + value + cost(data)\"\n if (message.match(/insufficient funds|base fee exceeds gas limit/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.errors.INSUFFICIENT_FUNDS, {\n error, method, transaction\n });\n }\n // \"nonce too low\"\n if (message.match(/nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.errors.NONCE_EXPIRED, {\n error, method, transaction\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/replacement transaction underpriced/)) {\n logger.throwError(\"replacement fee too low\", Logger.errors.REPLACEMENT_UNDERPRICED, {\n error, method, transaction\n });\n }\n // \"replacement transaction underpriced\"\n if (message.match(/only replay-protected/)) {\n logger.throwError(\"legacy pre-eip-155 transactions not supported\", Logger.errors.UNSUPPORTED_OPERATION, {\n error, method, transaction\n });\n }\n if (errorGas.indexOf(method) >= 0 && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {\n error, method, transaction\n });\n }\n throw error;\n}\nfunction timer(timeout) {\n return new Promise(function (resolve) {\n setTimeout(resolve, timeout);\n });\n}\nfunction getResult(payload) {\n if (payload.error) {\n // @TODO: not any\n const error = new Error(payload.error.message);\n error.code = payload.error.code;\n error.data = payload.error.data;\n throw error;\n }\n return payload.result;\n}\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nconst _constructorGuard = {};\nexport class JsonRpcSigner extends Signer {\n constructor(constructorGuard, provider, addressOrIndex) {\n logger.checkNew(new.target, JsonRpcSigner);\n super();\n if (constructorGuard !== _constructorGuard) {\n throw new Error(\"do not call the JsonRpcSigner constructor directly; use provider.getSigner\");\n }\n defineReadOnly(this, \"provider\", provider);\n if (addressOrIndex == null) {\n addressOrIndex = 0;\n }\n if (typeof (addressOrIndex) === \"string\") {\n defineReadOnly(this, \"_address\", this.provider.formatter.address(addressOrIndex));\n defineReadOnly(this, \"_index\", null);\n }\n else if (typeof (addressOrIndex) === \"number\") {\n defineReadOnly(this, \"_index\", addressOrIndex);\n defineReadOnly(this, \"_address\", null);\n }\n else {\n logger.throwArgumentError(\"invalid address or index\", \"addressOrIndex\", addressOrIndex);\n }\n }\n connect(provider) {\n return logger.throwError(\"cannot alter JSON-RPC Signer connection\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"connect\"\n });\n }\n connectUnchecked() {\n return new UncheckedJsonRpcSigner(_constructorGuard, this.provider, this._address || this._index);\n }\n getAddress() {\n if (this._address) {\n return Promise.resolve(this._address);\n }\n return this.provider.send(\"eth_accounts\", []).then((accounts) => {\n if (accounts.length <= this._index) {\n logger.throwError(\"unknown account #\" + this._index, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"getAddress\"\n });\n }\n return this.provider.formatter.address(accounts[this._index]);\n });\n }\n sendUncheckedTransaction(transaction) {\n transaction = shallowCopy(transaction);\n const fromAddress = this.getAddress().then((address) => {\n if (address) {\n address = address.toLowerCase();\n }\n return address;\n });\n // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n // wishes to use this, it is easy to specify explicitly, otherwise\n // we look it up for them.\n if (transaction.gasLimit == null) {\n const estimate = shallowCopy(transaction);\n estimate.from = fromAddress;\n transaction.gasLimit = this.provider.estimateGas(estimate);\n }\n if (transaction.to != null) {\n transaction.to = Promise.resolve(transaction.to).then((to) => __awaiter(this, void 0, void 0, function* () {\n if (to == null) {\n return null;\n }\n const address = yield this.provider.resolveName(to);\n if (address == null) {\n logger.throwArgumentError(\"provided ENS name resolves to null\", \"tx.to\", to);\n }\n return address;\n }));\n }\n return resolveProperties({\n tx: resolveProperties(transaction),\n sender: fromAddress\n }).then(({ tx, sender }) => {\n if (tx.from != null) {\n if (tx.from.toLowerCase() !== sender) {\n logger.throwArgumentError(\"from address mismatch\", \"transaction\", transaction);\n }\n }\n else {\n tx.from = sender;\n }\n const hexTx = this.provider.constructor.hexlifyTransaction(tx, { from: true });\n return this.provider.send(\"eth_sendTransaction\", [hexTx]).then((hash) => {\n return hash;\n }, (error) => {\n return checkError(\"sendTransaction\", error, hexTx);\n });\n });\n }\n signTransaction(transaction) {\n return logger.throwError(\"signing transactions is unsupported\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"signTransaction\"\n });\n }\n sendTransaction(transaction) {\n return __awaiter(this, void 0, void 0, function* () {\n // This cannot be mined any earlier than any recent block\n const blockNumber = yield this.provider._getInternalBlockNumber(100 + 2 * this.provider.pollingInterval);\n // Send the transaction\n const hash = yield this.sendUncheckedTransaction(transaction);\n try {\n // Unfortunately, JSON-RPC only provides and opaque transaction hash\n // for a response, and we need the actual transaction, so we poll\n // for it; it should show up very quickly\n return yield poll(() => __awaiter(this, void 0, void 0, function* () {\n const tx = yield this.provider.getTransaction(hash);\n if (tx === null) {\n return undefined;\n }\n return this.provider._wrapTransaction(tx, hash, blockNumber);\n }), { oncePoll: this.provider });\n }\n catch (error) {\n error.transactionHash = hash;\n throw error;\n }\n });\n }\n signMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = ((typeof (message) === \"string\") ? toUtf8Bytes(message) : message);\n const address = yield this.getAddress();\n return yield this.provider.send(\"personal_sign\", [hexlify(data), address.toLowerCase()]);\n });\n }\n _legacySignMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = ((typeof (message) === \"string\") ? toUtf8Bytes(message) : message);\n const address = yield this.getAddress();\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n return yield this.provider.send(\"eth_sign\", [address.toLowerCase(), hexlify(data)]);\n });\n }\n _signTypedData(domain, types, value) {\n return __awaiter(this, void 0, void 0, function* () {\n // Populate any ENS names (in-place)\n const populated = yield _TypedDataEncoder.resolveNames(domain, types, value, (name) => {\n return this.provider.resolveName(name);\n });\n const address = yield this.getAddress();\n return yield this.provider.send(\"eth_signTypedData_v4\", [\n address.toLowerCase(),\n JSON.stringify(_TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n ]);\n });\n }\n unlock(password) {\n return __awaiter(this, void 0, void 0, function* () {\n const provider = this.provider;\n const address = yield this.getAddress();\n return provider.send(\"personal_unlockAccount\", [address.toLowerCase(), password, null]);\n });\n }\n}\nclass UncheckedJsonRpcSigner extends JsonRpcSigner {\n sendTransaction(transaction) {\n return this.sendUncheckedTransaction(transaction).then((hash) => {\n return {\n hash: hash,\n nonce: null,\n gasLimit: null,\n gasPrice: null,\n data: null,\n value: null,\n chainId: null,\n confirmations: 0,\n from: null,\n wait: (confirmations) => { return this.provider.waitForTransaction(hash, confirmations); }\n };\n });\n }\n}\nconst allowedTransactionKeys = {\n chainId: true, data: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true,\n type: true, accessList: true,\n maxFeePerGas: true, maxPriorityFeePerGas: true\n};\nexport class JsonRpcProvider extends BaseProvider {\n constructor(url, network) {\n logger.checkNew(new.target, JsonRpcProvider);\n let networkOrReady = network;\n // The network is unknown, query the JSON-RPC for it\n if (networkOrReady == null) {\n networkOrReady = new Promise((resolve, reject) => {\n setTimeout(() => {\n this.detectNetwork().then((network) => {\n resolve(network);\n }, (error) => {\n reject(error);\n });\n }, 0);\n });\n }\n super(networkOrReady);\n // Default URL\n if (!url) {\n url = getStatic(this.constructor, \"defaultUrl\")();\n }\n if (typeof (url) === \"string\") {\n defineReadOnly(this, \"connection\", Object.freeze({\n url: url\n }));\n }\n else {\n defineReadOnly(this, \"connection\", Object.freeze(shallowCopy(url)));\n }\n this._nextId = 42;\n }\n get _cache() {\n if (this._eventLoopCache == null) {\n this._eventLoopCache = {};\n }\n return this._eventLoopCache;\n }\n static defaultUrl() {\n return \"http:/\\/localhost:8545\";\n }\n detectNetwork() {\n if (!this._cache[\"detectNetwork\"]) {\n this._cache[\"detectNetwork\"] = this._uncachedDetectNetwork();\n // Clear this cache at the beginning of the next event loop\n setTimeout(() => {\n this._cache[\"detectNetwork\"] = null;\n }, 0);\n }\n return this._cache[\"detectNetwork\"];\n }\n _uncachedDetectNetwork() {\n return __awaiter(this, void 0, void 0, function* () {\n yield timer(0);\n let chainId = null;\n try {\n chainId = yield this.send(\"eth_chainId\", []);\n }\n catch (error) {\n try {\n chainId = yield this.send(\"net_version\", []);\n }\n catch (error) { }\n }\n if (chainId != null) {\n const getNetwork = getStatic(this.constructor, \"getNetwork\");\n try {\n return getNetwork(BigNumber.from(chainId).toNumber());\n }\n catch (error) {\n return logger.throwError(\"could not detect network\", Logger.errors.NETWORK_ERROR, {\n chainId: chainId,\n event: \"invalidNetwork\",\n serverError: error\n });\n }\n }\n return logger.throwError(\"could not detect network\", Logger.errors.NETWORK_ERROR, {\n event: \"noNetwork\"\n });\n });\n }\n getSigner(addressOrIndex) {\n return new JsonRpcSigner(_constructorGuard, this, addressOrIndex);\n }\n getUncheckedSigner(addressOrIndex) {\n return this.getSigner(addressOrIndex).connectUnchecked();\n }\n listAccounts() {\n return this.send(\"eth_accounts\", []).then((accounts) => {\n return accounts.map((a) => this.formatter.address(a));\n });\n }\n send(method, params) {\n const request = {\n method: method,\n params: params,\n id: (this._nextId++),\n jsonrpc: \"2.0\"\n };\n this.emit(\"debug\", {\n action: \"request\",\n request: deepCopy(request),\n provider: this\n });\n // We can expand this in the future to any call, but for now these\n // are the biggest wins and do not require any serializing parameters.\n const cache = ([\"eth_chainId\", \"eth_blockNumber\"].indexOf(method) >= 0);\n if (cache && this._cache[method]) {\n return this._cache[method];\n }\n const result = fetchJson(this.connection, JSON.stringify(request), getResult).then((result) => {\n this.emit(\"debug\", {\n action: \"response\",\n request: request,\n response: result,\n provider: this\n });\n return result;\n }, (error) => {\n this.emit(\"debug\", {\n action: \"response\",\n error: error,\n request: request,\n provider: this\n });\n throw error;\n });\n // Cache the fetch, but clear it on the next event loop\n if (cache) {\n this._cache[method] = result;\n setTimeout(() => {\n this._cache[method] = null;\n }, 0);\n }\n return result;\n }\n prepareRequest(method, params) {\n switch (method) {\n case \"getBlockNumber\":\n return [\"eth_blockNumber\", []];\n case \"getGasPrice\":\n return [\"eth_gasPrice\", []];\n case \"getBalance\":\n return [\"eth_getBalance\", [getLowerCase(params.address), params.blockTag]];\n case \"getTransactionCount\":\n return [\"eth_getTransactionCount\", [getLowerCase(params.address), params.blockTag]];\n case \"getCode\":\n return [\"eth_getCode\", [getLowerCase(params.address), params.blockTag]];\n case \"getStorageAt\":\n return [\"eth_getStorageAt\", [getLowerCase(params.address), params.position, params.blockTag]];\n case \"sendTransaction\":\n return [\"eth_sendRawTransaction\", [params.signedTransaction]];\n case \"getBlock\":\n if (params.blockTag) {\n return [\"eth_getBlockByNumber\", [params.blockTag, !!params.includeTransactions]];\n }\n else if (params.blockHash) {\n return [\"eth_getBlockByHash\", [params.blockHash, !!params.includeTransactions]];\n }\n return null;\n case \"getTransaction\":\n return [\"eth_getTransactionByHash\", [params.transactionHash]];\n case \"getTransactionReceipt\":\n return [\"eth_getTransactionReceipt\", [params.transactionHash]];\n case \"call\": {\n const hexlifyTransaction = getStatic(this.constructor, \"hexlifyTransaction\");\n return [\"eth_call\", [hexlifyTransaction(params.transaction, { from: true }), params.blockTag]];\n }\n case \"estimateGas\": {\n const hexlifyTransaction = getStatic(this.constructor, \"hexlifyTransaction\");\n return [\"eth_estimateGas\", [hexlifyTransaction(params.transaction, { from: true })]];\n }\n case \"getLogs\":\n if (params.filter && params.filter.address != null) {\n params.filter.address = getLowerCase(params.filter.address);\n }\n return [\"eth_getLogs\", [params.filter]];\n default:\n break;\n }\n return null;\n }\n perform(method, params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Legacy networks do not like the type field being passed along (which\n // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n if (method === \"call\" || method === \"estimateGas\") {\n const tx = params.transaction;\n if (tx && tx.type != null && BigNumber.from(tx.type).isZero()) {\n // If there are no EIP-1559 properties, it might be non-EIP-a559\n if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n const feeData = yield this.getFeeData();\n if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n // Network doesn't know about EIP-1559 (and hence type)\n params = shallowCopy(params);\n params.transaction = shallowCopy(tx);\n delete params.transaction.type;\n }\n }\n }\n }\n const args = this.prepareRequest(method, params);\n if (args == null) {\n logger.throwError(method + \" not implemented\", Logger.errors.NOT_IMPLEMENTED, { operation: method });\n }\n try {\n return yield this.send(args[0], args[1]);\n }\n catch (error) {\n return checkError(method, error, params);\n }\n });\n }\n _startEvent(event) {\n if (event.tag === \"pending\") {\n this._startPending();\n }\n super._startEvent(event);\n }\n _startPending() {\n if (this._pendingFilter != null) {\n return;\n }\n const self = this;\n const pendingFilter = this.send(\"eth_newPendingTransactionFilter\", []);\n this._pendingFilter = pendingFilter;\n pendingFilter.then(function (filterId) {\n function poll() {\n self.send(\"eth_getFilterChanges\", [filterId]).then(function (hashes) {\n if (self._pendingFilter != pendingFilter) {\n return null;\n }\n let seq = Promise.resolve();\n hashes.forEach(function (hash) {\n // @TODO: This should be garbage collected at some point... How? When?\n self._emitted[\"t:\" + hash.toLowerCase()] = \"pending\";\n seq = seq.then(function () {\n return self.getTransaction(hash).then(function (tx) {\n self.emit(\"pending\", tx);\n return null;\n });\n });\n });\n return seq.then(function () {\n return timer(1000);\n });\n }).then(function () {\n if (self._pendingFilter != pendingFilter) {\n self.send(\"eth_uninstallFilter\", [filterId]);\n return;\n }\n setTimeout(function () { poll(); }, 0);\n return null;\n }).catch((error) => { });\n }\n poll();\n return filterId;\n }).catch((error) => { });\n }\n _stopEvent(event) {\n if (event.tag === \"pending\" && this.listenerCount(\"pending\") === 0) {\n this._pendingFilter = null;\n }\n super._stopEvent(event);\n }\n // Convert an ethers.js transaction into a JSON-RPC transaction\n // - gasLimit => gas\n // - All values hexlified\n // - All numeric values zero-striped\n // - All addresses are lowercased\n // NOTE: This allows a TransactionRequest, but all values should be resolved\n // before this is called\n // @TODO: This will likely be removed in future versions and prepareRequest\n // will be the preferred method for this.\n static hexlifyTransaction(transaction, allowExtra) {\n // Check only allowed properties are given\n const allowed = shallowCopy(allowedTransactionKeys);\n if (allowExtra) {\n for (const key in allowExtra) {\n if (allowExtra[key]) {\n allowed[key] = true;\n }\n }\n }\n checkProperties(transaction, allowed);\n const result = {};\n // Some nodes (INFURA ropsten; INFURA mainnet is fine) do not like leading zeros.\n [\"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach(function (key) {\n if (transaction[key] == null) {\n return;\n }\n const value = hexValue(transaction[key]);\n if (key === \"gasLimit\") {\n key = \"gas\";\n }\n result[key] = value;\n });\n [\"from\", \"to\", \"data\"].forEach(function (key) {\n if (transaction[key] == null) {\n return;\n }\n result[key] = hexlify(transaction[key]);\n });\n if (transaction.accessList) {\n result[\"accessList\"] = accessListify(transaction.accessList);\n }\n return result;\n }\n}\n//# sourceMappingURL=json-rpc-provider.js.map","import React from 'react';\nimport { isFragment } from 'react-is';\nexport default function toArray(children) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var ret = [];\n React.Children.forEach(children, function (child) {\n if ((child === undefined || child === null) && !option.keepEmpty) {\n return;\n }\n\n if (Array.isArray(child)) {\n ret = ret.concat(toArray(child));\n } else if (isFragment(child) && child.props) {\n ret = ret.concat(toArray(child.props.children, option));\n } else {\n ret.push(child);\n }\n });\n return ret;\n}","import * as React from 'react';\nvar SizeContext = /*#__PURE__*/React.createContext(undefined);\nexport var SizeContextProvider = function SizeContextProvider(_ref) {\n var children = _ref.children,\n size = _ref.size;\n return /*#__PURE__*/React.createElement(SizeContext.Consumer, null, function (originSize) {\n return /*#__PURE__*/React.createElement(SizeContext.Provider, {\n value: size || originSize\n }, children);\n });\n};\nexport default SizeContext;","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n throw new Error(prefix + \": \" + (message || ''));\n}\n\nexport default invariant;\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst decodeErrPrefix = 'CBOR decode error:';\nconst encodeErrPrefix = 'CBOR encode error:';\nconst uintMinorPrefixBytes = [];\nuintMinorPrefixBytes[23] = 1;\nuintMinorPrefixBytes[24] = 2;\nuintMinorPrefixBytes[25] = 3;\nuintMinorPrefixBytes[26] = 5;\nuintMinorPrefixBytes[27] = 9;\nfunction assertEnoughData(data, pos, need) {\n if (data.length - pos < need) {\n throw new Error(`${ decodeErrPrefix } not enough data for type`);\n }\n}\n\nexports.assertEnoughData = assertEnoughData;\nexports.decodeErrPrefix = decodeErrPrefix;\nexports.encodeErrPrefix = encodeErrPrefix;\nexports.uintMinorPrefixBytes = uintMinorPrefixBytes;\n","\n/**\n * Expose `Emitter`.\n */\n\nexports.Emitter = Emitter;\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","export default (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n","\"use strict\";\n\n(function(root) {\n\n function checkInt(value) {\n return (parseInt(value) === value);\n }\n\n function checkInts(arrayish) {\n if (!checkInt(arrayish.length)) { return false; }\n\n for (var i = 0; i < arrayish.length; i++) {\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\n return false;\n }\n }\n\n return true;\n }\n\n function coerceArray(arg, copy) {\n\n // ArrayBuffer view\n if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {\n\n if (copy) {\n if (arg.slice) {\n arg = arg.slice();\n } else {\n arg = Array.prototype.slice.call(arg);\n }\n }\n\n return arg;\n }\n\n // It's an array; check it is a valid representation of a byte\n if (Array.isArray(arg)) {\n if (!checkInts(arg)) {\n throw new Error('Array contains invalid value: ' + arg);\n }\n\n return new Uint8Array(arg);\n }\n\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\n if (checkInt(arg.length) && checkInts(arg)) {\n return new Uint8Array(arg);\n }\n\n throw new Error('unsupported array-like object');\n }\n\n function createArray(length) {\n return new Uint8Array(length);\n }\n\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\n if (sourceStart != null || sourceEnd != null) {\n if (sourceArray.slice) {\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\n } else {\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\n }\n }\n targetArray.set(sourceArray, targetStart);\n }\n\n\n\n var convertUtf8 = (function() {\n function toBytes(text) {\n var result = [], i = 0;\n text = encodeURI(text);\n while (i < text.length) {\n var c = text.charCodeAt(i++);\n\n // if it is a % sign, encode the following 2 bytes as a hex value\n if (c === 37) {\n result.push(parseInt(text.substr(i, 2), 16))\n i += 2;\n\n // otherwise, just the actual byte\n } else {\n result.push(c)\n }\n }\n\n return coerceArray(result);\n }\n\n function fromBytes(bytes) {\n var result = [], i = 0;\n\n while (i < bytes.length) {\n var c = bytes[i];\n\n if (c < 128) {\n result.push(String.fromCharCode(c));\n i++;\n } else if (c > 191 && c < 224) {\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\n i += 2;\n } else {\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\n i += 3;\n }\n }\n\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n var convertHex = (function() {\n function toBytes(text) {\n var result = [];\n for (var i = 0; i < text.length; i += 2) {\n result.push(parseInt(text.substr(i, 2), 16));\n }\n\n return result;\n }\n\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\n var Hex = '0123456789abcdef';\n\n function fromBytes(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i++) {\n var v = bytes[i];\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\n }\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n\n // Number of rounds by keysize\n var numberOfRounds = {16: 10, 24: 12, 32: 14}\n\n // Round constant words\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n\n // S-box and Inverse S-box (S is for Substitution)\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\n var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n\n // Transformations for encryption\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n\n // Transformations for decryption\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n\n // Transformations for decryption key expansion\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\n\n function convertToInt32(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i += 4) {\n result.push(\n (bytes[i ] << 24) |\n (bytes[i + 1] << 16) |\n (bytes[i + 2] << 8) |\n bytes[i + 3]\n );\n }\n return result;\n }\n\n var AES = function(key) {\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n Object.defineProperty(this, 'key', {\n value: coerceArray(key, true)\n });\n\n this._prepare();\n }\n\n\n AES.prototype._prepare = function() {\n\n var rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\n }\n\n // encryption round keys\n this._Ke = [];\n\n // decryption round keys\n this._Kd = [];\n\n for (var i = 0; i <= rounds; i++) {\n this._Ke.push([0, 0, 0, 0]);\n this._Kd.push([0, 0, 0, 0]);\n }\n\n var roundKeyCount = (rounds + 1) * 4;\n var KC = this.key.length / 4;\n\n // convert the key into ints\n var tk = convertToInt32(this.key);\n\n // copy values into round key arrays\n var index;\n for (var i = 0; i < KC; i++) {\n index = i >> 2;\n this._Ke[index][i % 4] = tk[i];\n this._Kd[rounds - index][i % 4] = tk[i];\n }\n\n // key expansion (fips-197 section 5.2)\n var rconpointer = 0;\n var t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[ tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (var i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n } else {\n for (var i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n\n tk[KC / 2] ^= (S[ tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n\n for (var i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n\n // copy values into round key arrays\n var i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n this._Ke[r][c] = tk[i];\n this._Kd[rounds - r][c] = tk[i++];\n t++;\n }\n }\n\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (var r = 1; r < rounds; r++) {\n for (var c = 0; c < 4; c++) {\n tt = this._Kd[r][c];\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[ tt & 0xFF]);\n }\n }\n }\n\n AES.prototype.encrypt = function(plaintext) {\n if (plaintext.length != 16) {\n throw new Error('invalid plaintext size (must be 16 bytes)');\n }\n\n var rounds = this._Ke.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(plaintext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Ke[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T1[(t[ i ] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[ t[(i + 3) % 4] & 0xff] ^\n this._Ke[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Ke[rounds][i];\n result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n AES.prototype.decrypt = function(ciphertext) {\n if (ciphertext.length != 16) {\n throw new Error('invalid ciphertext size (must be 16 bytes)');\n }\n\n var rounds = this._Kd.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(ciphertext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Kd[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T5[(t[ i ] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[ t[(i + 1) % 4] & 0xff] ^\n this._Kd[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Kd[rounds][i];\n result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n\n /**\n * Mode Of Operation - Electonic Codebook (ECB)\n */\n var ModeOfOperationECB = function(key) {\n if (!(this instanceof ModeOfOperationECB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Electronic Code Block\";\n this.name = \"ecb\";\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationECB.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n block = this._aes.encrypt(block);\n copyArray(block, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationECB.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n copyArray(block, plaintext, i);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Block Chaining (CBC)\n */\n var ModeOfOperationCBC = function(key, iv) {\n if (!(this instanceof ModeOfOperationCBC)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Block Chaining\";\n this.name = \"cbc\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastCipherblock = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCBC.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n\n for (var j = 0; j < 16; j++) {\n block[j] ^= this._lastCipherblock[j];\n }\n\n this._lastCipherblock = this._aes.encrypt(block);\n copyArray(this._lastCipherblock, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n\n for (var j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\n }\n\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Feedback (CFB)\n */\n var ModeOfOperationCFB = function(key, iv, segmentSize) {\n if (!(this instanceof ModeOfOperationCFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Feedback\";\n this.name = \"cfb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 size)');\n }\n\n if (!segmentSize) { segmentSize = 1; }\n\n this.segmentSize = segmentSize;\n\n this._shiftRegister = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCFB.prototype.encrypt = function(plaintext) {\n if ((plaintext.length % this.segmentSize) != 0) {\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\n }\n\n var encrypted = coerceArray(plaintext, true);\n\n var xorSegment;\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n for (var j = 0; j < this.segmentSize; j++) {\n encrypted[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return encrypted;\n }\n\n ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {\n if ((ciphertext.length % this.segmentSize) != 0) {\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\n }\n\n var plaintext = coerceArray(ciphertext, true);\n\n var xorSegment;\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n\n for (var j = 0; j < this.segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return plaintext;\n }\n\n /**\n * Mode Of Operation - Output Feedback (OFB)\n */\n var ModeOfOperationOFB = function(key, iv) {\n if (!(this instanceof ModeOfOperationOFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Output Feedback\";\n this.name = \"ofb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastPrecipher = coerceArray(iv, true);\n this._lastPrecipherIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationOFB.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._lastPrecipherIndex === 16) {\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\n this._lastPrecipherIndex = 0;\n }\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\n\n\n /**\n * Counter object for CTR common mode of operation\n */\n var Counter = function(initialValue) {\n if (!(this instanceof Counter)) {\n throw Error('Counter must be instanitated with `new`');\n }\n\n // We allow 0, but anything false-ish uses the default 1\n if (initialValue !== 0 && !initialValue) { initialValue = 1; }\n\n if (typeof(initialValue) === 'number') {\n this._counter = createArray(16);\n this.setValue(initialValue);\n\n } else {\n this.setBytes(initialValue);\n }\n }\n\n Counter.prototype.setValue = function(value) {\n if (typeof(value) !== 'number' || parseInt(value) != value) {\n throw new Error('invalid counter value (must be an integer)');\n }\n\n for (var index = 15; index >= 0; --index) {\n this._counter[index] = value % 256;\n value = value >> 8;\n }\n }\n\n Counter.prototype.setBytes = function(bytes) {\n bytes = coerceArray(bytes, true);\n\n if (bytes.length != 16) {\n throw new Error('invalid counter bytes size (must be 16 bytes)');\n }\n\n this._counter = bytes;\n };\n\n Counter.prototype.increment = function() {\n for (var i = 15; i >= 0; i--) {\n if (this._counter[i] === 255) {\n this._counter[i] = 0;\n } else {\n this._counter[i]++;\n break;\n }\n }\n }\n\n\n /**\n * Mode Of Operation - Counter (CTR)\n */\n var ModeOfOperationCTR = function(key, counter) {\n if (!(this instanceof ModeOfOperationCTR)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Counter\";\n this.name = \"ctr\";\n\n if (!(counter instanceof Counter)) {\n counter = new Counter(counter)\n }\n\n this._counter = counter;\n\n this._remainingCounter = null;\n this._remainingCounterIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCTR.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._remainingCounterIndex === 16) {\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\n this._remainingCounterIndex = 0;\n this._counter.increment();\n }\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\n\n\n ///////////////////////\n // Padding\n\n // See:https://tools.ietf.org/html/rfc2315\n function pkcs7pad(data) {\n data = coerceArray(data, true);\n var padder = 16 - (data.length % 16);\n var result = createArray(data.length + padder);\n copyArray(data, result);\n for (var i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n }\n\n function pkcs7strip(data) {\n data = coerceArray(data, true);\n if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }\n\n var padder = data[data.length - 1];\n if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }\n\n var length = data.length - padder;\n for (var i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new Error('PKCS#7 invalid padding byte');\n }\n }\n\n var result = createArray(length);\n copyArray(data, result, 0, 0, length);\n return result;\n }\n\n ///////////////////////\n // Exporting\n\n\n // The block cipher\n var aesjs = {\n AES: AES,\n Counter: Counter,\n\n ModeOfOperation: {\n ecb: ModeOfOperationECB,\n cbc: ModeOfOperationCBC,\n cfb: ModeOfOperationCFB,\n ofb: ModeOfOperationOFB,\n ctr: ModeOfOperationCTR\n },\n\n utils: {\n hex: convertHex,\n utf8: convertUtf8\n },\n\n padding: {\n pkcs7: {\n pad: pkcs7pad,\n strip: pkcs7strip\n }\n },\n\n _arrayTest: {\n coerceArray: coerceArray,\n createArray: createArray,\n copyArray: copyArray,\n }\n };\n\n\n // node.js\n if (typeof exports !== 'undefined') {\n module.exports = aesjs\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(aesjs);\n\n // Web Browsers\n } else {\n\n // If there was an existing library at \"aesjs\" make sure it's still available\n if (root.aesjs) {\n aesjs._aesjs = root.aesjs;\n }\n\n root.aesjs = aesjs;\n }\n\n\n})(this);\n","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","function valueOf(obj) {\n return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n // Test for strict equality first.\n if (a === b) return true;\n\n // Otherwise, if either of them == null they are not equal.\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return (\n Array.isArray(b) &&\n a.length === b.length &&\n a.every(function(item, index) {\n return valueEqual(item, b[index]);\n })\n );\n }\n\n if (typeof a === 'object' || typeof b === 'object') {\n var aValue = valueOf(a);\n var bValue = valueOf(b);\n\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n return Object.keys(Object.assign({}, a, b)).every(function(key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\nexport default valueEqual;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _require = require('ethereum-cryptography/keccak'),\n keccak224 = _require.keccak224,\n keccak384 = _require.keccak384,\n k256 = _require.keccak256,\n keccak512 = _require.keccak512;\n\nvar secp256k1 = require('./secp256k1-adapter');\nvar assert = require('assert');\nvar rlp = require('rlp');\nvar BN = require('bn.js');\nvar createHash = require('create-hash');\nvar Buffer = require('safe-buffer').Buffer;\nObject.assign(exports, require('ethjs-util'));\n\n/**\n * the max integer that this VM can handle (a ```BN```)\n * @var {BN} MAX_INTEGER\n */\nexports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);\n\n/**\n * 2^256 (a ```BN```)\n * @var {BN} TWO_POW256\n */\nexports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16);\n\n/**\n * Keccak-256 hash of null (a ```String```)\n * @var {String} KECCAK256_NULL_S\n */\nexports.KECCAK256_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';\nexports.SHA3_NULL_S = exports.KECCAK256_NULL_S;\n\n/**\n * Keccak-256 hash of null (a ```Buffer```)\n * @var {Buffer} KECCAK256_NULL\n */\nexports.KECCAK256_NULL = Buffer.from(exports.KECCAK256_NULL_S, 'hex');\nexports.SHA3_NULL = exports.KECCAK256_NULL;\n\n/**\n * Keccak-256 of an RLP of an empty array (a ```String```)\n * @var {String} KECCAK256_RLP_ARRAY_S\n */\nexports.KECCAK256_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347';\nexports.SHA3_RLP_ARRAY_S = exports.KECCAK256_RLP_ARRAY_S;\n\n/**\n * Keccak-256 of an RLP of an empty array (a ```Buffer```)\n * @var {Buffer} KECCAK256_RLP_ARRAY\n */\nexports.KECCAK256_RLP_ARRAY = Buffer.from(exports.KECCAK256_RLP_ARRAY_S, 'hex');\nexports.SHA3_RLP_ARRAY = exports.KECCAK256_RLP_ARRAY;\n\n/**\n * Keccak-256 hash of the RLP of null (a ```String```)\n * @var {String} KECCAK256_RLP_S\n */\nexports.KECCAK256_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421';\nexports.SHA3_RLP_S = exports.KECCAK256_RLP_S;\n\n/**\n * Keccak-256 hash of the RLP of null (a ```Buffer```)\n * @var {Buffer} KECCAK256_RLP\n */\nexports.KECCAK256_RLP = Buffer.from(exports.KECCAK256_RLP_S, 'hex');\nexports.SHA3_RLP = exports.KECCAK256_RLP;\n\n/**\n * [`BN`](https://github.com/indutny/bn.js)\n * @var {Function}\n */\nexports.BN = BN;\n\n/**\n * [`rlp`](https://github.com/ethereumjs/rlp)\n * @var {Function}\n */\nexports.rlp = rlp;\n\n/**\n * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)\n * @var {Object}\n */\nexports.secp256k1 = secp256k1;\n\n/**\n * Returns a buffer filled with 0s\n * @method zeros\n * @param {Number} bytes the number of bytes the buffer should be\n * @return {Buffer}\n */\nexports.zeros = function (bytes) {\n return Buffer.allocUnsafe(bytes).fill(0);\n};\n\n/**\n * Returns a zero address\n * @method zeroAddress\n * @return {String}\n */\nexports.zeroAddress = function () {\n var addressLength = 20;\n var zeroAddress = exports.zeros(addressLength);\n return exports.bufferToHex(zeroAddress);\n};\n\n/**\n * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @method lsetLength\n * @param {Buffer|Array} msg the value to pad\n * @param {Number} length the number of bytes the output should be\n * @param {Boolean} [right=false] whether to start padding form the left or right\n * @return {Buffer|Array}\n */\nexports.setLengthLeft = exports.setLength = function (msg, length, right) {\n var buf = exports.zeros(length);\n msg = exports.toBuffer(msg);\n if (right) {\n if (msg.length < length) {\n msg.copy(buf);\n return buf;\n }\n return msg.slice(0, length);\n } else {\n if (msg.length < length) {\n msg.copy(buf, length - msg.length);\n return buf;\n }\n return msg.slice(-length);\n }\n};\n\n/**\n * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @param {Buffer|Array} msg the value to pad\n * @param {Number} length the number of bytes the output should be\n * @return {Buffer|Array}\n */\nexports.setLengthRight = function (msg, length) {\n return exports.setLength(msg, length, true);\n};\n\n/**\n * Trims leading zeros from a `Buffer` or an `Array`\n * @param {Buffer|Array|String} a\n * @return {Buffer|Array|String}\n */\nexports.unpad = exports.stripZeros = function (a) {\n a = exports.stripHexPrefix(a);\n var first = a[0];\n while (a.length > 0 && first.toString() === '0') {\n a = a.slice(1);\n first = a[0];\n }\n return a;\n};\n/**\n * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.\n * @param {*} v the value\n */\nexports.toBuffer = function (v) {\n if (!Buffer.isBuffer(v)) {\n if (Array.isArray(v)) {\n v = Buffer.from(v);\n } else if (typeof v === 'string') {\n if (exports.isHexString(v)) {\n v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex');\n } else {\n v = Buffer.from(v);\n }\n } else if (typeof v === 'number') {\n v = exports.intToBuffer(v);\n } else if (v === null || v === undefined) {\n v = Buffer.allocUnsafe(0);\n } else if (BN.isBN(v)) {\n v = v.toArrayLike(Buffer);\n } else if (v.toArray) {\n // converts a BN to a Buffer\n v = Buffer.from(v.toArray());\n } else {\n throw new Error('invalid type');\n }\n }\n return v;\n};\n\n/**\n * Converts a `Buffer` to a `Number`\n * @param {Buffer} buf\n * @return {Number}\n * @throws If the input number exceeds 53 bits.\n */\nexports.bufferToInt = function (buf) {\n return new BN(exports.toBuffer(buf)).toNumber();\n};\n\n/**\n * Converts a `Buffer` into a hex `String`\n * @param {Buffer} buf\n * @return {String}\n */\nexports.bufferToHex = function (buf) {\n buf = exports.toBuffer(buf);\n return '0x' + buf.toString('hex');\n};\n\n/**\n * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.\n * @param {Buffer} num\n * @return {BN}\n */\nexports.fromSigned = function (num) {\n return new BN(num).fromTwos(256);\n};\n\n/**\n * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.\n * @param {BN} num\n * @return {Buffer}\n */\nexports.toUnsigned = function (num) {\n return Buffer.from(num.toTwos(256).toArray());\n};\n\n/**\n * Creates Keccak hash of the input\n * @param {Buffer|Array|String|Number} a the input data\n * @param {Number} [bits=256] the Keccak width\n * @return {Buffer}\n */\nexports.keccak = function (a, bits) {\n a = exports.toBuffer(a);\n if (!bits) bits = 256;\n\n switch (bits) {\n case 224:\n {\n return keccak224(a);\n }\n case 256:\n {\n return k256(a);\n }\n case 384:\n {\n return keccak384(a);\n }\n case 512:\n {\n return keccak512(a);\n }\n default:\n {\n throw new Error('Invald algorithm: keccak' + bits);\n }\n }\n};\n\n/**\n * Creates Keccak-256 hash of the input, alias for keccak(a, 256)\n * @param {Buffer|Array|String|Number} a the input data\n * @return {Buffer}\n */\nexports.keccak256 = function (a) {\n return exports.keccak(a);\n};\n\n/**\n * Creates SHA-3 (Keccak) hash of the input [OBSOLETE]\n * @param {Buffer|Array|String|Number} a the input data\n * @param {Number} [bits=256] the SHA-3 width\n * @return {Buffer}\n */\nexports.sha3 = exports.keccak;\n\n/**\n * Creates SHA256 hash of the input\n * @param {Buffer|Array|String|Number} a the input data\n * @return {Buffer}\n */\nexports.sha256 = function (a) {\n a = exports.toBuffer(a);\n return createHash('sha256').update(a).digest();\n};\n\n/**\n * Creates RIPEMD160 hash of the input\n * @param {Buffer|Array|String|Number} a the input data\n * @param {Boolean} padded whether it should be padded to 256 bits or not\n * @return {Buffer}\n */\nexports.ripemd160 = function (a, padded) {\n a = exports.toBuffer(a);\n var hash = createHash('rmd160').update(a).digest();\n if (padded === true) {\n return exports.setLength(hash, 32);\n } else {\n return hash;\n }\n};\n\n/**\n * Creates SHA-3 hash of the RLP encoded version of the input\n * @param {Buffer|Array|String|Number} a the input data\n * @return {Buffer}\n */\nexports.rlphash = function (a) {\n return exports.keccak(rlp.encode(a));\n};\n\n/**\n * Checks if the private key satisfies the rules of the curve secp256k1.\n * @param {Buffer} privateKey\n * @return {Boolean}\n */\nexports.isValidPrivate = function (privateKey) {\n return secp256k1.privateKeyVerify(privateKey);\n};\n\n/**\n * Checks if the public key satisfies the rules of the curve secp256k1\n * and the requirements of Ethereum.\n * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled\n * @param {Boolean} [sanitize=false] Accept public keys in other formats\n * @return {Boolean}\n */\nexports.isValidPublic = function (publicKey, sanitize) {\n if (publicKey.length === 64) {\n // Convert to SEC1 for secp256k1\n return secp256k1.publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey]));\n }\n\n if (!sanitize) {\n return false;\n }\n\n return secp256k1.publicKeyVerify(publicKey);\n};\n\n/**\n * Returns the ethereum address of a given public key.\n * Accepts \"Ethereum public keys\" and SEC1 encoded keys.\n * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled\n * @param {Boolean} [sanitize=false] Accept public keys in other formats\n * @return {Buffer}\n */\nexports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {\n pubKey = exports.toBuffer(pubKey);\n if (sanitize && pubKey.length !== 64) {\n pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1);\n }\n assert(pubKey.length === 64);\n // Only take the lower 160bits of the hash\n return exports.keccak(pubKey).slice(-20);\n};\n\n/**\n * Returns the ethereum public key of a given private key\n * @param {Buffer} privateKey A private key must be 256 bits wide\n * @return {Buffer}\n */\nvar privateToPublic = exports.privateToPublic = function (privateKey) {\n privateKey = exports.toBuffer(privateKey);\n // skip the type flag and use the X, Y points\n return secp256k1.publicKeyCreate(privateKey, false).slice(1);\n};\n\n/**\n * Converts a public key to the Ethereum format.\n * @param {Buffer} publicKey\n * @return {Buffer}\n */\nexports.importPublic = function (publicKey) {\n publicKey = exports.toBuffer(publicKey);\n if (publicKey.length !== 64) {\n publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1);\n }\n return publicKey;\n};\n\n/**\n * ECDSA sign\n * @param {Buffer} msgHash\n * @param {Buffer} privateKey\n * @return {Object}\n */\nexports.ecsign = function (msgHash, privateKey) {\n var sig = secp256k1.sign(msgHash, privateKey);\n\n var ret = {};\n ret.r = sig.signature.slice(0, 32);\n ret.s = sig.signature.slice(32, 64);\n ret.v = sig.recovery + 27;\n return ret;\n};\n\n/**\n * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.\n * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`\n * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key\n * used to produce the signature.\n * @param message\n * @returns {Buffer} hash\n */\nexports.hashPersonalMessage = function (message) {\n var prefix = exports.toBuffer('\\x19Ethereum Signed Message:\\n' + message.length.toString());\n return exports.keccak(Buffer.concat([prefix, message]));\n};\n\n/**\n * ECDSA public key recovery from signature\n * @param {Buffer} msgHash\n * @param {Number} v\n * @param {Buffer} r\n * @param {Buffer} s\n * @return {Buffer} publicKey\n */\nexports.ecrecover = function (msgHash, v, r, s) {\n var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64);\n var recovery = v - 27;\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Invalid signature v value');\n }\n var senderPubKey = secp256k1.recover(msgHash, signature, recovery);\n return secp256k1.publicKeyConvert(senderPubKey, false).slice(1);\n};\n\n/**\n * Convert signature parameters into the format of `eth_sign` RPC method\n * @param {Number} v\n * @param {Buffer} r\n * @param {Buffer} s\n * @return {String} sig\n */\nexports.toRpcSig = function (v, r, s) {\n // NOTE: with potential introduction of chainId this might need to be updated\n if (v !== 27 && v !== 28) {\n throw new Error('Invalid recovery id');\n }\n\n // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin\n // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053\n return exports.bufferToHex(Buffer.concat([exports.setLengthLeft(r, 32), exports.setLengthLeft(s, 32), exports.toBuffer(v - 27)]));\n};\n\n/**\n * Convert signature format of the `eth_sign` RPC method to signature parameters\n * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053\n * @param {String} sig\n * @return {Object}\n */\nexports.fromRpcSig = function (sig) {\n sig = exports.toBuffer(sig);\n\n // NOTE: with potential introduction of chainId this might need to be updated\n if (sig.length !== 65) {\n throw new Error('Invalid signature length');\n }\n\n var v = sig[64];\n // support both versions of `eth_sign` responses\n if (v < 27) {\n v += 27;\n }\n\n return {\n v: v,\n r: sig.slice(0, 32),\n s: sig.slice(32, 64)\n };\n};\n\n/**\n * Returns the ethereum address of a given private key\n * @param {Buffer} privateKey A private key must be 256 bits wide\n * @return {Buffer}\n */\nexports.privateToAddress = function (privateKey) {\n return exports.publicToAddress(privateToPublic(privateKey));\n};\n\n/**\n * Checks if the address is a valid. Accepts checksummed addresses too\n * @param {String} address\n * @return {Boolean}\n */\nexports.isValidAddress = function (address) {\n return (/^0x[0-9a-fA-F]{40}$/.test(address)\n );\n};\n\n/**\n * Checks if a given address is a zero address\n * @method isZeroAddress\n * @param {String} address\n * @return {Boolean}\n */\nexports.isZeroAddress = function (address) {\n var zeroAddress = exports.zeroAddress();\n return zeroAddress === exports.addHexPrefix(address);\n};\n\n/**\n * Returns a checksummed address\n * @param {String} address\n * @return {String}\n */\nexports.toChecksumAddress = function (address) {\n address = exports.stripHexPrefix(address).toLowerCase();\n var hash = exports.keccak(address).toString('hex');\n var ret = '0x';\n\n for (var i = 0; i < address.length; i++) {\n if (parseInt(hash[i], 16) >= 8) {\n ret += address[i].toUpperCase();\n } else {\n ret += address[i];\n }\n }\n\n return ret;\n};\n\n/**\n * Checks if the address is a valid checksummed address\n * @param {Buffer} address\n * @return {Boolean}\n */\nexports.isValidChecksumAddress = function (address) {\n return exports.isValidAddress(address) && exports.toChecksumAddress(address) === address;\n};\n\n/**\n * Generates an address of a newly created contract\n * @param {Buffer} from the address which is creating this new address\n * @param {Buffer} nonce the nonce of the from account\n * @return {Buffer}\n */\nexports.generateAddress = function (from, nonce) {\n from = exports.toBuffer(from);\n nonce = new BN(nonce);\n\n if (nonce.isZero()) {\n // in RLP we want to encode null in the case of zero nonce\n // read the RLP documentation for an answer if you dare\n nonce = null;\n } else {\n nonce = Buffer.from(nonce.toArray());\n }\n\n // Only take the lower 160bits of the hash\n return exports.rlphash([from, nonce]).slice(-20);\n};\n\n/**\n * Returns true if the supplied address belongs to a precompiled account (Byzantium)\n * @param {Buffer|String} address\n * @return {Boolean}\n */\nexports.isPrecompiled = function (address) {\n var a = exports.unpad(address);\n return a.length === 1 && a[0] >= 1 && a[0] <= 8;\n};\n\n/**\n * Adds \"0x\" to a given `String` if it does not already start with \"0x\"\n * @param {String} str\n * @return {String}\n */\nexports.addHexPrefix = function (str) {\n if (typeof str !== 'string') {\n return str;\n }\n\n return exports.isHexPrefixed(str) ? str : '0x' + str;\n};\n\n/**\n * Validate ECDSA signature\n * @method isValidSignature\n * @param {Buffer} v\n * @param {Buffer} r\n * @param {Buffer} s\n * @param {Boolean} [homestead=true]\n * @return {Boolean}\n */\n\nexports.isValidSignature = function (v, r, s, homestead) {\n var SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16);\n var SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16);\n\n if (r.length !== 32 || s.length !== 32) {\n return false;\n }\n\n if (v !== 27 && v !== 28) {\n return false;\n }\n\n r = new BN(r);\n s = new BN(s);\n\n if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {\n return false;\n }\n\n if (homestead === false && new BN(s).cmp(SECP256K1_N_DIV_2) === 1) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Converts a `Buffer` or `Array` to JSON\n * @param {Buffer|Array} ba\n * @return {Array|String|null}\n */\nexports.baToJSON = function (ba) {\n if (Buffer.isBuffer(ba)) {\n return '0x' + ba.toString('hex');\n } else if (ba instanceof Array) {\n var array = [];\n for (var i = 0; i < ba.length; i++) {\n array.push(exports.baToJSON(ba[i]));\n }\n return array;\n }\n};\n\n/**\n * Defines properties on a `Object`. It make the assumption that underlying data is binary.\n * @param {Object} self the `Object` to define properties on\n * @param {Array} fields an array fields to define. Fields can contain:\n * * `name` - the name of the properties\n * * `length` - the number of bytes the field can have\n * * `allowLess` - if the field can be less than the length\n * * `allowEmpty`\n * @param {*} data data to be validated against the definitions\n */\nexports.defineProperties = function (self, fields, data) {\n self.raw = [];\n self._fields = [];\n\n // attach the `toJSON`\n self.toJSON = function (label) {\n if (label) {\n var obj = {};\n self._fields.forEach(function (field) {\n obj[field] = '0x' + self[field].toString('hex');\n });\n return obj;\n }\n return exports.baToJSON(this.raw);\n };\n\n self.serialize = function serialize() {\n return rlp.encode(self.raw);\n };\n\n fields.forEach(function (field, i) {\n self._fields.push(field.name);\n function getter() {\n return self.raw[i];\n }\n function setter(v) {\n v = exports.toBuffer(v);\n\n if (v.toString('hex') === '00' && !field.allowZero) {\n v = Buffer.allocUnsafe(0);\n }\n\n if (field.allowLess && field.length) {\n v = exports.stripZeros(v);\n assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes');\n } else if (!(field.allowZero && v.length === 0) && field.length) {\n assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length);\n }\n\n self.raw[i] = v;\n }\n\n Object.defineProperty(self, field.name, {\n enumerable: true,\n configurable: true,\n get: getter,\n set: setter\n });\n\n if (field.default) {\n self[field.name] = field.default;\n }\n\n // attach alias\n if (field.alias) {\n Object.defineProperty(self, field.alias, {\n enumerable: false,\n configurable: true,\n set: setter,\n get: getter\n });\n }\n });\n\n // if the constuctor is passed data\n if (data) {\n if (typeof data === 'string') {\n data = Buffer.from(exports.stripHexPrefix(data), 'hex');\n }\n\n if (Buffer.isBuffer(data)) {\n data = rlp.decode(data);\n }\n\n if (Array.isArray(data)) {\n if (data.length > self._fields.length) {\n throw new Error('wrong number of fields in data');\n }\n\n // make sure all the items are buffers\n data.forEach(function (d, i) {\n self[self._fields[i]] = exports.toBuffer(d);\n });\n } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n var keys = Object.keys(data);\n fields.forEach(function (field) {\n if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name];\n if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias];\n });\n } else {\n throw new Error('invalid data');\n }\n }\n};","\"use strict\";\n\nconst Debug = require('debug');\n\nconst {\n Buffer\n} = require('buffer');\n\nconst BN = require('bn.js');\n\nconst JSZip = require('jszip');\n\nconst NodeRSA = require('node-rsa');\n\nconst aesjs = require('aes-js');\n\nconst {\n getAddress,\n randomBytes,\n formatUnits,\n parseUnits\n} = require('ethers').utils;\n\nconst {\n BigNumber\n} = require('ethers');\n\nconst {\n multiaddr\n} = require('multiaddr');\n\nconst {\n ValidationError\n} = require('./errors');\n\nconst debug = Debug('iexec:utils');\nconst NULL_BYTES = '0x';\nconst NULL_ADDRESS = '0x0000000000000000000000000000000000000000';\nconst NULL_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000000';\nconst bytes32Regex = /^(0x)([0-9a-f]{2}){32}$/;\nconst addressRegex = /^(0x)([0-9a-fA-F]{2}){20}$/;\n\nconst isEthersBn = obj => !!(obj._ethersType && obj._ethersType === 'BigNumber');\n\nconst bnToEthersBn = bn => BigNumber.from(bn.toString());\n\nconst ethersBnToBn = ethersBn => new BN(ethersBn.toString());\n\nconst stringify = val => {\n try {\n let stringVal;\n\n switch (typeof nRLC) {\n case 'number':\n stringVal = Number(val).toString();\n break;\n\n case 'string':\n stringVal = val;\n break;\n\n default:\n stringVal = val.toString();\n break;\n }\n\n return stringVal;\n } catch (error) {\n debug('stringify()', error);\n throw Error('Invalid val');\n }\n};\n\nconst formatRLC = nRLC => {\n try {\n return formatUnits(stringify(nRLC), 9);\n } catch (error) {\n debug('formatRLC()', error);\n throw Error('Invalid nRLC');\n }\n};\n\nconst isRlcUnit = str => ['nRLC', 'RLC'].includes(str);\n\nconst parseRLC = function (value) {\n let defaultUnit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'RLC';\n const [amount, inputUnit] = stringify(value).split(' ');\n const unit = inputUnit !== undefined ? inputUnit : defaultUnit;\n\n if (!isRlcUnit(unit)) {\n throw Error('Invalid token unit');\n }\n\n const pow = unit === 'RLC' ? 9 : 0;\n\n try {\n return ethersBnToBn(parseUnits(amount, pow));\n } catch (error) {\n debug('parseRLC()', error);\n throw Error('Invalid token amount');\n }\n};\n\nconst formatEth = wei => {\n try {\n return formatUnits(BigNumber.from(stringify(wei)));\n } catch (error) {\n debug('formatEth()', error);\n throw Error('Invalid wei');\n }\n};\n\nconst isEthUnit = str => ['wei', 'kwei', 'mwei', 'gwei', 'szabo', 'finney', 'ether', 'eth'].includes(str);\n\nconst parseEth = function (value) {\n let defaultUnit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ether';\n const [amount, inputUnit] = stringify(value).split(' ');\n const unit = inputUnit !== undefined ? inputUnit : defaultUnit;\n\n if (!isEthUnit(unit)) {\n throw Error('Invalid ether unit');\n }\n\n try {\n return ethersBnToBn(parseUnits(amount, unit === 'eth' ? 'ether' : unit));\n } catch (error) {\n debug('formatEth()', error);\n throw Error('Invalid ether amount');\n }\n};\n\nconst truncateBnWeiToBnNRlc = bnWei => {\n const weiString = bnWei.toString();\n const nRlcString = weiString.length > 9 ? weiString.slice(0, -9) : '0';\n return new BN(nRlcString);\n};\n\nconst bnNRlcToBnWei = bnNRlc => {\n const nRlcString = bnNRlc.toString();\n const weiString = nRlcString !== '0' ? nRlcString.concat('000000000') : '0';\n return new BN(weiString);\n};\n\nconst bnifyNestedEthersBn = obj => {\n const objOut = {};\n Object.entries(obj).forEach(e => {\n const [k, v] = e;\n\n if (isEthersBn(v)) {\n objOut[k] = ethersBnToBn(v);\n } else if (typeof v === 'object' && v._hex) objOut[k] = new BN(v._hex.substring(2), 16);else if (typeof v === 'object') objOut[k] = bnifyNestedEthersBn(v);else objOut[k] = v;\n });\n return objOut;\n};\n\nconst stringifyNestedBn = obj => {\n const objOut = {};\n Object.entries(obj).forEach(e => {\n const [k, v] = e;\n if (v instanceof BN) objOut[k] = v.toString();else if (typeof v === 'object') {\n objOut[k] = stringifyNestedBn(v);\n } else objOut[k] = v;\n });\n return objOut;\n};\n\nconst checksummedAddress = address => getAddress(address);\n\nconst utf8ToBuffer = str => Buffer.from(str, 'utf8');\n\nconst hexToBuffer = hexString => Buffer.from(hexString.substr(2), 'hex');\n\nconst multiaddrHexToHuman = hexString => {\n let res;\n const buffer = hexToBuffer(hexString);\n\n try {\n res = multiaddr(new Uint8Array(buffer)).toString();\n } catch (error) {\n res = buffer.toString();\n }\n\n return res;\n};\n\nconst humanToMultiaddrBuffer = function (str) {\n let {\n strict = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let multiaddrBuffer;\n\n try {\n multiaddrBuffer = Buffer.from(multiaddr(str).bytes);\n } catch (error) {\n if (strict) throw error;\n multiaddrBuffer = utf8ToBuffer(str);\n }\n\n return multiaddrBuffer;\n};\n\nconst cleanRPC = rpcObj => {\n const keys = Object.keys(rpcObj);\n const cleanObj = keys.reduce((accu, curr) => {\n if (Number.isNaN(parseInt(curr, 10))) {\n let value;\n\n if (Array.isArray(rpcObj[curr]) && !rpcObj[curr].find(e => typeof e === 'object')) {\n value = rpcObj[curr];\n } else if (typeof rpcObj[curr] === 'object') {\n value = cleanRPC(rpcObj[curr]);\n } else {\n value = rpcObj[curr];\n }\n\n return Object.assign(accu, {\n [curr]: value\n });\n }\n\n return accu;\n }, {});\n return cleanObj;\n};\n\nconst checkEvent = (eventName, events) => {\n let confirm = false;\n events.forEach(event => {\n if (event.event === eventName) confirm = true;\n });\n return confirm;\n};\n\nconst getEventFromLogs = function (eventName, events) {\n let {\n strict = true\n } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let eventFound;\n events.forEach(event => {\n if (event.event === eventName) {\n eventFound = event;\n }\n });\n\n if (!eventFound) {\n if (strict) throw new Error(\"Unknown event \".concat(eventName));\n return {};\n }\n\n return eventFound;\n};\n\nconst secToDate = secs => {\n const t = new Date(1970, 0, 1);\n t.setSeconds(secs);\n return t;\n};\n\nconst getSalt = () => {\n const hex = BigNumber.from(randomBytes(32)).toHexString().substring(2);\n const salt = NULL_BYTES32.substr(0, 66 - hex.length).concat(hex);\n return salt;\n};\n\nconst TAG_MAP = {\n tee: 1,\n 1: 'tee',\n gpu: 9,\n 9: 'gpu'\n};\n\nconst encodeTag = tags => {\n const binaryTags = new Array(256).fill(false);\n tags.forEach(tag => {\n if (tag === '') return;\n if (TAG_MAP[tag] === undefined || typeof TAG_MAP[tag] !== 'number') throw new ValidationError(\"Unknown tag \".concat(tag));\n binaryTags[TAG_MAP[tag] - 1] = true;\n });\n const binString = binaryTags.reduce((acc, curr) => curr ? \"1\".concat(acc) : \"0\".concat(acc), '');\n const hex = new BN(binString, 2).toString('hex');\n const encodedTag = NULL_BYTES32.substr(0, 66 - hex.length).concat(hex);\n return encodedTag;\n};\n\nconst decodeTag = tag => {\n if (typeof tag !== 'string' || !bytes32Regex.test(tag)) throw new ValidationError('tag must be bytes32 hex string');\n const binString = new BN(tag.substr(2), 'hex').toString(2);\n const tags = [];\n\n for (let i = 1; i < binString.length + 1; i += 1) {\n const current = binString.charAt(binString.length - i);\n\n if (current === '1') {\n const currentTag = TAG_MAP[i];\n if (currentTag === undefined || typeof currentTag !== 'string') throw new ValidationError(\"Unknown bit \".concat(i, \" in tag\"));\n tags.push(currentTag);\n }\n }\n\n return tags;\n};\n\nconst sumTags = tagArray => {\n const binStringArray = tagArray.map(hexTag => {\n if (typeof hexTag !== 'string' || !hexTag.match(bytes32Regex)) throw new ValidationError('tag must be bytes32 hex string');\n return new BN(hexTag.substr(2), 'hex').toString(2);\n });\n let summedTagsBinString = '';\n\n for (let i = 1; i < 256; i += 1) {\n let currentBit = '0';\n binStringArray.forEach(binString => {\n if (binString.charAt(binString.length - i) === '1') {\n currentBit = '1';\n }\n });\n summedTagsBinString = currentBit + summedTagsBinString;\n }\n\n const hex = new BN(summedTagsBinString, 2).toString('hex');\n const encodedTag = NULL_BYTES32.substr(0, 66 - hex.length).concat(hex);\n return encodedTag;\n};\n\nconst findMissingBitsInTag = (tag, requiredTag) => {\n debug('requiredTag', requiredTag);\n debug('tag', tag);\n if (typeof tag !== 'string' || !bytes32Regex.test(tag)) throw new ValidationError('tag must be bytes32 hex string');\n if (typeof requiredTag !== 'string' || !bytes32Regex.test(requiredTag)) throw new ValidationError('requiredTag must be bytes32 hex string');\n const tagBinString = new BN(tag.substr(2), 'hex').toString(2);\n const requiredTagBinString = new BN(requiredTag.substr(2), 'hex').toString(2);\n const missingBits = [];\n\n for (let i = 1; i <= requiredTagBinString.length; i += 1) {\n if (requiredTagBinString.charAt(requiredTagBinString.length - i) === '1' && tagBinString.charAt(tagBinString.length - i) !== '1') {\n missingBits.push(i);\n }\n }\n\n return missingBits;\n};\n\nconst checkActiveBitInTag = (tag, bit) => {\n if (typeof tag !== 'string' || !bytes32Regex.test(tag)) throw new ValidationError('tag must be bytes32 hex string');\n if (typeof bit !== 'number' || bit < 1 || bit > 256) throw new ValidationError('Invalid bit tag');\n const binString = new BN(tag.substr(2), 'hex').toString(2);\n return binString.charAt(binString.length - bit) === '1';\n};\n\nconst tagBitToHuman = bit => {\n if (typeof bit !== 'number' || bit < 1 || bit > 256) throw new ValidationError('Invalid bit tag');\n return TAG_MAP[bit] || bit;\n};\n\nconst decryptResult = async (encResultsZipBuffer, beneficiaryKey) => {\n const encKeyFile = 'aes-key.rsa';\n const encResultsFile = 'iexec_out.zip.aes';\n const encryptedZipBuffer = Buffer.from(encResultsZipBuffer);\n const keyBuffer = Buffer.from(beneficiaryKey);\n let zip;\n\n try {\n zip = await new JSZip().loadAsync(encryptedZipBuffer);\n } catch (error) {\n debug(error);\n throw Error('Failed to load encrypted results zip file');\n }\n\n let encryptedResultsKeyArrayBuffer;\n\n try {\n encryptedResultsKeyArrayBuffer = await zip.file(encKeyFile).async('arraybuffer');\n } catch (error) {\n throw Error(\"Missing \".concat(encKeyFile, \" file in zip input file\"));\n }\n\n const base64encodedEncryptedAesKey = Buffer.from(encryptedResultsKeyArrayBuffer).toString();\n const encryptedAesKeyBuffer = Buffer.from(base64encodedEncryptedAesKey, 'base64');\n debug('Decrypting results key');\n let aesKeyBuffer;\n\n try {\n const key = new NodeRSA(keyBuffer, {\n encryptionScheme: 'pkcs1'\n });\n const decryptedAesKeyBuffer = key.decrypt(encryptedAesKeyBuffer);\n const base64EncodedResultsKey = decryptedAesKeyBuffer.toString();\n aesKeyBuffer = Buffer.from(base64EncodedResultsKey, 'base64');\n } catch (error) {\n debug(error);\n throw Error('Failed to decrypt results key with beneficiary key');\n }\n\n debug('Decrypting results');\n let encryptedZipArrayBuffer;\n\n try {\n encryptedZipArrayBuffer = await zip.file(encResultsFile).async('arraybuffer');\n } catch (error) {\n throw Error(\"Missing \".concat(encResultsFile, \" file in zip input file\"));\n } // decrypt AES ECB (with one time AES key)\n\n\n try {\n const aesEcb = new aesjs.ModeOfOperation.ecb(aesKeyBuffer);\n const base64EncodedEncryptedZip = Buffer.from(encryptedZipArrayBuffer).toString();\n const encryptedOutZipBuffer = Buffer.from(base64EncodedEncryptedZip, 'base64');\n const decryptedOutZipBuffer = Buffer.from(aesEcb.decrypt(encryptedOutZipBuffer)); // remove pkcs7 padding\n\n const padding = decryptedOutZipBuffer[decryptedOutZipBuffer.length - 1];\n const unpaddedDecryptedOutZipBuffer = decryptedOutZipBuffer.slice(0, decryptedOutZipBuffer.length - padding);\n return unpaddedDecryptedOutZipBuffer;\n } catch (error) {\n debug(error);\n throw Error('Failed to decrypt results with decrypted results key');\n }\n};\n\nconst sleep = ms => new Promise(res => setTimeout(res, ms));\n\nconst FETCH_INTERVAL = 5000;\nmodule.exports = {\n BN,\n isRlcUnit,\n isEthUnit,\n formatRLC,\n formatEth,\n parseRLC,\n parseEth,\n decryptResult,\n checksummedAddress,\n cleanRPC,\n checkEvent,\n getEventFromLogs,\n bnToEthersBn,\n ethersBnToBn,\n bnifyNestedEthersBn,\n stringifyNestedBn,\n multiaddrHexToHuman,\n humanToMultiaddrBuffer,\n utf8ToBuffer,\n hexToBuffer,\n secToDate,\n getSalt,\n NULL_BYTES,\n NULL_ADDRESS,\n NULL_BYTES32,\n truncateBnWeiToBnNRlc,\n bnNRlcToBnWei,\n encodeTag,\n decodeTag,\n sumTags,\n findMissingBitsInTag,\n checkActiveBitInTag,\n tagBitToHuman,\n bytes32Regex,\n addressRegex,\n sleep,\n FETCH_INTERVAL\n};","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar bytes = require('../bytes.js');\n\nconst name = 'raw';\nconst code = 85;\nconst encode = node => bytes.coerce(node);\nconst decode = data => bytes.coerce(data);\n\nexports.code = code;\nexports.decode = decode;\nexports.encode = encode;\nexports.name = name;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nfunction dbOpenFailedError(err) {\n err = err || new Error('Cannot open database');\n return errCode__default['default'](err, 'ERR_DB_OPEN_FAILED');\n}\nfunction dbDeleteFailedError(err) {\n err = err || new Error('Delete failed');\n return errCode__default['default'](err, 'ERR_DB_DELETE_FAILED');\n}\nfunction dbWriteFailedError(err) {\n err = err || new Error('Write failed');\n return errCode__default['default'](err, 'ERR_DB_WRITE_FAILED');\n}\nfunction notFoundError(err) {\n err = err || new Error('Not Found');\n return errCode__default['default'](err, 'ERR_NOT_FOUND');\n}\nfunction abortedError(err) {\n err = err || new Error('Aborted');\n return errCode__default['default'](err, 'ERR_ABORTED');\n}\n\nexports.abortedError = abortedError;\nexports.dbDeleteFailedError = dbDeleteFailedError;\nexports.dbOpenFailedError = dbOpenFailedError;\nexports.dbWriteFailedError = dbWriteFailedError;\nexports.notFoundError = notFoundError;\n","import globalThis from \"./globalThis.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = setTimeout.bind(globalThis);\n obj.clearTimeoutFn = clearTimeout.bind(globalThis);\n }\n}\n","import globalThis from \"../globalThis.js\";\nexport const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.secp256k1 = exports.rlp = exports.BN = void 0;\nvar secp256k1 = require('./secp256k1v3-adapter');\nexports.secp256k1 = secp256k1;\nvar ethjsUtil = require('ethjs-util');\nvar BN = require(\"bn.js\");\nexports.BN = BN;\nvar rlp = require(\"rlp\");\nexports.rlp = rlp;\nObject.assign(exports, ethjsUtil);\n/**\n * Constants\n */\n__exportStar(require(\"./constants\"), exports);\n/**\n * Public-key cryptography (secp256k1) and addresses\n */\n__exportStar(require(\"./account\"), exports);\n/**\n * Hash functions\n */\n__exportStar(require(\"./hash\"), exports);\n/**\n * ECDSA signature\n */\n__exportStar(require(\"./signature\"), exports);\n/**\n * Utilities for manipulating Buffers, byte arrays, etc.\n */\n__exportStar(require(\"./bytes\"), exports);\n/**\n * Function for definining properties on an object\n */\n__exportStar(require(\"./object\"), exports);\n//# sourceMappingURL=index.js.map","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","\"use strict\";\n\nconst {\n Web3ProviderCallError,\n Web3ProviderSendError,\n Web3ProviderSignMessageError\n} = require('./errors');\n\nconst PROCESSING_RESPONSE_ERROR = 'processing response error';\n\nconst getMessage = err => {\n if (typeof err === 'string') {\n return err;\n }\n\n if (err.reason) {\n if (err.reason === PROCESSING_RESPONSE_ERROR) {\n if (err.error && err.error.message) {\n return \"\".concat(PROCESSING_RESPONSE_ERROR, \": \").concat(err.error.message);\n }\n\n if (err.body && err.body.error && err.body.error.message) {\n return \"\".concat(PROCESSING_RESPONSE_ERROR, \": \").concat(err.body.error.message);\n }\n }\n\n return err.reason;\n }\n\n return err.message;\n};\n\nconst wrapCall = async promise => {\n try {\n return await promise;\n } catch (err) {\n throw new Web3ProviderCallError(getMessage(err), err);\n }\n};\n\nconst wrapWait = wrapCall;\n\nconst wrapSend = async promise => {\n try {\n return await promise;\n } catch (err) {\n throw new Web3ProviderSendError(getMessage(err), err);\n }\n};\n\nconst wrapSign = async promise => {\n try {\n return await promise;\n } catch (err) {\n throw new Web3ProviderSignMessageError(getMessage(err), err);\n }\n};\n\nconst wrapSignTypedData = wrapSign;\nconst wrapPersonalSign = wrapSign;\nmodule.exports = {\n wrapCall,\n wrapSend,\n wrapWait,\n wrapPersonalSign,\n wrapSignTypedData\n};","const { AbortController } = require('native-abort-controller')\n\n/**\n * Takes an array of AbortSignals and returns a single signal.\n * If any signals are aborted, the returned signal will be aborted.\n * @param {Array} signals\n * @returns {AbortSignal}\n */\nfunction anySignal (signals) {\n const controller = new AbortController()\n\n function onAbort () {\n controller.abort()\n\n for (const signal of signals) {\n if (!signal || !signal.removeEventListener) continue\n signal.removeEventListener('abort', onAbort)\n }\n }\n\n for (const signal of signals) {\n if (!signal || !signal.addEventListener) continue\n if (signal.aborted) {\n onAbort()\n break\n }\n signal.addEventListener('abort', onAbort)\n }\n\n return controller.signal\n}\n\nmodule.exports = anySignal\nmodule.exports.anySignal = anySignal\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst EventEmitter = require(\"eventemitter3\");\nconst p_timeout_1 = require(\"p-timeout\");\nconst priority_queue_1 = require(\"./priority-queue\");\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst empty = () => { };\nconst timeoutError = new p_timeout_1.TimeoutError();\n/**\nPromise queue with concurrency control.\n*/\nclass PQueue extends EventEmitter {\n constructor(options) {\n var _a, _b, _c, _d;\n super();\n this._intervalCount = 0;\n this._intervalEnd = 0;\n this._pendingCount = 0;\n this._resolveEmpty = empty;\n this._resolveIdle = empty;\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n options = Object.assign({ carryoverConcurrencyCount: false, intervalCap: Infinity, interval: 0, concurrency: Infinity, autoStart: true, queueClass: priority_queue_1.default }, options);\n if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n }\n if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n }\n this._carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n this._isIntervalIgnored = options.intervalCap === Infinity || options.interval === 0;\n this._intervalCap = options.intervalCap;\n this._interval = options.interval;\n this._queue = new options.queueClass();\n this._queueClass = options.queueClass;\n this.concurrency = options.concurrency;\n this._timeout = options.timeout;\n this._throwOnTimeout = options.throwOnTimeout === true;\n this._isPaused = options.autoStart === false;\n }\n get _doesIntervalAllowAnother() {\n return this._isIntervalIgnored || this._intervalCount < this._intervalCap;\n }\n get _doesConcurrentAllowAnother() {\n return this._pendingCount < this._concurrency;\n }\n _next() {\n this._pendingCount--;\n this._tryToStartAnother();\n this.emit('next');\n }\n _resolvePromises() {\n this._resolveEmpty();\n this._resolveEmpty = empty;\n if (this._pendingCount === 0) {\n this._resolveIdle();\n this._resolveIdle = empty;\n this.emit('idle');\n }\n }\n _onResumeInterval() {\n this._onInterval();\n this._initializeIntervalIfNeeded();\n this._timeoutId = undefined;\n }\n _isIntervalPaused() {\n const now = Date.now();\n if (this._intervalId === undefined) {\n const delay = this._intervalEnd - now;\n if (delay < 0) {\n // Act as the interval was done\n // We don't need to resume it here because it will be resumed on line 160\n this._intervalCount = (this._carryoverConcurrencyCount) ? this._pendingCount : 0;\n }\n else {\n // Act as the interval is pending\n if (this._timeoutId === undefined) {\n this._timeoutId = setTimeout(() => {\n this._onResumeInterval();\n }, delay);\n }\n return true;\n }\n }\n return false;\n }\n _tryToStartAnother() {\n if (this._queue.size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (this._intervalId) {\n clearInterval(this._intervalId);\n }\n this._intervalId = undefined;\n this._resolvePromises();\n return false;\n }\n if (!this._isPaused) {\n const canInitializeInterval = !this._isIntervalPaused();\n if (this._doesIntervalAllowAnother && this._doesConcurrentAllowAnother) {\n const job = this._queue.dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n this._initializeIntervalIfNeeded();\n }\n return true;\n }\n }\n return false;\n }\n _initializeIntervalIfNeeded() {\n if (this._isIntervalIgnored || this._intervalId !== undefined) {\n return;\n }\n this._intervalId = setInterval(() => {\n this._onInterval();\n }, this._interval);\n this._intervalEnd = Date.now() + this._interval;\n }\n _onInterval() {\n if (this._intervalCount === 0 && this._pendingCount === 0 && this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = undefined;\n }\n this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0;\n this._processQueue();\n }\n /**\n Executes all queued functions until it reaches the limit.\n */\n _processQueue() {\n // eslint-disable-next-line no-empty\n while (this._tryToStartAnother()) { }\n }\n get concurrency() {\n return this._concurrency;\n }\n set concurrency(newConcurrency) {\n if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n }\n this._concurrency = newConcurrency;\n this._processQueue();\n }\n /**\n Adds a sync or async task to the queue. Always returns a promise.\n */\n async add(fn, options = {}) {\n return new Promise((resolve, reject) => {\n const run = async () => {\n this._pendingCount++;\n this._intervalCount++;\n try {\n const operation = (this._timeout === undefined && options.timeout === undefined) ? fn() : p_timeout_1.default(Promise.resolve(fn()), (options.timeout === undefined ? this._timeout : options.timeout), () => {\n if (options.throwOnTimeout === undefined ? this._throwOnTimeout : options.throwOnTimeout) {\n reject(timeoutError);\n }\n return undefined;\n });\n resolve(await operation);\n }\n catch (error) {\n reject(error);\n }\n this._next();\n };\n this._queue.enqueue(run, options);\n this._tryToStartAnother();\n this.emit('add');\n });\n }\n /**\n Same as `.add()`, but accepts an array of sync or async functions.\n\n @returns A promise that resolves when all functions are resolved.\n */\n async addAll(functions, options) {\n return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n }\n /**\n Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n */\n start() {\n if (!this._isPaused) {\n return this;\n }\n this._isPaused = false;\n this._processQueue();\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n this._isPaused = true;\n }\n /**\n Clear the queue.\n */\n clear() {\n this._queue = new this._queueClass();\n }\n /**\n Can be called multiple times. Useful if you for example add additional items at a later time.\n\n @returns A promise that settles when the queue becomes empty.\n */\n async onEmpty() {\n // Instantly resolve if the queue is empty\n if (this._queue.size === 0) {\n return;\n }\n return new Promise(resolve => {\n const existingResolve = this._resolveEmpty;\n this._resolveEmpty = () => {\n existingResolve();\n resolve();\n };\n });\n }\n /**\n The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n */\n async onIdle() {\n // Instantly resolve if none pending and if nothing else is queued\n if (this._pendingCount === 0 && this._queue.size === 0) {\n return;\n }\n return new Promise(resolve => {\n const existingResolve = this._resolveIdle;\n this._resolveIdle = () => {\n existingResolve();\n resolve();\n };\n });\n }\n /**\n Size of the queue.\n */\n get size() {\n return this._queue.size;\n }\n /**\n Size of the queue, filtered by the given options.\n\n For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n */\n sizeBy(options) {\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n return this._queue.filter(options).length;\n }\n /**\n Number of pending promises.\n */\n get pending() {\n return this._pendingCount;\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return this._isPaused;\n }\n get timeout() {\n return this._timeout;\n }\n /**\n Set the timeout for future operations.\n */\n set timeout(milliseconds) {\n this._timeout = milliseconds;\n }\n}\nexports.default = PQueue;\n","'use strict'\n\n/**\n * Filters the passed (async) iterable by using the filter function\n *\n * @template T\n * @param {AsyncIterable|Iterable} source\n * @param {function(T):boolean|Promise} fn\n */\nconst filter = async function * (source, fn) {\n for await (const entry of source) {\n if (await fn(entry)) {\n yield entry\n }\n }\n}\n\nmodule.exports = filter\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\nvar cid = require('multiformats/cid');\nvar index = require('./resolvers/index.js');\nvar last = require('it-last');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar last__default = /*#__PURE__*/_interopDefaultLegacy(last);\n\nconst toPathComponents = (path = '') => {\n return (path.trim().match(/([^\\\\^/]|\\\\\\/)+/g) || []).filter(Boolean);\n};\nconst cidAndRest = path => {\n if (path instanceof Uint8Array) {\n return {\n cid: cid.CID.decode(path),\n toResolve: []\n };\n }\n const cid$1 = cid.CID.asCID(path);\n if (cid$1) {\n return {\n cid: cid$1,\n toResolve: []\n };\n }\n if (typeof path === 'string') {\n if (path.indexOf('/ipfs/') === 0) {\n path = path.substring(6);\n }\n const output = toPathComponents(path);\n return {\n cid: cid.CID.parse(output[0]),\n toResolve: output.slice(1)\n };\n }\n throw errCode__default['default'](new Error(`Unknown path type ${ path }`), 'ERR_BAD_PATH');\n};\nasync function* walkPath(path, blockstore, options = {}) {\n let {cid, toResolve} = cidAndRest(path);\n let name = cid.toString();\n let entryPath = name;\n const startingDepth = toResolve.length;\n while (true) {\n const result = await index(cid, name, entryPath, toResolve, startingDepth, blockstore, options);\n if (!result.entry && !result.next) {\n throw errCode__default['default'](new Error(`Could not resolve ${ path }`), 'ERR_NOT_FOUND');\n }\n if (result.entry) {\n yield result.entry;\n }\n if (!result.next) {\n return;\n }\n toResolve = result.next.toResolve;\n cid = result.next.cid;\n name = result.next.name;\n entryPath = result.next.path;\n }\n}\nasync function exporter(path, blockstore, options = {}) {\n const result = await last__default['default'](walkPath(path, blockstore, options));\n if (!result) {\n throw errCode__default['default'](new Error(`Could not resolve ${ path }`), 'ERR_NOT_FOUND');\n }\n return result;\n}\nasync function* recursive(path, blockstore, options = {}) {\n const node = await exporter(path, blockstore, options);\n if (!node) {\n return;\n }\n yield node;\n if (node.type === 'directory') {\n for await (const child of recurse(node, options)) {\n yield child;\n }\n }\n async function* recurse(node, options) {\n for await (const file of node.content(options)) {\n yield file;\n if (file instanceof Uint8Array) {\n continue;\n }\n if (file.type === 'directory') {\n yield* recurse(file, options);\n }\n }\n }\n}\n\nexports.exporter = exporter;\nexports.recursive = recursive;\nexports.walkPath = walkPath;\n","'use strict'\n\n/**\n * @typedef {import('./types').EncoderOptions} EncoderOptions\n * @typedef {import('./types').DecoderOptions} DecoderOptions\n */\n\nexports.encode = require('./encode')\nexports.decode = require('./decode')\n\nexports.varintEncode = require('./varint-encode')\nexports.varintDecode = require('./varint-decode')\n\nexports.int32BEEncode = require('./int32BE-encode')\nexports.int32BEDecode = require('./int32BE-decode')\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar normaliseInputMultiple_browser = require('./files/normalise-input-multiple.browser.js');\nvar modeToString = require('./mode-to-string.js');\n\nasync function multipartRequest(source, abortController, headers = {}) {\n const parts = [];\n const formData = new FormData();\n let index = 0;\n let total = 0;\n for await (const {content, path, mode, mtime} of normaliseInputMultiple_browser.normaliseInput(source)) {\n let fileSuffix = '';\n const type = content ? 'file' : 'dir';\n if (index > 0) {\n fileSuffix = `-${ index }`;\n }\n let fieldName = type + fileSuffix;\n const qs = [];\n if (mode !== null && mode !== undefined) {\n qs.push(`mode=${ modeToString.modeToString(mode) }`);\n }\n if (mtime != null) {\n const {secs, nsecs} = mtime;\n qs.push(`mtime=${ secs }`);\n if (nsecs != null) {\n qs.push(`mtime-nsecs=${ nsecs }`);\n }\n }\n if (qs.length) {\n fieldName = `${ fieldName }?${ qs.join('&') }`;\n }\n if (content) {\n formData.set(fieldName, content, path != null ? encodeURIComponent(path) : undefined);\n const end = total + content.size;\n parts.push({\n name: path,\n start: total,\n end\n });\n total = end;\n } else if (path != null) {\n formData.set(fieldName, new File([''], encodeURIComponent(path), { type: 'application/x-directory' }));\n } else {\n throw new Error('path or content or both must be set');\n }\n index++;\n }\n return {\n total,\n parts,\n headers,\n body: formData\n };\n}\n\nexports.multipartRequest = multipartRequest;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar anySignal = require('any-signal');\n\nfunction filter(signals) {\n return signals.filter(Boolean);\n}\nfunction abortSignal(...signals) {\n return anySignal.anySignal(filter(signals));\n}\n\nexports.abortSignal = abortSignal;\n","'use strict'\n\nconst PeerId = require('peer-id')\nconst { Multiaddr } = require('multiaddr')\nconst { Record } = require('libp2p-record')\nconst Proto = require('./dht')\n\nconst MESSAGE_TYPE = Proto.Message.MessageType\nconst CONNECTION_TYPE = Proto.Message.ConnectionType\nconst MESSAGE_TYPE_LOOKUP = Object.keys(MESSAGE_TYPE)\n\n/**\n * @typedef {0|1|2|3|4} ConnectionType\n *\n * @typedef {object} PBPeer\n * @property {Uint8Array} id\n * @property {Uint8Array[]} addrs\n * @property {ConnectionType} connection\n *\n * @typedef {import('../types').PeerData} PeerData\n */\n\n/**\n * Represents a single DHT control message.\n */\nclass Message {\n /**\n * @param {import('./dht').Message.MessageType} type\n * @param {Uint8Array} key\n * @param {number} level\n */\n constructor (type, key, level) {\n if (key && !(key instanceof Uint8Array)) {\n throw new Error('Key must be a Uint8Array')\n }\n\n this.type = type\n this.key = key\n this._clusterLevelRaw = level\n\n /** @type {PeerData[]} */\n this.closerPeers = []\n /** @type {PeerData[]} */\n this.providerPeers = []\n /** @type {import('libp2p-record').Record | undefined} */\n this.record = undefined\n }\n\n /**\n * @type {number}\n */\n get clusterLevel () {\n const level = this._clusterLevelRaw - 1\n if (level < 0) {\n return 0\n }\n\n return level\n }\n\n set clusterLevel (level) {\n this._clusterLevelRaw = level\n }\n\n /**\n * Encode into protobuf\n */\n serialize () {\n const obj = {\n key: this.key,\n type: this.type,\n clusterLevelRaw: this._clusterLevelRaw,\n closerPeers: this.closerPeers.map(toPbPeer),\n providerPeers: this.providerPeers.map(toPbPeer),\n\n /** @type {Uint8Array | undefined} */\n record: undefined\n }\n\n if (this.record) {\n if (this.record instanceof Uint8Array) {\n obj.record = this.record\n } else {\n obj.record = this.record.serialize()\n }\n }\n\n return Proto.Message.encode(obj).finish()\n }\n\n /**\n * Decode from protobuf\n *\n * @param {Uint8Array} raw\n */\n static deserialize (raw) {\n const dec = Proto.Message.decode(raw)\n\n const msg = new Message(dec.type || 0, dec.key || Uint8Array.from([]), dec.clusterLevelRaw || 0)\n\n msg.closerPeers = dec.closerPeers.map(fromPbPeer)\n msg.providerPeers = dec.providerPeers.map(fromPbPeer)\n\n if (dec.record && dec.record.length) {\n msg.record = Record.deserialize(dec.record)\n }\n\n return msg\n }\n}\n\nMessage.TYPES = MESSAGE_TYPE\nMessage.CONNECTION_TYPES = CONNECTION_TYPE\n\n/**\n * @param {PeerData} peer\n */\nfunction toPbPeer (peer) {\n /** @type {PBPeer} */\n const output = {\n id: peer.id.id,\n addrs: (peer.multiaddrs || []).map((m) => m.bytes),\n connection: CONNECTION_TYPE.CONNECTED\n }\n\n return output\n}\n\n/**\n * @param {import('./dht').Message.IPeer} peer\n */\nfunction fromPbPeer (peer) {\n return {\n // @ts-ignore id is optional on protobuf, but it will exist?\n id: new PeerId(peer.id),\n multiaddrs: (peer.addrs || []).map((a) => new Multiaddr(a))\n }\n}\n\nmodule.exports.Message = Message\nmodule.exports.MESSAGE_TYPE = MESSAGE_TYPE\nmodule.exports.MESSAGE_TYPE_LOOKUP = MESSAGE_TYPE_LOOKUP\n","import locale from '../locale/default';\nexport default locale;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport defaultLocaleData from './default';\nimport LocaleContext from './context';\n\nvar LocaleReceiver = /*#__PURE__*/function (_React$Component) {\n _inherits(LocaleReceiver, _React$Component);\n\n var _super = _createSuper(LocaleReceiver);\n\n function LocaleReceiver() {\n _classCallCheck(this, LocaleReceiver);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(LocaleReceiver, [{\n key: \"getLocale\",\n value: function getLocale() {\n var _this$props = this.props,\n componentName = _this$props.componentName,\n defaultLocale = _this$props.defaultLocale;\n var locale = defaultLocale || defaultLocaleData[componentName !== null && componentName !== void 0 ? componentName : 'global'];\n var antLocale = this.context;\n var localeFromContext = componentName && antLocale ? antLocale[componentName] : {};\n return _extends(_extends({}, locale instanceof Function ? locale() : locale), localeFromContext || {});\n }\n }, {\n key: \"getLocaleCode\",\n value: function getLocaleCode() {\n var antLocale = this.context;\n var localeCode = antLocale && antLocale.locale; // Had use LocaleProvide but didn't set locale\n\n if (antLocale && antLocale.exist && !localeCode) {\n return defaultLocaleData.locale;\n }\n\n return localeCode;\n }\n }, {\n key: \"render\",\n value: function render() {\n return this.props.children(this.getLocale(), this.getLocaleCode(), this.context);\n }\n }]);\n\n return LocaleReceiver;\n}(React.Component);\n\nexport { LocaleReceiver as default };\nLocaleReceiver.defaultProps = {\n componentName: 'global'\n};\nLocaleReceiver.contextType = LocaleContext;\nexport function useLocaleReceiver(componentName, defaultLocale) {\n var antLocale = React.useContext(LocaleContext);\n var componentLocale = React.useMemo(function () {\n var locale = defaultLocale || defaultLocaleData[componentName || 'global'];\n var localeFromContext = componentName && antLocale ? antLocale[componentName] : {};\n return _extends(_extends({}, typeof locale === 'function' ? locale() : locale), localeFromContext || {});\n }, [componentName, defaultLocale, antLocale]);\n return [componentLocale];\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nexport default function useControlledState(defaultStateValue, option) {\n var _ref = option || {},\n defaultValue = _ref.defaultValue,\n value = _ref.value,\n onChange = _ref.onChange,\n postState = _ref.postState;\n\n var _React$useState = React.useState(function () {\n if (value !== undefined) {\n return value;\n }\n\n if (defaultValue !== undefined) {\n return typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n }\n\n return typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue;\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n innerValue = _React$useState2[0],\n setInnerValue = _React$useState2[1];\n\n var mergedValue = value !== undefined ? value : innerValue;\n\n if (postState) {\n mergedValue = postState(mergedValue);\n }\n\n function triggerChange(newValue) {\n setInnerValue(newValue);\n\n if (mergedValue !== newValue && onChange) {\n onChange(newValue, mergedValue);\n }\n } // Effect of reset value to `undefined`\n\n\n var firstRenderRef = React.useRef(true);\n React.useEffect(function () {\n if (firstRenderRef.current) {\n firstRenderRef.current = false;\n return;\n }\n\n if (value === undefined) {\n setInnerValue(value);\n }\n }, [value]);\n return [mergedValue, triggerChange];\n}","// ================== Collapse Motion ==================\nvar getCollapsedHeight = function getCollapsedHeight() {\n return {\n height: 0,\n opacity: 0\n };\n};\n\nvar getRealHeight = function getRealHeight(node) {\n return {\n height: node.scrollHeight,\n opacity: 1\n };\n};\n\nvar getCurrentHeight = function getCurrentHeight(node) {\n return {\n height: node.offsetHeight\n };\n};\n\nvar skipOpacityTransition = function skipOpacityTransition(_, event) {\n return (event === null || event === void 0 ? void 0 : event.deadline) === true || event.propertyName === 'height';\n};\n\nvar collapseMotion = {\n motionName: 'ant-motion-collapse',\n onAppearStart: getCollapsedHeight,\n onEnterStart: getCollapsedHeight,\n onAppearActive: getRealHeight,\n onEnterActive: getRealHeight,\n onLeaveStart: getCurrentHeight,\n onLeaveActive: getCollapsedHeight,\n onAppearEnd: skipOpacityTransition,\n onEnterEnd: skipOpacityTransition,\n onLeaveEnd: skipOpacityTransition,\n motionDeadline: 500\n};\n\nvar getTransitionName = function getTransitionName(rootPrefixCls, motion, transitionName) {\n if (transitionName !== undefined) {\n return transitionName;\n }\n\n return \"\".concat(rootPrefixCls, \"-\").concat(motion);\n};\n\nexport { getTransitionName };\nexport default collapseMotion;","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + content);\n };\n return fileReader.readAsDataURL(data);\n};\nexport default encodePacket;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NOISE = void 0;\nconst noise_1 = require(\"./noise\");\n__exportStar(require(\"./noise\"), exports);\n/**\n * Default configuration, it will generate new noise static key and enable noise pipes (IK handshake).\n */\nexports.NOISE = new noise_1.Noise();\n//# sourceMappingURL=index.js.map","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","import { BigNumber } from \"@ethersproject/bignumber\";\nconst NegativeOne = ( /*#__PURE__*/BigNumber.from(-1));\nconst Zero = ( /*#__PURE__*/BigNumber.from(0));\nconst One = ( /*#__PURE__*/BigNumber.from(1));\nconst Two = ( /*#__PURE__*/BigNumber.from(2));\nconst WeiPerEther = ( /*#__PURE__*/BigNumber.from(\"1000000000000000000\"));\nconst MaxUint256 = ( /*#__PURE__*/BigNumber.from(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"));\nconst MinInt256 = ( /*#__PURE__*/BigNumber.from(\"-0x8000000000000000000000000000000000000000000000000000000000000000\"));\nconst MaxInt256 = ( /*#__PURE__*/BigNumber.from(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"));\nexport { NegativeOne, Zero, One, Two, WeiPerEther, MaxUint256, MinInt256, MaxInt256, };\n//# sourceMappingURL=bignumbers.js.map","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar baseX$1 = require('../../vendor/base-x.js');\nvar bytes = require('../bytes.js');\n\nclass Encoder {\n constructor(name, prefix, baseEncode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n }\n encode(bytes) {\n if (bytes instanceof Uint8Array) {\n return `${ this.prefix }${ this.baseEncode(bytes) }`;\n } else {\n throw Error('Unknown type, must be binary type');\n }\n }\n}\nclass Decoder {\n constructor(name, prefix, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n this.baseDecode = baseDecode;\n }\n decode(text) {\n if (typeof text === 'string') {\n switch (text[0]) {\n case this.prefix: {\n return this.baseDecode(text.slice(1));\n }\n default: {\n throw Error(`Unable to decode multibase string ${ JSON.stringify(text) }, ${ this.name } decoder only supports inputs prefixed with ${ this.prefix }`);\n }\n }\n } else {\n throw Error('Can only multibase decode strings');\n }\n }\n or(decoder) {\n return or(this, decoder);\n }\n}\nclass ComposedDecoder {\n constructor(decoders) {\n this.decoders = decoders;\n }\n or(decoder) {\n return or(this, decoder);\n }\n decode(input) {\n const prefix = input[0];\n const decoder = this.decoders[prefix];\n if (decoder) {\n return decoder.decode(input);\n } else {\n throw RangeError(`Unable to decode multibase string ${ JSON.stringify(input) }, only inputs prefixed with ${ Object.keys(this.decoders) } are supported`);\n }\n }\n}\nconst or = (left, right) => new ComposedDecoder({\n ...left.decoders || { [left.prefix]: left },\n ...right.decoders || { [right.prefix]: right }\n});\nclass Codec {\n constructor(name, prefix, baseEncode, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n this.baseDecode = baseDecode;\n this.encoder = new Encoder(name, prefix, baseEncode);\n this.decoder = new Decoder(name, prefix, baseDecode);\n }\n encode(input) {\n return this.encoder.encode(input);\n }\n decode(input) {\n return this.decoder.decode(input);\n }\n}\nconst from = ({name, prefix, encode, decode}) => new Codec(name, prefix, encode, decode);\nconst baseX = ({prefix, name, alphabet}) => {\n const {encode, decode} = baseX$1(alphabet, name);\n return from({\n prefix,\n name,\n encode,\n decode: text => bytes.coerce(decode(text))\n });\n};\nconst decode = (string, alphabet, bitsPerChar, name) => {\n const codes = {};\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i;\n }\n let end = string.length;\n while (string[end - 1] === '=') {\n --end;\n }\n const out = new Uint8Array(end * bitsPerChar / 8 | 0);\n let bits = 0;\n let buffer = 0;\n let written = 0;\n for (let i = 0; i < end; ++i) {\n const value = codes[string[i]];\n if (value === undefined) {\n throw new SyntaxError(`Non-${ name } character`);\n }\n buffer = buffer << bitsPerChar | value;\n bits += bitsPerChar;\n if (bits >= 8) {\n bits -= 8;\n out[written++] = 255 & buffer >> bits;\n }\n }\n if (bits >= bitsPerChar || 255 & buffer << 8 - bits) {\n throw new SyntaxError('Unexpected end of data');\n }\n return out;\n};\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '=';\n const mask = (1 << bitsPerChar) - 1;\n let out = '';\n let bits = 0;\n let buffer = 0;\n for (let i = 0; i < data.length; ++i) {\n buffer = buffer << 8 | data[i];\n bits += 8;\n while (bits > bitsPerChar) {\n bits -= bitsPerChar;\n out += alphabet[mask & buffer >> bits];\n }\n }\n if (bits) {\n out += alphabet[mask & buffer << bitsPerChar - bits];\n }\n if (pad) {\n while (out.length * bitsPerChar & 7) {\n out += '=';\n }\n }\n return out;\n};\nconst rfc4648 = ({name, prefix, bitsPerChar, alphabet}) => {\n return from({\n prefix,\n name,\n encode(input) {\n return encode(input, alphabet, bitsPerChar);\n },\n decode(input) {\n return decode(input, alphabet, bitsPerChar, name);\n }\n });\n};\n\nexports.Codec = Codec;\nexports.baseX = baseX;\nexports.from = from;\nexports.or = or;\nexports.rfc4648 = rfc4648;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst empty = new Uint8Array(0);\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');\nconst fromHex = hex => {\n const hexes = hex.match(/../g);\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty;\n};\nconst equals = (aa, bb) => {\n if (aa === bb)\n return true;\n if (aa.byteLength !== bb.byteLength) {\n return false;\n }\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false;\n }\n }\n return true;\n};\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array')\n return o;\n if (o instanceof ArrayBuffer)\n return new Uint8Array(o);\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);\n }\n throw new Error('Unknown type, must be binary type');\n};\nconst isBinary = o => o instanceof ArrayBuffer || ArrayBuffer.isView(o);\nconst fromString = str => new TextEncoder().encode(str);\nconst toString = b => new TextDecoder().decode(b);\n\nexports.coerce = coerce;\nexports.empty = empty;\nexports.equals = equals;\nexports.fromHex = fromHex;\nexports.fromString = fromString;\nexports.isBinary = isBinary;\nexports.toHex = toHex;\nexports.toString = toString;\n","\"use strict\";\n\nconst {\n ValidationError\n} = require('yup');\n\nconst getPropsToCopy = error => {\n const {\n name,\n message,\n stack,\n constructor,\n originalError,\n toJSON,\n ...propsToCopy\n } = error;\n return propsToCopy;\n};\n\nclass ConfigurationError extends Error {\n constructor() {\n super(...arguments);\n this.name = this.constructor.name;\n }\n\n}\n\nclass Web3ProviderError extends Error {\n constructor(message, originalError) {\n super(message);\n this.name = this.constructor.name;\n this.originalError = originalError;\n\n if (originalError && typeof originalError === 'object') {\n Object.assign(this, getPropsToCopy(originalError));\n }\n }\n\n}\n\nclass Web3ProviderCallError extends Web3ProviderError {\n constructor() {\n super(...arguments);\n this.name = this.constructor.name;\n }\n\n}\n\nclass Web3ProviderSendError extends Web3ProviderError {\n constructor() {\n super(...arguments);\n this.name = this.constructor.name;\n }\n\n}\n\nclass Web3ProviderSignMessageError extends Web3ProviderError {\n constructor() {\n super(...arguments);\n this.name = this.constructor.name;\n }\n\n}\n\nclass ObjectNotFoundError extends Error {\n constructor(objName, objId, chainId) {\n super(\"No \".concat(objName, \" found for id \").concat(objId, \" on chain \").concat(chainId));\n this.name = this.constructor.name;\n this.objName = objName;\n this.chainId = chainId;\n this.objectId = objId;\n }\n\n}\n\nclass BridgeError extends Error {\n constructor(originalError, sendTxHash) {\n super(\"Failed to get bridged chain confirmation for transaction \".concat(sendTxHash));\n this.name = this.constructor.name;\n this.sendTxHash = sendTxHash;\n this.originalError = originalError;\n\n if (originalError && typeof originalError === 'object') {\n Object.assign(this, getPropsToCopy(originalError));\n }\n }\n\n}\n\nmodule.exports = {\n ConfigurationError,\n ObjectNotFoundError,\n ValidationError,\n Web3ProviderError,\n Web3ProviderCallError,\n Web3ProviderSendError,\n Web3ProviderSignMessageError,\n BridgeError\n};","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar common = require('./common.js');\n\nconst uintBoundaries = [\n 24,\n 256,\n 65536,\n 4294967296,\n BigInt('18446744073709551616')\n];\nfunction readUint8(data, offset, options) {\n common.assertEnoughData(data, offset, 1);\n const value = data[offset];\n if (options.strict === true && value < uintBoundaries[0]) {\n throw new Error(`${ common.decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n }\n return value;\n}\nfunction readUint16(data, offset, options) {\n common.assertEnoughData(data, offset, 2);\n const value = data[offset] << 8 | data[offset + 1];\n if (options.strict === true && value < uintBoundaries[1]) {\n throw new Error(`${ common.decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n }\n return value;\n}\nfunction readUint32(data, offset, options) {\n common.assertEnoughData(data, offset, 4);\n const value = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n if (options.strict === true && value < uintBoundaries[2]) {\n throw new Error(`${ common.decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n }\n return value;\n}\nfunction readUint64(data, offset, options) {\n common.assertEnoughData(data, offset, 8);\n const hi = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n const lo = data[offset + 4] * 16777216 + (data[offset + 5] << 16) + (data[offset + 6] << 8) + data[offset + 7];\n const value = (BigInt(hi) << BigInt(32)) + BigInt(lo);\n if (options.strict === true && value < uintBoundaries[3]) {\n throw new Error(`${ common.decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n }\n if (value <= Number.MAX_SAFE_INTEGER) {\n return Number(value);\n }\n if (options.allowBigInt === true) {\n return value;\n }\n throw new Error(`${ common.decodeErrPrefix } integers outside of the safe integer range are not supported`);\n}\nfunction decodeUint8(data, pos, _minor, options) {\n return new token.Token(token.Type.uint, readUint8(data, pos + 1, options), 2);\n}\nfunction decodeUint16(data, pos, _minor, options) {\n return new token.Token(token.Type.uint, readUint16(data, pos + 1, options), 3);\n}\nfunction decodeUint32(data, pos, _minor, options) {\n return new token.Token(token.Type.uint, readUint32(data, pos + 1, options), 5);\n}\nfunction decodeUint64(data, pos, _minor, options) {\n return new token.Token(token.Type.uint, readUint64(data, pos + 1, options), 9);\n}\nfunction encodeUint(buf, token) {\n return encodeUintValue(buf, 0, token.value);\n}\nfunction encodeUintValue(buf, major, uint) {\n if (uint < uintBoundaries[0]) {\n const nuint = Number(uint);\n buf.push([major | nuint]);\n } else if (uint < uintBoundaries[1]) {\n const nuint = Number(uint);\n buf.push([\n major | 24,\n nuint\n ]);\n } else if (uint < uintBoundaries[2]) {\n const nuint = Number(uint);\n buf.push([\n major | 25,\n nuint >>> 8,\n nuint & 255\n ]);\n } else if (uint < uintBoundaries[3]) {\n const nuint = Number(uint);\n buf.push([\n major | 26,\n nuint >>> 24 & 255,\n nuint >>> 16 & 255,\n nuint >>> 8 & 255,\n nuint & 255\n ]);\n } else {\n const buint = BigInt(uint);\n if (buint < uintBoundaries[4]) {\n const set = [\n major | 27,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n let lo = Number(buint & BigInt(4294967295));\n let hi = Number(buint >> BigInt(32) & BigInt(4294967295));\n set[8] = lo & 255;\n lo = lo >> 8;\n set[7] = lo & 255;\n lo = lo >> 8;\n set[6] = lo & 255;\n lo = lo >> 8;\n set[5] = lo & 255;\n set[4] = hi & 255;\n hi = hi >> 8;\n set[3] = hi & 255;\n hi = hi >> 8;\n set[2] = hi & 255;\n hi = hi >> 8;\n set[1] = hi & 255;\n buf.push(set);\n } else {\n throw new Error(`${ common.decodeErrPrefix } encountered BigInt larger than allowable range`);\n }\n }\n}\nencodeUint.encodedSize = function encodedSize(token) {\n return encodeUintValue.encodedSize(token.value);\n};\nencodeUintValue.encodedSize = function encodedSize(uint) {\n if (uint < uintBoundaries[0]) {\n return 1;\n }\n if (uint < uintBoundaries[1]) {\n return 2;\n }\n if (uint < uintBoundaries[2]) {\n return 3;\n }\n if (uint < uintBoundaries[3]) {\n return 5;\n }\n return 9;\n};\nencodeUint.compareTokens = function compareTokens(tok1, tok2) {\n return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : 0;\n};\n\nexports.decodeUint16 = decodeUint16;\nexports.decodeUint32 = decodeUint32;\nexports.decodeUint64 = decodeUint64;\nexports.decodeUint8 = decodeUint8;\nexports.encodeUint = encodeUint;\nexports.encodeUintValue = encodeUintValue;\nexports.readUint16 = readUint16;\nexports.readUint32 = readUint32;\nexports.readUint64 = readUint64;\nexports.readUint8 = readUint8;\nexports.uintBoundaries = uintBoundaries;\n","'use strict'\n\nconst { AbortController } = require('native-abort-controller')\n\n// @ts-expect-error no types\nconst retimer = require('retimer')\n\nclass TimeoutController extends AbortController {\n /**\n * @constructor\n * @param {number} ms milliseconds\n */\n constructor (ms) {\n super()\n this._ms = ms\n this._timer = retimer(() => this.abort(), ms)\n // Patch for safari not supported extending built in classes\n Object.setPrototypeOf(this, TimeoutController.prototype)\n }\n\n /**\n * Aborts the controller and clears the timer\n */\n abort () {\n this._timer.clear()\n return super.abort()\n }\n\n /**\n * Clears the timer\n */\n clear () {\n this._timer.clear()\n }\n\n /**\n * Resets the timer\n */\n reset () {\n this._timer.clear()\n this._timer = retimer(() => this.abort(), this._ms)\n }\n}\n\nmodule.exports = {\n TimeoutController\n}\n","const FIFO = require('fast-fifo')\n\nmodule.exports = (options) => {\n options = options || {}\n let onEnd\n\n if (typeof options === 'function') {\n onEnd = options\n options = {}\n } else {\n onEnd = options.onEnd\n }\n\n let buffer = new FIFO()\n let pushable, onNext, ended\n\n const waitNext = () => {\n if (!buffer.isEmpty()) {\n if (options.writev) {\n let next\n const values = []\n while (!buffer.isEmpty()) {\n next = buffer.shift()\n if (next.error) throw next.error\n values.push(next.value)\n }\n return { done: next.done, value: values }\n }\n\n const next = buffer.shift()\n if (next.error) throw next.error\n return next\n }\n\n if (ended) return { done: true }\n\n return new Promise((resolve, reject) => {\n onNext = next => {\n onNext = null\n if (next.error) {\n reject(next.error)\n } else {\n if (options.writev && !next.done) {\n resolve({ done: next.done, value: [next.value] })\n } else {\n resolve(next)\n }\n }\n return pushable\n }\n })\n }\n\n const bufferNext = next => {\n if (onNext) return onNext(next)\n buffer.push(next)\n return pushable\n }\n\n const bufferError = err => {\n buffer = new FIFO()\n if (onNext) return onNext({ error: err })\n buffer.push({ error: err })\n return pushable\n }\n\n const push = value => {\n if (ended) return pushable\n return bufferNext({ done: false, value })\n }\n const end = err => {\n if (ended) return pushable\n ended = true\n return err ? bufferError(err) : bufferNext({ done: true })\n }\n const _return = () => {\n buffer = new FIFO()\n end()\n return { done: true }\n }\n const _throw = err => {\n end(err)\n return { done: true }\n }\n\n pushable = {\n [Symbol.asyncIterator] () { return this },\n next: waitNext,\n return: _return,\n throw: _throw,\n push,\n end\n }\n\n if (!onEnd) return pushable\n\n const _pushable = pushable\n\n pushable = {\n [Symbol.asyncIterator] () { return this },\n next () {\n return _pushable.next()\n },\n throw (err) {\n _pushable.throw(err)\n if (onEnd) {\n onEnd(err)\n onEnd = null\n }\n return { done: true }\n },\n return () {\n _pushable.return()\n if (onEnd) {\n onEnd()\n onEnd = null\n }\n return { done: true }\n },\n push,\n end (err) {\n _pushable.end(err)\n if (onEnd) {\n onEnd(err)\n onEnd = null\n }\n return pushable\n }\n }\n\n return pushable\n}\n","'use strict'\n\nmodule.exports = {\n Record: require('./record'),\n validator: require('./validator'),\n selection: require('./selection')\n}\n","'use strict';\n\nconst pDefer = () => {\n\tconst deferred = {};\n\n\tdeferred.promise = new Promise((resolve, reject) => {\n\t\tdeferred.resolve = resolve;\n\t\tdeferred.reject = reject;\n\t});\n\n\treturn deferred;\n};\n\nmodule.exports = pDefer;\n","const getIterator = require('get-iterator')\nconst AbortError = require('./AbortError')\n\n// Wrap an iterator to make it abortable, allow cleanup when aborted via onAbort\nconst toAbortableSource = (source, signal, options) => (\n toMultiAbortableSource(source, Array.isArray(signal) ? signal : [{ signal, options }])\n)\n\nconst toMultiAbortableSource = (source, signals) => {\n source = getIterator(source)\n signals = signals.map(({ signal, options }) => ({ signal, options: options || {} }))\n\n async function * abortable () {\n let nextAbortHandler\n const abortHandler = () => {\n if (nextAbortHandler) nextAbortHandler()\n }\n\n for (const { signal } of signals) {\n signal.addEventListener('abort', abortHandler)\n }\n\n while (true) {\n let result\n try {\n for (const { signal, options } of signals) {\n if (signal.aborted) {\n const { abortMessage, abortCode } = options\n throw new AbortError(abortMessage, abortCode)\n }\n }\n\n const abort = new Promise((resolve, reject) => {\n nextAbortHandler = () => {\n const { options } = signals.find(({ signal }) => signal.aborted)\n const { abortMessage, abortCode } = options\n reject(new AbortError(abortMessage, abortCode))\n }\n })\n\n // Race the iterator and the abort signals\n result = await Promise.race([abort, source.next()])\n nextAbortHandler = null\n } catch (err) {\n for (const { signal } of signals) {\n signal.removeEventListener('abort', abortHandler)\n }\n\n // Might not have been aborted by a known signal\n const aborter = signals.find(({ signal }) => signal.aborted)\n const isKnownAborter = err.type === 'aborted' && aborter\n\n if (isKnownAborter && aborter.options.onAbort) {\n // Do any custom abort handling for the iterator\n await aborter.options.onAbort(source)\n }\n\n // End the iterator if it is a generator\n if (typeof source.return === 'function') {\n await source.return()\n }\n\n if (isKnownAborter && aborter.options.returnOnAbort) {\n return\n }\n\n throw err\n }\n\n if (result.done) break\n yield result.value\n }\n\n for (const { signal } of signals) {\n signal.removeEventListener('abort', abortHandler)\n }\n }\n\n return abortable()\n}\n\nconst toAbortableSink = (sink, signal, options) => (\n toMultiAbortableSink(sink, Array.isArray(signal) ? signal : [{ signal, options }])\n)\n\nconst toMultiAbortableSink = (sink, signals) => source => (\n sink(toMultiAbortableSource(source, signals))\n)\n\nconst toAbortableDuplex = (duplex, signal, options) => (\n toMultiAbortableDuplex(duplex, Array.isArray(signal) ? signal : [{ signal, options }])\n)\n\nconst toMultiAbortableDuplex = (duplex, signals) => ({\n sink: toMultiAbortableSink(duplex.sink, signals),\n source: toMultiAbortableSource(duplex.source, signals)\n})\n\nmodule.exports = toAbortableSource\nmodule.exports.AbortError = AbortError\nmodule.exports.source = toAbortableSource\nmodule.exports.sink = toAbortableSink\nmodule.exports.transform = toAbortableSink\nmodule.exports.duplex = toAbortableDuplex\n","\"use strict\";\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Sets all values in the given array to zero and returns it.\n *\n * The fact that it sets bytes to zero can be relied on.\n *\n * There is no guarantee that this function makes data disappear from memory,\n * as runtime implementation can, for example, have copying garbage collector\n * that will make copies of sensitive data before we wipe it. Or that an\n * operating system will write our data to swap or sleep image. Another thing\n * is that an optimizing compiler can remove calls to this function or make it\n * no-op. There's nothing we can do with it, so we just do our best and hope\n * that everything will be okay and good will triumph over evil.\n */\nfunction wipe(array) {\n // Right now it's similar to array.fill(0). If it turns\n // out that runtimes optimize this call away, maybe\n // we can try something else.\n for (var i = 0; i < array.length; i++) {\n array[i] = 0;\n }\n return array;\n}\nexports.wipe = wipe;\n//# sourceMappingURL=wipe.js.map","'use strict'\n\n// MaxRecordAge specifies the maximum time that any node will hold onto a record\n// from the time its received. This does not apply to any other forms of validity that\n// the record may contain.\n// For example, a record may contain an ipns entry with an EOL saying its valid\n// until the year 2020 (a great time in the future). For that record to stick around\n// it must be rebroadcasted more frequently than once every 'MaxRecordAge'\n\nconst second = exports.second = 1000\nconst minute = exports.minute = 60 * second\nconst hour = exports.hour = 60 * minute\n\nexports.MAX_RECORD_AGE = 36 * hour\n\nexports.PROTOCOL_DHT = '/kad/1.0.0'\n\nexports.RECORD_KEY_PREFIX = '/dht/record'\n\nexports.PROVIDER_KEY_PREFIX = '/dht/provider'\n\nexports.PROVIDERS_LRU_CACHE_SIZE = 256\n\nexports.PROVIDERS_VALIDITY = 24 * hour\n\nexports.PROVIDERS_CLEANUP_INTERVAL = hour\n\nexports.READ_MESSAGE_TIMEOUT = 10 * second\n\n// The number of records that will be retrieved on a call to getMany()\nexports.GET_MANY_RECORD_COUNT = 16\n\n// K is the maximum number of requests to perform before returning failure\nexports.K = 20\n\n// Alpha is the concurrency for asynchronous requests\nexports.ALPHA = 3\n\n// How often we look for our closest DHT neighbours\nexports.QUERY_SELF_INTERVAL = Number(5 * minute)\n\n// How long to look for our closest DHT neighbours for\nexports.QUERY_SELF_TIMEOUT = Number(30 * second)\n\n// How often we try to find new peers\nexports.TABLE_REFRESH_INTERVAL = Number(5 * minute)\n\n// How how long to look for new peers for\nexports.TABLE_REFRESH_QUERY_TIMEOUT = Number(30 * second)\n\n// When a timeout is not specified, run a query for this long\nexports.DEFAULT_QUERY_TIMEOUT = Number(30 * second)\n","// NFKC (composed) // (decomposed)\nexport const EtherSymbol = \"\\u039e\"; // \"\\uD835\\uDF63\";\n//# sourceMappingURL=strings.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ForkEvent, Provider } from \"@ethersproject/abstract-provider\";\nimport { Base58 } from \"@ethersproject/basex\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, concat, hexConcat, hexDataLength, hexDataSlice, hexlify, hexValue, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { HashZero } from \"@ethersproject/constants\";\nimport { namehash } from \"@ethersproject/hash\";\nimport { getNetwork } from \"@ethersproject/networks\";\nimport { defineReadOnly, getStatic, resolveProperties } from \"@ethersproject/properties\";\nimport { sha256 } from \"@ethersproject/sha2\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { fetchJson, poll } from \"@ethersproject/web\";\nimport bech32 from \"bech32\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { Formatter } from \"./formatter\";\n//////////////////////////////\n// Event Serializeing\nfunction checkTopic(topic) {\n if (topic == null) {\n return \"null\";\n }\n if (hexDataLength(topic) !== 32) {\n logger.throwArgumentError(\"invalid topic\", \"topic\", topic);\n }\n return topic.toLowerCase();\n}\nfunction serializeTopics(topics) {\n // Remove trailing null AND-topics; they are redundant\n topics = topics.slice();\n while (topics.length > 0 && topics[topics.length - 1] == null) {\n topics.pop();\n }\n return topics.map((topic) => {\n if (Array.isArray(topic)) {\n // Only track unique OR-topics\n const unique = {};\n topic.forEach((topic) => {\n unique[checkTopic(topic)] = true;\n });\n // The order of OR-topics does not matter\n const sorted = Object.keys(unique);\n sorted.sort();\n return sorted.join(\"|\");\n }\n else {\n return checkTopic(topic);\n }\n }).join(\"&\");\n}\nfunction deserializeTopics(data) {\n if (data === \"\") {\n return [];\n }\n return data.split(/&/g).map((topic) => {\n if (topic === \"\") {\n return [];\n }\n const comps = topic.split(\"|\").map((topic) => {\n return ((topic === \"null\") ? null : topic);\n });\n return ((comps.length === 1) ? comps[0] : comps);\n });\n}\nfunction getEventTag(eventName) {\n if (typeof (eventName) === \"string\") {\n eventName = eventName.toLowerCase();\n if (hexDataLength(eventName) === 32) {\n return \"tx:\" + eventName;\n }\n if (eventName.indexOf(\":\") === -1) {\n return eventName;\n }\n }\n else if (Array.isArray(eventName)) {\n return \"filter:*:\" + serializeTopics(eventName);\n }\n else if (ForkEvent.isForkEvent(eventName)) {\n logger.warn(\"not implemented\");\n throw new Error(\"not implemented\");\n }\n else if (eventName && typeof (eventName) === \"object\") {\n return \"filter:\" + (eventName.address || \"*\") + \":\" + serializeTopics(eventName.topics || []);\n }\n throw new Error(\"invalid event - \" + eventName);\n}\n//////////////////////////////\n// Helper Object\nfunction getTime() {\n return (new Date()).getTime();\n}\nfunction stall(duration) {\n return new Promise((resolve) => {\n setTimeout(resolve, duration);\n });\n}\n//////////////////////////////\n// Provider Object\n/**\n * EventType\n * - \"block\"\n * - \"poll\"\n * - \"didPoll\"\n * - \"pending\"\n * - \"error\"\n * - \"network\"\n * - filter\n * - topics array\n * - transaction hash\n */\nconst PollableEvents = [\"block\", \"network\", \"pending\", \"poll\"];\nexport class Event {\n constructor(tag, listener, once) {\n defineReadOnly(this, \"tag\", tag);\n defineReadOnly(this, \"listener\", listener);\n defineReadOnly(this, \"once\", once);\n }\n get event() {\n switch (this.type) {\n case \"tx\":\n return this.hash;\n case \"filter\":\n return this.filter;\n }\n return this.tag;\n }\n get type() {\n return this.tag.split(\":\")[0];\n }\n get hash() {\n const comps = this.tag.split(\":\");\n if (comps[0] !== \"tx\") {\n return null;\n }\n return comps[1];\n }\n get filter() {\n const comps = this.tag.split(\":\");\n if (comps[0] !== \"filter\") {\n return null;\n }\n const address = comps[1];\n const topics = deserializeTopics(comps[2]);\n const filter = {};\n if (topics.length > 0) {\n filter.topics = topics;\n }\n if (address && address !== \"*\") {\n filter.address = address;\n }\n return filter;\n }\n pollable() {\n return (this.tag.indexOf(\":\") >= 0 || PollableEvents.indexOf(this.tag) >= 0);\n }\n}\n;\n// https://github.com/satoshilabs/slips/blob/master/slip-0044.md\nconst coinInfos = {\n \"0\": { symbol: \"btc\", p2pkh: 0x00, p2sh: 0x05, prefix: \"bc\" },\n \"2\": { symbol: \"ltc\", p2pkh: 0x30, p2sh: 0x32, prefix: \"ltc\" },\n \"3\": { symbol: \"doge\", p2pkh: 0x1e, p2sh: 0x16 },\n \"60\": { symbol: \"eth\", ilk: \"eth\" },\n \"61\": { symbol: \"etc\", ilk: \"eth\" },\n \"700\": { symbol: \"xdai\", ilk: \"eth\" },\n};\nfunction bytes32ify(value) {\n return hexZeroPad(BigNumber.from(value).toHexString(), 32);\n}\n// Compute the Base58Check encoded data (checksum is first 4 bytes of sha256d)\nfunction base58Encode(data) {\n return Base58.encode(concat([data, hexDataSlice(sha256(sha256(data)), 0, 4)]));\n}\nconst matchers = [\n new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n new RegExp(\"^(data):(.*)$\", \"i\"),\n new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\"),\n new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\nfunction _parseString(result) {\n try {\n return toUtf8String(_parseBytes(result));\n }\n catch (error) { }\n return null;\n}\nfunction _parseBytes(result) {\n if (result === \"0x\") {\n return null;\n }\n const offset = BigNumber.from(hexDataSlice(result, 0, 32)).toNumber();\n const length = BigNumber.from(hexDataSlice(result, offset, offset + 32)).toNumber();\n return hexDataSlice(result, offset + 32, offset + 32 + length);\n}\nexport class Resolver {\n // The resolvedAddress is only for creating a ReverseLookup resolver\n constructor(provider, address, name, resolvedAddress) {\n defineReadOnly(this, \"provider\", provider);\n defineReadOnly(this, \"name\", name);\n defineReadOnly(this, \"address\", provider.formatter.address(address));\n defineReadOnly(this, \"_resolvedAddress\", resolvedAddress);\n }\n _fetchBytes(selector, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n // e.g. keccak256(\"addr(bytes32,uint256)\")\n const tx = {\n to: this.address,\n data: hexConcat([selector, namehash(this.name), (parameters || \"0x\")])\n };\n try {\n return _parseBytes(yield this.provider.call(tx));\n }\n catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) {\n return null;\n }\n return null;\n }\n });\n }\n _getAddress(coinType, hexBytes) {\n const coinInfo = coinInfos[String(coinType)];\n if (coinInfo == null) {\n logger.throwError(`unsupported coin type: ${coinType}`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `getAddress(${coinType})`\n });\n }\n if (coinInfo.ilk === \"eth\") {\n return this.provider.formatter.address(hexBytes);\n }\n const bytes = arrayify(hexBytes);\n // P2PKH: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG\n if (coinInfo.p2pkh != null) {\n const p2pkh = hexBytes.match(/^0x76a9([0-9a-f][0-9a-f])([0-9a-f]*)88ac$/);\n if (p2pkh) {\n const length = parseInt(p2pkh[1], 16);\n if (p2pkh[2].length === length * 2 && length >= 1 && length <= 75) {\n return base58Encode(concat([[coinInfo.p2pkh], (\"0x\" + p2pkh[2])]));\n }\n }\n }\n // P2SH: OP_HASH160 OP_EQUAL\n if (coinInfo.p2sh != null) {\n const p2sh = hexBytes.match(/^0xa9([0-9a-f][0-9a-f])([0-9a-f]*)87$/);\n if (p2sh) {\n const length = parseInt(p2sh[1], 16);\n if (p2sh[2].length === length * 2 && length >= 1 && length <= 75) {\n return base58Encode(concat([[coinInfo.p2sh], (\"0x\" + p2sh[2])]));\n }\n }\n }\n // Bech32\n if (coinInfo.prefix != null) {\n const length = bytes[1];\n // https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#witness-program\n let version = bytes[0];\n if (version === 0x00) {\n if (length !== 20 && length !== 32) {\n version = -1;\n }\n }\n else {\n version = -1;\n }\n if (version >= 0 && bytes.length === 2 + length && length >= 1 && length <= 75) {\n const words = bech32.toWords(bytes.slice(2));\n words.unshift(version);\n return bech32.encode(coinInfo.prefix, words);\n }\n }\n return null;\n }\n getAddress(coinType) {\n return __awaiter(this, void 0, void 0, function* () {\n if (coinType == null) {\n coinType = 60;\n }\n // If Ethereum, use the standard `addr(bytes32)`\n if (coinType === 60) {\n try {\n // keccak256(\"addr(bytes32)\")\n const transaction = {\n to: this.address,\n data: (\"0x3b3b57de\" + namehash(this.name).substring(2))\n };\n const hexBytes = yield this.provider.call(transaction);\n // No address\n if (hexBytes === \"0x\" || hexBytes === HashZero) {\n return null;\n }\n return this.provider.formatter.callAddress(hexBytes);\n }\n catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) {\n return null;\n }\n throw error;\n }\n }\n // keccak256(\"addr(bytes32,uint256\")\n const hexBytes = yield this._fetchBytes(\"0xf1cb7e06\", bytes32ify(coinType));\n // No address\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // Compute the address\n const address = this._getAddress(coinType, hexBytes);\n if (address == null) {\n logger.throwError(`invalid or unsupported coin data`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `getAddress(${coinType})`,\n coinType: coinType,\n data: hexBytes\n });\n }\n return address;\n });\n }\n getAvatar() {\n return __awaiter(this, void 0, void 0, function* () {\n const linkage = [];\n try {\n // test data for ricmoo.eth\n //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n const avatar = yield this.getText(\"avatar\");\n if (avatar == null) {\n return null;\n }\n for (let i = 0; i < matchers.length; i++) {\n const match = avatar.match(matchers[i]);\n if (match == null) {\n continue;\n }\n switch (match[1]) {\n case \"https\":\n linkage.push({ type: \"url\", content: avatar });\n return { linkage, url: avatar };\n case \"data\":\n linkage.push({ type: \"data\", content: avatar });\n return { linkage, url: avatar };\n case \"ipfs\":\n linkage.push({ type: \"ipfs\", content: avatar });\n return { linkage, url: `https:/\\/gateway.ipfs.io/ipfs/${avatar.substring(7)}` };\n case \"erc721\":\n case \"erc1155\": {\n // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n const selector = (match[1] === \"erc721\") ? \"0xc87b56dd\" : \"0x0e89341c\";\n linkage.push({ type: match[1], content: avatar });\n // The owner of this name\n const owner = (this._resolvedAddress || (yield this.getAddress()));\n const comps = (match[2] || \"\").split(\"/\");\n if (comps.length !== 2) {\n return null;\n }\n const addr = yield this.provider.formatter.address(comps[0]);\n const tokenId = hexZeroPad(BigNumber.from(comps[1]).toHexString(), 32);\n // Check that this account owns the token\n if (match[1] === \"erc721\") {\n // ownerOf(uint256 tokenId)\n const tokenOwner = this.provider.formatter.callAddress(yield this.provider.call({\n to: addr, data: hexConcat([\"0x6352211e\", tokenId])\n }));\n if (owner !== tokenOwner) {\n return null;\n }\n linkage.push({ type: \"owner\", content: tokenOwner });\n }\n else if (match[1] === \"erc1155\") {\n // balanceOf(address owner, uint256 tokenId)\n const balance = BigNumber.from(yield this.provider.call({\n to: addr, data: hexConcat([\"0x00fdd58e\", hexZeroPad(owner, 32), tokenId])\n }));\n if (balance.isZero()) {\n return null;\n }\n linkage.push({ type: \"balance\", content: balance.toString() });\n }\n // Call the token contract for the metadata URL\n const tx = {\n to: this.provider.formatter.address(comps[0]),\n data: hexConcat([selector, tokenId])\n };\n let metadataUrl = _parseString(yield this.provider.call(tx));\n if (metadataUrl == null) {\n return null;\n }\n linkage.push({ type: \"metadata-url\", content: metadataUrl });\n // ERC-1155 allows a generic {id} in the URL\n if (match[1] === \"erc1155\") {\n metadataUrl = metadataUrl.replace(\"{id}\", tokenId.substring(2));\n }\n // Get the token metadata\n const metadata = yield fetchJson(metadataUrl);\n // Pull the image URL out\n if (!metadata || typeof (metadata.image) !== \"string\" || !metadata.image.match(/^(https:\\/\\/|data:)/i)) {\n return null;\n }\n linkage.push({ type: \"metadata\", content: JSON.stringify(metadata) });\n linkage.push({ type: \"url\", content: metadata.image });\n return { linkage, url: metadata.image };\n }\n }\n }\n }\n catch (error) { }\n return null;\n });\n }\n getContentHash() {\n return __awaiter(this, void 0, void 0, function* () {\n // keccak256(\"contenthash()\")\n const hexBytes = yield this._fetchBytes(\"0xbc1c58d1\");\n // No contenthash\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n // IPFS (CID: 1, Type: DAG-PB)\n const ipfs = hexBytes.match(/^0xe3010170(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n if (ipfs) {\n const length = parseInt(ipfs[3], 16);\n if (ipfs[4].length === length * 2) {\n return \"ipfs:/\\/\" + Base58.encode(\"0x\" + ipfs[1]);\n }\n }\n // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n const swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/);\n if (swarm) {\n if (swarm[1].length === (32 * 2)) {\n return \"bzz:/\\/\" + swarm[1];\n }\n }\n return logger.throwError(`invalid or unsupported content hash data`, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"getContentHash()\",\n data: hexBytes\n });\n });\n }\n getText(key) {\n return __awaiter(this, void 0, void 0, function* () {\n // The key encoded as parameter to fetchBytes\n let keyBytes = toUtf8Bytes(key);\n // The nodehash consumes the first slot, so the string pointer targets\n // offset 64, with the length at offset 64 and data starting at offset 96\n keyBytes = concat([bytes32ify(64), bytes32ify(keyBytes.length), keyBytes]);\n // Pad to word-size (32 bytes)\n if ((keyBytes.length % 32) !== 0) {\n keyBytes = concat([keyBytes, hexZeroPad(\"0x\", 32 - (key.length % 32))]);\n }\n const hexBytes = yield this._fetchBytes(\"0x59d1d43c\", hexlify(keyBytes));\n if (hexBytes == null || hexBytes === \"0x\") {\n return null;\n }\n return toUtf8String(hexBytes);\n });\n }\n}\nlet defaultFormatter = null;\nlet nextPollId = 1;\nexport class BaseProvider extends Provider {\n /**\n * ready\n *\n * A Promise that resolves only once the provider is ready.\n *\n * Sub-classes that call the super with a network without a chainId\n * MUST set this. Standard named networks have a known chainId.\n *\n */\n constructor(network) {\n logger.checkNew(new.target, Provider);\n super();\n // Events being listened to\n this._events = [];\n this._emitted = { block: -2 };\n this.formatter = new.target.getFormatter();\n // If network is any, this Provider allows the underlying\n // network to change dynamically, and we auto-detect the\n // current network\n defineReadOnly(this, \"anyNetwork\", (network === \"any\"));\n if (this.anyNetwork) {\n network = this.detectNetwork();\n }\n if (network instanceof Promise) {\n this._networkPromise = network;\n // Squash any \"unhandled promise\" errors; that do not need to be handled\n network.catch((error) => { });\n // Trigger initial network setting (async)\n this._ready().catch((error) => { });\n }\n else {\n const knownNetwork = getStatic(new.target, \"getNetwork\")(network);\n if (knownNetwork) {\n defineReadOnly(this, \"_network\", knownNetwork);\n this.emit(\"network\", knownNetwork, null);\n }\n else {\n logger.throwArgumentError(\"invalid network\", \"network\", network);\n }\n }\n this._maxInternalBlockNumber = -1024;\n this._lastBlockNumber = -2;\n this._pollingInterval = 4000;\n this._fastQueryDate = 0;\n }\n _ready() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._network == null) {\n let network = null;\n if (this._networkPromise) {\n try {\n network = yield this._networkPromise;\n }\n catch (error) { }\n }\n // Try the Provider's network detection (this MUST throw if it cannot)\n if (network == null) {\n network = yield this.detectNetwork();\n }\n // This should never happen; every Provider sub-class should have\n // suggested a network by here (or have thrown).\n if (!network) {\n logger.throwError(\"no network detected\", Logger.errors.UNKNOWN_ERROR, {});\n }\n // Possible this call stacked so do not call defineReadOnly again\n if (this._network == null) {\n if (this.anyNetwork) {\n this._network = network;\n }\n else {\n defineReadOnly(this, \"_network\", network);\n }\n this.emit(\"network\", network, null);\n }\n }\n return this._network;\n });\n }\n // This will always return the most recently established network.\n // For \"any\", this can change (a \"network\" event is emitted before\n // any change is reflected); otherwise this cannot change\n get ready() {\n return poll(() => {\n return this._ready().then((network) => {\n return network;\n }, (error) => {\n // If the network isn't running yet, we will wait\n if (error.code === Logger.errors.NETWORK_ERROR && error.event === \"noNetwork\") {\n return undefined;\n }\n throw error;\n });\n });\n }\n // @TODO: Remove this and just create a singleton formatter\n static getFormatter() {\n if (defaultFormatter == null) {\n defaultFormatter = new Formatter();\n }\n return defaultFormatter;\n }\n // @TODO: Remove this and just use getNetwork\n static getNetwork(network) {\n return getNetwork((network == null) ? \"homestead\" : network);\n }\n // Fetches the blockNumber, but will reuse any result that is less\n // than maxAge old or has been requested since the last request\n _getInternalBlockNumber(maxAge) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._ready();\n // Allowing stale data up to maxAge old\n if (maxAge > 0) {\n // While there are pending internal block requests...\n while (this._internalBlockNumber) {\n // ...\"remember\" which fetch we started with\n const internalBlockNumber = this._internalBlockNumber;\n try {\n // Check the result is not too stale\n const result = yield internalBlockNumber;\n if ((getTime() - result.respTime) <= maxAge) {\n return result.blockNumber;\n }\n // Too old; fetch a new value\n break;\n }\n catch (error) {\n // The fetch rejected; if we are the first to get the\n // rejection, drop through so we replace it with a new\n // fetch; all others blocked will then get that fetch\n // which won't match the one they \"remembered\" and loop\n if (this._internalBlockNumber === internalBlockNumber) {\n break;\n }\n }\n }\n }\n const reqTime = getTime();\n const checkInternalBlockNumber = resolveProperties({\n blockNumber: this.perform(\"getBlockNumber\", {}),\n networkError: this.getNetwork().then((network) => (null), (error) => (error))\n }).then(({ blockNumber, networkError }) => {\n if (networkError) {\n // Unremember this bad internal block number\n if (this._internalBlockNumber === checkInternalBlockNumber) {\n this._internalBlockNumber = null;\n }\n throw networkError;\n }\n const respTime = getTime();\n blockNumber = BigNumber.from(blockNumber).toNumber();\n if (blockNumber < this._maxInternalBlockNumber) {\n blockNumber = this._maxInternalBlockNumber;\n }\n this._maxInternalBlockNumber = blockNumber;\n this._setFastBlockNumber(blockNumber); // @TODO: Still need this?\n return { blockNumber, reqTime, respTime };\n });\n this._internalBlockNumber = checkInternalBlockNumber;\n // Swallow unhandled exceptions; if needed they are handled else where\n checkInternalBlockNumber.catch((error) => {\n // Don't null the dead (rejected) fetch, if it has already been updated\n if (this._internalBlockNumber === checkInternalBlockNumber) {\n this._internalBlockNumber = null;\n }\n });\n return (yield checkInternalBlockNumber).blockNumber;\n });\n }\n poll() {\n return __awaiter(this, void 0, void 0, function* () {\n const pollId = nextPollId++;\n // Track all running promises, so we can trigger a post-poll once they are complete\n const runners = [];\n let blockNumber = null;\n try {\n blockNumber = yield this._getInternalBlockNumber(100 + this.pollingInterval / 2);\n }\n catch (error) {\n this.emit(\"error\", error);\n return;\n }\n this._setFastBlockNumber(blockNumber);\n // Emit a poll event after we have the latest (fast) block number\n this.emit(\"poll\", pollId, blockNumber);\n // If the block has not changed, meh.\n if (blockNumber === this._lastBlockNumber) {\n this.emit(\"didPoll\", pollId);\n return;\n }\n // First polling cycle, trigger a \"block\" events\n if (this._emitted.block === -2) {\n this._emitted.block = blockNumber - 1;\n }\n if (Math.abs((this._emitted.block) - blockNumber) > 1000) {\n logger.warn(`network block skew detected; skipping block events (emitted=${this._emitted.block} blockNumber${blockNumber})`);\n this.emit(\"error\", logger.makeError(\"network block skew detected\", Logger.errors.NETWORK_ERROR, {\n blockNumber: blockNumber,\n event: \"blockSkew\",\n previousBlockNumber: this._emitted.block\n }));\n this.emit(\"block\", blockNumber);\n }\n else {\n // Notify all listener for each block that has passed\n for (let i = this._emitted.block + 1; i <= blockNumber; i++) {\n this.emit(\"block\", i);\n }\n }\n // The emitted block was updated, check for obsolete events\n if (this._emitted.block !== blockNumber) {\n this._emitted.block = blockNumber;\n Object.keys(this._emitted).forEach((key) => {\n // The block event does not expire\n if (key === \"block\") {\n return;\n }\n // The block we were at when we emitted this event\n const eventBlockNumber = this._emitted[key];\n // We cannot garbage collect pending transactions or blocks here\n // They should be garbage collected by the Provider when setting\n // \"pending\" events\n if (eventBlockNumber === \"pending\") {\n return;\n }\n // Evict any transaction hashes or block hashes over 12 blocks\n // old, since they should not return null anyways\n if (blockNumber - eventBlockNumber > 12) {\n delete this._emitted[key];\n }\n });\n }\n // First polling cycle\n if (this._lastBlockNumber === -2) {\n this._lastBlockNumber = blockNumber - 1;\n }\n // Find all transaction hashes we are waiting on\n this._events.forEach((event) => {\n switch (event.type) {\n case \"tx\": {\n const hash = event.hash;\n let runner = this.getTransactionReceipt(hash).then((receipt) => {\n if (!receipt || receipt.blockNumber == null) {\n return null;\n }\n this._emitted[\"t:\" + hash] = receipt.blockNumber;\n this.emit(hash, receipt);\n return null;\n }).catch((error) => { this.emit(\"error\", error); });\n runners.push(runner);\n break;\n }\n case \"filter\": {\n const filter = event.filter;\n filter.fromBlock = this._lastBlockNumber + 1;\n filter.toBlock = blockNumber;\n const runner = this.getLogs(filter).then((logs) => {\n if (logs.length === 0) {\n return;\n }\n logs.forEach((log) => {\n this._emitted[\"b:\" + log.blockHash] = log.blockNumber;\n this._emitted[\"t:\" + log.transactionHash] = log.blockNumber;\n this.emit(filter, log);\n });\n }).catch((error) => { this.emit(\"error\", error); });\n runners.push(runner);\n break;\n }\n }\n });\n this._lastBlockNumber = blockNumber;\n // Once all events for this loop have been processed, emit \"didPoll\"\n Promise.all(runners).then(() => {\n this.emit(\"didPoll\", pollId);\n }).catch((error) => { this.emit(\"error\", error); });\n return;\n });\n }\n // Deprecated; do not use this\n resetEventsBlock(blockNumber) {\n this._lastBlockNumber = blockNumber - 1;\n if (this.polling) {\n this.poll();\n }\n }\n get network() {\n return this._network;\n }\n // This method should query the network if the underlying network\n // can change, such as when connected to a JSON-RPC backend\n detectNetwork() {\n return __awaiter(this, void 0, void 0, function* () {\n return logger.throwError(\"provider does not support network detection\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"provider.detectNetwork\"\n });\n });\n }\n getNetwork() {\n return __awaiter(this, void 0, void 0, function* () {\n const network = yield this._ready();\n // Make sure we are still connected to the same network; this is\n // only an external call for backends which can have the underlying\n // network change spontaneously\n const currentNetwork = yield this.detectNetwork();\n if (network.chainId !== currentNetwork.chainId) {\n // We are allowing network changes, things can get complex fast;\n // make sure you know what you are doing if you use \"any\"\n if (this.anyNetwork) {\n this._network = currentNetwork;\n // Reset all internal block number guards and caches\n this._lastBlockNumber = -2;\n this._fastBlockNumber = null;\n this._fastBlockNumberPromise = null;\n this._fastQueryDate = 0;\n this._emitted.block = -2;\n this._maxInternalBlockNumber = -1024;\n this._internalBlockNumber = null;\n // The \"network\" event MUST happen before this method resolves\n // so any events have a chance to unregister, so we stall an\n // additional event loop before returning from /this/ call\n this.emit(\"network\", currentNetwork, network);\n yield stall(0);\n return this._network;\n }\n const error = logger.makeError(\"underlying network changed\", Logger.errors.NETWORK_ERROR, {\n event: \"changed\",\n network: network,\n detectedNetwork: currentNetwork\n });\n this.emit(\"error\", error);\n throw error;\n }\n return network;\n });\n }\n get blockNumber() {\n this._getInternalBlockNumber(100 + this.pollingInterval / 2).then((blockNumber) => {\n this._setFastBlockNumber(blockNumber);\n }, (error) => { });\n return (this._fastBlockNumber != null) ? this._fastBlockNumber : -1;\n }\n get polling() {\n return (this._poller != null);\n }\n set polling(value) {\n if (value && !this._poller) {\n this._poller = setInterval(() => { this.poll(); }, this.pollingInterval);\n if (!this._bootstrapPoll) {\n this._bootstrapPoll = setTimeout(() => {\n this.poll();\n // We block additional polls until the polling interval\n // is done, to prevent overwhelming the poll function\n this._bootstrapPoll = setTimeout(() => {\n // If polling was disabled, something may require a poke\n // since starting the bootstrap poll and it was disabled\n if (!this._poller) {\n this.poll();\n }\n // Clear out the bootstrap so we can do another\n this._bootstrapPoll = null;\n }, this.pollingInterval);\n }, 0);\n }\n }\n else if (!value && this._poller) {\n clearInterval(this._poller);\n this._poller = null;\n }\n }\n get pollingInterval() {\n return this._pollingInterval;\n }\n set pollingInterval(value) {\n if (typeof (value) !== \"number\" || value <= 0 || parseInt(String(value)) != value) {\n throw new Error(\"invalid polling interval\");\n }\n this._pollingInterval = value;\n if (this._poller) {\n clearInterval(this._poller);\n this._poller = setInterval(() => { this.poll(); }, this._pollingInterval);\n }\n }\n _getFastBlockNumber() {\n const now = getTime();\n // Stale block number, request a newer value\n if ((now - this._fastQueryDate) > 2 * this._pollingInterval) {\n this._fastQueryDate = now;\n this._fastBlockNumberPromise = this.getBlockNumber().then((blockNumber) => {\n if (this._fastBlockNumber == null || blockNumber > this._fastBlockNumber) {\n this._fastBlockNumber = blockNumber;\n }\n return this._fastBlockNumber;\n });\n }\n return this._fastBlockNumberPromise;\n }\n _setFastBlockNumber(blockNumber) {\n // Older block, maybe a stale request\n if (this._fastBlockNumber != null && blockNumber < this._fastBlockNumber) {\n return;\n }\n // Update the time we updated the blocknumber\n this._fastQueryDate = getTime();\n // Newer block number, use it\n if (this._fastBlockNumber == null || blockNumber > this._fastBlockNumber) {\n this._fastBlockNumber = blockNumber;\n this._fastBlockNumberPromise = Promise.resolve(blockNumber);\n }\n }\n waitForTransaction(transactionHash, confirmations, timeout) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._waitForTransaction(transactionHash, (confirmations == null) ? 1 : confirmations, timeout || 0, null);\n });\n }\n _waitForTransaction(transactionHash, confirmations, timeout, replaceable) {\n return __awaiter(this, void 0, void 0, function* () {\n const receipt = yield this.getTransactionReceipt(transactionHash);\n // Receipt is already good\n if ((receipt ? receipt.confirmations : 0) >= confirmations) {\n return receipt;\n }\n // Poll until the receipt is good...\n return new Promise((resolve, reject) => {\n const cancelFuncs = [];\n let done = false;\n const alreadyDone = function () {\n if (done) {\n return true;\n }\n done = true;\n cancelFuncs.forEach((func) => { func(); });\n return false;\n };\n const minedHandler = (receipt) => {\n if (receipt.confirmations < confirmations) {\n return;\n }\n if (alreadyDone()) {\n return;\n }\n resolve(receipt);\n };\n this.on(transactionHash, minedHandler);\n cancelFuncs.push(() => { this.removeListener(transactionHash, minedHandler); });\n if (replaceable) {\n let lastBlockNumber = replaceable.startBlock;\n let scannedBlock = null;\n const replaceHandler = (blockNumber) => __awaiter(this, void 0, void 0, function* () {\n if (done) {\n return;\n }\n // Wait 1 second; this is only used in the case of a fault, so\n // we will trade off a little bit of latency for more consistent\n // results and fewer JSON-RPC calls\n yield stall(1000);\n this.getTransactionCount(replaceable.from).then((nonce) => __awaiter(this, void 0, void 0, function* () {\n if (done) {\n return;\n }\n if (nonce <= replaceable.nonce) {\n lastBlockNumber = blockNumber;\n }\n else {\n // First check if the transaction was mined\n {\n const mined = yield this.getTransaction(transactionHash);\n if (mined && mined.blockNumber != null) {\n return;\n }\n }\n // First time scanning. We start a little earlier for some\n // wiggle room here to handle the eventually consistent nature\n // of blockchain (e.g. the getTransactionCount was for a\n // different block)\n if (scannedBlock == null) {\n scannedBlock = lastBlockNumber - 3;\n if (scannedBlock < replaceable.startBlock) {\n scannedBlock = replaceable.startBlock;\n }\n }\n while (scannedBlock <= blockNumber) {\n if (done) {\n return;\n }\n const block = yield this.getBlockWithTransactions(scannedBlock);\n for (let ti = 0; ti < block.transactions.length; ti++) {\n const tx = block.transactions[ti];\n // Successfully mined!\n if (tx.hash === transactionHash) {\n return;\n }\n // Matches our transaction from and nonce; its a replacement\n if (tx.from === replaceable.from && tx.nonce === replaceable.nonce) {\n if (done) {\n return;\n }\n // Get the receipt of the replacement\n const receipt = yield this.waitForTransaction(tx.hash, confirmations);\n // Already resolved or rejected (prolly a timeout)\n if (alreadyDone()) {\n return;\n }\n // The reason we were replaced\n let reason = \"replaced\";\n if (tx.data === replaceable.data && tx.to === replaceable.to && tx.value.eq(replaceable.value)) {\n reason = \"repriced\";\n }\n else if (tx.data === \"0x\" && tx.from === tx.to && tx.value.isZero()) {\n reason = \"cancelled\";\n }\n // Explain why we were replaced\n reject(logger.makeError(\"transaction was replaced\", Logger.errors.TRANSACTION_REPLACED, {\n cancelled: (reason === \"replaced\" || reason === \"cancelled\"),\n reason,\n replacement: this._wrapTransaction(tx),\n hash: transactionHash,\n receipt\n }));\n return;\n }\n }\n scannedBlock++;\n }\n }\n if (done) {\n return;\n }\n this.once(\"block\", replaceHandler);\n }), (error) => {\n if (done) {\n return;\n }\n this.once(\"block\", replaceHandler);\n });\n });\n if (done) {\n return;\n }\n this.once(\"block\", replaceHandler);\n cancelFuncs.push(() => {\n this.removeListener(\"block\", replaceHandler);\n });\n }\n if (typeof (timeout) === \"number\" && timeout > 0) {\n const timer = setTimeout(() => {\n if (alreadyDone()) {\n return;\n }\n reject(logger.makeError(\"timeout exceeded\", Logger.errors.TIMEOUT, { timeout: timeout }));\n }, timeout);\n if (timer.unref) {\n timer.unref();\n }\n cancelFuncs.push(() => { clearTimeout(timer); });\n }\n });\n });\n }\n getBlockNumber() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._getInternalBlockNumber(0);\n });\n }\n getGasPrice() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const result = yield this.perform(\"getGasPrice\", {});\n try {\n return BigNumber.from(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getGasPrice\",\n result, error\n });\n }\n });\n }\n getBalance(addressOrName, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n const result = yield this.perform(\"getBalance\", params);\n try {\n return BigNumber.from(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getBalance\",\n params, result, error\n });\n }\n });\n }\n getTransactionCount(addressOrName, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n const result = yield this.perform(\"getTransactionCount\", params);\n try {\n return BigNumber.from(result).toNumber();\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getTransactionCount\",\n params, result, error\n });\n }\n });\n }\n getCode(addressOrName, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag)\n });\n const result = yield this.perform(\"getCode\", params);\n try {\n return hexlify(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getCode\",\n params, result, error\n });\n }\n });\n }\n getStorageAt(addressOrName, position, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n address: this._getAddress(addressOrName),\n blockTag: this._getBlockTag(blockTag),\n position: Promise.resolve(position).then((p) => hexValue(p))\n });\n const result = yield this.perform(\"getStorageAt\", params);\n try {\n return hexlify(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"getStorageAt\",\n params, result, error\n });\n }\n });\n }\n // This should be called by any subclass wrapping a TransactionResponse\n _wrapTransaction(tx, hash, startBlock) {\n if (hash != null && hexDataLength(hash) !== 32) {\n throw new Error(\"invalid response - sendTransaction\");\n }\n const result = tx;\n // Check the hash we expect is the same as the hash the server reported\n if (hash != null && tx.hash !== hash) {\n logger.throwError(\"Transaction hash mismatch from Provider.sendTransaction.\", Logger.errors.UNKNOWN_ERROR, { expectedHash: tx.hash, returnedHash: hash });\n }\n result.wait = (confirms, timeout) => __awaiter(this, void 0, void 0, function* () {\n if (confirms == null) {\n confirms = 1;\n }\n if (timeout == null) {\n timeout = 0;\n }\n // Get the details to detect replacement\n let replacement = undefined;\n if (confirms !== 0 && startBlock != null) {\n replacement = {\n data: tx.data,\n from: tx.from,\n nonce: tx.nonce,\n to: tx.to,\n value: tx.value,\n startBlock\n };\n }\n const receipt = yield this._waitForTransaction(tx.hash, confirms, timeout, replacement);\n if (receipt == null && confirms === 0) {\n return null;\n }\n // No longer pending, allow the polling loop to garbage collect this\n this._emitted[\"t:\" + tx.hash] = receipt.blockNumber;\n if (receipt.status === 0) {\n logger.throwError(\"transaction failed\", Logger.errors.CALL_EXCEPTION, {\n transactionHash: tx.hash,\n transaction: tx,\n receipt: receipt\n });\n }\n return receipt;\n });\n return result;\n }\n sendTransaction(signedTransaction) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const hexTx = yield Promise.resolve(signedTransaction).then(t => hexlify(t));\n const tx = this.formatter.transaction(signedTransaction);\n if (tx.confirmations == null) {\n tx.confirmations = 0;\n }\n const blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n try {\n const hash = yield this.perform(\"sendTransaction\", { signedTransaction: hexTx });\n return this._wrapTransaction(tx, hash, blockNumber);\n }\n catch (error) {\n error.transaction = tx;\n error.transactionHash = tx.hash;\n throw error;\n }\n });\n }\n _getTransactionRequest(transaction) {\n return __awaiter(this, void 0, void 0, function* () {\n const values = yield transaction;\n const tx = {};\n [\"from\", \"to\"].forEach((key) => {\n if (values[key] == null) {\n return;\n }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? this._getAddress(v) : null));\n });\n [\"gasLimit\", \"gasPrice\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"value\"].forEach((key) => {\n if (values[key] == null) {\n return;\n }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? BigNumber.from(v) : null));\n });\n [\"type\"].forEach((key) => {\n if (values[key] == null) {\n return;\n }\n tx[key] = Promise.resolve(values[key]).then((v) => ((v != null) ? v : null));\n });\n if (values.accessList) {\n tx.accessList = this.formatter.accessList(values.accessList);\n }\n [\"data\"].forEach((key) => {\n if (values[key] == null) {\n return;\n }\n tx[key] = Promise.resolve(values[key]).then((v) => (v ? hexlify(v) : null));\n });\n return this.formatter.transactionRequest(yield resolveProperties(tx));\n });\n }\n _getFilter(filter) {\n return __awaiter(this, void 0, void 0, function* () {\n filter = yield filter;\n const result = {};\n if (filter.address != null) {\n result.address = this._getAddress(filter.address);\n }\n [\"blockHash\", \"topics\"].forEach((key) => {\n if (filter[key] == null) {\n return;\n }\n result[key] = filter[key];\n });\n [\"fromBlock\", \"toBlock\"].forEach((key) => {\n if (filter[key] == null) {\n return;\n }\n result[key] = this._getBlockTag(filter[key]);\n });\n return this.formatter.filter(yield resolveProperties(result));\n });\n }\n call(transaction, blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n transaction: this._getTransactionRequest(transaction),\n blockTag: this._getBlockTag(blockTag)\n });\n const result = yield this.perform(\"call\", params);\n try {\n return hexlify(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"call\",\n params, result, error\n });\n }\n });\n }\n estimateGas(transaction) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({\n transaction: this._getTransactionRequest(transaction)\n });\n const result = yield this.perform(\"estimateGas\", params);\n try {\n return BigNumber.from(result);\n }\n catch (error) {\n return logger.throwError(\"bad result from backend\", Logger.errors.SERVER_ERROR, {\n method: \"estimateGas\",\n params, result, error\n });\n }\n });\n }\n _getAddress(addressOrName) {\n return __awaiter(this, void 0, void 0, function* () {\n addressOrName = yield addressOrName;\n if (typeof (addressOrName) !== \"string\") {\n logger.throwArgumentError(\"invalid address or ENS name\", \"name\", addressOrName);\n }\n const address = yield this.resolveName(addressOrName);\n if (address == null) {\n logger.throwError(\"ENS name not configured\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: `resolveName(${JSON.stringify(addressOrName)})`\n });\n }\n return address;\n });\n }\n _getBlock(blockHashOrBlockTag, includeTransactions) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n blockHashOrBlockTag = yield blockHashOrBlockTag;\n // If blockTag is a number (not \"latest\", etc), this is the block number\n let blockNumber = -128;\n const params = {\n includeTransactions: !!includeTransactions\n };\n if (isHexString(blockHashOrBlockTag, 32)) {\n params.blockHash = blockHashOrBlockTag;\n }\n else {\n try {\n params.blockTag = yield this._getBlockTag(blockHashOrBlockTag);\n if (isHexString(params.blockTag)) {\n blockNumber = parseInt(params.blockTag.substring(2), 16);\n }\n }\n catch (error) {\n logger.throwArgumentError(\"invalid block hash or block tag\", \"blockHashOrBlockTag\", blockHashOrBlockTag);\n }\n }\n return poll(() => __awaiter(this, void 0, void 0, function* () {\n const block = yield this.perform(\"getBlock\", params);\n // Block was not found\n if (block == null) {\n // For blockhashes, if we didn't say it existed, that blockhash may\n // not exist. If we did see it though, perhaps from a log, we know\n // it exists, and this node is just not caught up yet.\n if (params.blockHash != null) {\n if (this._emitted[\"b:\" + params.blockHash] == null) {\n return null;\n }\n }\n // For block tags, if we are asking for a future block, we return null\n if (params.blockTag != null) {\n if (blockNumber > this._emitted.block) {\n return null;\n }\n }\n // Retry on the next block\n return undefined;\n }\n // Add transactions\n if (includeTransactions) {\n let blockNumber = null;\n for (let i = 0; i < block.transactions.length; i++) {\n const tx = block.transactions[i];\n if (tx.blockNumber == null) {\n tx.confirmations = 0;\n }\n else if (tx.confirmations == null) {\n if (blockNumber == null) {\n blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n }\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - tx.blockNumber) + 1;\n if (confirmations <= 0) {\n confirmations = 1;\n }\n tx.confirmations = confirmations;\n }\n }\n const blockWithTxs = this.formatter.blockWithTransactions(block);\n blockWithTxs.transactions = blockWithTxs.transactions.map((tx) => this._wrapTransaction(tx));\n return blockWithTxs;\n }\n return this.formatter.block(block);\n }), { oncePoll: this });\n });\n }\n getBlock(blockHashOrBlockTag) {\n return (this._getBlock(blockHashOrBlockTag, false));\n }\n getBlockWithTransactions(blockHashOrBlockTag) {\n return (this._getBlock(blockHashOrBlockTag, true));\n }\n getTransaction(transactionHash) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n transactionHash = yield transactionHash;\n const params = { transactionHash: this.formatter.hash(transactionHash, true) };\n return poll(() => __awaiter(this, void 0, void 0, function* () {\n const result = yield this.perform(\"getTransaction\", params);\n if (result == null) {\n if (this._emitted[\"t:\" + transactionHash] == null) {\n return null;\n }\n return undefined;\n }\n const tx = this.formatter.transactionResponse(result);\n if (tx.blockNumber == null) {\n tx.confirmations = 0;\n }\n else if (tx.confirmations == null) {\n const blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - tx.blockNumber) + 1;\n if (confirmations <= 0) {\n confirmations = 1;\n }\n tx.confirmations = confirmations;\n }\n return this._wrapTransaction(tx);\n }), { oncePoll: this });\n });\n }\n getTransactionReceipt(transactionHash) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n transactionHash = yield transactionHash;\n const params = { transactionHash: this.formatter.hash(transactionHash, true) };\n return poll(() => __awaiter(this, void 0, void 0, function* () {\n const result = yield this.perform(\"getTransactionReceipt\", params);\n if (result == null) {\n if (this._emitted[\"t:\" + transactionHash] == null) {\n return null;\n }\n return undefined;\n }\n // \"geth-etc\" returns receipts before they are ready\n if (result.blockHash == null) {\n return undefined;\n }\n const receipt = this.formatter.receipt(result);\n if (receipt.blockNumber == null) {\n receipt.confirmations = 0;\n }\n else if (receipt.confirmations == null) {\n const blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n // Add the confirmations using the fast block number (pessimistic)\n let confirmations = (blockNumber - receipt.blockNumber) + 1;\n if (confirmations <= 0) {\n confirmations = 1;\n }\n receipt.confirmations = confirmations;\n }\n return receipt;\n }), { oncePoll: this });\n });\n }\n getLogs(filter) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n const params = yield resolveProperties({ filter: this._getFilter(filter) });\n const logs = yield this.perform(\"getLogs\", params);\n logs.forEach((log) => {\n if (log.removed == null) {\n log.removed = false;\n }\n });\n return Formatter.arrayOf(this.formatter.filterLog.bind(this.formatter))(logs);\n });\n }\n getEtherPrice() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.getNetwork();\n return this.perform(\"getEtherPrice\", {});\n });\n }\n _getBlockTag(blockTag) {\n return __awaiter(this, void 0, void 0, function* () {\n blockTag = yield blockTag;\n if (typeof (blockTag) === \"number\" && blockTag < 0) {\n if (blockTag % 1) {\n logger.throwArgumentError(\"invalid BlockTag\", \"blockTag\", blockTag);\n }\n let blockNumber = yield this._getInternalBlockNumber(100 + 2 * this.pollingInterval);\n blockNumber += blockTag;\n if (blockNumber < 0) {\n blockNumber = 0;\n }\n return this.formatter.blockTag(blockNumber);\n }\n return this.formatter.blockTag(blockTag);\n });\n }\n getResolver(name) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const address = yield this._getResolver(name);\n if (address == null) {\n return null;\n }\n return new Resolver(this, address, name);\n }\n catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) {\n return null;\n }\n return null;\n }\n });\n }\n _getResolver(name) {\n return __awaiter(this, void 0, void 0, function* () {\n // Get the resolver from the blockchain\n const network = yield this.getNetwork();\n // No ENS...\n if (!network.ensAddress) {\n logger.throwError(\"network does not support ENS\", Logger.errors.UNSUPPORTED_OPERATION, { operation: \"ENS\", network: network.name });\n }\n // keccak256(\"resolver(bytes32)\")\n const transaction = {\n to: network.ensAddress,\n data: (\"0x0178b8bf\" + namehash(name).substring(2))\n };\n try {\n return this.formatter.callAddress(yield this.call(transaction));\n }\n catch (error) {\n if (error.code === Logger.errors.CALL_EXCEPTION) {\n return null;\n }\n throw error;\n }\n });\n }\n resolveName(name) {\n return __awaiter(this, void 0, void 0, function* () {\n name = yield name;\n // If it is already an address, nothing to resolve\n try {\n return Promise.resolve(this.formatter.address(name));\n }\n catch (error) {\n // If is is a hexstring, the address is bad (See #694)\n if (isHexString(name)) {\n throw error;\n }\n }\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name\", \"name\", name);\n }\n // Get the addr from the resovler\n const resolver = yield this.getResolver(name);\n if (!resolver) {\n return null;\n }\n return yield resolver.getAddress();\n });\n }\n lookupAddress(address) {\n return __awaiter(this, void 0, void 0, function* () {\n address = yield address;\n address = this.formatter.address(address);\n const reverseName = address.substring(2).toLowerCase() + \".addr.reverse\";\n const resolverAddress = yield this._getResolver(reverseName);\n if (!resolverAddress) {\n return null;\n }\n // keccak(\"name(bytes32)\")\n let bytes = arrayify(yield this.call({\n to: resolverAddress,\n data: (\"0x691f3431\" + namehash(reverseName).substring(2))\n }));\n // Strip off the dynamic string pointer (0x20)\n if (bytes.length < 32 || !BigNumber.from(bytes.slice(0, 32)).eq(32)) {\n return null;\n }\n bytes = bytes.slice(32);\n // Not a length-prefixed string\n if (bytes.length < 32) {\n return null;\n }\n // Get the length of the string (from the length-prefix)\n const length = BigNumber.from(bytes.slice(0, 32)).toNumber();\n bytes = bytes.slice(32);\n // Length longer than available data\n if (length > bytes.length) {\n return null;\n }\n const name = toUtf8String(bytes.slice(0, length));\n // Make sure the reverse record matches the foward record\n const addr = yield this.resolveName(name);\n if (addr != address) {\n return null;\n }\n return name;\n });\n }\n getAvatar(nameOrAddress) {\n return __awaiter(this, void 0, void 0, function* () {\n let resolver = null;\n if (isHexString(nameOrAddress)) {\n // Address; reverse lookup\n const address = this.formatter.address(nameOrAddress);\n const reverseName = address.substring(2).toLowerCase() + \".addr.reverse\";\n const resolverAddress = yield this._getResolver(reverseName);\n if (!resolverAddress) {\n return null;\n }\n resolver = new Resolver(this, resolverAddress, \"_\", address);\n }\n else {\n // ENS name; forward lookup\n resolver = yield this.getResolver(nameOrAddress);\n if (!resolver) {\n return null;\n }\n }\n const avatar = yield resolver.getAvatar();\n if (avatar == null) {\n return null;\n }\n return avatar.url;\n });\n }\n perform(method, params) {\n return logger.throwError(method + \" not implemented\", Logger.errors.NOT_IMPLEMENTED, { operation: method });\n }\n _startEvent(event) {\n this.polling = (this._events.filter((e) => e.pollable()).length > 0);\n }\n _stopEvent(event) {\n this.polling = (this._events.filter((e) => e.pollable()).length > 0);\n }\n _addEventListener(eventName, listener, once) {\n const event = new Event(getEventTag(eventName), listener, once);\n this._events.push(event);\n this._startEvent(event);\n return this;\n }\n on(eventName, listener) {\n return this._addEventListener(eventName, listener, false);\n }\n once(eventName, listener) {\n return this._addEventListener(eventName, listener, true);\n }\n emit(eventName, ...args) {\n let result = false;\n let stopped = [];\n let eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag) {\n return true;\n }\n setTimeout(() => {\n event.listener.apply(this, args);\n }, 0);\n result = true;\n if (event.once) {\n stopped.push(event);\n return false;\n }\n return true;\n });\n stopped.forEach((event) => { this._stopEvent(event); });\n return result;\n }\n listenerCount(eventName) {\n if (!eventName) {\n return this._events.length;\n }\n let eventTag = getEventTag(eventName);\n return this._events.filter((event) => {\n return (event.tag === eventTag);\n }).length;\n }\n listeners(eventName) {\n if (eventName == null) {\n return this._events.map((event) => event.listener);\n }\n let eventTag = getEventTag(eventName);\n return this._events\n .filter((event) => (event.tag === eventTag))\n .map((event) => event.listener);\n }\n off(eventName, listener) {\n if (listener == null) {\n return this.removeAllListeners(eventName);\n }\n const stopped = [];\n let found = false;\n let eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag || event.listener != listener) {\n return true;\n }\n if (found) {\n return true;\n }\n found = true;\n stopped.push(event);\n return false;\n });\n stopped.forEach((event) => { this._stopEvent(event); });\n return this;\n }\n removeAllListeners(eventName) {\n let stopped = [];\n if (eventName == null) {\n stopped = this._events;\n this._events = [];\n }\n else {\n const eventTag = getEventTag(eventName);\n this._events = this._events.filter((event) => {\n if (event.tag !== eventTag) {\n return true;\n }\n stopped.push(event);\n return false;\n });\n }\n stopped.forEach((event) => { this._stopEvent(event); });\n return this;\n }\n}\n//# sourceMappingURL=base-provider.js.map","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport defaultLocale from '../locale/default';\n\nvar runtimeLocale = _extends({}, defaultLocale.Modal);\n\nexport function changeConfirmLocale(newLocale) {\n if (newLocale) {\n runtimeLocale = _extends(_extends({}, runtimeLocale), newLocale);\n } else {\n runtimeLocale = _extends({}, defaultLocale.Modal);\n }\n}\nexport function getConfirmLocale() {\n return runtimeLocale;\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport shallowEqual from 'shallowequal';\nexport var MenuContext = /*#__PURE__*/React.createContext(null);\n\nfunction mergeProps(origin, target) {\n var clone = _objectSpread({}, origin);\n\n Object.keys(target).forEach(function (key) {\n var value = target[key];\n\n if (value !== undefined) {\n clone[key] = value;\n }\n });\n return clone;\n}\n\nexport default function InheritableContextProvider(_ref) {\n var children = _ref.children,\n locked = _ref.locked,\n restProps = _objectWithoutProperties(_ref, [\"children\", \"locked\"]);\n\n var context = React.useContext(MenuContext);\n var inheritableContext = useMemo(function () {\n return mergeProps(context, restProps);\n }, [context, restProps], function (prev, next) {\n return !locked && (prev[0] !== next[0] || !shallowEqual(prev[1], next[1]));\n });\n return /*#__PURE__*/React.createElement(MenuContext.Provider, {\n value: inheritableContext\n }, children);\n}","import * as React from 'react';\nimport { MenuContext } from '../context/MenuContext';\nexport default function useActive(eventKey, disabled, onMouseEnter, onMouseLeave) {\n var _React$useContext = React.useContext(MenuContext),\n activeKey = _React$useContext.activeKey,\n onActive = _React$useContext.onActive,\n onInactive = _React$useContext.onInactive;\n\n var ret = {\n active: activeKey === eventKey\n }; // Skip when disabled\n\n if (!disabled) {\n ret.onMouseEnter = function (domEvent) {\n onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter({\n key: eventKey,\n domEvent: domEvent\n });\n onActive(eventKey);\n };\n\n ret.onMouseLeave = function (domEvent) {\n onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave({\n key: eventKey,\n domEvent: domEvent\n });\n onInactive(eventKey);\n };\n }\n\n return ret;\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport warning from \"rc-util/es/warning\";\n/**\n * `onClick` event return `info.item` which point to react node directly.\n * We should warning this since it will not work on FC.\n */\n\nexport function warnItemProp(_ref) {\n var item = _ref.item,\n restInfo = _objectWithoutProperties(_ref, [\"item\"]);\n\n Object.defineProperty(restInfo, 'item', {\n get: function get() {\n warning(false, '`info.item` is deprecated since we will move to function component that not provides React Node instance in future.');\n return item;\n }\n });\n return restInfo;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nexport default function Icon(_ref) {\n var icon = _ref.icon,\n props = _ref.props,\n children = _ref.children;\n var iconNode;\n\n if (typeof icon === 'function') {\n iconNode = /*#__PURE__*/React.createElement(icon, _objectSpread({}, props));\n } else {\n // Compatible for origin definition\n iconNode = icon;\n }\n\n return iconNode || children || null;\n}","import * as React from 'react';\nimport { MenuContext } from '../context/MenuContext';\nexport default function useDirectionStyle(level) {\n var _React$useContext = React.useContext(MenuContext),\n mode = _React$useContext.mode,\n rtl = _React$useContext.rtl,\n inlineIndent = _React$useContext.inlineIndent;\n\n if (mode !== 'inline') {\n return null;\n }\n\n var len = level;\n return rtl ? {\n paddingRight: len * inlineIndent\n } : {\n paddingLeft: len * inlineIndent\n };\n}","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nvar EmptyList = [];\nexport var PathRegisterContext = /*#__PURE__*/React.createContext(null);\nexport function useMeasure() {\n return React.useContext(PathRegisterContext);\n} // ========================= Path Tracker ==========================\n\nexport var PathTrackerContext = /*#__PURE__*/React.createContext(EmptyList);\nexport function useFullPath(eventKey) {\n var parentKeyPath = React.useContext(PathTrackerContext);\n return React.useMemo(function () {\n return eventKey !== undefined ? [].concat(_toConsumableArray(parentKeyPath), [eventKey]) : parentKeyPath;\n }, [parentKeyPath, eventKey]);\n}\nexport var PathUserContext = /*#__PURE__*/React.createContext(null);","import * as React from 'react';\nexport var IdContext = /*#__PURE__*/React.createContext(null);\nexport function getMenuId(uuid, eventKey) {\n if (uuid === undefined) {\n return null;\n }\n\n return \"\".concat(uuid, \"-\").concat(eventKey);\n}\n/**\n * Get `data-menu-id`\n */\n\nexport function useMenuId(eventKey) {\n var id = React.useContext(IdContext);\n return getMenuId(id, eventKey);\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport Overflow from 'rc-overflow';\nimport warning from \"rc-util/es/warning\";\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport omit from \"rc-util/es/omit\";\nimport { MenuContext } from './context/MenuContext';\nimport useActive from './hooks/useActive';\nimport { warnItemProp } from './utils/warnUtil';\nimport Icon from './Icon';\nimport useDirectionStyle from './hooks/useDirectionStyle';\nimport { useFullPath, useMeasure } from './context/PathContext';\nimport { useMenuId } from './context/IdContext'; // Since Menu event provide the `info.item` which point to the MenuItem node instance.\n// We have to use class component here.\n// This should be removed from doc & api in future.\n\nvar LegacyMenuItem = /*#__PURE__*/function (_React$Component) {\n _inherits(LegacyMenuItem, _React$Component);\n\n var _super = _createSuper(LegacyMenuItem);\n\n function LegacyMenuItem() {\n _classCallCheck(this, LegacyMenuItem);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(LegacyMenuItem, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n title = _this$props.title,\n attribute = _this$props.attribute,\n elementRef = _this$props.elementRef,\n restProps = _objectWithoutProperties(_this$props, [\"title\", \"attribute\", \"elementRef\"]);\n\n var passedProps = omit(restProps, ['eventKey']);\n warning(!attribute, '`attribute` of Menu.Item is deprecated. Please pass attribute directly.');\n return /*#__PURE__*/React.createElement(Overflow.Item, _extends({}, attribute, {\n title: typeof title === 'string' ? title : undefined\n }, passedProps, {\n ref: elementRef\n }));\n }\n }]);\n\n return LegacyMenuItem;\n}(React.Component);\n/**\n * Real Menu Item component\n */\n\n\nvar InternalMenuItem = function InternalMenuItem(props) {\n var _classNames;\n\n var style = props.style,\n className = props.className,\n eventKey = props.eventKey,\n warnKey = props.warnKey,\n disabled = props.disabled,\n itemIcon = props.itemIcon,\n children = props.children,\n role = props.role,\n onMouseEnter = props.onMouseEnter,\n onMouseLeave = props.onMouseLeave,\n onClick = props.onClick,\n onKeyDown = props.onKeyDown,\n onFocus = props.onFocus,\n restProps = _objectWithoutProperties(props, [\"style\", \"className\", \"eventKey\", \"warnKey\", \"disabled\", \"itemIcon\", \"children\", \"role\", \"onMouseEnter\", \"onMouseLeave\", \"onClick\", \"onKeyDown\", \"onFocus\"]);\n\n var domDataId = useMenuId(eventKey);\n\n var _React$useContext = React.useContext(MenuContext),\n prefixCls = _React$useContext.prefixCls,\n onItemClick = _React$useContext.onItemClick,\n contextDisabled = _React$useContext.disabled,\n overflowDisabled = _React$useContext.overflowDisabled,\n contextItemIcon = _React$useContext.itemIcon,\n selectedKeys = _React$useContext.selectedKeys,\n onActive = _React$useContext.onActive;\n\n var itemCls = \"\".concat(prefixCls, \"-item\");\n var legacyMenuItemRef = React.useRef();\n var elementRef = React.useRef();\n var mergedDisabled = contextDisabled || disabled;\n var connectedKeys = useFullPath(eventKey); // ================================ Warn ================================\n\n if (process.env.NODE_ENV !== 'production' && warnKey) {\n warning(false, 'MenuItem should not leave undefined `key`.');\n } // ============================= Info =============================\n\n\n var getEventInfo = function getEventInfo(e) {\n return {\n key: eventKey,\n // Note: For legacy code is reversed which not like other antd component\n keyPath: _toConsumableArray(connectedKeys).reverse(),\n item: legacyMenuItemRef.current,\n domEvent: e\n };\n }; // ============================= Icon =============================\n\n\n var mergedItemIcon = itemIcon || contextItemIcon; // ============================ Active ============================\n\n var _useActive = useActive(eventKey, mergedDisabled, onMouseEnter, onMouseLeave),\n active = _useActive.active,\n activeProps = _objectWithoutProperties(_useActive, [\"active\"]); // ============================ Select ============================\n\n\n var selected = selectedKeys.includes(eventKey); // ======================== DirectionStyle ========================\n\n var directionStyle = useDirectionStyle(connectedKeys.length); // ============================ Events ============================\n\n var onInternalClick = function onInternalClick(e) {\n if (mergedDisabled) {\n return;\n }\n\n var info = getEventInfo(e);\n onClick === null || onClick === void 0 ? void 0 : onClick(warnItemProp(info));\n onItemClick(info);\n };\n\n var onInternalKeyDown = function onInternalKeyDown(e) {\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);\n\n if (e.which === KeyCode.ENTER) {\n var info = getEventInfo(e); // Legacy. Key will also trigger click event\n\n onClick === null || onClick === void 0 ? void 0 : onClick(warnItemProp(info));\n onItemClick(info);\n }\n };\n /**\n * Used for accessibility. Helper will focus element without key board.\n * We should manually trigger an active\n */\n\n\n var onInternalFocus = function onInternalFocus(e) {\n onActive(eventKey);\n onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);\n }; // ============================ Render ============================\n\n\n var optionRoleProps = {};\n\n if (props.role === 'option') {\n optionRoleProps['aria-selected'] = selected;\n }\n\n return /*#__PURE__*/React.createElement(LegacyMenuItem, _extends({\n ref: legacyMenuItemRef,\n elementRef: elementRef,\n role: role === null ? 'none' : role || 'menuitem',\n tabIndex: disabled ? null : -1,\n \"data-menu-id\": overflowDisabled && domDataId ? null : domDataId\n }, restProps, activeProps, optionRoleProps, {\n component: \"li\",\n \"aria-disabled\": disabled,\n style: _objectSpread(_objectSpread({}, directionStyle), style),\n className: classNames(itemCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(itemCls, \"-active\"), active), _defineProperty(_classNames, \"\".concat(itemCls, \"-selected\"), selected), _defineProperty(_classNames, \"\".concat(itemCls, \"-disabled\"), mergedDisabled), _classNames), className),\n onClick: onInternalClick,\n onKeyDown: onInternalKeyDown,\n onFocus: onInternalFocus\n }), children, /*#__PURE__*/React.createElement(Icon, {\n props: _objectSpread(_objectSpread({}, props), {}, {\n isSelected: selected\n }),\n icon: mergedItemIcon\n }));\n};\n\nfunction MenuItem(props) {\n var eventKey = props.eventKey; // ==================== Record KeyPath ====================\n\n var measure = useMeasure();\n var connectedKeyPath = useFullPath(eventKey); // eslint-disable-next-line consistent-return\n\n React.useEffect(function () {\n if (measure) {\n measure.registerPath(eventKey, connectedKeyPath);\n return function () {\n measure.unregisterPath(eventKey, connectedKeyPath);\n };\n }\n }, [connectedKeyPath]);\n\n if (measure) {\n return null;\n } // ======================== Render ========================\n\n\n return /*#__PURE__*/React.createElement(InternalMenuItem, props);\n}\n\nexport default MenuItem;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport toArray from \"rc-util/es/Children/toArray\";\nexport function parseChildren(children, keyPath) {\n return toArray(children).map(function (child, index) {\n if ( /*#__PURE__*/React.isValidElement(child)) {\n var _child$props$eventKey, _child$props;\n\n var key = child.key;\n var eventKey = (_child$props$eventKey = (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.eventKey) !== null && _child$props$eventKey !== void 0 ? _child$props$eventKey : key;\n var emptyKey = eventKey === null || eventKey === undefined;\n\n if (emptyKey) {\n eventKey = \"tmp_key-\".concat([].concat(_toConsumableArray(keyPath), [index]).join('-'));\n }\n\n var cloneProps = {\n key: eventKey,\n eventKey: eventKey\n };\n\n if (process.env.NODE_ENV !== 'production' && emptyKey) {\n cloneProps.warnKey = true;\n }\n\n return /*#__PURE__*/React.cloneElement(child, cloneProps);\n }\n\n return child;\n });\n}","import * as React from 'react';\n/**\n * Cache callback function that always return same ref instead.\n * This is used for context optimization.\n */\n\nexport default function useMemoCallback(func) {\n var funRef = React.useRef(func);\n funRef.current = func;\n var callback = React.useCallback(function () {\n var _funRef$current;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (_funRef$current = funRef.current) === null || _funRef$current === void 0 ? void 0 : _funRef$current.call.apply(_funRef$current, [funRef].concat(args));\n }, []);\n return func ? callback : undefined;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { MenuContext } from '../context/MenuContext';\n\nvar InternalSubMenuList = function InternalSubMenuList(_ref, ref) {\n var className = _ref.className,\n children = _ref.children,\n restProps = _objectWithoutProperties(_ref, [\"className\", \"children\"]);\n\n var _React$useContext = React.useContext(MenuContext),\n prefixCls = _React$useContext.prefixCls,\n mode = _React$useContext.mode;\n\n return /*#__PURE__*/React.createElement(\"ul\", _extends({\n className: classNames(prefixCls, \"\".concat(prefixCls, \"-sub\"), \"\".concat(prefixCls, \"-\").concat(mode === 'inline' ? 'inline' : 'vertical'), className)\n }, restProps, {\n \"data-menu-list\": true,\n ref: ref\n }), children);\n};\n\nvar SubMenuList = /*#__PURE__*/React.forwardRef(InternalSubMenuList);\nSubMenuList.displayName = 'SubMenuList';\nexport default SubMenuList;","var autoAdjustOverflow = {\n adjustX: 1,\n adjustY: 1\n};\nexport var placements = {\n topLeft: {\n points: ['bl', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [0, -7]\n },\n bottomLeft: {\n points: ['tl', 'bl'],\n overflow: autoAdjustOverflow,\n offset: [0, 7]\n },\n leftTop: {\n points: ['tr', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0]\n },\n rightTop: {\n points: ['tl', 'tr'],\n overflow: autoAdjustOverflow,\n offset: [4, 0]\n }\n};\nexport var placementsRtl = {\n topLeft: {\n points: ['bl', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [0, -7]\n },\n bottomLeft: {\n points: ['tl', 'bl'],\n overflow: autoAdjustOverflow,\n offset: [0, 7]\n },\n rightTop: {\n points: ['tr', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0]\n },\n leftTop: {\n points: ['tl', 'tr'],\n overflow: autoAdjustOverflow,\n offset: [4, 0]\n }\n};\nexport default placements;","export function getMotion(mode, motion, defaultMotions) {\n if (motion) {\n return motion;\n }\n\n if (defaultMotions) {\n return defaultMotions[mode] || defaultMotions.other;\n }\n\n return undefined;\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport Trigger from 'rc-trigger';\nimport classNames from 'classnames';\nimport raf from \"rc-util/es/raf\";\nimport { MenuContext } from '../context/MenuContext';\nimport { placements, placementsRtl } from '../placements';\nimport { getMotion } from '../utils/motionUtil';\nvar popupPlacementMap = {\n horizontal: 'bottomLeft',\n vertical: 'rightTop',\n 'vertical-left': 'rightTop',\n 'vertical-right': 'leftTop'\n};\nexport default function PopupTrigger(_ref) {\n var prefixCls = _ref.prefixCls,\n visible = _ref.visible,\n children = _ref.children,\n popup = _ref.popup,\n popupClassName = _ref.popupClassName,\n popupOffset = _ref.popupOffset,\n disabled = _ref.disabled,\n mode = _ref.mode,\n onVisibleChange = _ref.onVisibleChange;\n\n var _React$useContext = React.useContext(MenuContext),\n getPopupContainer = _React$useContext.getPopupContainer,\n rtl = _React$useContext.rtl,\n subMenuOpenDelay = _React$useContext.subMenuOpenDelay,\n subMenuCloseDelay = _React$useContext.subMenuCloseDelay,\n builtinPlacements = _React$useContext.builtinPlacements,\n triggerSubMenuAction = _React$useContext.triggerSubMenuAction,\n forceSubMenuRender = _React$useContext.forceSubMenuRender,\n motion = _React$useContext.motion,\n defaultMotions = _React$useContext.defaultMotions;\n\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n innerVisible = _React$useState2[0],\n setInnerVisible = _React$useState2[1];\n\n var placement = rtl ? _objectSpread(_objectSpread({}, placementsRtl), builtinPlacements) : _objectSpread(_objectSpread({}, placements), builtinPlacements);\n var popupPlacement = popupPlacementMap[mode];\n var targetMotion = getMotion(mode, motion, defaultMotions);\n\n var mergedMotion = _objectSpread(_objectSpread({}, targetMotion), {}, {\n leavedClassName: \"\".concat(prefixCls, \"-hidden\"),\n removeOnLeave: false,\n motionAppear: true\n }); // Delay to change visible\n\n\n var visibleRef = React.useRef();\n React.useEffect(function () {\n visibleRef.current = raf(function () {\n setInnerVisible(visible);\n });\n return function () {\n raf.cancel(visibleRef.current);\n };\n }, [visible]);\n return /*#__PURE__*/React.createElement(Trigger, {\n prefixCls: prefixCls,\n popupClassName: classNames(\"\".concat(prefixCls, \"-popup\"), _defineProperty({}, \"\".concat(prefixCls, \"-rtl\"), rtl), popupClassName),\n stretch: mode === 'horizontal' ? 'minWidth' : null,\n getPopupContainer: getPopupContainer,\n builtinPlacements: placement,\n popupPlacement: popupPlacement,\n popupVisible: innerVisible,\n popup: popup,\n popupAlign: popupOffset && {\n offset: popupOffset\n },\n action: disabled ? [] : [triggerSubMenuAction],\n mouseEnterDelay: subMenuOpenDelay,\n mouseLeaveDelay: subMenuCloseDelay,\n onPopupVisibleChange: onVisibleChange,\n forceRender: forceSubMenuRender,\n popupMotion: mergedMotion\n }, children);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport CSSMotion from 'rc-motion';\nimport { getMotion } from '../utils/motionUtil';\nimport MenuContextProvider, { MenuContext } from '../context/MenuContext';\nimport SubMenuList from './SubMenuList';\nexport default function InlineSubMenuList(_ref) {\n var id = _ref.id,\n open = _ref.open,\n keyPath = _ref.keyPath,\n children = _ref.children;\n var fixedMode = 'inline';\n\n var _React$useContext = React.useContext(MenuContext),\n prefixCls = _React$useContext.prefixCls,\n forceSubMenuRender = _React$useContext.forceSubMenuRender,\n motion = _React$useContext.motion,\n defaultMotions = _React$useContext.defaultMotions,\n mode = _React$useContext.mode; // Always use latest mode check\n\n\n var sameModeRef = React.useRef(false);\n sameModeRef.current = mode === fixedMode; // We record `destroy` mark here since when mode change from `inline` to others.\n // The inline list should remove when motion end.\n\n var _React$useState = React.useState(!sameModeRef.current),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n destroy = _React$useState2[0],\n setDestroy = _React$useState2[1];\n\n var mergedOpen = sameModeRef.current ? open : false; // ================================= Effect =================================\n // Reset destroy state when mode change back\n\n React.useEffect(function () {\n if (sameModeRef.current) {\n setDestroy(false);\n }\n }, [mode]); // ================================= Render =================================\n\n var mergedMotion = _objectSpread({}, getMotion(fixedMode, motion, defaultMotions)); // No need appear since nest inlineCollapse changed\n\n\n if (keyPath.length > 1) {\n mergedMotion.motionAppear = false;\n } // Hide inline list when mode changed and motion end\n\n\n var originOnVisibleChanged = mergedMotion.onVisibleChanged;\n\n mergedMotion.onVisibleChanged = function (newVisible) {\n if (!sameModeRef.current && !newVisible) {\n setDestroy(true);\n }\n\n return originOnVisibleChanged === null || originOnVisibleChanged === void 0 ? void 0 : originOnVisibleChanged(newVisible);\n };\n\n if (destroy) {\n return null;\n }\n\n return /*#__PURE__*/React.createElement(MenuContextProvider, {\n mode: fixedMode,\n locked: !sameModeRef.current\n }, /*#__PURE__*/React.createElement(CSSMotion, _extends({\n visible: mergedOpen\n }, mergedMotion, {\n forceRender: forceSubMenuRender,\n removeOnLeave: false,\n leavedClassName: \"\".concat(prefixCls, \"-hidden\")\n }), function (_ref2) {\n var motionClassName = _ref2.className,\n motionStyle = _ref2.style;\n return /*#__PURE__*/React.createElement(SubMenuList, {\n id: id,\n className: motionClassName,\n style: motionStyle\n }, children);\n }));\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport Overflow from 'rc-overflow';\nimport warning from \"rc-util/es/warning\";\nimport SubMenuList from './SubMenuList';\nimport { parseChildren } from '../utils/nodeUtil';\nimport MenuContextProvider, { MenuContext } from '../context/MenuContext';\nimport useMemoCallback from '../hooks/useMemoCallback';\nimport PopupTrigger from './PopupTrigger';\nimport Icon from '../Icon';\nimport useActive from '../hooks/useActive';\nimport { warnItemProp } from '../utils/warnUtil';\nimport useDirectionStyle from '../hooks/useDirectionStyle';\nimport InlineSubMenuList from './InlineSubMenuList';\nimport { PathTrackerContext, PathUserContext, useFullPath, useMeasure } from '../context/PathContext';\nimport { useMenuId } from '../context/IdContext';\n\nvar InternalSubMenu = function InternalSubMenu(props) {\n var _classNames;\n\n var style = props.style,\n className = props.className,\n title = props.title,\n eventKey = props.eventKey,\n warnKey = props.warnKey,\n disabled = props.disabled,\n internalPopupClose = props.internalPopupClose,\n children = props.children,\n itemIcon = props.itemIcon,\n expandIcon = props.expandIcon,\n popupClassName = props.popupClassName,\n popupOffset = props.popupOffset,\n onClick = props.onClick,\n onMouseEnter = props.onMouseEnter,\n onMouseLeave = props.onMouseLeave,\n onTitleClick = props.onTitleClick,\n onTitleMouseEnter = props.onTitleMouseEnter,\n onTitleMouseLeave = props.onTitleMouseLeave,\n restProps = _objectWithoutProperties(props, [\"style\", \"className\", \"title\", \"eventKey\", \"warnKey\", \"disabled\", \"internalPopupClose\", \"children\", \"itemIcon\", \"expandIcon\", \"popupClassName\", \"popupOffset\", \"onClick\", \"onMouseEnter\", \"onMouseLeave\", \"onTitleClick\", \"onTitleMouseEnter\", \"onTitleMouseLeave\"]);\n\n var domDataId = useMenuId(eventKey);\n\n var _React$useContext = React.useContext(MenuContext),\n prefixCls = _React$useContext.prefixCls,\n mode = _React$useContext.mode,\n openKeys = _React$useContext.openKeys,\n contextDisabled = _React$useContext.disabled,\n overflowDisabled = _React$useContext.overflowDisabled,\n activeKey = _React$useContext.activeKey,\n selectedKeys = _React$useContext.selectedKeys,\n contextItemIcon = _React$useContext.itemIcon,\n contextExpandIcon = _React$useContext.expandIcon,\n onItemClick = _React$useContext.onItemClick,\n onOpenChange = _React$useContext.onOpenChange,\n onActive = _React$useContext.onActive;\n\n var _React$useContext2 = React.useContext(PathUserContext),\n isSubPathKey = _React$useContext2.isSubPathKey;\n\n var connectedPath = useFullPath();\n var subMenuPrefixCls = \"\".concat(prefixCls, \"-submenu\");\n var mergedDisabled = contextDisabled || disabled;\n var elementRef = React.useRef();\n var popupRef = React.useRef(); // ================================ Warn ================================\n\n if (process.env.NODE_ENV !== 'production' && warnKey) {\n warning(false, 'SubMenu should not leave undefined `key`.');\n } // ================================ Icon ================================\n\n\n var mergedItemIcon = itemIcon || contextItemIcon;\n var mergedExpandIcon = expandIcon || contextExpandIcon; // ================================ Open ================================\n\n var originOpen = openKeys.includes(eventKey);\n var open = !overflowDisabled && originOpen; // =============================== Select ===============================\n\n var childrenSelected = isSubPathKey(selectedKeys, eventKey); // =============================== Active ===============================\n\n var _useActive = useActive(eventKey, mergedDisabled, onTitleMouseEnter, onTitleMouseLeave),\n active = _useActive.active,\n activeProps = _objectWithoutProperties(_useActive, [\"active\"]); // Fallback of active check to avoid hover on menu title or disabled item\n\n\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n childrenActive = _React$useState2[0],\n setChildrenActive = _React$useState2[1];\n\n var triggerChildrenActive = function triggerChildrenActive(newActive) {\n if (!mergedDisabled) {\n setChildrenActive(newActive);\n }\n };\n\n var onInternalMouseEnter = function onInternalMouseEnter(domEvent) {\n triggerChildrenActive(true);\n onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter({\n key: eventKey,\n domEvent: domEvent\n });\n };\n\n var onInternalMouseLeave = function onInternalMouseLeave(domEvent) {\n triggerChildrenActive(false);\n onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave({\n key: eventKey,\n domEvent: domEvent\n });\n };\n\n var mergedActive = React.useMemo(function () {\n if (active) {\n return active;\n }\n\n if (mode !== 'inline') {\n return childrenActive || isSubPathKey([activeKey], eventKey);\n }\n\n return false;\n }, [mode, active, activeKey, childrenActive, eventKey, isSubPathKey]); // ========================== DirectionStyle ==========================\n\n var directionStyle = useDirectionStyle(connectedPath.length); // =============================== Events ===============================\n // >>>> Title click\n\n var onInternalTitleClick = function onInternalTitleClick(e) {\n // Skip if disabled\n if (mergedDisabled) {\n return;\n }\n\n onTitleClick === null || onTitleClick === void 0 ? void 0 : onTitleClick({\n key: eventKey,\n domEvent: e\n }); // Trigger open by click when mode is `inline`\n\n if (mode === 'inline') {\n onOpenChange(eventKey, !originOpen);\n }\n }; // >>>> Context for children click\n\n\n var onMergedItemClick = useMemoCallback(function (info) {\n onClick === null || onClick === void 0 ? void 0 : onClick(warnItemProp(info));\n onItemClick(info);\n }); // >>>>> Visible change\n\n var onPopupVisibleChange = function onPopupVisibleChange(newVisible) {\n if (mode !== 'inline') {\n onOpenChange(eventKey, newVisible);\n }\n };\n /**\n * Used for accessibility. Helper will focus element without key board.\n * We should manually trigger an active\n */\n\n\n var onInternalFocus = function onInternalFocus() {\n onActive(eventKey);\n }; // =============================== Render ===============================\n\n\n var popupId = domDataId && \"\".concat(domDataId, \"-popup\"); // >>>>> Title\n\n var titleNode = /*#__PURE__*/React.createElement(\"div\", _extends({\n role: \"menuitem\",\n style: directionStyle,\n className: \"\".concat(subMenuPrefixCls, \"-title\"),\n tabIndex: mergedDisabled ? null : -1,\n ref: elementRef,\n title: typeof title === 'string' ? title : null,\n \"data-menu-id\": overflowDisabled && domDataId ? null : domDataId,\n \"aria-expanded\": open,\n \"aria-haspopup\": true,\n \"aria-controls\": popupId,\n \"aria-disabled\": mergedDisabled,\n onClick: onInternalTitleClick,\n onFocus: onInternalFocus\n }, activeProps), title, /*#__PURE__*/React.createElement(Icon, {\n icon: mode !== 'horizontal' ? mergedExpandIcon : null,\n props: _objectSpread(_objectSpread({}, props), {}, {\n isOpen: open,\n // [Legacy] Not sure why need this mark\n isSubMenu: true\n })\n }, /*#__PURE__*/React.createElement(\"i\", {\n className: \"\".concat(subMenuPrefixCls, \"-arrow\")\n }))); // Cache mode if it change to `inline` which do not have popup motion\n\n var triggerModeRef = React.useRef(mode);\n\n if (mode !== 'inline') {\n triggerModeRef.current = connectedPath.length > 1 ? 'vertical' : mode;\n }\n\n if (!overflowDisabled) {\n var triggerMode = triggerModeRef.current; // Still wrap with Trigger here since we need avoid react re-mount dom node\n // Which makes motion failed\n\n titleNode = /*#__PURE__*/React.createElement(PopupTrigger, {\n mode: triggerMode,\n prefixCls: subMenuPrefixCls,\n visible: !internalPopupClose && open && mode !== 'inline',\n popupClassName: popupClassName,\n popupOffset: popupOffset,\n popup: /*#__PURE__*/React.createElement(MenuContextProvider // Special handle of horizontal mode\n , {\n mode: triggerMode === 'horizontal' ? 'vertical' : triggerMode\n }, /*#__PURE__*/React.createElement(SubMenuList, {\n id: popupId,\n ref: popupRef\n }, children)),\n disabled: mergedDisabled,\n onVisibleChange: onPopupVisibleChange\n }, titleNode);\n } // >>>>> Render\n\n\n return /*#__PURE__*/React.createElement(MenuContextProvider, {\n onItemClick: onMergedItemClick,\n mode: mode === 'horizontal' ? 'vertical' : mode,\n itemIcon: mergedItemIcon,\n expandIcon: mergedExpandIcon\n }, /*#__PURE__*/React.createElement(Overflow.Item, _extends({\n role: \"none\"\n }, restProps, {\n component: \"li\",\n style: style,\n className: classNames(subMenuPrefixCls, \"\".concat(subMenuPrefixCls, \"-\").concat(mode), className, (_classNames = {}, _defineProperty(_classNames, \"\".concat(subMenuPrefixCls, \"-open\"), open), _defineProperty(_classNames, \"\".concat(subMenuPrefixCls, \"-active\"), mergedActive), _defineProperty(_classNames, \"\".concat(subMenuPrefixCls, \"-selected\"), childrenSelected), _defineProperty(_classNames, \"\".concat(subMenuPrefixCls, \"-disabled\"), mergedDisabled), _classNames)),\n onMouseEnter: onInternalMouseEnter,\n onMouseLeave: onInternalMouseLeave\n }), titleNode, !overflowDisabled && /*#__PURE__*/React.createElement(InlineSubMenuList, {\n id: popupId,\n open: open,\n keyPath: connectedPath\n }, children)));\n};\n\nexport default function SubMenu(props) {\n var eventKey = props.eventKey,\n children = props.children;\n var connectedKeyPath = useFullPath(eventKey);\n var childList = parseChildren(children, connectedKeyPath); // ==================== Record KeyPath ====================\n\n var measure = useMeasure(); // eslint-disable-next-line consistent-return\n\n React.useEffect(function () {\n if (measure) {\n measure.registerPath(eventKey, connectedKeyPath);\n return function () {\n measure.unregisterPath(eventKey, connectedKeyPath);\n };\n }\n }, [connectedKeyPath]);\n var renderNode; // ======================== Render ========================\n\n if (measure) {\n renderNode = childList;\n } else {\n renderNode = /*#__PURE__*/React.createElement(InternalSubMenu, props, childList);\n }\n\n return /*#__PURE__*/React.createElement(PathTrackerContext.Provider, {\n value: connectedKeyPath\n }, renderNode);\n}","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport isVisible from './isVisible';\n\nfunction focusable(node) {\n var includePositive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (isVisible(node)) {\n var nodeName = node.nodeName.toLowerCase();\n var isFocusableElement = // Focusable element\n ['input', 'select', 'textarea', 'button'].includes(nodeName) || // Editable element\n node.isContentEditable || // Anchor with href element\n nodeName === 'a' && !!node.getAttribute('href'); // Get tabIndex\n\n var tabIndexAttr = node.getAttribute('tabindex');\n var tabIndexNum = Number(tabIndexAttr); // Parse as number if validate\n\n var tabIndex = null;\n\n if (tabIndexAttr && !Number.isNaN(tabIndexNum)) {\n tabIndex = tabIndexNum;\n } else if (isFocusableElement && tabIndex === null) {\n tabIndex = 0;\n } // Block focusable if disabled\n\n\n if (isFocusableElement && node.disabled) {\n tabIndex = null;\n }\n\n return tabIndex !== null && (tabIndex >= 0 || includePositive && tabIndex < 0);\n }\n\n return false;\n}\n\nexport function getFocusNodeList(node) {\n var includePositive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var res = _toConsumableArray(node.querySelectorAll('*')).filter(function (child) {\n return focusable(child, includePositive);\n });\n\n if (focusable(node, includePositive)) {\n res.unshift(node);\n }\n\n return res;\n}\nvar lastFocusElement = null;\n/** @deprecated Do not use since this may failed when used in async */\n\nexport function saveLastFocusNode() {\n lastFocusElement = document.activeElement;\n}\n/** @deprecated Do not use since this may failed when used in async */\n\nexport function clearLastFocusNode() {\n lastFocusElement = null;\n}\n/** @deprecated Do not use since this may failed when used in async */\n\nexport function backLastFocusNode() {\n if (lastFocusElement) {\n try {\n // 元素可能已经被移动了\n lastFocusElement.focus();\n /* eslint-disable no-empty */\n } catch (e) {// empty\n }\n /* eslint-enable no-empty */\n\n }\n}\nexport function limitTabRange(node, e) {\n if (e.keyCode === 9) {\n var tabNodeList = getFocusNodeList(node);\n var lastTabNode = tabNodeList[e.shiftKey ? 0 : tabNodeList.length - 1];\n var leavingTab = lastTabNode === document.activeElement || node === document.activeElement;\n\n if (leavingTab) {\n var target = tabNodeList[e.shiftKey ? tabNodeList.length - 1 : 0];\n target.focus();\n e.preventDefault();\n }\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport raf from \"rc-util/es/raf\";\nimport { getFocusNodeList } from \"rc-util/es/Dom/focus\";\nimport { getMenuId } from '../context/IdContext'; // destruct to reduce minify size\n\nvar LEFT = KeyCode.LEFT,\n RIGHT = KeyCode.RIGHT,\n UP = KeyCode.UP,\n DOWN = KeyCode.DOWN,\n ENTER = KeyCode.ENTER,\n ESC = KeyCode.ESC;\nvar ArrowKeys = [UP, DOWN, LEFT, RIGHT];\n\nfunction getOffset(mode, isRootLevel, isRtl, which) {\n var _inline, _horizontal, _vertical, _offsets$;\n\n var prev = 'prev';\n var next = 'next';\n var children = 'children';\n var parent = 'parent'; // Inline enter is special that we use unique operation\n\n if (mode === 'inline' && which === ENTER) {\n return {\n inlineTrigger: true\n };\n }\n\n var inline = (_inline = {}, _defineProperty(_inline, UP, prev), _defineProperty(_inline, DOWN, next), _inline);\n var horizontal = (_horizontal = {}, _defineProperty(_horizontal, LEFT, isRtl ? next : prev), _defineProperty(_horizontal, RIGHT, isRtl ? prev : next), _defineProperty(_horizontal, DOWN, children), _defineProperty(_horizontal, ENTER, children), _horizontal);\n var vertical = (_vertical = {}, _defineProperty(_vertical, UP, prev), _defineProperty(_vertical, DOWN, next), _defineProperty(_vertical, ENTER, children), _defineProperty(_vertical, ESC, parent), _defineProperty(_vertical, LEFT, isRtl ? children : parent), _defineProperty(_vertical, RIGHT, isRtl ? parent : children), _vertical);\n var offsets = {\n inline: inline,\n horizontal: horizontal,\n vertical: vertical,\n inlineSub: inline,\n horizontalSub: vertical,\n verticalSub: vertical\n };\n var type = (_offsets$ = offsets[\"\".concat(mode).concat(isRootLevel ? '' : 'Sub')]) === null || _offsets$ === void 0 ? void 0 : _offsets$[which];\n\n switch (type) {\n case prev:\n return {\n offset: -1,\n sibling: true\n };\n\n case next:\n return {\n offset: 1,\n sibling: true\n };\n\n case parent:\n return {\n offset: -1,\n sibling: false\n };\n\n case children:\n return {\n offset: 1,\n sibling: false\n };\n\n default:\n return null;\n }\n}\n\nfunction findContainerUL(element) {\n var current = element;\n\n while (current) {\n if (current.getAttribute('data-menu-list')) {\n return current;\n }\n\n current = current.parentElement;\n } // Normally should not reach this line\n\n /* istanbul ignore next */\n\n\n return null;\n}\n/**\n * Find focused element within element set provided\n */\n\n\nfunction getFocusElement(activeElement, elements) {\n var current = activeElement || document.activeElement;\n\n while (current) {\n if (elements.has(current)) {\n return current;\n }\n\n current = current.parentElement;\n }\n\n return null;\n}\n/**\n * Get focusable elements from the element set under provided container\n */\n\n\nfunction getFocusableElements(container, elements) {\n var list = getFocusNodeList(container, true);\n return list.filter(function (ele) {\n return elements.has(ele);\n });\n}\n\nfunction getNextFocusElement(parentQueryContainer, elements, focusMenuElement) {\n var offset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n\n // Key on the menu item will not get validate parent container\n if (!parentQueryContainer) {\n return null;\n } // List current level menu item elements\n\n\n var sameLevelFocusableMenuElementList = getFocusableElements(parentQueryContainer, elements); // Find next focus index\n\n var count = sameLevelFocusableMenuElementList.length;\n var focusIndex = sameLevelFocusableMenuElementList.findIndex(function (ele) {\n return focusMenuElement === ele;\n });\n\n if (offset < 0) {\n if (focusIndex === -1) {\n focusIndex = count - 1;\n } else {\n focusIndex -= 1;\n }\n } else if (offset > 0) {\n focusIndex += 1;\n }\n\n focusIndex = (focusIndex + count) % count; // Focus menu item\n\n return sameLevelFocusableMenuElementList[focusIndex];\n}\n\nexport default function useAccessibility(mode, activeKey, isRtl, id, containerRef, getKeys, getKeyPath, triggerActiveKey, triggerAccessibilityOpen, originOnKeyDown) {\n var rafRef = React.useRef();\n var activeRef = React.useRef();\n activeRef.current = activeKey;\n\n var cleanRaf = function cleanRaf() {\n raf.cancel(rafRef.current);\n };\n\n React.useEffect(function () {\n return function () {\n cleanRaf();\n };\n }, []);\n return function (e) {\n var which = e.which;\n\n if ([].concat(ArrowKeys, [ENTER, ESC]).includes(which)) {\n // Convert key to elements\n var elements;\n var key2element;\n var element2key; // >>> Wrap as function since we use raf for some case\n\n var refreshElements = function refreshElements() {\n elements = new Set();\n key2element = new Map();\n element2key = new Map();\n var keys = getKeys();\n keys.forEach(function (key) {\n var element = document.querySelector(\"[data-menu-id='\".concat(getMenuId(id, key), \"']\"));\n\n if (element) {\n elements.add(element);\n element2key.set(element, key);\n key2element.set(key, element);\n }\n });\n return elements;\n };\n\n refreshElements(); // First we should find current focused MenuItem/SubMenu element\n\n var activeElement = key2element.get(activeKey);\n var focusMenuElement = getFocusElement(activeElement, elements);\n var focusMenuKey = element2key.get(focusMenuElement);\n var offsetObj = getOffset(mode, getKeyPath(focusMenuKey, true).length === 1, isRtl, which); // Some mode do not have fully arrow operation like inline\n\n if (!offsetObj) {\n return;\n } // Arrow prevent default to avoid page scroll\n\n\n if (ArrowKeys.includes(which)) {\n e.preventDefault();\n }\n\n var tryFocus = function tryFocus(menuElement) {\n if (menuElement) {\n var focusTargetElement = menuElement; // Focus to link instead of menu item if possible\n\n var link = menuElement.querySelector('a');\n\n if (link === null || link === void 0 ? void 0 : link.getAttribute('href')) {\n focusTargetElement = link;\n }\n\n var targetKey = element2key.get(menuElement);\n triggerActiveKey(targetKey);\n /**\n * Do not `useEffect` here since `tryFocus` may trigger async\n * which makes React sync update the `activeKey`\n * that force render before `useRef` set the next activeKey\n */\n\n cleanRaf();\n rafRef.current = raf(function () {\n if (activeRef.current === targetKey) {\n focusTargetElement.focus();\n }\n });\n }\n };\n\n if (offsetObj.sibling || !focusMenuElement) {\n // ========================== Sibling ==========================\n // Find walkable focus menu element container\n var parentQueryContainer;\n\n if (!focusMenuElement || mode === 'inline') {\n parentQueryContainer = containerRef.current;\n } else {\n parentQueryContainer = findContainerUL(focusMenuElement);\n } // Get next focus element\n\n\n var targetElement = getNextFocusElement(parentQueryContainer, elements, focusMenuElement, offsetObj.offset); // Focus menu item\n\n tryFocus(targetElement); // ======================= InlineTrigger =======================\n } else if (offsetObj.inlineTrigger) {\n // Inline trigger no need switch to sub menu item\n triggerAccessibilityOpen(focusMenuKey); // =========================== Level ===========================\n } else if (offsetObj.offset > 0) {\n triggerAccessibilityOpen(focusMenuKey, true);\n cleanRaf();\n rafRef.current = raf(function () {\n // Async should resync elements\n refreshElements();\n var controlId = focusMenuElement.getAttribute('aria-controls');\n var subQueryContainer = document.getElementById(controlId); // Get sub focusable menu item\n\n var targetElement = getNextFocusElement(subQueryContainer, elements); // Focus menu item\n\n tryFocus(targetElement);\n }, 5);\n } else if (offsetObj.offset < 0) {\n var keyPath = getKeyPath(focusMenuKey, true);\n var parentKey = keyPath[keyPath.length - 2];\n var parentMenuElement = key2element.get(parentKey); // Focus menu item\n\n triggerAccessibilityOpen(parentKey, false);\n tryFocus(parentMenuElement);\n }\n } // Pass origin key down event\n\n\n originOnKeyDown === null || originOnKeyDown === void 0 ? void 0 : originOnKeyDown(e);\n };\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nvar uniquePrefix = Math.random().toFixed(5).toString().slice(2);\nvar internalId = 0;\nexport default function useUUID(id) {\n var _useMergedState = useMergedState(id, {\n value: id\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n uuid = _useMergedState2[0],\n setUUID = _useMergedState2[1];\n\n React.useEffect(function () {\n internalId += 1;\n var newId = process.env.NODE_ENV === 'test' ? 'test' : \"\".concat(uniquePrefix, \"-\").concat(internalId);\n setUUID(\"rc-menu-uuid-\".concat(newId));\n }, []);\n return uuid;\n}","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef, useCallback } from 'react';\nimport warning from \"rc-util/es/warning\";\nimport { nextSlice } from '../utils/timeUtil';\nvar PATH_SPLIT = '__RC_UTIL_PATH_SPLIT__';\n\nvar getPathStr = function getPathStr(keyPath) {\n return keyPath.join(PATH_SPLIT);\n};\n\nvar getPathKeys = function getPathKeys(keyPathStr) {\n return keyPathStr.split(PATH_SPLIT);\n};\n\nexport var OVERFLOW_KEY = 'rc-menu-more';\nexport default function useKeyRecords() {\n var _React$useState = React.useState({}),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n internalForceUpdate = _React$useState2[1];\n\n var key2pathRef = useRef(new Map());\n var path2keyRef = useRef(new Map());\n\n var _React$useState3 = React.useState([]),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n overflowKeys = _React$useState4[0],\n setOverflowKeys = _React$useState4[1];\n\n var updateRef = useRef(0);\n var destroyRef = useRef(false);\n\n var forceUpdate = function forceUpdate() {\n if (!destroyRef.current) {\n internalForceUpdate({});\n }\n };\n\n var registerPath = useCallback(function (key, keyPath) {\n // Warning for invalidate or duplicated `key`\n if (process.env.NODE_ENV !== 'production') {\n warning(!key2pathRef.current.has(key), \"Duplicated key '\".concat(key, \"' used in Menu by path [\").concat(keyPath.join(' > '), \"]\"));\n } // Fill map\n\n\n var connectedPath = getPathStr(keyPath);\n path2keyRef.current.set(connectedPath, key);\n key2pathRef.current.set(key, connectedPath);\n updateRef.current += 1;\n var id = updateRef.current;\n nextSlice(function () {\n if (id === updateRef.current) {\n forceUpdate();\n }\n });\n }, []);\n var unregisterPath = useCallback(function (key, keyPath) {\n var connectedPath = getPathStr(keyPath);\n path2keyRef.current.delete(connectedPath);\n key2pathRef.current.delete(key);\n }, []);\n var refreshOverflowKeys = useCallback(function (keys) {\n setOverflowKeys(keys);\n }, []);\n var getKeyPath = useCallback(function (eventKey, includeOverflow) {\n var fullPath = key2pathRef.current.get(eventKey) || '';\n var keys = getPathKeys(fullPath);\n\n if (includeOverflow && overflowKeys.includes(keys[0])) {\n keys.unshift(OVERFLOW_KEY);\n }\n\n return keys;\n }, [overflowKeys]);\n var isSubPathKey = useCallback(function (pathKeys, eventKey) {\n return pathKeys.some(function (pathKey) {\n var pathKeyList = getKeyPath(pathKey, true);\n return pathKeyList.includes(eventKey);\n });\n }, [getKeyPath]);\n\n var getKeys = function getKeys() {\n var keys = _toConsumableArray(key2pathRef.current.keys());\n\n if (overflowKeys.length) {\n keys.push(OVERFLOW_KEY);\n }\n\n return keys;\n };\n /**\n * Find current key related child path keys\n */\n\n\n var getSubPathKeys = useCallback(function (key) {\n var connectedPath = \"\".concat(key2pathRef.current.get(key)).concat(PATH_SPLIT);\n var pathKeys = new Set();\n\n _toConsumableArray(path2keyRef.current.keys()).forEach(function (pathKey) {\n if (pathKey.startsWith(connectedPath)) {\n pathKeys.add(path2keyRef.current.get(pathKey));\n }\n });\n\n return pathKeys;\n }, []);\n React.useEffect(function () {\n return function () {\n destroyRef.current = true;\n };\n }, []);\n return {\n // Register\n registerPath: registerPath,\n unregisterPath: unregisterPath,\n refreshOverflowKeys: refreshOverflowKeys,\n // Util\n isSubPathKey: isSubPathKey,\n getKeyPath: getKeyPath,\n getKeys: getKeys,\n getSubPathKeys: getSubPathKeys\n };\n}","export function nextSlice(callback) {\n /* istanbul ignore next */\n Promise.resolve().then(callback);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport shallowEqual from 'shallowequal';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport warning from \"rc-util/es/warning\";\nimport Overflow from 'rc-overflow';\nimport MenuItem from './MenuItem';\nimport { parseChildren } from './utils/nodeUtil';\nimport MenuContextProvider from './context/MenuContext';\nimport useMemoCallback from './hooks/useMemoCallback';\nimport { warnItemProp } from './utils/warnUtil';\nimport SubMenu from './SubMenu';\nimport useAccessibility from './hooks/useAccessibility';\nimport useUUID from './hooks/useUUID';\nimport { PathRegisterContext, PathUserContext } from './context/PathContext';\nimport useKeyRecords, { OVERFLOW_KEY } from './hooks/useKeyRecords';\nimport { IdContext } from './context/IdContext';\n/**\n * Menu modify after refactor:\n * ## Add\n * - disabled\n *\n * ## Remove\n * - openTransitionName\n * - openAnimation\n * - onDestroy\n * - siderCollapsed: Seems antd do not use this prop (Need test in antd)\n * - collapsedWidth: Seems this logic should be handle by antd Layout.Sider\n */\n// optimize for render\n\nvar EMPTY_LIST = [];\n\nvar Menu = function Menu(props) {\n var _childList$, _classNames;\n\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-menu' : _props$prefixCls,\n style = props.style,\n className = props.className,\n _props$tabIndex = props.tabIndex,\n tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n children = props.children,\n direction = props.direction,\n id = props.id,\n _props$mode = props.mode,\n mode = _props$mode === void 0 ? 'vertical' : _props$mode,\n inlineCollapsed = props.inlineCollapsed,\n disabled = props.disabled,\n disabledOverflow = props.disabledOverflow,\n _props$subMenuOpenDel = props.subMenuOpenDelay,\n subMenuOpenDelay = _props$subMenuOpenDel === void 0 ? 0.1 : _props$subMenuOpenDel,\n _props$subMenuCloseDe = props.subMenuCloseDelay,\n subMenuCloseDelay = _props$subMenuCloseDe === void 0 ? 0.1 : _props$subMenuCloseDe,\n forceSubMenuRender = props.forceSubMenuRender,\n defaultOpenKeys = props.defaultOpenKeys,\n openKeys = props.openKeys,\n activeKey = props.activeKey,\n defaultActiveFirst = props.defaultActiveFirst,\n _props$selectable = props.selectable,\n selectable = _props$selectable === void 0 ? true : _props$selectable,\n _props$multiple = props.multiple,\n multiple = _props$multiple === void 0 ? false : _props$multiple,\n defaultSelectedKeys = props.defaultSelectedKeys,\n selectedKeys = props.selectedKeys,\n onSelect = props.onSelect,\n onDeselect = props.onDeselect,\n _props$inlineIndent = props.inlineIndent,\n inlineIndent = _props$inlineIndent === void 0 ? 24 : _props$inlineIndent,\n motion = props.motion,\n defaultMotions = props.defaultMotions,\n _props$triggerSubMenu = props.triggerSubMenuAction,\n triggerSubMenuAction = _props$triggerSubMenu === void 0 ? 'hover' : _props$triggerSubMenu,\n builtinPlacements = props.builtinPlacements,\n itemIcon = props.itemIcon,\n expandIcon = props.expandIcon,\n _props$overflowedIndi = props.overflowedIndicator,\n overflowedIndicator = _props$overflowedIndi === void 0 ? '...' : _props$overflowedIndi,\n overflowedIndicatorPopupClassName = props.overflowedIndicatorPopupClassName,\n getPopupContainer = props.getPopupContainer,\n onClick = props.onClick,\n onOpenChange = props.onOpenChange,\n onKeyDown = props.onKeyDown,\n openAnimation = props.openAnimation,\n openTransitionName = props.openTransitionName,\n restProps = _objectWithoutProperties(props, [\"prefixCls\", \"style\", \"className\", \"tabIndex\", \"children\", \"direction\", \"id\", \"mode\", \"inlineCollapsed\", \"disabled\", \"disabledOverflow\", \"subMenuOpenDelay\", \"subMenuCloseDelay\", \"forceSubMenuRender\", \"defaultOpenKeys\", \"openKeys\", \"activeKey\", \"defaultActiveFirst\", \"selectable\", \"multiple\", \"defaultSelectedKeys\", \"selectedKeys\", \"onSelect\", \"onDeselect\", \"inlineIndent\", \"motion\", \"defaultMotions\", \"triggerSubMenuAction\", \"builtinPlacements\", \"itemIcon\", \"expandIcon\", \"overflowedIndicator\", \"overflowedIndicatorPopupClassName\", \"getPopupContainer\", \"onClick\", \"onOpenChange\", \"onKeyDown\", \"openAnimation\", \"openTransitionName\"]);\n\n var childList = parseChildren(children, EMPTY_LIST);\n\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n mounted = _React$useState2[0],\n setMounted = _React$useState2[1];\n\n var containerRef = React.useRef();\n var uuid = useUUID(id);\n var isRtl = direction === 'rtl'; // ========================= Warn =========================\n\n if (process.env.NODE_ENV !== 'production') {\n warning(!openAnimation && !openTransitionName, '`openAnimation` and `openTransitionName` is removed. Please use `motion` or `defaultMotion` instead.');\n } // ========================= Mode =========================\n\n\n var _React$useMemo = React.useMemo(function () {\n if ((mode === 'inline' || mode === 'vertical') && inlineCollapsed) {\n return ['vertical', inlineCollapsed];\n }\n\n return [mode, false];\n }, [mode, inlineCollapsed]),\n _React$useMemo2 = _slicedToArray(_React$useMemo, 2),\n mergedMode = _React$useMemo2[0],\n mergedInlineCollapsed = _React$useMemo2[1]; // ====================== Responsive ======================\n\n\n var _React$useState3 = React.useState(0),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n lastVisibleIndex = _React$useState4[0],\n setLastVisibleIndex = _React$useState4[1];\n\n var allVisible = lastVisibleIndex >= childList.length - 1 || mergedMode !== 'horizontal' || disabledOverflow; // ========================= Open =========================\n\n var _useMergedState = useMergedState(defaultOpenKeys, {\n value: openKeys,\n postState: function postState(keys) {\n return keys || EMPTY_LIST;\n }\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n mergedOpenKeys = _useMergedState2[0],\n setMergedOpenKeys = _useMergedState2[1];\n\n var triggerOpenKeys = function triggerOpenKeys(keys) {\n setMergedOpenKeys(keys);\n onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(keys);\n }; // >>>>> Cache & Reset open keys when inlineCollapsed changed\n\n\n var _React$useState5 = React.useState(mergedOpenKeys),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n inlineCacheOpenKeys = _React$useState6[0],\n setInlineCacheOpenKeys = _React$useState6[1];\n\n var isInlineMode = mergedMode === 'inline';\n var mountRef = React.useRef(false); // Cache\n\n React.useEffect(function () {\n if (isInlineMode) {\n setInlineCacheOpenKeys(mergedOpenKeys);\n }\n }, [mergedOpenKeys]); // Restore\n\n React.useEffect(function () {\n if (!mountRef.current) {\n mountRef.current = true;\n return;\n }\n\n if (isInlineMode) {\n setMergedOpenKeys(inlineCacheOpenKeys);\n } else {\n // Trigger open event in case its in control\n triggerOpenKeys(EMPTY_LIST);\n }\n }, [isInlineMode]); // ========================= Path =========================\n\n var _useKeyRecords = useKeyRecords(),\n registerPath = _useKeyRecords.registerPath,\n unregisterPath = _useKeyRecords.unregisterPath,\n refreshOverflowKeys = _useKeyRecords.refreshOverflowKeys,\n isSubPathKey = _useKeyRecords.isSubPathKey,\n getKeyPath = _useKeyRecords.getKeyPath,\n getKeys = _useKeyRecords.getKeys,\n getSubPathKeys = _useKeyRecords.getSubPathKeys;\n\n var registerPathContext = React.useMemo(function () {\n return {\n registerPath: registerPath,\n unregisterPath: unregisterPath\n };\n }, [registerPath, unregisterPath]);\n var pathUserContext = React.useMemo(function () {\n return {\n isSubPathKey: isSubPathKey\n };\n }, [isSubPathKey]);\n React.useEffect(function () {\n refreshOverflowKeys(allVisible ? EMPTY_LIST : childList.slice(lastVisibleIndex + 1).map(function (child) {\n return child.key;\n }));\n }, [lastVisibleIndex, allVisible]); // ======================== Active ========================\n\n var _useMergedState3 = useMergedState(activeKey || defaultActiveFirst && ((_childList$ = childList[0]) === null || _childList$ === void 0 ? void 0 : _childList$.key), {\n value: activeKey\n }),\n _useMergedState4 = _slicedToArray(_useMergedState3, 2),\n mergedActiveKey = _useMergedState4[0],\n setMergedActiveKey = _useMergedState4[1];\n\n var onActive = useMemoCallback(function (key) {\n setMergedActiveKey(key);\n });\n var onInactive = useMemoCallback(function () {\n setMergedActiveKey(undefined);\n }); // ======================== Select ========================\n // >>>>> Select keys\n\n var _useMergedState5 = useMergedState(defaultSelectedKeys || [], {\n value: selectedKeys,\n // Legacy convert key to array\n postState: function postState(keys) {\n if (Array.isArray(keys)) {\n return keys;\n }\n\n if (keys === null || keys === undefined) {\n return EMPTY_LIST;\n }\n\n return [keys];\n }\n }),\n _useMergedState6 = _slicedToArray(_useMergedState5, 2),\n mergedSelectKeys = _useMergedState6[0],\n setMergedSelectKeys = _useMergedState6[1]; // >>>>> Trigger select\n\n\n var triggerSelection = function triggerSelection(info) {\n if (selectable) {\n // Insert or Remove\n var targetKey = info.key;\n var exist = mergedSelectKeys.includes(targetKey);\n var newSelectKeys;\n\n if (multiple) {\n if (exist) {\n newSelectKeys = mergedSelectKeys.filter(function (key) {\n return key !== targetKey;\n });\n } else {\n newSelectKeys = [].concat(_toConsumableArray(mergedSelectKeys), [targetKey]);\n }\n } else {\n newSelectKeys = [targetKey];\n }\n\n setMergedSelectKeys(newSelectKeys); // Trigger event\n\n var selectInfo = _objectSpread(_objectSpread({}, info), {}, {\n selectedKeys: newSelectKeys\n });\n\n if (exist) {\n onDeselect === null || onDeselect === void 0 ? void 0 : onDeselect(selectInfo);\n } else {\n onSelect === null || onSelect === void 0 ? void 0 : onSelect(selectInfo);\n }\n } // Whatever selectable, always close it\n\n\n if (!multiple && mergedOpenKeys.length && mergedMode !== 'inline') {\n triggerOpenKeys(EMPTY_LIST);\n }\n }; // ========================= Open =========================\n\n /**\n * Click for item. SubMenu do not have selection status\n */\n\n\n var onInternalClick = useMemoCallback(function (info) {\n onClick === null || onClick === void 0 ? void 0 : onClick(warnItemProp(info));\n triggerSelection(info);\n });\n var onInternalOpenChange = useMemoCallback(function (key, open) {\n var newOpenKeys = mergedOpenKeys.filter(function (k) {\n return k !== key;\n });\n\n if (open) {\n newOpenKeys.push(key);\n } else if (mergedMode !== 'inline') {\n // We need find all related popup to close\n var subPathKeys = getSubPathKeys(key);\n newOpenKeys = newOpenKeys.filter(function (k) {\n return !subPathKeys.has(k);\n });\n }\n\n if (!shallowEqual(mergedOpenKeys, newOpenKeys)) {\n triggerOpenKeys(newOpenKeys);\n }\n });\n var getInternalPopupContainer = useMemoCallback(getPopupContainer); // ==================== Accessibility =====================\n\n var triggerAccessibilityOpen = function triggerAccessibilityOpen(key, open) {\n var nextOpen = open !== null && open !== void 0 ? open : !mergedOpenKeys.includes(key);\n onInternalOpenChange(key, nextOpen);\n };\n\n var onInternalKeyDown = useAccessibility(mergedMode, mergedActiveKey, isRtl, uuid, containerRef, getKeys, getKeyPath, setMergedActiveKey, triggerAccessibilityOpen, onKeyDown); // ======================== Effect ========================\n\n React.useEffect(function () {\n setMounted(true);\n }, []); // ======================== Render ========================\n // >>>>> Children\n\n var wrappedChildList = mergedMode !== 'horizontal' || disabledOverflow ? childList : // Need wrap for overflow dropdown that do not response for open\n childList.map(function (child, index) {\n return (\n /*#__PURE__*/\n // Always wrap provider to avoid sub node re-mount\n React.createElement(MenuContextProvider, {\n key: child.key,\n overflowDisabled: index > lastVisibleIndex\n }, child)\n );\n }); // >>>>> Container\n\n var container = /*#__PURE__*/React.createElement(Overflow, _extends({\n id: id,\n ref: containerRef,\n prefixCls: \"\".concat(prefixCls, \"-overflow\"),\n component: \"ul\",\n itemComponent: MenuItem,\n className: classNames(prefixCls, \"\".concat(prefixCls, \"-root\"), \"\".concat(prefixCls, \"-\").concat(mergedMode), className, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-inline-collapsed\"), mergedInlineCollapsed), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), isRtl), _classNames)),\n dir: direction,\n style: style,\n role: \"menu\",\n tabIndex: tabIndex,\n data: wrappedChildList,\n renderRawItem: function renderRawItem(node) {\n return node;\n },\n renderRawRest: function renderRawRest(omitItems) {\n // We use origin list since wrapped list use context to prevent open\n var len = omitItems.length;\n var originOmitItems = len ? childList.slice(-len) : null;\n return /*#__PURE__*/React.createElement(SubMenu, {\n eventKey: OVERFLOW_KEY,\n title: overflowedIndicator,\n disabled: allVisible,\n internalPopupClose: len === 0,\n popupClassName: overflowedIndicatorPopupClassName\n }, originOmitItems);\n },\n maxCount: mergedMode !== 'horizontal' || disabledOverflow ? Overflow.INVALIDATE : Overflow.RESPONSIVE,\n ssr: \"full\",\n \"data-menu-list\": true,\n onVisibleChange: function onVisibleChange(newLastIndex) {\n setLastVisibleIndex(newLastIndex);\n },\n onKeyDown: onInternalKeyDown\n }, restProps)); // >>>>> Render\n\n return /*#__PURE__*/React.createElement(IdContext.Provider, {\n value: uuid\n }, /*#__PURE__*/React.createElement(MenuContextProvider, {\n prefixCls: prefixCls,\n mode: mergedMode,\n openKeys: mergedOpenKeys,\n rtl: isRtl // Disabled\n ,\n disabled: disabled // Motion\n ,\n motion: mounted ? motion : null,\n defaultMotions: mounted ? defaultMotions : null // Active\n ,\n activeKey: mergedActiveKey,\n onActive: onActive,\n onInactive: onInactive // Selection\n ,\n selectedKeys: mergedSelectKeys // Level\n ,\n inlineIndent: inlineIndent // Popup\n ,\n subMenuOpenDelay: subMenuOpenDelay,\n subMenuCloseDelay: subMenuCloseDelay,\n forceSubMenuRender: forceSubMenuRender,\n builtinPlacements: builtinPlacements,\n triggerSubMenuAction: triggerSubMenuAction,\n getPopupContainer: getInternalPopupContainer // Icon\n ,\n itemIcon: itemIcon,\n expandIcon: expandIcon // Events\n ,\n onItemClick: onInternalClick,\n onOpenChange: onInternalOpenChange\n }, /*#__PURE__*/React.createElement(PathUserContext.Provider, {\n value: pathUserContext\n }, container), /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none'\n },\n \"aria-hidden\": true\n }, /*#__PURE__*/React.createElement(PathRegisterContext.Provider, {\n value: registerPathContext\n }, childList))));\n};\n\nexport default Menu;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport { parseChildren } from './utils/nodeUtil';\nimport { MenuContext } from './context/MenuContext';\nimport { useFullPath, useMeasure } from './context/PathContext';\n\nvar InternalMenuItemGroup = function InternalMenuItemGroup(_ref) {\n var className = _ref.className,\n title = _ref.title,\n eventKey = _ref.eventKey,\n children = _ref.children,\n restProps = _objectWithoutProperties(_ref, [\"className\", \"title\", \"eventKey\", \"children\"]);\n\n var _React$useContext = React.useContext(MenuContext),\n prefixCls = _React$useContext.prefixCls;\n\n var groupPrefixCls = \"\".concat(prefixCls, \"-item-group\");\n return /*#__PURE__*/React.createElement(\"li\", _extends({}, restProps, {\n onClick: function onClick(e) {\n return e.stopPropagation();\n },\n className: classNames(groupPrefixCls, className)\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(groupPrefixCls, \"-title\"),\n title: typeof title === 'string' ? title : undefined\n }, title), /*#__PURE__*/React.createElement(\"ul\", {\n className: \"\".concat(groupPrefixCls, \"-list\")\n }, children));\n};\n\nexport default function MenuItemGroup(_ref2) {\n var children = _ref2.children,\n props = _objectWithoutProperties(_ref2, [\"children\"]);\n\n var connectedKeyPath = useFullPath(props.eventKey);\n var childList = parseChildren(children, connectedKeyPath);\n var measure = useMeasure();\n\n if (measure) {\n return childList;\n }\n\n return /*#__PURE__*/React.createElement(InternalMenuItemGroup, omit(props, ['warnKey']), childList);\n}","import * as React from 'react';\nimport classNames from 'classnames';\nimport { MenuContext } from './context/MenuContext';\nimport { useMeasure } from './context/PathContext';\nexport default function Divider(_ref) {\n var className = _ref.className,\n style = _ref.style;\n\n var _React$useContext = React.useContext(MenuContext),\n prefixCls = _React$useContext.prefixCls;\n\n var measure = useMeasure();\n\n if (measure) {\n return null;\n }\n\n return /*#__PURE__*/React.createElement(\"li\", {\n className: classNames(\"\".concat(prefixCls, \"-item-divider\"), className),\n style: style\n });\n}","import Menu from './Menu';\nimport MenuItem from './MenuItem';\nimport SubMenu from './SubMenu';\nimport MenuItemGroup from './MenuItemGroup';\nimport { useFullPath as useOriginFullPath } from './context/PathContext';\nimport Divider from './Divider';\n/** @private Only used for antd internal. Do not use in your production. */\n\nvar useFullPath = useOriginFullPath;\nexport { SubMenu, MenuItem as Item, MenuItem, MenuItemGroup, MenuItemGroup as ItemGroup, Divider, useFullPath };\nvar ExportMenu = Menu;\nExportMenu.Item = MenuItem;\nExportMenu.SubMenu = SubMenu;\nExportMenu.ItemGroup = MenuItemGroup;\nExportMenu.Divider = Divider;\nexport default ExportMenu;","import * as React from 'react';\nimport { ConfigContext } from '../config-provider';\n\nvar Empty = function Empty() {\n var _React$useContext = React.useContext(ConfigContext),\n getPrefixCls = _React$useContext.getPrefixCls;\n\n var prefixCls = getPrefixCls('empty-img-default');\n return /*#__PURE__*/React.createElement(\"svg\", {\n className: prefixCls,\n width: \"184\",\n height: \"152\",\n viewBox: \"0 0 184 152\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(24 31.67)\"\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n className: \"\".concat(prefixCls, \"-ellipse\"),\n cx: \"67.797\",\n cy: \"106.89\",\n rx: \"67.797\",\n ry: \"12.668\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"\".concat(prefixCls, \"-path-1\"),\n d: \"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"\".concat(prefixCls, \"-path-2\"),\n d: \"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z\",\n transform: \"translate(13.56)\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"\".concat(prefixCls, \"-path-3\"),\n d: \"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"\".concat(prefixCls, \"-path-4\"),\n d: \"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n className: \"\".concat(prefixCls, \"-path-5\"),\n d: \"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n className: \"\".concat(prefixCls, \"-g\"),\n transform: \"translate(149.65 15.383)\"\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: \"20.654\",\n cy: \"3.167\",\n rx: \"2.849\",\n ry: \"2.815\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\"\n }))));\n};\n\nexport default Empty;","import * as React from 'react';\nimport { ConfigContext } from '../config-provider';\n\nvar Simple = function Simple() {\n var _React$useContext = React.useContext(ConfigContext),\n getPrefixCls = _React$useContext.getPrefixCls;\n\n var prefixCls = getPrefixCls('empty-img-simple');\n return /*#__PURE__*/React.createElement(\"svg\", {\n className: prefixCls,\n width: \"64\",\n height: \"41\",\n viewBox: \"0 0 64 41\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(0 1)\",\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"ellipse\", {\n className: \"\".concat(prefixCls, \"-ellipse\"),\n cx: \"32\",\n cy: \"33\",\n rx: \"32\",\n ry: \"7\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n className: \"\".concat(prefixCls, \"-g\"),\n fillRule: \"nonzero\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\",\n className: \"\".concat(prefixCls, \"-path\")\n }))));\n};\n\nexport default Simple;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ConfigContext } from '../config-provider';\nimport LocaleReceiver from '../locale-provider/LocaleReceiver';\nimport DefaultEmptyImg from './empty';\nimport SimpleEmptyImg from './simple';\nvar defaultEmptyImg = /*#__PURE__*/React.createElement(DefaultEmptyImg, null);\nvar simpleEmptyImg = /*#__PURE__*/React.createElement(SimpleEmptyImg, null);\n\nvar Empty = function Empty(_a) {\n var className = _a.className,\n customizePrefixCls = _a.prefixCls,\n _a$image = _a.image,\n image = _a$image === void 0 ? defaultEmptyImg : _a$image,\n description = _a.description,\n children = _a.children,\n imageStyle = _a.imageStyle,\n restProps = __rest(_a, [\"className\", \"prefixCls\", \"image\", \"description\", \"children\", \"imageStyle\"]);\n\n var _React$useContext = React.useContext(ConfigContext),\n getPrefixCls = _React$useContext.getPrefixCls,\n direction = _React$useContext.direction;\n\n return /*#__PURE__*/React.createElement(LocaleReceiver, {\n componentName: \"Empty\"\n }, function (locale) {\n var _classNames;\n\n var prefixCls = getPrefixCls('empty', customizePrefixCls);\n var des = typeof description !== 'undefined' ? description : locale.description;\n var alt = typeof des === 'string' ? des : 'empty';\n var imageNode = null;\n\n if (typeof image === 'string') {\n imageNode = /*#__PURE__*/React.createElement(\"img\", {\n alt: alt,\n src: image\n });\n } else {\n imageNode = image;\n }\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-normal\"), image === simpleEmptyImg), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _classNames), className)\n }, restProps), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-image\"),\n style: imageStyle\n }, imageNode), des && /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-description\")\n }, des), children && /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-footer\")\n }, children));\n });\n};\n\nEmpty.PRESENTED_IMAGE_DEFAULT = defaultEmptyImg;\nEmpty.PRESENTED_IMAGE_SIMPLE = simpleEmptyImg;\nexport default Empty;","import * as React from 'react';\nimport Empty from '../empty';\nimport { ConfigConsumer } from '.';\n\nvar renderEmpty = function renderEmpty(componentName) {\n return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (_ref) {\n var getPrefixCls = _ref.getPrefixCls;\n var prefix = getPrefixCls('empty');\n\n switch (componentName) {\n case 'Table':\n case 'List':\n return /*#__PURE__*/React.createElement(Empty, {\n image: Empty.PRESENTED_IMAGE_SIMPLE\n });\n\n case 'Select':\n case 'TreeSelect':\n case 'Cascader':\n case 'Transfer':\n case 'Mentions':\n return /*#__PURE__*/React.createElement(Empty, {\n image: Empty.PRESENTED_IMAGE_SIMPLE,\n className: \"\".concat(prefix, \"-small\")\n });\n\n default:\n return /*#__PURE__*/React.createElement(Empty, null);\n }\n });\n};\n\nexport default renderEmpty;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport defaultRenderEmpty from './renderEmpty';\n\nvar defaultGetPrefixCls = function defaultGetPrefixCls(suffixCls, customizePrefixCls) {\n if (customizePrefixCls) return customizePrefixCls;\n return suffixCls ? \"ant-\".concat(suffixCls) : 'ant';\n};\n\nexport var ConfigContext = /*#__PURE__*/React.createContext({\n // We provide a default function for Context without provider\n getPrefixCls: defaultGetPrefixCls,\n renderEmpty: defaultRenderEmpty\n});\nexport var ConfigConsumer = ConfigContext.Consumer;\n/** @deprecated Use hooks instead. This is a legacy function */\n\nexport function withConfigConsumer(config) {\n return function withConfigConsumerFunc(Component) {\n // Wrap with ConfigConsumer. Since we need compatible with react 15, be care when using ref methods\n var SFC = function SFC(props) {\n return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (configProps) {\n var basicPrefixCls = config.prefixCls;\n var getPrefixCls = configProps.getPrefixCls;\n var customizePrefixCls = props.prefixCls;\n var prefixCls = getPrefixCls(basicPrefixCls, customizePrefixCls);\n return /*#__PURE__*/React.createElement(Component, _extends({}, configProps, props, {\n prefixCls: prefixCls\n }));\n });\n };\n\n var cons = Component.constructor;\n var name = cons && cons.displayName || Component.name || 'Component';\n SFC.displayName = \"withConfigConsumer(\".concat(name, \")\");\n return SFC;\n };\n}","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./constants\"), exports);\n__exportStar(require(\"./env\"), exports);\n__exportStar(require(\"./pkcs7\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./validators\"), exports);\n//# sourceMappingURL=index.js.map","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar hasher = require('./hasher.js');\nvar bytes = require('../bytes.js');\n\nconst identity = hasher.from({\n name: 'identity',\n code: 0,\n encode: input => bytes.coerce(input)\n});\n\nexports.identity = identity;\n","'use strict'\n\nconst hmac = require('./hmac')\nconst aes = require('./aes')\nconst keys = require('./keys')\n\nexports.aes = aes\nexports.hmac = hmac\nexports.keys = keys\nexports.randomBytes = require('./random-bytes')\nexports.pbkdf2 = require('./pbkdf2')\n","'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar withMfsRoot = require('./with-mfs-root.js');\nvar toPathComponents = require('./to-path-components.js');\nvar ipfsUnixfsExporter = require('ipfs-unixfs-exporter');\nvar errCode = require('err-code');\nvar cid = require('multiformats/cid');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nconst IPFS_PREFIX = 'ipfs';\nconst toMfsPath = async (context, path, options) => {\n const root = await withMfsRoot.loadMfsRoot(context, options);\n let output = { entryType: 'file' };\n let ipfsPath = '';\n if (cid.CID.asCID(path)) {\n ipfsPath = `/ipfs/${ path }`;\n } else {\n ipfsPath = path.toString();\n }\n ipfsPath = ipfsPath.trim();\n ipfsPath = ipfsPath.replace(/(\\/\\/+)/g, '/');\n if (ipfsPath.endsWith('/') && ipfsPath.length > 1) {\n ipfsPath = ipfsPath.substring(0, ipfsPath.length - 1);\n }\n if (!ipfsPath) {\n throw errCode__default[\"default\"](new Error('paths must not be empty'), 'ERR_NO_PATH');\n }\n if (ipfsPath.substring(0, 1) !== '/') {\n throw errCode__default[\"default\"](new Error('paths must start with a leading slash'), 'ERR_INVALID_PATH');\n }\n if (ipfsPath.substring(ipfsPath.length - 1) === '/') {\n ipfsPath = ipfsPath.substring(0, ipfsPath.length - 1);\n }\n const pathComponents = toPathComponents.toPathComponents(ipfsPath);\n if (pathComponents[0] === IPFS_PREFIX) {\n let mfsDirectory;\n if (pathComponents.length === 2) {\n mfsDirectory = `/${ pathComponents.join('/') }`;\n } else {\n mfsDirectory = `/${ pathComponents.slice(0, pathComponents.length - 1).join('/') }`;\n }\n output = {\n type: 'ipfs',\n depth: pathComponents.length - 2,\n entryType: 'file',\n mfsPath: `/${ pathComponents.join('/') }`,\n mfsDirectory,\n parts: pathComponents,\n path: `/${ pathComponents.join('/') }`,\n name: pathComponents[pathComponents.length - 1]\n };\n } else {\n const mfsPath = `/${ IPFS_PREFIX }/${ root }${ pathComponents.length ? '/' + pathComponents.join('/') : '' }`;\n const mfsDirectory = `/${ IPFS_PREFIX }/${ root }/${ pathComponents.slice(0, pathComponents.length - 1).join('/') }`;\n output = {\n type: 'mfs',\n depth: pathComponents.length,\n entryType: 'file',\n mfsDirectory,\n mfsPath,\n parts: pathComponents,\n path: `/${ pathComponents.join('/') }`,\n name: pathComponents[pathComponents.length - 1]\n };\n }\n const cidPath = output.type === 'mfs' ? output.mfsPath : output.path;\n try {\n const res = await ipfsUnixfsExporter.exporter(cidPath, context.repo.blocks, options);\n output.cid = res.cid;\n output.mfsPath = `/ipfs/${ res.path }`;\n output.entryType = res.type;\n output.content = res.content;\n if ((output.entryType === 'file' || output.entryType === 'directory') && (res.type === 'file' || res.type === 'directory')) {\n output.unixfs = res.unixfs;\n }\n } catch (err) {\n if (err.code !== 'ERR_NOT_FOUND') {\n throw err;\n }\n }\n output.exists = Boolean(output.cid);\n return output;\n};\n\nexports.toMfsPath = toMfsPath;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport toArray from \"rc-util/es/Children/toArray\";\nimport warning from \"rc-util/es/warning\";\nimport { composeRef, supportRef } from \"rc-util/es/ref\";\nimport ResizeObserver from 'resize-observer-polyfill';\nvar INTERNAL_PREFIX_KEY = 'rc-observer-key'; // Still need to be compatible with React 15, we use class component here\n\nvar ReactResizeObserver = /*#__PURE__*/function (_React$Component) {\n _inherits(ReactResizeObserver, _React$Component);\n\n var _super = _createSuper(ReactResizeObserver);\n\n function ReactResizeObserver() {\n var _this;\n\n _classCallCheck(this, ReactResizeObserver);\n\n _this = _super.apply(this, arguments);\n _this.resizeObserver = null;\n _this.childNode = null;\n _this.currentElement = null;\n _this.state = {\n width: 0,\n height: 0,\n offsetHeight: 0,\n offsetWidth: 0\n };\n\n _this.onResize = function (entries) {\n var onResize = _this.props.onResize;\n var target = entries[0].target;\n\n var _target$getBoundingCl = target.getBoundingClientRect(),\n width = _target$getBoundingCl.width,\n height = _target$getBoundingCl.height;\n\n var offsetWidth = target.offsetWidth,\n offsetHeight = target.offsetHeight;\n /**\n * Resize observer trigger when content size changed.\n * In most case we just care about element size,\n * let's use `boundary` instead of `contentRect` here to avoid shaking.\n */\n\n var fixedWidth = Math.floor(width);\n var fixedHeight = Math.floor(height);\n\n if (_this.state.width !== fixedWidth || _this.state.height !== fixedHeight || _this.state.offsetWidth !== offsetWidth || _this.state.offsetHeight !== offsetHeight) {\n var size = {\n width: fixedWidth,\n height: fixedHeight,\n offsetWidth: offsetWidth,\n offsetHeight: offsetHeight\n };\n\n _this.setState(size);\n\n if (onResize) {\n // defer the callback but not defer to next frame\n Promise.resolve().then(function () {\n onResize(_objectSpread(_objectSpread({}, size), {}, {\n offsetWidth: offsetWidth,\n offsetHeight: offsetHeight\n }), target);\n });\n }\n }\n };\n\n _this.setChildNode = function (node) {\n _this.childNode = node;\n };\n\n return _this;\n }\n\n _createClass(ReactResizeObserver, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.onComponentUpdated();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.onComponentUpdated();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.destroyObserver();\n }\n }, {\n key: \"onComponentUpdated\",\n value: function onComponentUpdated() {\n var disabled = this.props.disabled; // Unregister if disabled\n\n if (disabled) {\n this.destroyObserver();\n return;\n } // Unregister if element changed\n\n\n var element = findDOMNode(this.childNode || this);\n var elementChanged = element !== this.currentElement;\n\n if (elementChanged) {\n this.destroyObserver();\n this.currentElement = element;\n }\n\n if (!this.resizeObserver && element) {\n this.resizeObserver = new ResizeObserver(this.onResize);\n this.resizeObserver.observe(element);\n }\n }\n }, {\n key: \"destroyObserver\",\n value: function destroyObserver() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var children = this.props.children;\n var childNodes = toArray(children);\n\n if (childNodes.length > 1) {\n warning(false, 'Find more than one child node with `children` in ResizeObserver. Will only observe first one.');\n } else if (childNodes.length === 0) {\n warning(false, '`children` of ResizeObserver is empty. Nothing is in observe.');\n return null;\n }\n\n var childNode = childNodes[0];\n\n if ( /*#__PURE__*/React.isValidElement(childNode) && supportRef(childNode)) {\n var ref = childNode.ref;\n childNodes[0] = /*#__PURE__*/React.cloneElement(childNode, {\n ref: composeRef(ref, this.setChildNode)\n });\n }\n\n return childNodes.length === 1 ? childNodes[0] : childNodes.map(function (node, index) {\n if (! /*#__PURE__*/React.isValidElement(node) || 'key' in node && node.key !== null) {\n return node;\n }\n\n return /*#__PURE__*/React.cloneElement(node, {\n key: \"\".concat(INTERNAL_PREFIX_KEY, \"-\").concat(index)\n });\n });\n }\n }]);\n\n return ReactResizeObserver;\n}(React.Component);\n\nReactResizeObserver.displayName = 'ResizeObserver';\nexport default ReactResizeObserver;","/**\n * Based on Kendo UI Core expression code \n */\n'use strict'\n\nfunction Cache(maxSize) {\n this._maxSize = maxSize\n this.clear()\n}\nCache.prototype.clear = function () {\n this._size = 0\n this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n this._size >= this._maxSize && this.clear()\n if (!(key in this._values)) this._size++\n\n return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n DIGIT_REGEX = /^\\d+$/,\n LEAD_DIGIT_REGEX = /^\\d/,\n SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n setCache = new Cache(MAX_CACHE_SIZE),\n getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n Cache: Cache,\n\n split: split,\n\n normalizePath: normalizePath,\n\n setter: function (path) {\n var parts = normalizePath(path)\n\n return (\n setCache.get(path) ||\n setCache.set(path, function setter(obj, value) {\n var index = 0\n var len = parts.length\n var data = obj\n\n while (index < len - 1) {\n var part = parts[index]\n if (\n part === '__proto__' ||\n part === 'constructor' ||\n part === 'prototype'\n ) {\n return obj\n }\n\n data = data[parts[index++]]\n }\n data[parts[index]] = value\n })\n )\n },\n\n getter: function (path, safe) {\n var parts = normalizePath(path)\n return (\n getCache.get(path) ||\n getCache.set(path, function getter(data) {\n var index = 0,\n len = parts.length\n while (index < len) {\n if (data != null || !safe) data = data[parts[index++]]\n else return\n }\n return data\n })\n )\n },\n\n join: function (segments) {\n return segments.reduce(function (path, part) {\n return (\n path +\n (isQuoted(part) || DIGIT_REGEX.test(part)\n ? '[' + part + ']'\n : (path ? '.' : '') + part)\n )\n }, '')\n },\n\n forEach: function (path, cb, thisArg) {\n forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n },\n}\n\nfunction normalizePath(path) {\n return (\n pathCache.get(path) ||\n pathCache.set(\n path,\n split(path).map(function (part) {\n return part.replace(CLEAN_QUOTES_REGEX, '$2')\n })\n )\n )\n}\n\nfunction split(path) {\n return path.match(SPLIT_REGEX)\n}\n\nfunction forEach(parts, iter, thisArg) {\n var len = parts.length,\n part,\n idx,\n isArray,\n isBracket\n\n for (idx = 0; idx < len; idx++) {\n part = parts[idx]\n\n if (part) {\n if (shouldBeQuoted(part)) {\n part = '\"' + part + '\"'\n }\n\n isBracket = isQuoted(part)\n isArray = !isBracket && /^\\d+$/.test(part)\n\n iter.call(thisArg, part, isBracket, isArray, idx, parts)\n }\n }\n}\n\nfunction isQuoted(str) {\n return (\n typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n )\n}\n\nfunction hasLeadingNumber(part) {\n return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n","export default function contains(root, n) {\n if (!root) {\n return false;\n }\n\n return root.contains(n);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport ResizeObserver from 'rc-resize-observer'; // Use shared variable to save bundle size\n\nvar UNDEFINED = undefined;\n\nfunction InternalItem(props, ref) {\n var prefixCls = props.prefixCls,\n invalidate = props.invalidate,\n item = props.item,\n renderItem = props.renderItem,\n responsive = props.responsive,\n registerSize = props.registerSize,\n itemKey = props.itemKey,\n className = props.className,\n style = props.style,\n children = props.children,\n display = props.display,\n order = props.order,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n restProps = _objectWithoutProperties(props, [\"prefixCls\", \"invalidate\", \"item\", \"renderItem\", \"responsive\", \"registerSize\", \"itemKey\", \"className\", \"style\", \"children\", \"display\", \"order\", \"component\"]);\n\n var mergedHidden = responsive && !display; // ================================ Effect ================================\n\n function internalRegisterSize(width) {\n registerSize(itemKey, width);\n }\n\n React.useEffect(function () {\n return function () {\n internalRegisterSize(null);\n };\n }, []); // ================================ Render ================================\n\n var childNode = renderItem && item !== UNDEFINED ? renderItem(item) : children;\n var overflowStyle;\n\n if (!invalidate) {\n overflowStyle = {\n opacity: mergedHidden ? 0 : 1,\n height: mergedHidden ? 0 : UNDEFINED,\n overflowY: mergedHidden ? 'hidden' : UNDEFINED,\n order: responsive ? order : UNDEFINED,\n pointerEvents: mergedHidden ? 'none' : UNDEFINED,\n position: mergedHidden ? 'absolute' : UNDEFINED\n };\n }\n\n var overflowProps = {};\n\n if (mergedHidden) {\n overflowProps['aria-hidden'] = true;\n }\n\n var itemNode = /*#__PURE__*/React.createElement(Component, _extends({\n className: classNames(!invalidate && prefixCls, className),\n style: _objectSpread(_objectSpread({}, overflowStyle), style)\n }, overflowProps, restProps, {\n ref: ref\n }), childNode);\n\n if (responsive) {\n itemNode = /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: function onResize(_ref) {\n var offsetWidth = _ref.offsetWidth;\n internalRegisterSize(offsetWidth);\n }\n }, itemNode);\n }\n\n return itemNode;\n}\n\nvar Item = /*#__PURE__*/React.forwardRef(InternalItem);\nItem.displayName = 'Item';\nexport default Item;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport Item from './Item';\nimport { OverflowContext } from './Overflow';\n\nvar InternalRawItem = function InternalRawItem(props, ref) {\n var context = React.useContext(OverflowContext); // Render directly when context not provided\n\n if (!context) {\n var _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n _restProps = _objectWithoutProperties(props, [\"component\"]);\n\n return /*#__PURE__*/React.createElement(Component, _extends({}, _restProps, {\n ref: ref\n }));\n }\n\n var contextClassName = context.className,\n restContext = _objectWithoutProperties(context, [\"className\"]);\n\n var className = props.className,\n restProps = _objectWithoutProperties(props, [\"className\"]); // Do not pass context to sub item to avoid multiple measure\n\n\n return /*#__PURE__*/React.createElement(OverflowContext.Provider, {\n value: null\n }, /*#__PURE__*/React.createElement(Item, _extends({\n ref: ref,\n className: classNames(contextClassName, className)\n }, restContext, restProps)));\n};\n\nvar RawItem = /*#__PURE__*/React.forwardRef(InternalRawItem);\nRawItem.displayName = 'RawItem';\nexport default RawItem;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport { useState, useMemo, useCallback } from 'react';\nimport classNames from 'classnames';\nimport ResizeObserver from 'rc-resize-observer';\nimport Item from './Item';\nimport { useBatchFrameState } from './hooks/useBatchFrameState';\nimport RawItem from './RawItem';\nexport var OverflowContext = /*#__PURE__*/React.createContext(null);\nvar RESPONSIVE = 'responsive';\nvar INVALIDATE = 'invalidate';\n\nfunction defaultRenderRest(omittedItems) {\n return \"+ \".concat(omittedItems.length, \" ...\");\n}\n\nfunction Overflow(props, ref) {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-overflow' : _props$prefixCls,\n _props$data = props.data,\n data = _props$data === void 0 ? [] : _props$data,\n renderItem = props.renderItem,\n renderRawItem = props.renderRawItem,\n itemKey = props.itemKey,\n _props$itemWidth = props.itemWidth,\n itemWidth = _props$itemWidth === void 0 ? 10 : _props$itemWidth,\n ssr = props.ssr,\n style = props.style,\n className = props.className,\n maxCount = props.maxCount,\n renderRest = props.renderRest,\n renderRawRest = props.renderRawRest,\n suffix = props.suffix,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n itemComponent = props.itemComponent,\n onVisibleChange = props.onVisibleChange,\n restProps = _objectWithoutProperties(props, [\"prefixCls\", \"data\", \"renderItem\", \"renderRawItem\", \"itemKey\", \"itemWidth\", \"ssr\", \"style\", \"className\", \"maxCount\", \"renderRest\", \"renderRawRest\", \"suffix\", \"component\", \"itemComponent\", \"onVisibleChange\"]);\n\n var createUseState = useBatchFrameState();\n var fullySSR = ssr === 'full';\n\n var _createUseState = createUseState(null),\n _createUseState2 = _slicedToArray(_createUseState, 2),\n containerWidth = _createUseState2[0],\n setContainerWidth = _createUseState2[1];\n\n var mergedContainerWidth = containerWidth || 0;\n\n var _createUseState3 = createUseState(new Map()),\n _createUseState4 = _slicedToArray(_createUseState3, 2),\n itemWidths = _createUseState4[0],\n setItemWidths = _createUseState4[1];\n\n var _createUseState5 = createUseState(0),\n _createUseState6 = _slicedToArray(_createUseState5, 2),\n prevRestWidth = _createUseState6[0],\n setPrevRestWidth = _createUseState6[1];\n\n var _createUseState7 = createUseState(0),\n _createUseState8 = _slicedToArray(_createUseState7, 2),\n restWidth = _createUseState8[0],\n setRestWidth = _createUseState8[1];\n\n var _createUseState9 = createUseState(0),\n _createUseState10 = _slicedToArray(_createUseState9, 2),\n suffixWidth = _createUseState10[0],\n setSuffixWidth = _createUseState10[1];\n\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n suffixFixedStart = _useState2[0],\n setSuffixFixedStart = _useState2[1];\n\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n displayCount = _useState4[0],\n setDisplayCount = _useState4[1];\n\n var mergedDisplayCount = React.useMemo(function () {\n if (displayCount === null && fullySSR) {\n return Number.MAX_SAFE_INTEGER;\n }\n\n return displayCount || 0;\n }, [displayCount, containerWidth]);\n\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n restReady = _useState6[0],\n setRestReady = _useState6[1];\n\n var itemPrefixCls = \"\".concat(prefixCls, \"-item\"); // Always use the max width to avoid blink\n\n var mergedRestWidth = Math.max(prevRestWidth, restWidth); // ================================= Data =================================\n\n var isResponsive = data.length && maxCount === RESPONSIVE;\n var invalidate = maxCount === INVALIDATE;\n /**\n * When is `responsive`, we will always render rest node to get the real width of it for calculation\n */\n\n var showRest = isResponsive || typeof maxCount === 'number' && data.length > maxCount;\n var mergedData = useMemo(function () {\n var items = data;\n\n if (isResponsive) {\n if (containerWidth === null && fullySSR) {\n items = data;\n } else {\n items = data.slice(0, Math.min(data.length, mergedContainerWidth / itemWidth));\n }\n } else if (typeof maxCount === 'number') {\n items = data.slice(0, maxCount);\n }\n\n return items;\n }, [data, itemWidth, containerWidth, maxCount, isResponsive]);\n var omittedItems = useMemo(function () {\n if (isResponsive) {\n return data.slice(mergedDisplayCount + 1);\n }\n\n return data.slice(mergedData.length);\n }, [data, mergedData, isResponsive, mergedDisplayCount]); // ================================= Item =================================\n\n var getKey = useCallback(function (item, index) {\n var _ref;\n\n if (typeof itemKey === 'function') {\n return itemKey(item);\n }\n\n return (_ref = itemKey && (item === null || item === void 0 ? void 0 : item[itemKey])) !== null && _ref !== void 0 ? _ref : index;\n }, [itemKey]);\n var mergedRenderItem = useCallback(renderItem || function (item) {\n return item;\n }, [renderItem]);\n\n function updateDisplayCount(count, notReady) {\n setDisplayCount(count);\n\n if (!notReady) {\n setRestReady(count < data.length - 1);\n onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(count);\n }\n } // ================================= Size =================================\n\n\n function onOverflowResize(_, element) {\n setContainerWidth(element.clientWidth);\n }\n\n function registerSize(key, width) {\n setItemWidths(function (origin) {\n var clone = new Map(origin);\n\n if (width === null) {\n clone.delete(key);\n } else {\n clone.set(key, width);\n }\n\n return clone;\n });\n }\n\n function registerOverflowSize(_, width) {\n setRestWidth(width);\n setPrevRestWidth(restWidth);\n }\n\n function registerSuffixSize(_, width) {\n setSuffixWidth(width);\n } // ================================ Effect ================================\n\n\n function getItemWidth(index) {\n return itemWidths.get(getKey(mergedData[index], index));\n }\n\n React.useLayoutEffect(function () {\n if (mergedContainerWidth && mergedRestWidth && mergedData) {\n var totalWidth = suffixWidth;\n var len = mergedData.length;\n var lastIndex = len - 1; // When data count change to 0, reset this since not loop will reach\n\n if (!len) {\n updateDisplayCount(0);\n setSuffixFixedStart(null);\n return;\n }\n\n for (var i = 0; i < len; i += 1) {\n var currentItemWidth = getItemWidth(i); // Break since data not ready\n\n if (currentItemWidth === undefined) {\n updateDisplayCount(i - 1, true);\n break;\n } // Find best match\n\n\n totalWidth += currentItemWidth;\n\n if ( // Only one means `totalWidth` is the final width\n lastIndex === 0 && totalWidth <= mergedContainerWidth || // Last two width will be the final width\n i === lastIndex - 1 && totalWidth + getItemWidth(lastIndex) <= mergedContainerWidth) {\n // Additional check if match the end\n updateDisplayCount(lastIndex);\n setSuffixFixedStart(null);\n break;\n } else if (totalWidth + mergedRestWidth > mergedContainerWidth) {\n // Can not hold all the content to show rest\n updateDisplayCount(i - 1);\n setSuffixFixedStart(totalWidth - currentItemWidth - suffixWidth + restWidth);\n break;\n }\n }\n\n if (suffix && getItemWidth(0) + suffixWidth > mergedContainerWidth) {\n setSuffixFixedStart(null);\n }\n }\n }, [mergedContainerWidth, itemWidths, restWidth, suffixWidth, getKey, mergedData]); // ================================ Render ================================\n\n var displayRest = restReady && !!omittedItems.length;\n var suffixStyle = {};\n\n if (suffixFixedStart !== null && isResponsive) {\n suffixStyle = {\n position: 'absolute',\n left: suffixFixedStart,\n top: 0\n };\n }\n\n var itemSharedProps = {\n prefixCls: itemPrefixCls,\n responsive: isResponsive,\n component: itemComponent,\n invalidate: invalidate\n }; // >>>>> Choice render fun by `renderRawItem`\n\n var internalRenderItemNode = renderRawItem ? function (item, index) {\n var key = getKey(item, index);\n return /*#__PURE__*/React.createElement(OverflowContext.Provider, {\n key: key,\n value: _objectSpread(_objectSpread({}, itemSharedProps), {}, {\n order: index,\n item: item,\n itemKey: key,\n registerSize: registerSize,\n display: index <= mergedDisplayCount\n })\n }, renderRawItem(item, index));\n } : function (item, index) {\n var key = getKey(item, index);\n return /*#__PURE__*/React.createElement(Item, _extends({}, itemSharedProps, {\n order: index,\n key: key,\n item: item,\n renderItem: mergedRenderItem,\n itemKey: key,\n registerSize: registerSize,\n display: index <= mergedDisplayCount\n }));\n }; // >>>>> Rest node\n\n var restNode;\n var restContextProps = {\n order: displayRest ? mergedDisplayCount : Number.MAX_SAFE_INTEGER,\n className: \"\".concat(itemPrefixCls, \"-rest\"),\n registerSize: registerOverflowSize,\n display: displayRest\n };\n\n if (!renderRawRest) {\n var mergedRenderRest = renderRest || defaultRenderRest;\n restNode = /*#__PURE__*/React.createElement(Item, _extends({}, itemSharedProps, restContextProps), typeof mergedRenderRest === 'function' ? mergedRenderRest(omittedItems) : mergedRenderRest);\n } else if (renderRawRest) {\n restNode = /*#__PURE__*/React.createElement(OverflowContext.Provider, {\n value: _objectSpread(_objectSpread({}, itemSharedProps), restContextProps)\n }, renderRawRest(omittedItems));\n }\n\n var overflowNode = /*#__PURE__*/React.createElement(Component, _extends({\n className: classNames(!invalidate && prefixCls, className),\n style: style,\n ref: ref\n }, restProps), mergedData.map(internalRenderItemNode), showRest ? restNode : null, suffix && /*#__PURE__*/React.createElement(Item, _extends({}, itemSharedProps, {\n order: mergedDisplayCount,\n className: \"\".concat(itemPrefixCls, \"-suffix\"),\n registerSize: registerSuffixSize,\n display: true,\n style: suffixStyle\n }), suffix));\n\n if (isResponsive) {\n overflowNode = /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: onOverflowResize\n }, overflowNode);\n }\n\n return overflowNode;\n}\n\nvar ForwardOverflow = /*#__PURE__*/React.forwardRef(Overflow);\nForwardOverflow.displayName = 'Overflow';\nForwardOverflow.Item = RawItem;\nForwardOverflow.RESPONSIVE = RESPONSIVE;\nForwardOverflow.INVALIDATE = INVALIDATE; // Convert to generic type\n\nexport default ForwardOverflow;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useRef, useState, useEffect } from 'react';\nimport raf from \"rc-util/es/raf\";\n/**\n * State generate. Return a `setState` but it will flush all state with one render to save perf.\n * This is not a realization of `unstable_batchedUpdates`.\n */\n\nexport function useBatchFrameState() {\n var _useState = useState({}),\n _useState2 = _slicedToArray(_useState, 2),\n forceUpdate = _useState2[1];\n\n var statesRef = useRef([]);\n var destroyRef = useRef(false);\n var walkingIndex = 0;\n var beforeFrameId = 0;\n useEffect(function () {\n return function () {\n destroyRef.current = true;\n };\n }, []);\n\n function createState(defaultValue) {\n var myIndex = walkingIndex;\n walkingIndex += 1; // Fill value if not exist yet\n\n if (statesRef.current.length < myIndex + 1) {\n statesRef.current[myIndex] = defaultValue;\n } // Return filled as `setState`\n\n\n var value = statesRef.current[myIndex];\n\n function setValue(val) {\n statesRef.current[myIndex] = typeof val === 'function' ? val(statesRef.current[myIndex]) : val;\n raf.cancel(beforeFrameId); // Flush with batch\n\n beforeFrameId = raf(function () {\n if (!destroyRef.current) {\n forceUpdate({});\n }\n });\n }\n\n return [value, setValue];\n }\n\n return createState;\n}","import Overflow from './Overflow';\nexport default Overflow;",";(function (globalObject) {\r\n 'use strict';\r\n\r\n/*\r\n * bignumber.js v9.0.1\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2020 Michael Mclaughlin \r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\n var BigNumber,\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n /*\r\n * Create and return a BigNumber constructor.\r\n */\r\n function clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if less than two characters,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, P.lt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, P.gt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // THe index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne;\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n function maxOrMin(args, method) {\r\n var n,\r\n i = 1,\r\n m = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n n = new BigNumber(args[i]);\r\n\r\n // If any number is NaN, return NaN.\r\n if (!n.s) {\r\n m = n;\r\n break;\r\n } else if (method.call(m, n)) {\r\n m = n;\r\n }\r\n }\r\n\r\n return m;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = n / pows10[d - j - 1] % 10 | 0;\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) t = yc, yc = xc, xc = t, b = a;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n }\r\n\r\n\r\n // PRIVATE HELPER FUNCTIONS\r\n\r\n // These functions don't need access to variables,\r\n // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\n function bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n }\r\n\r\n\r\n // Return a coefficient array as a string of base 10 digits.\r\n function coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n }\r\n\r\n\r\n // Compare the value of BigNumbers x and y.\r\n function compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n }\r\n\r\n\r\n /*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\n function intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n }\r\n\r\n\r\n // Assumes finite n.\r\n function isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n }\r\n\r\n\r\n function toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n }\r\n\r\n\r\n function toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n\r\n // EXPORT\r\n\r\n\r\n BigNumber = clone();\r\n BigNumber['default'] = BigNumber.BigNumber = BigNumber;\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () { return BigNumber; });\r\n\r\n // Node.js and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = BigNumber;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalObject) {\r\n globalObject = typeof self != 'undefined' && self ? self : window;\r\n }\r\n\r\n globalObject.BigNumber = BigNumber;\r\n }\r\n})(this);\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","var toSJISFunction\nvar CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n var digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n","var VersionCheck = require('./version-check')\nvar Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n var lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isAsync = undefined;\n\nvar _asyncify = require('../asyncify');\n\nvar _asyncify2 = _interopRequireDefault(_asyncify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar supportsSymbol = typeof Symbol === 'function';\n\nfunction isAsync(fn) {\n return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction wrapAsync(asyncFn) {\n return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn;\n}\n\nexports.default = wrapAsync;\nexports.isAsync = isAsync;","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst useBuffer = globalThis.process && !globalThis.process.browser && globalThis.Buffer && typeof globalThis.Buffer.isBuffer === 'function';\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\nfunction isBuffer(buf) {\n return useBuffer && globalThis.Buffer.isBuffer(buf);\n}\nfunction asU8A(buf) {\n if (!(buf instanceof Uint8Array)) {\n return Uint8Array.from(buf);\n }\n return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf;\n}\nconst toString = useBuffer ? (bytes, start, end) => {\n return end - start > 64 ? globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8') : utf8Slice(bytes, start, end);\n} : (bytes, start, end) => {\n return end - start > 64 ? textDecoder.decode(bytes.subarray(start, end)) : utf8Slice(bytes, start, end);\n};\nconst fromString = useBuffer ? string => {\n return string.length > 64 ? globalThis.Buffer.from(string) : utf8ToBytes(string);\n} : string => {\n return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string);\n};\nconst fromArray = arr => {\n return Uint8Array.from(arr);\n};\nconst slice = useBuffer ? (bytes, start, end) => {\n if (isBuffer(bytes)) {\n return new Uint8Array(bytes.subarray(start, end));\n }\n return bytes.slice(start, end);\n} : (bytes, start, end) => {\n return bytes.slice(start, end);\n};\nconst concat = useBuffer ? (chunks, length) => {\n chunks = chunks.map(c => c instanceof Uint8Array ? c : globalThis.Buffer.from(c));\n return asU8A(globalThis.Buffer.concat(chunks, length));\n} : (chunks, length) => {\n const out = new Uint8Array(length);\n let off = 0;\n for (let b of chunks) {\n if (off + b.length > out.length) {\n b = b.subarray(0, out.length - off);\n }\n out.set(b, off);\n off += b.length;\n }\n return out;\n};\nconst alloc = useBuffer ? size => {\n return globalThis.Buffer.allocUnsafe(size);\n} : size => {\n return new Uint8Array(size);\n};\nconst toHex = useBuffer ? d => {\n if (typeof d === 'string') {\n return d;\n }\n return globalThis.Buffer.from(toBytes(d)).toString('hex');\n} : d => {\n if (typeof d === 'string') {\n return d;\n }\n return Array.prototype.reduce.call(toBytes(d), (p, c) => `${ p }${ c.toString(16).padStart(2, '0') }`, '');\n};\nconst fromHex = useBuffer ? hex => {\n if (hex instanceof Uint8Array) {\n return hex;\n }\n return globalThis.Buffer.from(hex, 'hex');\n} : hex => {\n if (hex instanceof Uint8Array) {\n return hex;\n }\n if (!hex.length) {\n return new Uint8Array(0);\n }\n return new Uint8Array(hex.split('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16)));\n};\nfunction toBytes(obj) {\n if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') {\n return obj;\n }\n if (obj instanceof ArrayBuffer) {\n return new Uint8Array(obj);\n }\n if (ArrayBuffer.isView(obj)) {\n return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength);\n }\n throw new Error('Unknown type, must be binary type');\n}\nfunction compare(b1, b2) {\n if (isBuffer(b1) && isBuffer(b2)) {\n return b1.compare(b2);\n }\n for (let i = 0; i < b1.length; i++) {\n if (b1[i] === b2[i]) {\n continue;\n }\n return b1[i] < b2[i] ? -1 : 1;\n }\n return 0;\n}\nfunction utf8ToBytes(string, units = Infinity) {\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n if (codePoint > 55295 && codePoint < 57344) {\n if (!leadSurrogate) {\n if (codePoint > 56319) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n continue;\n }\n leadSurrogate = codePoint;\n continue;\n }\n if (codePoint < 56320) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n }\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n if ((units -= 3) > -1)\n bytes.push(239, 191, 189);\n }\n leadSurrogate = null;\n if (codePoint < 128) {\n if ((units -= 1) < 0)\n break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0)\n break;\n bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0)\n break;\n bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0)\n break;\n bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else {\n throw new Error('Invalid code point');\n }\n }\n return bytes;\n}\nfunction utf8Slice(buf, offset, end) {\n const res = [];\n while (offset < end) {\n const firstByte = buf[offset];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n if (offset + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n break;\n case 2:\n secondByte = buf[offset + 1];\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n break;\n case 3:\n secondByte = buf[offset + 1];\n thirdByte = buf[offset + 2];\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n codePoint = tempCodePoint;\n }\n }\n break;\n case 4:\n secondByte = buf[offset + 1];\n thirdByte = buf[offset + 2];\n fourthByte = buf[offset + 3];\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n if (codePoint === null) {\n codePoint = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n res.push(codePoint);\n offset += bytesPerSequence;\n }\n return decodeCodePointsArray(res);\n}\nconst MAX_ARGUMENTS_LENGTH = 4096;\nfunction decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints);\n }\n let res = '';\n let i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n return res;\n}\n\nexports.alloc = alloc;\nexports.asU8A = asU8A;\nexports.compare = compare;\nexports.concat = concat;\nexports.decodeCodePointsArray = decodeCodePointsArray;\nexports.fromArray = fromArray;\nexports.fromHex = fromHex;\nexports.fromString = fromString;\nexports.slice = slice;\nexports.toHex = toHex;\nexports.toString = toString;\nexports.useBuffer = useBuffer;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass NotInitializedError extends Error {\n constructor(message = 'not initialized') {\n super(message);\n this.name = 'NotInitializedError';\n this.code = NotInitializedError.code;\n }\n}\nNotInitializedError.code = 'ERR_NOT_INITIALIZED';\nclass AlreadyInitializingError extends Error {\n constructor(message = 'cannot initialize an initializing node') {\n super(message);\n this.name = 'AlreadyInitializingError';\n this.code = AlreadyInitializedError.code;\n }\n}\nAlreadyInitializingError.code = 'ERR_ALREADY_INITIALIZING';\nclass AlreadyInitializedError extends Error {\n constructor(message = 'cannot re-initialize an initialized node') {\n super(message);\n this.name = 'AlreadyInitializedError';\n this.code = AlreadyInitializedError.code;\n }\n}\nAlreadyInitializedError.code = 'ERR_ALREADY_INITIALIZED';\nclass NotStartedError extends Error {\n constructor(message = 'not started') {\n super(message);\n this.name = 'NotStartedError';\n this.code = NotStartedError.code;\n }\n}\nNotStartedError.code = 'ERR_NOT_STARTED';\nclass AlreadyStartingError extends Error {\n constructor(message = 'cannot start, already startin') {\n super(message);\n this.name = 'AlreadyStartingError';\n this.code = AlreadyStartingError.code;\n }\n}\nAlreadyStartingError.code = 'ERR_ALREADY_STARTING';\nclass AlreadyStartedError extends Error {\n constructor(message = 'cannot start, already started') {\n super(message);\n this.name = 'AlreadyStartedError';\n this.code = AlreadyStartedError.code;\n }\n}\nAlreadyStartedError.code = 'ERR_ALREADY_STARTED';\nclass NotEnabledError extends Error {\n constructor(message = 'not enabled') {\n super(message);\n this.name = 'NotEnabledError';\n this.code = NotEnabledError.code;\n }\n}\nNotEnabledError.code = 'ERR_NOT_ENABLED';\n\nexports.AlreadyInitializedError = AlreadyInitializedError;\nexports.AlreadyInitializingError = AlreadyInitializingError;\nexports.AlreadyStartedError = AlreadyStartedError;\nexports.AlreadyStartingError = AlreadyStartingError;\nexports.NotEnabledError = NotEnabledError;\nexports.NotInitializedError = NotInitializedError;\nexports.NotStartedError = NotStartedError;\n","/**\n * Javascript implementation of Abstract Syntax Notation Number One.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n *\n * An API for storing data using the Abstract Syntax Notation Number One\n * format using DER (Distinguished Encoding Rules) encoding. This encoding is\n * commonly used to store data for PKI, i.e. X.509 Certificates, and this\n * implementation exists for that purpose.\n *\n * Abstract Syntax Notation Number One (ASN.1) is used to define the abstract\n * syntax of information without restricting the way the information is encoded\n * for transmission. It provides a standard that allows for open systems\n * communication. ASN.1 defines the syntax of information data and a number of\n * simple data types as well as a notation for describing them and specifying\n * values for them.\n *\n * The RSA algorithm creates public and private keys that are often stored in\n * X.509 or PKCS#X formats -- which use ASN.1 (encoded in DER format). This\n * class provides the most basic functionality required to store and load DSA\n * keys that are encoded according to ASN.1.\n *\n * The most common binary encodings for ASN.1 are BER (Basic Encoding Rules)\n * and DER (Distinguished Encoding Rules). DER is just a subset of BER that\n * has stricter requirements for how data must be encoded.\n *\n * Each ASN.1 structure has a tag (a byte identifying the ASN.1 structure type)\n * and a byte array for the value of this ASN1 structure which may be data or a\n * list of ASN.1 structures.\n *\n * Each ASN.1 structure using BER is (Tag-Length-Value):\n *\n * | byte 0 | bytes X | bytes Y |\n * |--------|---------|----------\n * | tag | length | value |\n *\n * ASN.1 allows for tags to be of \"High-tag-number form\" which allows a tag to\n * be two or more octets, but that is not supported by this class. A tag is\n * only 1 byte. Bits 1-5 give the tag number (ie the data type within a\n * particular 'class'), 6 indicates whether or not the ASN.1 value is\n * constructed from other ASN.1 values, and bits 7 and 8 give the 'class'. If\n * bits 7 and 8 are both zero, the class is UNIVERSAL. If only bit 7 is set,\n * then the class is APPLICATION. If only bit 8 is set, then the class is\n * CONTEXT_SPECIFIC. If both bits 7 and 8 are set, then the class is PRIVATE.\n * The tag numbers for the data types for the class UNIVERSAL are listed below:\n *\n * UNIVERSAL 0 Reserved for use by the encoding rules\n * UNIVERSAL 1 Boolean type\n * UNIVERSAL 2 Integer type\n * UNIVERSAL 3 Bitstring type\n * UNIVERSAL 4 Octetstring type\n * UNIVERSAL 5 Null type\n * UNIVERSAL 6 Object identifier type\n * UNIVERSAL 7 Object descriptor type\n * UNIVERSAL 8 External type and Instance-of type\n * UNIVERSAL 9 Real type\n * UNIVERSAL 10 Enumerated type\n * UNIVERSAL 11 Embedded-pdv type\n * UNIVERSAL 12 UTF8String type\n * UNIVERSAL 13 Relative object identifier type\n * UNIVERSAL 14-15 Reserved for future editions\n * UNIVERSAL 16 Sequence and Sequence-of types\n * UNIVERSAL 17 Set and Set-of types\n * UNIVERSAL 18-22, 25-30 Character string types\n * UNIVERSAL 23-24 Time types\n *\n * The length of an ASN.1 structure is specified after the tag identifier.\n * There is a definite form and an indefinite form. The indefinite form may\n * be used if the encoding is constructed and not all immediately available.\n * The indefinite form is encoded using a length byte with only the 8th bit\n * set. The end of the constructed object is marked using end-of-contents\n * octets (two zero bytes).\n *\n * The definite form looks like this:\n *\n * The length may take up 1 or more bytes, it depends on the length of the\n * value of the ASN.1 structure. DER encoding requires that if the ASN.1\n * structure has a value that has a length greater than 127, more than 1 byte\n * will be used to store its length, otherwise just one byte will be used.\n * This is strict.\n *\n * In the case that the length of the ASN.1 value is less than 127, 1 octet\n * (byte) is used to store the \"short form\" length. The 8th bit has a value of\n * 0 indicating the length is \"short form\" and not \"long form\" and bits 7-1\n * give the length of the data. (The 8th bit is the left-most, most significant\n * bit: also known as big endian or network format).\n *\n * In the case that the length of the ASN.1 value is greater than 127, 2 to\n * 127 octets (bytes) are used to store the \"long form\" length. The first\n * byte's 8th bit is set to 1 to indicate the length is \"long form.\" Bits 7-1\n * give the number of additional octets. All following octets are in base 256\n * with the most significant digit first (typical big-endian binary unsigned\n * integer storage). So, for instance, if the length of a value was 257, the\n * first byte would be set to:\n *\n * 10000010 = 130 = 0x82.\n *\n * This indicates there are 2 octets (base 256) for the length. The second and\n * third bytes (the octets just mentioned) would store the length in base 256:\n *\n * octet 2: 00000001 = 1 * 256^1 = 256\n * octet 3: 00000001 = 1 * 256^0 = 1\n * total = 257\n *\n * The algorithm for converting a js integer value of 257 to base-256 is:\n *\n * var value = 257;\n * var bytes = [];\n * bytes[0] = (value >>> 8) & 0xFF; // most significant byte first\n * bytes[1] = value & 0xFF; // least significant byte last\n *\n * On the ASN.1 UNIVERSAL Object Identifier (OID) type:\n *\n * An OID can be written like: \"value1.value2.value3...valueN\"\n *\n * The DER encoding rules:\n *\n * The first byte has the value 40 * value1 + value2.\n * The following bytes, if any, encode the remaining values. Each value is\n * encoded in base 128, most significant digit first (big endian), with as\n * few digits as possible, and the most significant bit of each byte set\n * to 1 except the last in each value's encoding. For example: Given the\n * OID \"1.2.840.113549\", its DER encoding is (remember each byte except the\n * last one in each encoding is OR'd with 0x80):\n *\n * byte 1: 40 * 1 + 2 = 42 = 0x2A.\n * bytes 2-3: 128 * 6 + 72 = 840 = 6 72 = 6 72 = 0x0648 = 0x8648\n * bytes 4-6: 16384 * 6 + 128 * 119 + 13 = 6 119 13 = 0x06770D = 0x86F70D\n *\n * The final value is: 0x2A864886F70D.\n * The full OID (including ASN.1 tag and length of 6 bytes) is:\n * 0x06062A864886F70D\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./oids');\n\n/* ASN.1 API */\nvar asn1 = module.exports = forge.asn1 = forge.asn1 || {};\n\n/**\n * ASN.1 classes.\n */\nasn1.Class = {\n UNIVERSAL: 0x00,\n APPLICATION: 0x40,\n CONTEXT_SPECIFIC: 0x80,\n PRIVATE: 0xC0\n};\n\n/**\n * ASN.1 types. Not all types are supported by this implementation, only\n * those necessary to implement a simple PKI are implemented.\n */\nasn1.Type = {\n NONE: 0,\n BOOLEAN: 1,\n INTEGER: 2,\n BITSTRING: 3,\n OCTETSTRING: 4,\n NULL: 5,\n OID: 6,\n ODESC: 7,\n EXTERNAL: 8,\n REAL: 9,\n ENUMERATED: 10,\n EMBEDDED: 11,\n UTF8: 12,\n ROID: 13,\n SEQUENCE: 16,\n SET: 17,\n PRINTABLESTRING: 19,\n IA5STRING: 22,\n UTCTIME: 23,\n GENERALIZEDTIME: 24,\n BMPSTRING: 30\n};\n\n/**\n * Creates a new asn1 object.\n *\n * @param tagClass the tag class for the object.\n * @param type the data type (tag number) for the object.\n * @param constructed true if the asn1 object is in constructed form.\n * @param value the value for the object, if it is not constructed.\n * @param [options] the options to use:\n * [bitStringContents] the plain BIT STRING content including padding\n * byte.\n *\n * @return the asn1 object.\n */\nasn1.create = function(tagClass, type, constructed, value, options) {\n /* An asn1 object has a tagClass, a type, a constructed flag, and a\n value. The value's type depends on the constructed flag. If\n constructed, it will contain a list of other asn1 objects. If not,\n it will contain the ASN.1 value as an array of bytes formatted\n according to the ASN.1 data type. */\n\n // remove undefined values\n if(forge.util.isArray(value)) {\n var tmp = [];\n for(var i = 0; i < value.length; ++i) {\n if(value[i] !== undefined) {\n tmp.push(value[i]);\n }\n }\n value = tmp;\n }\n\n var obj = {\n tagClass: tagClass,\n type: type,\n constructed: constructed,\n composed: constructed || forge.util.isArray(value),\n value: value\n };\n if(options && 'bitStringContents' in options) {\n // TODO: copy byte buffer if it's a buffer not a string\n obj.bitStringContents = options.bitStringContents;\n // TODO: add readonly flag to avoid this overhead\n // save copy to detect changes\n obj.original = asn1.copy(obj);\n }\n return obj;\n};\n\n/**\n * Copies an asn1 object.\n *\n * @param obj the asn1 object.\n * @param [options] copy options:\n * [excludeBitStringContents] true to not copy bitStringContents\n *\n * @return the a copy of the asn1 object.\n */\nasn1.copy = function(obj, options) {\n var copy;\n\n if(forge.util.isArray(obj)) {\n copy = [];\n for(var i = 0; i < obj.length; ++i) {\n copy.push(asn1.copy(obj[i], options));\n }\n return copy;\n }\n\n if(typeof obj === 'string') {\n // TODO: copy byte buffer if it's a buffer not a string\n return obj;\n }\n\n copy = {\n tagClass: obj.tagClass,\n type: obj.type,\n constructed: obj.constructed,\n composed: obj.composed,\n value: asn1.copy(obj.value, options)\n };\n if(options && !options.excludeBitStringContents) {\n // TODO: copy byte buffer if it's a buffer not a string\n copy.bitStringContents = obj.bitStringContents;\n }\n return copy;\n};\n\n/**\n * Compares asn1 objects for equality.\n *\n * Note this function does not run in constant time.\n *\n * @param obj1 the first asn1 object.\n * @param obj2 the second asn1 object.\n * @param [options] compare options:\n * [includeBitStringContents] true to compare bitStringContents\n *\n * @return true if the asn1 objects are equal.\n */\nasn1.equals = function(obj1, obj2, options) {\n if(forge.util.isArray(obj1)) {\n if(!forge.util.isArray(obj2)) {\n return false;\n }\n if(obj1.length !== obj2.length) {\n return false;\n }\n for(var i = 0; i < obj1.length; ++i) {\n if(!asn1.equals(obj1[i], obj2[i])) {\n return false;\n }\n }\n return true;\n }\n\n if(typeof obj1 !== typeof obj2) {\n return false;\n }\n\n if(typeof obj1 === 'string') {\n return obj1 === obj2;\n }\n\n var equal = obj1.tagClass === obj2.tagClass &&\n obj1.type === obj2.type &&\n obj1.constructed === obj2.constructed &&\n obj1.composed === obj2.composed &&\n asn1.equals(obj1.value, obj2.value);\n if(options && options.includeBitStringContents) {\n equal = equal && (obj1.bitStringContents === obj2.bitStringContents);\n }\n\n return equal;\n};\n\n/**\n * Gets the length of a BER-encoded ASN.1 value.\n *\n * In case the length is not specified, undefined is returned.\n *\n * @param b the BER-encoded ASN.1 byte buffer, starting with the first\n * length byte.\n *\n * @return the length of the BER-encoded ASN.1 value or undefined.\n */\nasn1.getBerValueLength = function(b) {\n // TODO: move this function and related DER/BER functions to a der.js\n // file; better abstract ASN.1 away from der/ber.\n var b2 = b.getByte();\n if(b2 === 0x80) {\n return undefined;\n }\n\n // see if the length is \"short form\" or \"long form\" (bit 8 set)\n var length;\n var longForm = b2 & 0x80;\n if(!longForm) {\n // length is just the first byte\n length = b2;\n } else {\n // the number of bytes the length is specified in bits 7 through 1\n // and each length byte is in big-endian base-256\n length = b.getInt((b2 & 0x7F) << 3);\n }\n return length;\n};\n\n/**\n * Check if the byte buffer has enough bytes. Throws an Error if not.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the bytes remaining in the current parsing state.\n * @param n the number of bytes the buffer must have.\n */\nfunction _checkBufferLength(bytes, remaining, n) {\n if(n > remaining) {\n var error = new Error('Too few bytes to parse DER.');\n error.available = bytes.length();\n error.remaining = remaining;\n error.requested = n;\n throw error;\n }\n}\n\n/**\n * Gets the length of a BER-encoded ASN.1 value.\n *\n * In case the length is not specified, undefined is returned.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the bytes remaining in the current parsing state.\n *\n * @return the length of the BER-encoded ASN.1 value or undefined.\n */\nvar _getValueLength = function(bytes, remaining) {\n // TODO: move this function and related DER/BER functions to a der.js\n // file; better abstract ASN.1 away from der/ber.\n // fromDer already checked that this byte exists\n var b2 = bytes.getByte();\n remaining--;\n if(b2 === 0x80) {\n return undefined;\n }\n\n // see if the length is \"short form\" or \"long form\" (bit 8 set)\n var length;\n var longForm = b2 & 0x80;\n if(!longForm) {\n // length is just the first byte\n length = b2;\n } else {\n // the number of bytes the length is specified in bits 7 through 1\n // and each length byte is in big-endian base-256\n var longFormBytes = b2 & 0x7F;\n _checkBufferLength(bytes, remaining, longFormBytes);\n length = bytes.getInt(longFormBytes << 3);\n }\n // FIXME: this will only happen for 32 bit getInt with high bit set\n if(length < 0) {\n throw new Error('Negative length: ' + length);\n }\n return length;\n};\n\n/**\n * Parses an asn1 object from a byte buffer in DER format.\n *\n * @param bytes the byte buffer to parse from.\n * @param [strict] true to be strict when checking value lengths, false to\n * allow truncated values (default: true).\n * @param [options] object with options or boolean strict flag\n * [strict] true to be strict when checking value lengths, false to\n * allow truncated values (default: true).\n * [decodeBitStrings] true to attempt to decode the content of\n * BIT STRINGs (not OCTET STRINGs) using strict mode. Note that\n * without schema support to understand the data context this can\n * erroneously decode values that happen to be valid ASN.1. This\n * flag will be deprecated or removed as soon as schema support is\n * available. (default: true)\n *\n * @return the parsed asn1 object.\n */\nasn1.fromDer = function(bytes, options) {\n if(options === undefined) {\n options = {\n strict: true,\n decodeBitStrings: true\n };\n }\n if(typeof options === 'boolean') {\n options = {\n strict: options,\n decodeBitStrings: true\n };\n }\n if(!('strict' in options)) {\n options.strict = true;\n }\n if(!('decodeBitStrings' in options)) {\n options.decodeBitStrings = true;\n }\n\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n return _fromDer(bytes, bytes.length(), 0, options);\n};\n\n/**\n * Internal function to parse an asn1 object from a byte buffer in DER format.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the number of bytes remaining for this chunk.\n * @param depth the current parsing depth.\n * @param options object with same options as fromDer().\n *\n * @return the parsed asn1 object.\n */\nfunction _fromDer(bytes, remaining, depth, options) {\n // temporary storage for consumption calculations\n var start;\n\n // minimum length for ASN.1 DER structure is 2\n _checkBufferLength(bytes, remaining, 2);\n\n // get the first byte\n var b1 = bytes.getByte();\n // consumed one byte\n remaining--;\n\n // get the tag class\n var tagClass = (b1 & 0xC0);\n\n // get the type (bits 1-5)\n var type = b1 & 0x1F;\n\n // get the variable value length and adjust remaining bytes\n start = bytes.length();\n var length = _getValueLength(bytes, remaining);\n remaining -= start - bytes.length();\n\n // ensure there are enough bytes to get the value\n if(length !== undefined && length > remaining) {\n if(options.strict) {\n var error = new Error('Too few bytes to read ASN.1 value.');\n error.available = bytes.length();\n error.remaining = remaining;\n error.requested = length;\n throw error;\n }\n // Note: be lenient with truncated values and use remaining state bytes\n length = remaining;\n }\n\n // value storage\n var value;\n // possible BIT STRING contents storage\n var bitStringContents;\n\n // constructed flag is bit 6 (32 = 0x20) of the first byte\n var constructed = ((b1 & 0x20) === 0x20);\n if(constructed) {\n // parse child asn1 objects from the value\n value = [];\n if(length === undefined) {\n // asn1 object of indefinite length, read until end tag\n for(;;) {\n _checkBufferLength(bytes, remaining, 2);\n if(bytes.bytes(2) === String.fromCharCode(0, 0)) {\n bytes.getBytes(2);\n remaining -= 2;\n break;\n }\n start = bytes.length();\n value.push(_fromDer(bytes, remaining, depth + 1, options));\n remaining -= start - bytes.length();\n }\n } else {\n // parsing asn1 object of definite length\n while(length > 0) {\n start = bytes.length();\n value.push(_fromDer(bytes, length, depth + 1, options));\n remaining -= start - bytes.length();\n length -= start - bytes.length();\n }\n }\n }\n\n // if a BIT STRING, save the contents including padding\n if(value === undefined && tagClass === asn1.Class.UNIVERSAL &&\n type === asn1.Type.BITSTRING) {\n bitStringContents = bytes.bytes(length);\n }\n\n // determine if a non-constructed value should be decoded as a composed\n // value that contains other ASN.1 objects. BIT STRINGs (and OCTET STRINGs)\n // can be used this way.\n if(value === undefined && options.decodeBitStrings &&\n tagClass === asn1.Class.UNIVERSAL &&\n // FIXME: OCTET STRINGs not yet supported here\n // .. other parts of forge expect to decode OCTET STRINGs manually\n (type === asn1.Type.BITSTRING /*|| type === asn1.Type.OCTETSTRING*/) &&\n length > 1) {\n // save read position\n var savedRead = bytes.read;\n var savedRemaining = remaining;\n var unused = 0;\n if(type === asn1.Type.BITSTRING) {\n /* The first octet gives the number of bits by which the length of the\n bit string is less than the next multiple of eight (this is called\n the \"number of unused bits\").\n\n The second and following octets give the value of the bit string\n converted to an octet string. */\n _checkBufferLength(bytes, remaining, 1);\n unused = bytes.getByte();\n remaining--;\n }\n // if all bits are used, maybe the BIT/OCTET STRING holds ASN.1 objs\n if(unused === 0) {\n try {\n // attempt to parse child asn1 object from the value\n // (stored in array to signal composed value)\n start = bytes.length();\n var subOptions = {\n // enforce strict mode to avoid parsing ASN.1 from plain data\n verbose: options.verbose,\n strict: true,\n decodeBitStrings: true\n };\n var composed = _fromDer(bytes, remaining, depth + 1, subOptions);\n var used = start - bytes.length();\n remaining -= used;\n if(type == asn1.Type.BITSTRING) {\n used++;\n }\n\n // if the data all decoded and the class indicates UNIVERSAL or\n // CONTEXT_SPECIFIC then assume we've got an encapsulated ASN.1 object\n var tc = composed.tagClass;\n if(used === length &&\n (tc === asn1.Class.UNIVERSAL || tc === asn1.Class.CONTEXT_SPECIFIC)) {\n value = [composed];\n }\n } catch(ex) {\n }\n }\n if(value === undefined) {\n // restore read position\n bytes.read = savedRead;\n remaining = savedRemaining;\n }\n }\n\n if(value === undefined) {\n // asn1 not constructed or composed, get raw value\n // TODO: do DER to OID conversion and vice-versa in .toDer?\n\n if(length === undefined) {\n if(options.strict) {\n throw new Error('Non-constructed ASN.1 object of indefinite length.');\n }\n // be lenient and use remaining state bytes\n length = remaining;\n }\n\n if(type === asn1.Type.BMPSTRING) {\n value = '';\n for(; length > 0; length -= 2) {\n _checkBufferLength(bytes, remaining, 2);\n value += String.fromCharCode(bytes.getInt16());\n remaining -= 2;\n }\n } else {\n value = bytes.getBytes(length);\n }\n }\n\n // add BIT STRING contents if available\n var asn1Options = bitStringContents === undefined ? null : {\n bitStringContents: bitStringContents\n };\n\n // create and return asn1 object\n return asn1.create(tagClass, type, constructed, value, asn1Options);\n}\n\n/**\n * Converts the given asn1 object to a buffer of bytes in DER format.\n *\n * @param asn1 the asn1 object to convert to bytes.\n *\n * @return the buffer of bytes.\n */\nasn1.toDer = function(obj) {\n var bytes = forge.util.createBuffer();\n\n // build the first byte\n var b1 = obj.tagClass | obj.type;\n\n // for storing the ASN.1 value\n var value = forge.util.createBuffer();\n\n // use BIT STRING contents if available and data not changed\n var useBitStringContents = false;\n if('bitStringContents' in obj) {\n useBitStringContents = true;\n if(obj.original) {\n useBitStringContents = asn1.equals(obj, obj.original);\n }\n }\n\n if(useBitStringContents) {\n value.putBytes(obj.bitStringContents);\n } else if(obj.composed) {\n // if composed, use each child asn1 object's DER bytes as value\n // turn on 6th bit (0x20 = 32) to indicate asn1 is constructed\n // from other asn1 objects\n if(obj.constructed) {\n b1 |= 0x20;\n } else {\n // type is a bit string, add unused bits of 0x00\n value.putByte(0x00);\n }\n\n // add all of the child DER bytes together\n for(var i = 0; i < obj.value.length; ++i) {\n if(obj.value[i] !== undefined) {\n value.putBuffer(asn1.toDer(obj.value[i]));\n }\n }\n } else {\n // use asn1.value directly\n if(obj.type === asn1.Type.BMPSTRING) {\n for(var i = 0; i < obj.value.length; ++i) {\n value.putInt16(obj.value.charCodeAt(i));\n }\n } else {\n // ensure integer is minimally-encoded\n // TODO: should all leading bytes be stripped vs just one?\n // .. ex '00 00 01' => '01'?\n if(obj.type === asn1.Type.INTEGER &&\n obj.value.length > 1 &&\n // leading 0x00 for positive integer\n ((obj.value.charCodeAt(0) === 0 &&\n (obj.value.charCodeAt(1) & 0x80) === 0) ||\n // leading 0xFF for negative integer\n (obj.value.charCodeAt(0) === 0xFF &&\n (obj.value.charCodeAt(1) & 0x80) === 0x80))) {\n value.putBytes(obj.value.substr(1));\n } else {\n value.putBytes(obj.value);\n }\n }\n }\n\n // add tag byte\n bytes.putByte(b1);\n\n // use \"short form\" encoding\n if(value.length() <= 127) {\n // one byte describes the length\n // bit 8 = 0 and bits 7-1 = length\n bytes.putByte(value.length() & 0x7F);\n } else {\n // use \"long form\" encoding\n // 2 to 127 bytes describe the length\n // first byte: bit 8 = 1 and bits 7-1 = # of additional bytes\n // other bytes: length in base 256, big-endian\n var len = value.length();\n var lenBytes = '';\n do {\n lenBytes += String.fromCharCode(len & 0xFF);\n len = len >>> 8;\n } while(len > 0);\n\n // set first byte to # bytes used to store the length and turn on\n // bit 8 to indicate long-form length is used\n bytes.putByte(lenBytes.length | 0x80);\n\n // concatenate length bytes in reverse since they were generated\n // little endian and we need big endian\n for(var i = lenBytes.length - 1; i >= 0; --i) {\n bytes.putByte(lenBytes.charCodeAt(i));\n }\n }\n\n // concatenate value bytes\n bytes.putBuffer(value);\n return bytes;\n};\n\n/**\n * Converts an OID dot-separated string to a byte buffer. The byte buffer\n * contains only the DER-encoded value, not any tag or length bytes.\n *\n * @param oid the OID dot-separated string.\n *\n * @return the byte buffer.\n */\nasn1.oidToDer = function(oid) {\n // split OID into individual values\n var values = oid.split('.');\n var bytes = forge.util.createBuffer();\n\n // first byte is 40 * value1 + value2\n bytes.putByte(40 * parseInt(values[0], 10) + parseInt(values[1], 10));\n // other bytes are each value in base 128 with 8th bit set except for\n // the last byte for each value\n var last, valueBytes, value, b;\n for(var i = 2; i < values.length; ++i) {\n // produce value bytes in reverse because we don't know how many\n // bytes it will take to store the value\n last = true;\n valueBytes = [];\n value = parseInt(values[i], 10);\n do {\n b = value & 0x7F;\n value = value >>> 7;\n // if value is not last, then turn on 8th bit\n if(!last) {\n b |= 0x80;\n }\n valueBytes.push(b);\n last = false;\n } while(value > 0);\n\n // add value bytes in reverse (needs to be in big endian)\n for(var n = valueBytes.length - 1; n >= 0; --n) {\n bytes.putByte(valueBytes[n]);\n }\n }\n\n return bytes;\n};\n\n/**\n * Converts a DER-encoded byte buffer to an OID dot-separated string. The\n * byte buffer should contain only the DER-encoded value, not any tag or\n * length bytes.\n *\n * @param bytes the byte buffer.\n *\n * @return the OID dot-separated string.\n */\nasn1.derToOid = function(bytes) {\n var oid;\n\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n // first byte is 40 * value1 + value2\n var b = bytes.getByte();\n oid = Math.floor(b / 40) + '.' + (b % 40);\n\n // other bytes are each value in base 128 with 8th bit set except for\n // the last byte for each value\n var value = 0;\n while(bytes.length() > 0) {\n b = bytes.getByte();\n value = value << 7;\n // not the last byte for the value\n if(b & 0x80) {\n value += b & 0x7F;\n } else {\n // last byte\n oid += '.' + (value + b);\n value = 0;\n }\n }\n\n return oid;\n};\n\n/**\n * Converts a UTCTime value to a date.\n *\n * Note: GeneralizedTime has 4 digits for the year and is used for X.509\n * dates past 2049. Parsing that structure hasn't been implemented yet.\n *\n * @param utc the UTCTime value to convert.\n *\n * @return the date.\n */\nasn1.utcTimeToDate = function(utc) {\n /* The following formats can be used:\n\n YYMMDDhhmmZ\n YYMMDDhhmm+hh'mm'\n YYMMDDhhmm-hh'mm'\n YYMMDDhhmmssZ\n YYMMDDhhmmss+hh'mm'\n YYMMDDhhmmss-hh'mm'\n\n Where:\n\n YY is the least significant two digits of the year\n MM is the month (01 to 12)\n DD is the day (01 to 31)\n hh is the hour (00 to 23)\n mm are the minutes (00 to 59)\n ss are the seconds (00 to 59)\n Z indicates that local time is GMT, + indicates that local time is\n later than GMT, and - indicates that local time is earlier than GMT\n hh' is the absolute value of the offset from GMT in hours\n mm' is the absolute value of the offset from GMT in minutes */\n var date = new Date();\n\n // if YY >= 50 use 19xx, if YY < 50 use 20xx\n var year = parseInt(utc.substr(0, 2), 10);\n year = (year >= 50) ? 1900 + year : 2000 + year;\n var MM = parseInt(utc.substr(2, 2), 10) - 1; // use 0-11 for month\n var DD = parseInt(utc.substr(4, 2), 10);\n var hh = parseInt(utc.substr(6, 2), 10);\n var mm = parseInt(utc.substr(8, 2), 10);\n var ss = 0;\n\n // not just YYMMDDhhmmZ\n if(utc.length > 11) {\n // get character after minutes\n var c = utc.charAt(10);\n var end = 10;\n\n // see if seconds are present\n if(c !== '+' && c !== '-') {\n // get seconds\n ss = parseInt(utc.substr(10, 2), 10);\n end += 2;\n }\n }\n\n // update date\n date.setUTCFullYear(year, MM, DD);\n date.setUTCHours(hh, mm, ss, 0);\n\n if(end) {\n // get +/- after end of time\n c = utc.charAt(end);\n if(c === '+' || c === '-') {\n // get hours+minutes offset\n var hhoffset = parseInt(utc.substr(end + 1, 2), 10);\n var mmoffset = parseInt(utc.substr(end + 4, 2), 10);\n\n // calculate offset in milliseconds\n var offset = hhoffset * 60 + mmoffset;\n offset *= 60000;\n\n // apply offset\n if(c === '+') {\n date.setTime(+date - offset);\n } else {\n date.setTime(+date + offset);\n }\n }\n }\n\n return date;\n};\n\n/**\n * Converts a GeneralizedTime value to a date.\n *\n * @param gentime the GeneralizedTime value to convert.\n *\n * @return the date.\n */\nasn1.generalizedTimeToDate = function(gentime) {\n /* The following formats can be used:\n\n YYYYMMDDHHMMSS\n YYYYMMDDHHMMSS.fff\n YYYYMMDDHHMMSSZ\n YYYYMMDDHHMMSS.fffZ\n YYYYMMDDHHMMSS+hh'mm'\n YYYYMMDDHHMMSS.fff+hh'mm'\n YYYYMMDDHHMMSS-hh'mm'\n YYYYMMDDHHMMSS.fff-hh'mm'\n\n Where:\n\n YYYY is the year\n MM is the month (01 to 12)\n DD is the day (01 to 31)\n hh is the hour (00 to 23)\n mm are the minutes (00 to 59)\n ss are the seconds (00 to 59)\n .fff is the second fraction, accurate to three decimal places\n Z indicates that local time is GMT, + indicates that local time is\n later than GMT, and - indicates that local time is earlier than GMT\n hh' is the absolute value of the offset from GMT in hours\n mm' is the absolute value of the offset from GMT in minutes */\n var date = new Date();\n\n var YYYY = parseInt(gentime.substr(0, 4), 10);\n var MM = parseInt(gentime.substr(4, 2), 10) - 1; // use 0-11 for month\n var DD = parseInt(gentime.substr(6, 2), 10);\n var hh = parseInt(gentime.substr(8, 2), 10);\n var mm = parseInt(gentime.substr(10, 2), 10);\n var ss = parseInt(gentime.substr(12, 2), 10);\n var fff = 0;\n var offset = 0;\n var isUTC = false;\n\n if(gentime.charAt(gentime.length - 1) === 'Z') {\n isUTC = true;\n }\n\n var end = gentime.length - 5, c = gentime.charAt(end);\n if(c === '+' || c === '-') {\n // get hours+minutes offset\n var hhoffset = parseInt(gentime.substr(end + 1, 2), 10);\n var mmoffset = parseInt(gentime.substr(end + 4, 2), 10);\n\n // calculate offset in milliseconds\n offset = hhoffset * 60 + mmoffset;\n offset *= 60000;\n\n // apply offset\n if(c === '+') {\n offset *= -1;\n }\n\n isUTC = true;\n }\n\n // check for second fraction\n if(gentime.charAt(14) === '.') {\n fff = parseFloat(gentime.substr(14), 10) * 1000;\n }\n\n if(isUTC) {\n date.setUTCFullYear(YYYY, MM, DD);\n date.setUTCHours(hh, mm, ss, fff);\n\n // apply offset\n date.setTime(+date + offset);\n } else {\n date.setFullYear(YYYY, MM, DD);\n date.setHours(hh, mm, ss, fff);\n }\n\n return date;\n};\n\n/**\n * Converts a date to a UTCTime value.\n *\n * Note: GeneralizedTime has 4 digits for the year and is used for X.509\n * dates past 2049. Converting to a GeneralizedTime hasn't been\n * implemented yet.\n *\n * @param date the date to convert.\n *\n * @return the UTCTime value.\n */\nasn1.dateToUtcTime = function(date) {\n // TODO: validate; currently assumes proper format\n if(typeof date === 'string') {\n return date;\n }\n\n var rval = '';\n\n // create format YYMMDDhhmmssZ\n var format = [];\n format.push(('' + date.getUTCFullYear()).substr(2));\n format.push('' + (date.getUTCMonth() + 1));\n format.push('' + date.getUTCDate());\n format.push('' + date.getUTCHours());\n format.push('' + date.getUTCMinutes());\n format.push('' + date.getUTCSeconds());\n\n // ensure 2 digits are used for each format entry\n for(var i = 0; i < format.length; ++i) {\n if(format[i].length < 2) {\n rval += '0';\n }\n rval += format[i];\n }\n rval += 'Z';\n\n return rval;\n};\n\n/**\n * Converts a date to a GeneralizedTime value.\n *\n * @param date the date to convert.\n *\n * @return the GeneralizedTime value as a string.\n */\nasn1.dateToGeneralizedTime = function(date) {\n // TODO: validate; currently assumes proper format\n if(typeof date === 'string') {\n return date;\n }\n\n var rval = '';\n\n // create format YYYYMMDDHHMMSSZ\n var format = [];\n format.push('' + date.getUTCFullYear());\n format.push('' + (date.getUTCMonth() + 1));\n format.push('' + date.getUTCDate());\n format.push('' + date.getUTCHours());\n format.push('' + date.getUTCMinutes());\n format.push('' + date.getUTCSeconds());\n\n // ensure 2 digits are used for each format entry\n for(var i = 0; i < format.length; ++i) {\n if(format[i].length < 2) {\n rval += '0';\n }\n rval += format[i];\n }\n rval += 'Z';\n\n return rval;\n};\n\n/**\n * Converts a javascript integer to a DER-encoded byte buffer to be used\n * as the value for an INTEGER type.\n *\n * @param x the integer.\n *\n * @return the byte buffer.\n */\nasn1.integerToDer = function(x) {\n var rval = forge.util.createBuffer();\n if(x >= -0x80 && x < 0x80) {\n return rval.putSignedInt(x, 8);\n }\n if(x >= -0x8000 && x < 0x8000) {\n return rval.putSignedInt(x, 16);\n }\n if(x >= -0x800000 && x < 0x800000) {\n return rval.putSignedInt(x, 24);\n }\n if(x >= -0x80000000 && x < 0x80000000) {\n return rval.putSignedInt(x, 32);\n }\n var error = new Error('Integer too large; max is 32-bits.');\n error.integer = x;\n throw error;\n};\n\n/**\n * Converts a DER-encoded byte buffer to a javascript integer. This is\n * typically used to decode the value of an INTEGER type.\n *\n * @param bytes the byte buffer.\n *\n * @return the integer.\n */\nasn1.derToInteger = function(bytes) {\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n var n = bytes.length() * 8;\n if(n > 32) {\n throw new Error('Integer too large; max is 32-bits.');\n }\n return bytes.getSignedInt(n);\n};\n\n/**\n * Validates that the given ASN.1 object is at least a super set of the\n * given ASN.1 structure. Only tag classes and types are checked. An\n * optional map may also be provided to capture ASN.1 values while the\n * structure is checked.\n *\n * To capture an ASN.1 value, set an object in the validator's 'capture'\n * parameter to the key to use in the capture map. To capture the full\n * ASN.1 object, specify 'captureAsn1'. To capture BIT STRING bytes, including\n * the leading unused bits counter byte, specify 'captureBitStringContents'.\n * To capture BIT STRING bytes, without the leading unused bits counter byte,\n * specify 'captureBitStringValue'.\n *\n * Objects in the validator may set a field 'optional' to true to indicate\n * that it isn't necessary to pass validation.\n *\n * @param obj the ASN.1 object to validate.\n * @param v the ASN.1 structure validator.\n * @param capture an optional map to capture values in.\n * @param errors an optional array for storing validation errors.\n *\n * @return true on success, false on failure.\n */\nasn1.validate = function(obj, v, capture, errors) {\n var rval = false;\n\n // ensure tag class and type are the same if specified\n if((obj.tagClass === v.tagClass || typeof(v.tagClass) === 'undefined') &&\n (obj.type === v.type || typeof(v.type) === 'undefined')) {\n // ensure constructed flag is the same if specified\n if(obj.constructed === v.constructed ||\n typeof(v.constructed) === 'undefined') {\n rval = true;\n\n // handle sub values\n if(v.value && forge.util.isArray(v.value)) {\n var j = 0;\n for(var i = 0; rval && i < v.value.length; ++i) {\n rval = v.value[i].optional || false;\n if(obj.value[j]) {\n rval = asn1.validate(obj.value[j], v.value[i], capture, errors);\n if(rval) {\n ++j;\n } else if(v.value[i].optional) {\n rval = true;\n }\n }\n if(!rval && errors) {\n errors.push(\n '[' + v.name + '] ' +\n 'Tag class \"' + v.tagClass + '\", type \"' +\n v.type + '\" expected value length \"' +\n v.value.length + '\", got \"' +\n obj.value.length + '\"');\n }\n }\n }\n\n if(rval && capture) {\n if(v.capture) {\n capture[v.capture] = obj.value;\n }\n if(v.captureAsn1) {\n capture[v.captureAsn1] = obj;\n }\n if(v.captureBitStringContents && 'bitStringContents' in obj) {\n capture[v.captureBitStringContents] = obj.bitStringContents;\n }\n if(v.captureBitStringValue && 'bitStringContents' in obj) {\n var value;\n if(obj.bitStringContents.length < 2) {\n capture[v.captureBitStringValue] = '';\n } else {\n // FIXME: support unused bits with data shifting\n var unused = obj.bitStringContents.charCodeAt(0);\n if(unused !== 0) {\n throw new Error(\n 'captureBitStringValue only supported for zero unused bits');\n }\n capture[v.captureBitStringValue] = obj.bitStringContents.slice(1);\n }\n }\n }\n } else if(errors) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected constructed \"' + v.constructed + '\", got \"' +\n obj.constructed + '\"');\n }\n } else if(errors) {\n if(obj.tagClass !== v.tagClass) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected tag class \"' + v.tagClass + '\", got \"' +\n obj.tagClass + '\"');\n }\n if(obj.type !== v.type) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected type \"' + v.type + '\", got \"' + obj.type + '\"');\n }\n }\n return rval;\n};\n\n// regex for testing for non-latin characters\nvar _nonLatinRegex = /[^\\\\u0000-\\\\u00ff]/;\n\n/**\n * Pretty prints an ASN.1 object to a string.\n *\n * @param obj the object to write out.\n * @param level the level in the tree.\n * @param indentation the indentation to use.\n *\n * @return the string.\n */\nasn1.prettyPrint = function(obj, level, indentation) {\n var rval = '';\n\n // set default level and indentation\n level = level || 0;\n indentation = indentation || 2;\n\n // start new line for deep levels\n if(level > 0) {\n rval += '\\n';\n }\n\n // create indent\n var indent = '';\n for(var i = 0; i < level * indentation; ++i) {\n indent += ' ';\n }\n\n // print class:type\n rval += indent + 'Tag: ';\n switch(obj.tagClass) {\n case asn1.Class.UNIVERSAL:\n rval += 'Universal:';\n break;\n case asn1.Class.APPLICATION:\n rval += 'Application:';\n break;\n case asn1.Class.CONTEXT_SPECIFIC:\n rval += 'Context-Specific:';\n break;\n case asn1.Class.PRIVATE:\n rval += 'Private:';\n break;\n }\n\n if(obj.tagClass === asn1.Class.UNIVERSAL) {\n rval += obj.type;\n\n // known types\n switch(obj.type) {\n case asn1.Type.NONE:\n rval += ' (None)';\n break;\n case asn1.Type.BOOLEAN:\n rval += ' (Boolean)';\n break;\n case asn1.Type.INTEGER:\n rval += ' (Integer)';\n break;\n case asn1.Type.BITSTRING:\n rval += ' (Bit string)';\n break;\n case asn1.Type.OCTETSTRING:\n rval += ' (Octet string)';\n break;\n case asn1.Type.NULL:\n rval += ' (Null)';\n break;\n case asn1.Type.OID:\n rval += ' (Object Identifier)';\n break;\n case asn1.Type.ODESC:\n rval += ' (Object Descriptor)';\n break;\n case asn1.Type.EXTERNAL:\n rval += ' (External or Instance of)';\n break;\n case asn1.Type.REAL:\n rval += ' (Real)';\n break;\n case asn1.Type.ENUMERATED:\n rval += ' (Enumerated)';\n break;\n case asn1.Type.EMBEDDED:\n rval += ' (Embedded PDV)';\n break;\n case asn1.Type.UTF8:\n rval += ' (UTF8)';\n break;\n case asn1.Type.ROID:\n rval += ' (Relative Object Identifier)';\n break;\n case asn1.Type.SEQUENCE:\n rval += ' (Sequence)';\n break;\n case asn1.Type.SET:\n rval += ' (Set)';\n break;\n case asn1.Type.PRINTABLESTRING:\n rval += ' (Printable String)';\n break;\n case asn1.Type.IA5String:\n rval += ' (IA5String (ASCII))';\n break;\n case asn1.Type.UTCTIME:\n rval += ' (UTC time)';\n break;\n case asn1.Type.GENERALIZEDTIME:\n rval += ' (Generalized time)';\n break;\n case asn1.Type.BMPSTRING:\n rval += ' (BMP String)';\n break;\n }\n } else {\n rval += obj.type;\n }\n\n rval += '\\n';\n rval += indent + 'Constructed: ' + obj.constructed + '\\n';\n\n if(obj.composed) {\n var subvalues = 0;\n var sub = '';\n for(var i = 0; i < obj.value.length; ++i) {\n if(obj.value[i] !== undefined) {\n subvalues += 1;\n sub += asn1.prettyPrint(obj.value[i], level + 1, indentation);\n if((i + 1) < obj.value.length) {\n sub += ',';\n }\n }\n }\n rval += indent + 'Sub values: ' + subvalues + sub;\n } else {\n rval += indent + 'Value: ';\n if(obj.type === asn1.Type.OID) {\n var oid = asn1.derToOid(obj.value);\n rval += oid;\n if(forge.pki && forge.pki.oids) {\n if(oid in forge.pki.oids) {\n rval += ' (' + forge.pki.oids[oid] + ') ';\n }\n }\n }\n if(obj.type === asn1.Type.INTEGER) {\n try {\n rval += asn1.derToInteger(obj.value);\n } catch(ex) {\n rval += '0x' + forge.util.bytesToHex(obj.value);\n }\n } else if(obj.type === asn1.Type.BITSTRING) {\n // TODO: shift bits as needed to display without padding\n if(obj.value.length > 1) {\n // remove unused bits field\n rval += '0x' + forge.util.bytesToHex(obj.value.slice(1));\n } else {\n rval += '(none)';\n }\n // show unused bit count\n if(obj.value.length > 0) {\n var unused = obj.value.charCodeAt(0);\n if(unused == 1) {\n rval += ' (1 unused bit shown)';\n } else if(unused > 1) {\n rval += ' (' + unused + ' unused bits shown)';\n }\n }\n } else if(obj.type === asn1.Type.OCTETSTRING) {\n if(!_nonLatinRegex.test(obj.value)) {\n rval += '(' + obj.value + ') ';\n }\n rval += '0x' + forge.util.bytesToHex(obj.value);\n } else if(obj.type === asn1.Type.UTF8) {\n rval += forge.util.decodeUtf8(obj.value);\n } else if(obj.type === asn1.Type.PRINTABLESTRING ||\n obj.type === asn1.Type.IA5String) {\n rval += obj.value;\n } else if(_nonLatinRegex.test(obj.value)) {\n rval += '0x' + forge.util.bytesToHex(obj.value);\n } else if(obj.value.length === 0) {\n rval += '[null]';\n } else {\n rval += obj.value;\n }\n }\n\n return rval;\n};\n","/**\n * Node.js module for Forge message digests.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2017 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\nmodule.exports = forge.md = forge.md || {};\nforge.md.algorithms = forge.md.algorithms || {};\n","'use strict'\n\nconst pushable = require('it-pushable')\n\n/**\n * Treat one or more iterables as a single iterable.\n *\n * Nb. sources are iterated over in parallel so the\n * order of emitted items is not guaranteed.\n *\n * @template T\n * @param {...AsyncIterable|Iterable} sources\n * @returns {AsyncIterable}\n */\nconst merge = async function * (...sources) {\n const output = pushable()\n\n setTimeout(async () => {\n try {\n await Promise.all(\n sources.map(async (source) => {\n for await (const item of source) {\n output.push(item)\n }\n })\n )\n\n output.end()\n } catch (/** @type {any} */ err) {\n output.end(err)\n }\n }, 0)\n\n yield * output\n}\n\nmodule.exports = merge\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar dagPB = require('@ipld/dag-pb');\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar dagPB__namespace = /*#__PURE__*/_interopNamespace(dagPB);\n\nfunction createGet({repo, preload}) {\n async function get(cid, options = {}) {\n if (options.preload !== false) {\n preload(cid);\n }\n const block = await repo.blocks.get(cid, options);\n return dagPB__namespace.decode(block);\n }\n return withTimeoutOption.withTimeoutOption(get);\n}\n\nexports.createGet = createGet;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidPublicKey = exports.getHkdf = exports.verifySignedPayload = exports.getHandshakePayload = exports.decodePayload = exports.getPeerIdFromPayload = exports.signPayload = exports.createHandshakePayload = exports.getPayload = exports.generateKeypair = void 0;\nconst hkdf_1 = require(\"@stablelib/hkdf\");\nconst sha256_1 = require(\"@stablelib/sha256\");\nconst x25519 = __importStar(require(\"@stablelib/x25519\"));\nconst buffer_1 = require(\"buffer\");\nconst peer_id_1 = __importDefault(require(\"peer-id\"));\nconst payload_1 = require(\"./proto/payload\");\nconst equals_1 = require(\"uint8arrays/equals\");\nconst NoiseHandshakePayloadProto = payload_1.pb.NoiseHandshakePayload;\nfunction generateKeypair() {\n const keypair = x25519.generateKeyPair();\n return {\n publicKey: buffer_1.Buffer.from(keypair.publicKey.buffer, keypair.publicKey.byteOffset, keypair.publicKey.length),\n privateKey: buffer_1.Buffer.from(keypair.secretKey.buffer, keypair.secretKey.byteOffset, keypair.secretKey.length)\n };\n}\nexports.generateKeypair = generateKeypair;\nasync function getPayload(localPeer, staticPublicKey, earlyData) {\n const signedPayload = await signPayload(localPeer, getHandshakePayload(staticPublicKey));\n const earlyDataPayload = earlyData !== null && earlyData !== void 0 ? earlyData : buffer_1.Buffer.alloc(0);\n return createHandshakePayload(localPeer.marshalPubKey(), signedPayload, earlyDataPayload);\n}\nexports.getPayload = getPayload;\nfunction createHandshakePayload(libp2pPublicKey, signedPayload, earlyData) {\n const payloadInit = NoiseHandshakePayloadProto.create({\n identityKey: buffer_1.Buffer.from(libp2pPublicKey),\n identitySig: signedPayload,\n data: earlyData !== null && earlyData !== void 0 ? earlyData : null\n });\n return buffer_1.Buffer.from(NoiseHandshakePayloadProto.encode(payloadInit).finish());\n}\nexports.createHandshakePayload = createHandshakePayload;\nasync function signPayload(peerId, payload) {\n return buffer_1.Buffer.from(await peerId.privKey.sign(payload));\n}\nexports.signPayload = signPayload;\nasync function getPeerIdFromPayload(payload) {\n return await peer_id_1.default.createFromPubKey(buffer_1.Buffer.from(payload.identityKey));\n}\nexports.getPeerIdFromPayload = getPeerIdFromPayload;\nfunction decodePayload(payload) {\n return NoiseHandshakePayloadProto.toObject(NoiseHandshakePayloadProto.decode(buffer_1.Buffer.from(payload)));\n}\nexports.decodePayload = decodePayload;\nfunction getHandshakePayload(publicKey) {\n return buffer_1.Buffer.concat([buffer_1.Buffer.from('noise-libp2p-static-key:'), publicKey]);\n}\nexports.getHandshakePayload = getHandshakePayload;\nasync function isValidPeerId(peerId, publicKeyProtobuf) {\n const generatedPeerId = await peer_id_1.default.createFromPubKey(publicKeyProtobuf);\n return equals_1.equals(generatedPeerId.id, peerId);\n}\n/**\n * Verifies signed payload, throws on any irregularities.\n *\n * @param {bytes} noiseStaticKey - owner's noise static key\n * @param {bytes} payload - decoded payload\n * @param {PeerId} remotePeer - owner's libp2p peer ID\n * @returns {Promise} - peer ID of payload owner\n */\nasync function verifySignedPayload(noiseStaticKey, payload, remotePeer) {\n const identityKey = buffer_1.Buffer.from(payload.identityKey);\n if (!(await isValidPeerId(remotePeer.id, identityKey))) {\n throw new Error(\"Peer ID doesn't match libp2p public key.\");\n }\n const generatedPayload = getHandshakePayload(noiseStaticKey);\n // Unmarshaling from PublicKey protobuf\n const peerId = await peer_id_1.default.createFromPubKey(identityKey);\n // TODO remove this after libp2p-crypto ships proper types\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (!payload.identitySig || !peerId.pubKey.verify(generatedPayload, buffer_1.Buffer.from(payload.identitySig))) {\n throw new Error(\"Static key doesn't match to peer that signed payload!\");\n }\n return peerId;\n}\nexports.verifySignedPayload = verifySignedPayload;\nfunction getHkdf(ck, ikm) {\n const hkdf = new hkdf_1.HKDF(sha256_1.SHA256, ikm, ck);\n const okmU8Array = hkdf.expand(96);\n const okm = buffer_1.Buffer.from(okmU8Array.buffer, okmU8Array.byteOffset, okmU8Array.length);\n const k1 = okm.slice(0, 32);\n const k2 = okm.slice(32, 64);\n const k3 = okm.slice(64, 96);\n return [k1, k2, k3];\n}\nexports.getHkdf = getHkdf;\nfunction isValidPublicKey(pk) {\n if (!buffer_1.Buffer.isBuffer(pk)) {\n return false;\n }\n if (pk.length !== 32) {\n return false;\n }\n return true;\n}\nexports.isValidPublicKey = isValidPublicKey;\n//# sourceMappingURL=utils.js.map","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar debug = require('debug');\nvar equals = require('uint8arrays/equals');\nvar entry = require('../message/entry.js');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\n\nconst logger = (id, subsystem) => {\n const name = ['bitswap'];\n if (subsystem) {\n name.push(subsystem);\n }\n if (id) {\n name.push(`${ id.toB58String().slice(0, 8) }`);\n }\n return Object.assign(debug__default[\"default\"](name.join(':')), { error: debug__default[\"default\"](name.concat(['error']).join(':')) });\n};\nconst includesWith = (pred, x, list) => {\n let idx = 0;\n const len = list.length;\n while (idx < len) {\n if (pred(x, list[idx])) {\n return true;\n }\n idx += 1;\n }\n return false;\n};\nconst uniqWith = (pred, list) => {\n let idx = 0;\n const len = list.length;\n const result = [];\n let item;\n while (idx < len) {\n item = list[idx];\n if (!includesWith(pred, item, result)) {\n result[result.length] = item;\n }\n idx += 1;\n }\n return result;\n};\nconst groupBy = (pred, list) => {\n return list.reduce((acc, v) => {\n const k = pred(v);\n if (acc[k]) {\n acc[k].push(v);\n } else {\n acc[k] = [v];\n }\n return acc;\n }, {});\n};\nconst pullAllWith = (pred, list, values) => {\n return list.filter(i => {\n return !includesWith(pred, i, values);\n });\n};\nconst sortBy = (fn, list) => {\n return Array.prototype.slice.call(list, 0).sort((a, b) => {\n const aa = fn(a);\n const bb = fn(b);\n return aa < bb ? -1 : aa > bb ? 1 : 0;\n });\n};\nconst isMapEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, valueA] of a) {\n const valueB = b.get(key);\n if (valueB === undefined) {\n return false;\n }\n if (valueA instanceof Uint8Array && valueB instanceof Uint8Array && !equals.equals(valueA, valueB)) {\n return false;\n }\n if (valueA instanceof entry.BitswapMessageEntry && valueB instanceof entry.BitswapMessageEntry && !valueA.equals(valueB)) {\n return false;\n }\n }\n return true;\n};\n\nexports.groupBy = groupBy;\nexports.includesWith = includesWith;\nexports.isMapEqual = isMapEqual;\nexports.logger = logger;\nexports.pullAllWith = pullAllWith;\nexports.sortBy = sortBy;\nexports.uniqWith = uniqWith;\n","\"use strict\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nlet WS = null;\ntry {\n WS = WebSocket;\n if (WS == null) {\n throw new Error(\"inject please\");\n }\n}\ncatch (error) {\n const logger = new Logger(version);\n WS = function () {\n logger.throwError(\"WebSockets not supported in this environment\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new WebSocket()\"\n });\n };\n}\n//export default WS;\n//module.exports = WS;\nexport { WS as WebSocket };\n//# sourceMappingURL=ws.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { JsonRpcProvider } from \"./json-rpc-provider\";\nimport { WebSocket } from \"./ws\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n/**\n * Notes:\n *\n * This provider differs a bit from the polling providers. One main\n * difference is how it handles consistency. The polling providers\n * will stall responses to ensure a consistent state, while this\n * WebSocket provider assumes the connected backend will manage this.\n *\n * For example, if a polling provider emits an event which indicates\n * the event occurred in blockhash XXX, a call to fetch that block by\n * its hash XXX, if not present will retry until it is present. This\n * can occur when querying a pool of nodes that are mildly out of sync\n * with each other.\n */\nlet NextId = 1;\n// For more info about the Real-time Event API see:\n// https://geth.ethereum.org/docs/rpc/pubsub\nexport class WebSocketProvider extends JsonRpcProvider {\n constructor(url, network) {\n // This will be added in the future; please open an issue to expedite\n if (network === \"any\") {\n logger.throwError(\"WebSocketProvider does not support 'any' network yet\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"network:any\"\n });\n }\n super(url, network);\n this._pollingInterval = -1;\n this._wsReady = false;\n defineReadOnly(this, \"_websocket\", new WebSocket(this.connection.url));\n defineReadOnly(this, \"_requests\", {});\n defineReadOnly(this, \"_subs\", {});\n defineReadOnly(this, \"_subIds\", {});\n defineReadOnly(this, \"_detectNetwork\", super.detectNetwork());\n // Stall sending requests until the socket is open...\n this._websocket.onopen = () => {\n this._wsReady = true;\n Object.keys(this._requests).forEach((id) => {\n this._websocket.send(this._requests[id].payload);\n });\n };\n this._websocket.onmessage = (messageEvent) => {\n const data = messageEvent.data;\n const result = JSON.parse(data);\n if (result.id != null) {\n const id = String(result.id);\n const request = this._requests[id];\n delete this._requests[id];\n if (result.result !== undefined) {\n request.callback(null, result.result);\n this.emit(\"debug\", {\n action: \"response\",\n request: JSON.parse(request.payload),\n response: result.result,\n provider: this\n });\n }\n else {\n let error = null;\n if (result.error) {\n error = new Error(result.error.message || \"unknown error\");\n defineReadOnly(error, \"code\", result.error.code || null);\n defineReadOnly(error, \"response\", data);\n }\n else {\n error = new Error(\"unknown error\");\n }\n request.callback(error, undefined);\n this.emit(\"debug\", {\n action: \"response\",\n error: error,\n request: JSON.parse(request.payload),\n provider: this\n });\n }\n }\n else if (result.method === \"eth_subscription\") {\n // Subscription...\n const sub = this._subs[result.params.subscription];\n if (sub) {\n //this.emit.apply(this, );\n sub.processFunc(result.params.result);\n }\n }\n else {\n console.warn(\"this should not happen\");\n }\n };\n // This Provider does not actually poll, but we want to trigger\n // poll events for things that depend on them (like stalling for\n // block and transaction lookups)\n const fauxPoll = setInterval(() => {\n this.emit(\"poll\");\n }, 1000);\n if (fauxPoll.unref) {\n fauxPoll.unref();\n }\n }\n detectNetwork() {\n return this._detectNetwork;\n }\n get pollingInterval() {\n return 0;\n }\n resetEventsBlock(blockNumber) {\n logger.throwError(\"cannot reset events block on WebSocketProvider\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"resetEventBlock\"\n });\n }\n set pollingInterval(value) {\n logger.throwError(\"cannot set polling interval on WebSocketProvider\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setPollingInterval\"\n });\n }\n poll() {\n return __awaiter(this, void 0, void 0, function* () {\n return null;\n });\n }\n set polling(value) {\n if (!value) {\n return;\n }\n logger.throwError(\"cannot set polling on WebSocketProvider\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setPolling\"\n });\n }\n send(method, params) {\n const rid = NextId++;\n return new Promise((resolve, reject) => {\n function callback(error, result) {\n if (error) {\n return reject(error);\n }\n return resolve(result);\n }\n const payload = JSON.stringify({\n method: method,\n params: params,\n id: rid,\n jsonrpc: \"2.0\"\n });\n this.emit(\"debug\", {\n action: \"request\",\n request: JSON.parse(payload),\n provider: this\n });\n this._requests[String(rid)] = { callback, payload };\n if (this._wsReady) {\n this._websocket.send(payload);\n }\n });\n }\n static defaultUrl() {\n return \"ws:/\\/localhost:8546\";\n }\n _subscribe(tag, param, processFunc) {\n return __awaiter(this, void 0, void 0, function* () {\n let subIdPromise = this._subIds[tag];\n if (subIdPromise == null) {\n subIdPromise = Promise.all(param).then((param) => {\n return this.send(\"eth_subscribe\", param);\n });\n this._subIds[tag] = subIdPromise;\n }\n const subId = yield subIdPromise;\n this._subs[subId] = { tag, processFunc };\n });\n }\n _startEvent(event) {\n switch (event.type) {\n case \"block\":\n this._subscribe(\"block\", [\"newHeads\"], (result) => {\n const blockNumber = BigNumber.from(result.number).toNumber();\n this._emitted.block = blockNumber;\n this.emit(\"block\", blockNumber);\n });\n break;\n case \"pending\":\n this._subscribe(\"pending\", [\"newPendingTransactions\"], (result) => {\n this.emit(\"pending\", result);\n });\n break;\n case \"filter\":\n this._subscribe(event.tag, [\"logs\", this._getFilter(event.filter)], (result) => {\n if (result.removed == null) {\n result.removed = false;\n }\n this.emit(event.filter, this.formatter.filterLog(result));\n });\n break;\n case \"tx\": {\n const emitReceipt = (event) => {\n const hash = event.hash;\n this.getTransactionReceipt(hash).then((receipt) => {\n if (!receipt) {\n return;\n }\n this.emit(hash, receipt);\n });\n };\n // In case it is already mined\n emitReceipt(event);\n // To keep things simple, we start up a single newHeads subscription\n // to keep an eye out for transactions we are watching for.\n // Starting a subscription for an event (i.e. \"tx\") that is already\n // running is (basically) a nop.\n this._subscribe(\"tx\", [\"newHeads\"], (result) => {\n this._events.filter((e) => (e.type === \"tx\")).forEach(emitReceipt);\n });\n break;\n }\n // Nothing is needed\n case \"debug\":\n case \"poll\":\n case \"willPoll\":\n case \"didPoll\":\n case \"error\":\n break;\n default:\n console.log(\"unhandled:\", event);\n break;\n }\n }\n _stopEvent(event) {\n let tag = event.tag;\n if (event.type === \"tx\") {\n // There are remaining transaction event listeners\n if (this._events.filter((e) => (e.type === \"tx\")).length) {\n return;\n }\n tag = \"tx\";\n }\n else if (this.listenerCount(event.event)) {\n // There are remaining event listeners\n return;\n }\n const subId = this._subIds[tag];\n if (!subId) {\n return;\n }\n delete this._subIds[tag];\n subId.then((subId) => {\n if (!this._subs[subId]) {\n return;\n }\n delete this._subs[subId];\n this.send(\"eth_unsubscribe\", [subId]);\n });\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n // Wait until we have connected before trying to disconnect\n if (this._websocket.readyState === WebSocket.CONNECTING) {\n yield (new Promise((resolve) => {\n this._websocket.onopen = function () {\n resolve(true);\n };\n this._websocket.onerror = function () {\n resolve(false);\n };\n }));\n }\n // Hangup\n // See: https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes\n this._websocket.close(1000);\n });\n }\n}\n//# sourceMappingURL=websocket-provider.js.map","\"use strict\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { showThrottleMessage } from \"./formatter\";\nimport { WebSocketProvider } from \"./websocket-provider\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\n// This key was provided to ethers.js by Alchemy to be used by the\n// default provider, but it is recommended that for your own\n// production environments, that you acquire your own API key at:\n// https://dashboard.alchemyapi.io\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\";\nexport class AlchemyWebSocketProvider extends WebSocketProvider {\n constructor(network, apiKey) {\n const provider = new AlchemyProvider(network, apiKey);\n const url = provider.connection.url.replace(/^http/i, \"ws\")\n .replace(\".alchemyapi.\", \".ws.alchemyapi.\");\n super(url, provider.network);\n defineReadOnly(this, \"apiKey\", provider.apiKey);\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\nexport class AlchemyProvider extends UrlJsonRpcProvider {\n static getWebSocketProvider(network, apiKey) {\n return new AlchemyWebSocketProvider(network, apiKey);\n }\n static getApiKey(apiKey) {\n if (apiKey == null) {\n return defaultApiKey;\n }\n if (apiKey && typeof (apiKey) !== \"string\") {\n logger.throwArgumentError(\"invalid apiKey\", \"apiKey\", apiKey);\n }\n return apiKey;\n }\n static getUrl(network, apiKey) {\n let host = null;\n switch (network.name) {\n case \"homestead\":\n host = \"eth-mainnet.alchemyapi.io/v2/\";\n break;\n case \"ropsten\":\n host = \"eth-ropsten.alchemyapi.io/v2/\";\n break;\n case \"rinkeby\":\n host = \"eth-rinkeby.alchemyapi.io/v2/\";\n break;\n case \"goerli\":\n host = \"eth-goerli.alchemyapi.io/v2/\";\n break;\n case \"kovan\":\n host = \"eth-kovan.alchemyapi.io/v2/\";\n break;\n case \"matic\":\n host = \"polygon-mainnet.g.alchemy.com/v2/\";\n break;\n case \"maticmum\":\n host = \"polygon-mumbai.g.alchemy.com/v2/\";\n break;\n case \"arbitrum\":\n host = \"arb-mainnet.g.alchemy.com/v2/\";\n break;\n case \"arbitrum-rinkeby\":\n host = \"arb-rinkeby.g.alchemy.com/v2/\";\n break;\n case \"optimism\":\n host = \"opt-mainnet.g.alchemy.com/v2/\";\n break;\n case \"optimism-kovan\":\n host = \"opt-kovan.g.alchemy.com/v2/\";\n break;\n default:\n logger.throwArgumentError(\"unsupported network\", \"network\", arguments[0]);\n }\n return {\n allowGzip: true,\n url: (\"https:/\" + \"/\" + host + apiKey),\n throttleCallback: (attempt, url) => {\n if (apiKey === defaultApiKey) {\n showThrottleMessage();\n }\n return Promise.resolve(true);\n }\n };\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\n//# sourceMappingURL=alchemy-provider.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nexport class CloudflareProvider extends UrlJsonRpcProvider {\n static getApiKey(apiKey) {\n if (apiKey != null) {\n logger.throwArgumentError(\"apiKey not supported for cloudflare\", \"apiKey\", apiKey);\n }\n return null;\n }\n static getUrl(network, apiKey) {\n let host = null;\n switch (network.name) {\n case \"homestead\":\n host = \"https://cloudflare-eth.com/\";\n break;\n default:\n logger.throwArgumentError(\"unsupported network\", \"network\", arguments[0]);\n }\n return host;\n }\n perform(method, params) {\n const _super = Object.create(null, {\n perform: { get: () => super.perform }\n });\n return __awaiter(this, void 0, void 0, function* () {\n // The Cloudflare provider does not support eth_blockNumber,\n // so we get the latest block and pull it from that\n if (method === \"getBlockNumber\") {\n const block = yield _super.perform.call(this, \"getBlock\", { blockTag: \"latest\" });\n return block.number;\n }\n return _super.perform.call(this, method, params);\n });\n }\n}\n//# sourceMappingURL=cloudflare-provider.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { hexlify, hexValue, isHexString } from \"@ethersproject/bytes\";\nimport { deepCopy, defineReadOnly } from \"@ethersproject/properties\";\nimport { accessListify } from \"@ethersproject/transactions\";\nimport { fetchJson } from \"@ethersproject/web\";\nimport { showThrottleMessage } from \"./formatter\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { BaseProvider } from \"./base-provider\";\n// The transaction has already been sanitized by the calls in Provider\nfunction getTransactionPostData(transaction) {\n const result = {};\n for (let key in transaction) {\n if (transaction[key] == null) {\n continue;\n }\n let value = transaction[key];\n if (key === \"type\" && value === 0) {\n continue;\n }\n // Quantity-types require no leading zero, unless 0\n if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) {\n value = hexValue(hexlify(value));\n }\n else if (key === \"accessList\") {\n value = \"[\" + accessListify(value).map((set) => {\n return `{address:\"${set.address}\",storageKeys:[\"${set.storageKeys.join('\",\"')}\"]}`;\n }).join(\",\") + \"]\";\n }\n else {\n value = hexlify(value);\n }\n result[key] = value;\n }\n return result;\n}\nfunction getResult(result) {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n return result.result;\n }\n if (result.status != 1 || result.message != \"OK\") {\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n if ((result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n error.throttleRetry = true;\n }\n throw error;\n }\n return result.result;\n}\nfunction getJsonResult(result) {\n // This response indicates we are being throttled\n if (result && result.status == 0 && result.message == \"NOTOK\" && (result.result || \"\").toLowerCase().indexOf(\"rate limit\") >= 0) {\n const error = new Error(\"throttled response\");\n error.result = JSON.stringify(result);\n error.throttleRetry = true;\n throw error;\n }\n if (result.jsonrpc != \"2.0\") {\n // @TODO: not any\n const error = new Error(\"invalid response\");\n error.result = JSON.stringify(result);\n throw error;\n }\n if (result.error) {\n // @TODO: not any\n const error = new Error(result.error.message || \"unknown error\");\n if (result.error.code) {\n error.code = result.error.code;\n }\n if (result.error.data) {\n error.data = result.error.data;\n }\n throw error;\n }\n return result.result;\n}\n// The blockTag was normalized as a string by the Provider pre-perform operations\nfunction checkLogTag(blockTag) {\n if (blockTag === \"pending\") {\n throw new Error(\"pending not supported\");\n }\n if (blockTag === \"latest\") {\n return blockTag;\n }\n return parseInt(blockTag.substring(2), 16);\n}\nconst defaultApiKey = \"9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB\";\nfunction checkError(method, error, transaction) {\n // Undo the \"convenience\" some nodes are attempting to prevent backwards\n // incompatibility; maybe for v6 consider forwarding reverts as errors\n if (method === \"call\" && error.code === Logger.errors.SERVER_ERROR) {\n const e = error.error;\n // Etherscan keeps changing their string\n if (e && (e.message.match(/reverted/i) || e.message.match(/VM execution error/i))) {\n // Etherscan prefixes the data like \"Reverted 0x1234\"\n let data = e.data;\n if (data) {\n data = \"0x\" + data.replace(/^.*0x/i, \"\");\n }\n if (isHexString(data)) {\n return data;\n }\n logger.throwError(\"missing revert data in call exception\", Logger.errors.CALL_EXCEPTION, {\n error, data: \"0x\"\n });\n }\n }\n // Get the message from any nested error structure\n let message = error.message;\n if (error.code === Logger.errors.SERVER_ERROR) {\n if (error.error && typeof (error.error.message) === \"string\") {\n message = error.error.message;\n }\n else if (typeof (error.body) === \"string\") {\n message = error.body;\n }\n else if (typeof (error.responseText) === \"string\") {\n message = error.responseText;\n }\n }\n message = (message || \"\").toLowerCase();\n // \"Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 21464000000000 and got: 0\"\n if (message.match(/insufficient funds/)) {\n logger.throwError(\"insufficient funds for intrinsic transaction cost\", Logger.errors.INSUFFICIENT_FUNDS, {\n error, method, transaction\n });\n }\n // \"Transaction with the same hash was already imported.\"\n if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n logger.throwError(\"nonce has already been used\", Logger.errors.NONCE_EXPIRED, {\n error, method, transaction\n });\n }\n // \"Transaction gas price is too low. There is another transaction with same nonce in the queue. Try increasing the gas price or incrementing the nonce.\"\n if (message.match(/another transaction with same nonce/)) {\n logger.throwError(\"replacement fee too low\", Logger.errors.REPLACEMENT_UNDERPRICED, {\n error, method, transaction\n });\n }\n if (message.match(/execution failed due to an exception|execution reverted/)) {\n logger.throwError(\"cannot estimate gas; transaction may fail or may require manual gas limit\", Logger.errors.UNPREDICTABLE_GAS_LIMIT, {\n error, method, transaction\n });\n }\n throw error;\n}\nexport class EtherscanProvider extends BaseProvider {\n constructor(network, apiKey) {\n logger.checkNew(new.target, EtherscanProvider);\n super(network);\n defineReadOnly(this, \"baseUrl\", this.getBaseUrl());\n defineReadOnly(this, \"apiKey\", apiKey || defaultApiKey);\n }\n getBaseUrl() {\n switch (this.network ? this.network.name : \"invalid\") {\n case \"homestead\":\n return \"https:/\\/api.etherscan.io\";\n case \"ropsten\":\n return \"https:/\\/api-ropsten.etherscan.io\";\n case \"rinkeby\":\n return \"https:/\\/api-rinkeby.etherscan.io\";\n case \"kovan\":\n return \"https:/\\/api-kovan.etherscan.io\";\n case \"goerli\":\n return \"https:/\\/api-goerli.etherscan.io\";\n default:\n }\n return logger.throwArgumentError(\"unsupported network\", \"network\", name);\n }\n getUrl(module, params) {\n const query = Object.keys(params).reduce((accum, key) => {\n const value = params[key];\n if (value != null) {\n accum += `&${key}=${value}`;\n }\n return accum;\n }, \"\");\n const apiKey = ((this.apiKey) ? `&apikey=${this.apiKey}` : \"\");\n return `${this.baseUrl}/api?module=${module}${query}${apiKey}`;\n }\n getPostUrl() {\n return `${this.baseUrl}/api`;\n }\n getPostData(module, params) {\n params.module = module;\n params.apikey = this.apiKey;\n return params;\n }\n fetch(module, params, post) {\n return __awaiter(this, void 0, void 0, function* () {\n const url = (post ? this.getPostUrl() : this.getUrl(module, params));\n const payload = (post ? this.getPostData(module, params) : null);\n const procFunc = (module === \"proxy\") ? getJsonResult : getResult;\n this.emit(\"debug\", {\n action: \"request\",\n request: url,\n provider: this\n });\n const connection = {\n url: url,\n throttleSlotInterval: 1000,\n throttleCallback: (attempt, url) => {\n if (this.isCommunityResource()) {\n showThrottleMessage();\n }\n return Promise.resolve(true);\n }\n };\n let payloadStr = null;\n if (payload) {\n connection.headers = { \"content-type\": \"application/x-www-form-urlencoded; charset=UTF-8\" };\n payloadStr = Object.keys(payload).map((key) => {\n return `${key}=${payload[key]}`;\n }).join(\"&\");\n }\n const result = yield fetchJson(connection, payloadStr, procFunc || getJsonResult);\n this.emit(\"debug\", {\n action: \"response\",\n request: url,\n response: deepCopy(result),\n provider: this\n });\n return result;\n });\n }\n detectNetwork() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.network;\n });\n }\n perform(method, params) {\n const _super = Object.create(null, {\n perform: { get: () => super.perform }\n });\n return __awaiter(this, void 0, void 0, function* () {\n switch (method) {\n case \"getBlockNumber\":\n return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n case \"getGasPrice\":\n return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n case \"getBalance\":\n // Returns base-10 result\n return this.fetch(\"account\", {\n action: \"balance\",\n address: params.address,\n tag: params.blockTag\n });\n case \"getTransactionCount\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionCount\",\n address: params.address,\n tag: params.blockTag\n });\n case \"getCode\":\n return this.fetch(\"proxy\", {\n action: \"eth_getCode\",\n address: params.address,\n tag: params.blockTag\n });\n case \"getStorageAt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getStorageAt\",\n address: params.address,\n position: params.position,\n tag: params.blockTag\n });\n case \"sendTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_sendRawTransaction\",\n hex: params.signedTransaction\n }, true).catch((error) => {\n return checkError(\"sendTransaction\", error, params.signedTransaction);\n });\n case \"getBlock\":\n if (params.blockTag) {\n return this.fetch(\"proxy\", {\n action: \"eth_getBlockByNumber\",\n tag: params.blockTag,\n boolean: (params.includeTransactions ? \"true\" : \"false\")\n });\n }\n throw new Error(\"getBlock by blockHash not implemented\");\n case \"getTransaction\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionByHash\",\n txhash: params.transactionHash\n });\n case \"getTransactionReceipt\":\n return this.fetch(\"proxy\", {\n action: \"eth_getTransactionReceipt\",\n txhash: params.transactionHash\n });\n case \"call\": {\n if (params.blockTag !== \"latest\") {\n throw new Error(\"EtherscanProvider does not support blockTag for call\");\n }\n const postData = getTransactionPostData(params.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_call\";\n try {\n return yield this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return checkError(\"call\", error, params.transaction);\n }\n }\n case \"estimateGas\": {\n const postData = getTransactionPostData(params.transaction);\n postData.module = \"proxy\";\n postData.action = \"eth_estimateGas\";\n try {\n return yield this.fetch(\"proxy\", postData, true);\n }\n catch (error) {\n return checkError(\"estimateGas\", error, params.transaction);\n }\n }\n case \"getLogs\": {\n const args = { action: \"getLogs\" };\n if (params.filter.fromBlock) {\n args.fromBlock = checkLogTag(params.filter.fromBlock);\n }\n if (params.filter.toBlock) {\n args.toBlock = checkLogTag(params.filter.toBlock);\n }\n if (params.filter.address) {\n args.address = params.filter.address;\n }\n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n logger.throwError(\"unsupported topic count\", Logger.errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n }\n if (params.filter.topics.length === 1) {\n const topic0 = params.filter.topics[0];\n if (typeof (topic0) !== \"string\" || topic0.length !== 66) {\n logger.throwError(\"unsupported topic format\", Logger.errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n }\n args.topic0 = topic0;\n }\n }\n const logs = yield this.fetch(\"logs\", args);\n // Cache txHash => blockHash\n let blocks = {};\n // Add any missing blockHash to the logs\n for (let i = 0; i < logs.length; i++) {\n const log = logs[i];\n if (log.blockHash != null) {\n continue;\n }\n if (blocks[log.blockNumber] == null) {\n const block = yield this.getBlock(log.blockNumber);\n if (block) {\n blocks[log.blockNumber] = block.hash;\n }\n }\n log.blockHash = blocks[log.blockNumber];\n }\n return logs;\n }\n case \"getEtherPrice\":\n if (this.network.name !== \"homestead\") {\n return 0.0;\n }\n return parseFloat((yield this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n default:\n break;\n }\n return _super.perform.call(this, method, params);\n });\n }\n // Note: The `page` page parameter only allows pagination within the\n // 10,000 window available without a page and offset parameter\n // Error: Result window is too large, PageNo x Offset size must\n // be less than or equal to 10000\n getHistory(addressOrName, startBlock, endBlock) {\n return __awaiter(this, void 0, void 0, function* () {\n const params = {\n action: \"txlist\",\n address: (yield this.resolveName(addressOrName)),\n startblock: ((startBlock == null) ? 0 : startBlock),\n endblock: ((endBlock == null) ? 99999999 : endBlock),\n sort: \"asc\"\n };\n const result = yield this.fetch(\"account\", params);\n return result.map((tx) => {\n [\"contractAddress\", \"to\"].forEach(function (key) {\n if (tx[key] == \"\") {\n delete tx[key];\n }\n });\n if (tx.creates == null && tx.contractAddress != null) {\n tx.creates = tx.contractAddress;\n }\n const item = this.formatter.transactionResponse(tx);\n if (tx.timeStamp) {\n item.timestamp = parseInt(tx.timeStamp);\n }\n return item;\n });\n });\n }\n isCommunityResource() {\n return (this.apiKey === defaultApiKey);\n }\n}\n//# sourceMappingURL=etherscan-provider.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Provider } from \"@ethersproject/abstract-provider\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { isHexString } from \"@ethersproject/bytes\";\nimport { deepCopy, defineReadOnly, shallowCopy } from \"@ethersproject/properties\";\nimport { shuffled } from \"@ethersproject/random\";\nimport { poll } from \"@ethersproject/web\";\nimport { BaseProvider } from \"./base-provider\";\nimport { isCommunityResource } from \"./formatter\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nfunction now() { return (new Date()).getTime(); }\n// Returns to network as long as all agree, or null if any is null.\n// Throws an error if any two networks do not match.\nfunction checkNetworks(networks) {\n let result = null;\n for (let i = 0; i < networks.length; i++) {\n const network = networks[i];\n // Null! We do not know our network; bail.\n if (network == null) {\n return null;\n }\n if (result) {\n // Make sure the network matches the previous networks\n if (!(result.name === network.name && result.chainId === network.chainId &&\n ((result.ensAddress === network.ensAddress) || (result.ensAddress == null && network.ensAddress == null)))) {\n logger.throwArgumentError(\"provider mismatch\", \"networks\", networks);\n }\n }\n else {\n result = network;\n }\n }\n return result;\n}\nfunction median(values, maxDelta) {\n values = values.slice().sort();\n const middle = Math.floor(values.length / 2);\n // Odd length; take the middle\n if (values.length % 2) {\n return values[middle];\n }\n // Even length; take the average of the two middle\n const a = values[middle - 1], b = values[middle];\n if (maxDelta != null && Math.abs(a - b) > maxDelta) {\n return null;\n }\n return (a + b) / 2;\n}\nfunction serialize(value) {\n if (value === null) {\n return \"null\";\n }\n else if (typeof (value) === \"number\" || typeof (value) === \"boolean\") {\n return JSON.stringify(value);\n }\n else if (typeof (value) === \"string\") {\n return value;\n }\n else if (BigNumber.isBigNumber(value)) {\n return value.toString();\n }\n else if (Array.isArray(value)) {\n return JSON.stringify(value.map((i) => serialize(i)));\n }\n else if (typeof (value) === \"object\") {\n const keys = Object.keys(value);\n keys.sort();\n return \"{\" + keys.map((key) => {\n let v = value[key];\n if (typeof (v) === \"function\") {\n v = \"[function]\";\n }\n else {\n v = serialize(v);\n }\n return JSON.stringify(key) + \":\" + v;\n }).join(\",\") + \"}\";\n }\n throw new Error(\"unknown value type: \" + typeof (value));\n}\n// Next request ID to use for emitting debug info\nlet nextRid = 1;\n;\nfunction stall(duration) {\n let cancel = null;\n let timer = null;\n let promise = (new Promise((resolve) => {\n cancel = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n resolve();\n };\n timer = setTimeout(cancel, duration);\n }));\n const wait = (func) => {\n promise = promise.then(func);\n return promise;\n };\n function getPromise() {\n return promise;\n }\n return { cancel, getPromise, wait };\n}\nconst ForwardErrors = [\n Logger.errors.CALL_EXCEPTION,\n Logger.errors.INSUFFICIENT_FUNDS,\n Logger.errors.NONCE_EXPIRED,\n Logger.errors.REPLACEMENT_UNDERPRICED,\n Logger.errors.UNPREDICTABLE_GAS_LIMIT\n];\nconst ForwardProperties = [\n \"address\",\n \"args\",\n \"errorArgs\",\n \"errorSignature\",\n \"method\",\n \"transaction\",\n];\n;\nfunction exposeDebugConfig(config, now) {\n const result = {\n weight: config.weight\n };\n Object.defineProperty(result, \"provider\", { get: () => config.provider });\n if (config.start) {\n result.start = config.start;\n }\n if (now) {\n result.duration = (now - config.start);\n }\n if (config.done) {\n if (config.error) {\n result.error = config.error;\n }\n else {\n result.result = config.result || null;\n }\n }\n return result;\n}\nfunction normalizedTally(normalize, quorum) {\n return function (configs) {\n // Count the votes for each result\n const tally = {};\n configs.forEach((c) => {\n const value = normalize(c.result);\n if (!tally[value]) {\n tally[value] = { count: 0, result: c.result };\n }\n tally[value].count++;\n });\n // Check for a quorum on any given result\n const keys = Object.keys(tally);\n for (let i = 0; i < keys.length; i++) {\n const check = tally[keys[i]];\n if (check.count >= quorum) {\n return check.result;\n }\n }\n // No quroum\n return undefined;\n };\n}\nfunction getProcessFunc(provider, method, params) {\n let normalize = serialize;\n switch (method) {\n case \"getBlockNumber\":\n // Return the median value, unless there is (median + 1) is also\n // present, in which case that is probably true and the median\n // is going to be stale soon. In the event of a malicious node,\n // the lie will be true soon enough.\n return function (configs) {\n const values = configs.map((c) => c.result);\n // Get the median block number\n let blockNumber = median(configs.map((c) => c.result), 2);\n if (blockNumber == null) {\n return undefined;\n }\n blockNumber = Math.ceil(blockNumber);\n // If the next block height is present, its prolly safe to use\n if (values.indexOf(blockNumber + 1) >= 0) {\n blockNumber++;\n }\n // Don't ever roll back the blockNumber\n if (blockNumber >= provider._highestBlockNumber) {\n provider._highestBlockNumber = blockNumber;\n }\n return provider._highestBlockNumber;\n };\n case \"getGasPrice\":\n // Return the middle (round index up) value, similar to median\n // but do not average even entries and choose the higher.\n // Malicious actors must compromise 50% of the nodes to lie.\n return function (configs) {\n const values = configs.map((c) => c.result);\n values.sort();\n return values[Math.floor(values.length / 2)];\n };\n case \"getEtherPrice\":\n // Returns the median price. Malicious actors must compromise at\n // least 50% of the nodes to lie (in a meaningful way).\n return function (configs) {\n return median(configs.map((c) => c.result));\n };\n // No additional normalizing required; serialize is enough\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n case \"getStorageAt\":\n case \"call\":\n case \"estimateGas\":\n case \"getLogs\":\n break;\n // We drop the confirmations from transactions as it is approximate\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n normalize = function (tx) {\n if (tx == null) {\n return null;\n }\n tx = shallowCopy(tx);\n tx.confirmations = -1;\n return serialize(tx);\n };\n break;\n // We drop the confirmations from transactions as it is approximate\n case \"getBlock\":\n // We drop the confirmations from transactions as it is approximate\n if (params.includeTransactions) {\n normalize = function (block) {\n if (block == null) {\n return null;\n }\n block = shallowCopy(block);\n block.transactions = block.transactions.map((tx) => {\n tx = shallowCopy(tx);\n tx.confirmations = -1;\n return tx;\n });\n return serialize(block);\n };\n }\n else {\n normalize = function (block) {\n if (block == null) {\n return null;\n }\n return serialize(block);\n };\n }\n break;\n default:\n throw new Error(\"unknown method: \" + method);\n }\n // Return the result if and only if the expected quorum is\n // satisfied and agreed upon for the final result.\n return normalizedTally(normalize, provider.quorum);\n}\n// If we are doing a blockTag query, we need to make sure the backend is\n// caught up to the FallbackProvider, before sending a request to it.\nfunction waitForSync(config, blockNumber) {\n return __awaiter(this, void 0, void 0, function* () {\n const provider = (config.provider);\n if ((provider.blockNumber != null && provider.blockNumber >= blockNumber) || blockNumber === -1) {\n return provider;\n }\n return poll(() => {\n return new Promise((resolve, reject) => {\n setTimeout(function () {\n // We are synced\n if (provider.blockNumber >= blockNumber) {\n return resolve(provider);\n }\n // We're done; just quit\n if (config.cancelled) {\n return resolve(null);\n }\n // Try again, next block\n return resolve(undefined);\n }, 0);\n });\n }, { oncePoll: provider });\n });\n}\nfunction getRunner(config, currentBlockNumber, method, params) {\n return __awaiter(this, void 0, void 0, function* () {\n let provider = config.provider;\n switch (method) {\n case \"getBlockNumber\":\n case \"getGasPrice\":\n return provider[method]();\n case \"getEtherPrice\":\n if (provider.getEtherPrice) {\n return provider.getEtherPrice();\n }\n break;\n case \"getBalance\":\n case \"getTransactionCount\":\n case \"getCode\":\n if (params.blockTag && isHexString(params.blockTag)) {\n provider = yield waitForSync(config, currentBlockNumber);\n }\n return provider[method](params.address, params.blockTag || \"latest\");\n case \"getStorageAt\":\n if (params.blockTag && isHexString(params.blockTag)) {\n provider = yield waitForSync(config, currentBlockNumber);\n }\n return provider.getStorageAt(params.address, params.position, params.blockTag || \"latest\");\n case \"getBlock\":\n if (params.blockTag && isHexString(params.blockTag)) {\n provider = yield waitForSync(config, currentBlockNumber);\n }\n return provider[(params.includeTransactions ? \"getBlockWithTransactions\" : \"getBlock\")](params.blockTag || params.blockHash);\n case \"call\":\n case \"estimateGas\":\n if (params.blockTag && isHexString(params.blockTag)) {\n provider = yield waitForSync(config, currentBlockNumber);\n }\n return provider[method](params.transaction);\n case \"getTransaction\":\n case \"getTransactionReceipt\":\n return provider[method](params.transactionHash);\n case \"getLogs\": {\n let filter = params.filter;\n if ((filter.fromBlock && isHexString(filter.fromBlock)) || (filter.toBlock && isHexString(filter.toBlock))) {\n provider = yield waitForSync(config, currentBlockNumber);\n }\n return provider.getLogs(filter);\n }\n }\n return logger.throwError(\"unknown method error\", Logger.errors.UNKNOWN_ERROR, {\n method: method,\n params: params\n });\n });\n}\nexport class FallbackProvider extends BaseProvider {\n constructor(providers, quorum) {\n logger.checkNew(new.target, FallbackProvider);\n if (providers.length === 0) {\n logger.throwArgumentError(\"missing providers\", \"providers\", providers);\n }\n const providerConfigs = providers.map((configOrProvider, index) => {\n if (Provider.isProvider(configOrProvider)) {\n const stallTimeout = isCommunityResource(configOrProvider) ? 2000 : 750;\n const priority = 1;\n return Object.freeze({ provider: configOrProvider, weight: 1, stallTimeout, priority });\n }\n const config = shallowCopy(configOrProvider);\n if (config.priority == null) {\n config.priority = 1;\n }\n if (config.stallTimeout == null) {\n config.stallTimeout = isCommunityResource(configOrProvider) ? 2000 : 750;\n }\n if (config.weight == null) {\n config.weight = 1;\n }\n const weight = config.weight;\n if (weight % 1 || weight > 512 || weight < 1) {\n logger.throwArgumentError(\"invalid weight; must be integer in [1, 512]\", `providers[${index}].weight`, weight);\n }\n return Object.freeze(config);\n });\n const total = providerConfigs.reduce((accum, c) => (accum + c.weight), 0);\n if (quorum == null) {\n quorum = total / 2;\n }\n else if (quorum > total) {\n logger.throwArgumentError(\"quorum will always fail; larger than total weight\", \"quorum\", quorum);\n }\n // Are all providers' networks are known\n let networkOrReady = checkNetworks(providerConfigs.map((c) => (c.provider).network));\n // Not all networks are known; we must stall\n if (networkOrReady == null) {\n networkOrReady = new Promise((resolve, reject) => {\n setTimeout(() => {\n this.detectNetwork().then(resolve, reject);\n }, 0);\n });\n }\n super(networkOrReady);\n // Preserve a copy, so we do not get mutated\n defineReadOnly(this, \"providerConfigs\", Object.freeze(providerConfigs));\n defineReadOnly(this, \"quorum\", quorum);\n this._highestBlockNumber = -1;\n }\n detectNetwork() {\n return __awaiter(this, void 0, void 0, function* () {\n const networks = yield Promise.all(this.providerConfigs.map((c) => c.provider.getNetwork()));\n return checkNetworks(networks);\n });\n }\n perform(method, params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Sending transactions is special; always broadcast it to all backends\n if (method === \"sendTransaction\") {\n const results = yield Promise.all(this.providerConfigs.map((c) => {\n return c.provider.sendTransaction(params.signedTransaction).then((result) => {\n return result.hash;\n }, (error) => {\n return error;\n });\n }));\n // Any success is good enough (other errors are likely \"already seen\" errors\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n if (typeof (result) === \"string\") {\n return result;\n }\n }\n // They were all an error; pick the first error\n throw results[0];\n }\n // We need to make sure we are in sync with our backends, so we need\n // to know this before we can make a lot of calls\n if (this._highestBlockNumber === -1 && method !== \"getBlockNumber\") {\n yield this.getBlockNumber();\n }\n const processFunc = getProcessFunc(this, method, params);\n // Shuffle the providers and then sort them by their priority; we\n // shallowCopy them since we will store the result in them too\n const configs = shuffled(this.providerConfigs.map(shallowCopy));\n configs.sort((a, b) => (a.priority - b.priority));\n const currentBlockNumber = this._highestBlockNumber;\n let i = 0;\n let first = true;\n while (true) {\n const t0 = now();\n // Compute the inflight weight (exclude anything past)\n let inflightWeight = configs.filter((c) => (c.runner && ((t0 - c.start) < c.stallTimeout)))\n .reduce((accum, c) => (accum + c.weight), 0);\n // Start running enough to meet quorum\n while (inflightWeight < this.quorum && i < configs.length) {\n const config = configs[i++];\n const rid = nextRid++;\n config.start = now();\n config.staller = stall(config.stallTimeout);\n config.staller.wait(() => { config.staller = null; });\n config.runner = getRunner(config, currentBlockNumber, method, params).then((result) => {\n config.done = true;\n config.result = result;\n if (this.listenerCount(\"debug\")) {\n this.emit(\"debug\", {\n action: \"request\",\n rid: rid,\n backend: exposeDebugConfig(config, now()),\n request: { method: method, params: deepCopy(params) },\n provider: this\n });\n }\n }, (error) => {\n config.done = true;\n config.error = error;\n if (this.listenerCount(\"debug\")) {\n this.emit(\"debug\", {\n action: \"request\",\n rid: rid,\n backend: exposeDebugConfig(config, now()),\n request: { method: method, params: deepCopy(params) },\n provider: this\n });\n }\n });\n if (this.listenerCount(\"debug\")) {\n this.emit(\"debug\", {\n action: \"request\",\n rid: rid,\n backend: exposeDebugConfig(config, null),\n request: { method: method, params: deepCopy(params) },\n provider: this\n });\n }\n inflightWeight += config.weight;\n }\n // Wait for anything meaningful to finish or stall out\n const waiting = [];\n configs.forEach((c) => {\n if (c.done || !c.runner) {\n return;\n }\n waiting.push(c.runner);\n if (c.staller) {\n waiting.push(c.staller.getPromise());\n }\n });\n if (waiting.length) {\n yield Promise.race(waiting);\n }\n // Check the quorum and process the results; the process function\n // may additionally decide the quorum is not met\n const results = configs.filter((c) => (c.done && c.error == null));\n if (results.length >= this.quorum) {\n const result = processFunc(results);\n if (result !== undefined) {\n // Shut down any stallers\n configs.forEach(c => {\n if (c.staller) {\n c.staller.cancel();\n }\n c.cancelled = true;\n });\n return result;\n }\n if (!first) {\n yield stall(100).getPromise();\n }\n first = false;\n }\n // No result, check for errors that should be forwarded\n const errors = configs.reduce((accum, c) => {\n if (!c.done || c.error == null) {\n return accum;\n }\n const code = (c.error).code;\n if (ForwardErrors.indexOf(code) >= 0) {\n if (!accum[code]) {\n accum[code] = { error: c.error, weight: 0 };\n }\n accum[code].weight += c.weight;\n }\n return accum;\n }, ({}));\n Object.keys(errors).forEach((errorCode) => {\n const tally = errors[errorCode];\n if (tally.weight < this.quorum) {\n return;\n }\n // Shut down any stallers\n configs.forEach(c => {\n if (c.staller) {\n c.staller.cancel();\n }\n c.cancelled = true;\n });\n const e = (tally.error);\n const props = {};\n ForwardProperties.forEach((name) => {\n if (e[name] == null) {\n return;\n }\n props[name] = e[name];\n });\n logger.throwError(e.reason || e.message, errorCode, props);\n });\n // All configs have run to completion; we will never get more data\n if (configs.filter((c) => !c.done).length === 0) {\n break;\n }\n }\n // Shut down any stallers; shouldn't be any\n configs.forEach(c => {\n if (c.staller) {\n c.staller.cancel();\n }\n c.cancelled = true;\n });\n return logger.throwError(\"failed to meet quorum\", Logger.errors.SERVER_ERROR, {\n method: method,\n params: params,\n //results: configs.map((c) => c.result),\n //errors: configs.map((c) => c.error),\n results: configs.map((c) => exposeDebugConfig(c)),\n provider: this\n });\n });\n }\n}\n//# sourceMappingURL=fallback-provider.js.map","\"use strict\";\nconst IpcProvider = null;\nexport { IpcProvider };\n//# sourceMappingURL=ipc-provider.js.map","\"use strict\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { WebSocketProvider } from \"./websocket-provider\";\nimport { showThrottleMessage } from \"./formatter\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\nexport class InfuraWebSocketProvider extends WebSocketProvider {\n constructor(network, apiKey) {\n const provider = new InfuraProvider(network, apiKey);\n const connection = provider.connection;\n if (connection.password) {\n logger.throwError(\"INFURA WebSocket project secrets unsupported\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"InfuraProvider.getWebSocketProvider()\"\n });\n }\n const url = connection.url.replace(/^http/i, \"ws\").replace(\"/v3/\", \"/ws/v3/\");\n super(url, network);\n defineReadOnly(this, \"apiKey\", provider.projectId);\n defineReadOnly(this, \"projectId\", provider.projectId);\n defineReadOnly(this, \"projectSecret\", provider.projectSecret);\n }\n isCommunityResource() {\n return (this.projectId === defaultProjectId);\n }\n}\nexport class InfuraProvider extends UrlJsonRpcProvider {\n static getWebSocketProvider(network, apiKey) {\n return new InfuraWebSocketProvider(network, apiKey);\n }\n static getApiKey(apiKey) {\n const apiKeyObj = {\n apiKey: defaultProjectId,\n projectId: defaultProjectId,\n projectSecret: null\n };\n if (apiKey == null) {\n return apiKeyObj;\n }\n if (typeof (apiKey) === \"string\") {\n apiKeyObj.projectId = apiKey;\n }\n else if (apiKey.projectSecret != null) {\n logger.assertArgument((typeof (apiKey.projectId) === \"string\"), \"projectSecret requires a projectId\", \"projectId\", apiKey.projectId);\n logger.assertArgument((typeof (apiKey.projectSecret) === \"string\"), \"invalid projectSecret\", \"projectSecret\", \"[REDACTED]\");\n apiKeyObj.projectId = apiKey.projectId;\n apiKeyObj.projectSecret = apiKey.projectSecret;\n }\n else if (apiKey.projectId) {\n apiKeyObj.projectId = apiKey.projectId;\n }\n apiKeyObj.apiKey = apiKeyObj.projectId;\n return apiKeyObj;\n }\n static getUrl(network, apiKey) {\n let host = null;\n switch (network ? network.name : \"unknown\") {\n case \"homestead\":\n host = \"mainnet.infura.io\";\n break;\n case \"ropsten\":\n host = \"ropsten.infura.io\";\n break;\n case \"rinkeby\":\n host = \"rinkeby.infura.io\";\n break;\n case \"kovan\":\n host = \"kovan.infura.io\";\n break;\n case \"goerli\":\n host = \"goerli.infura.io\";\n break;\n case \"matic\":\n host = \"polygon-mainnet.infura.io\";\n break;\n case \"maticmum\":\n host = \"polygon-mumbai.infura.io\";\n break;\n case \"optimism\":\n host = \"optimism-mainnet.infura.io\";\n break;\n case \"optimism-kovan\":\n host = \"optimism-kovan.infura.io\";\n break;\n case \"arbitrum\":\n host = \"arbitrum-mainnet.infura.io\";\n break;\n case \"arbitrum-rinkeby\":\n host = \"arbitrum-rinkeby.infura.io\";\n break;\n default:\n logger.throwError(\"unsupported network\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"network\",\n value: network\n });\n }\n const connection = {\n allowGzip: true,\n url: (\"https:/\" + \"/\" + host + \"/v3/\" + apiKey.projectId),\n throttleCallback: (attempt, url) => {\n if (apiKey.projectId === defaultProjectId) {\n showThrottleMessage();\n }\n return Promise.resolve(true);\n }\n };\n if (apiKey.projectSecret != null) {\n connection.user = \"\";\n connection.password = apiKey.projectSecret;\n }\n return connection;\n }\n isCommunityResource() {\n return (this.projectId === defaultProjectId);\n }\n}\n//# sourceMappingURL=infura-provider.js.map","import { deepCopy } from \"@ethersproject/properties\";\nimport { fetchJson } from \"@ethersproject/web\";\nimport { JsonRpcProvider } from \"./json-rpc-provider\";\n// Experimental\nexport class JsonRpcBatchProvider extends JsonRpcProvider {\n send(method, params) {\n const request = {\n method: method,\n params: params,\n id: (this._nextId++),\n jsonrpc: \"2.0\"\n };\n if (this._pendingBatch == null) {\n this._pendingBatch = [];\n }\n const inflightRequest = { request, resolve: null, reject: null };\n const promise = new Promise((resolve, reject) => {\n inflightRequest.resolve = resolve;\n inflightRequest.reject = reject;\n });\n this._pendingBatch.push(inflightRequest);\n if (!this._pendingBatchAggregator) {\n // Schedule batch for next event loop + short duration\n this._pendingBatchAggregator = setTimeout(() => {\n // Get teh current batch and clear it, so new requests\n // go into the next batch\n const batch = this._pendingBatch;\n this._pendingBatch = null;\n this._pendingBatchAggregator = null;\n // Get the request as an array of requests\n const request = batch.map((inflight) => inflight.request);\n this.emit(\"debug\", {\n action: \"requestBatch\",\n request: deepCopy(request),\n provider: this\n });\n return fetchJson(this.connection, JSON.stringify(request)).then((result) => {\n this.emit(\"debug\", {\n action: \"response\",\n request: request,\n response: result,\n provider: this\n });\n // For each result, feed it to the correct Promise, depending\n // on whether it was a success or error\n batch.forEach((inflightRequest, index) => {\n const payload = result[index];\n if (payload.error) {\n const error = new Error(payload.error.message);\n error.code = payload.error.code;\n error.data = payload.error.data;\n inflightRequest.reject(error);\n }\n else {\n inflightRequest.resolve(payload.result);\n }\n });\n }, (error) => {\n this.emit(\"debug\", {\n action: \"response\",\n error: error,\n request: request,\n provider: this\n });\n batch.forEach((inflightRequest) => {\n inflightRequest.reject(error);\n });\n });\n }, 10);\n }\n return promise;\n }\n}\n//# sourceMappingURL=json-rpc-batch-provider.js.map","/* istanbul ignore file */\n\"use strict\";\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n// Special API key provided by Nodesmith for ethers.js\nconst defaultApiKey = \"ETHERS_JS_SHARED\";\nexport class NodesmithProvider extends UrlJsonRpcProvider {\n static getApiKey(apiKey) {\n if (apiKey && typeof (apiKey) !== \"string\") {\n logger.throwArgumentError(\"invalid apiKey\", \"apiKey\", apiKey);\n }\n return apiKey || defaultApiKey;\n }\n static getUrl(network, apiKey) {\n logger.warn(\"NodeSmith will be discontinued on 2019-12-20; please migrate to another platform.\");\n let host = null;\n switch (network.name) {\n case \"homestead\":\n host = \"https://ethereum.api.nodesmith.io/v1/mainnet/jsonrpc\";\n break;\n case \"ropsten\":\n host = \"https://ethereum.api.nodesmith.io/v1/ropsten/jsonrpc\";\n break;\n case \"rinkeby\":\n host = \"https://ethereum.api.nodesmith.io/v1/rinkeby/jsonrpc\";\n break;\n case \"goerli\":\n host = \"https://ethereum.api.nodesmith.io/v1/goerli/jsonrpc\";\n break;\n case \"kovan\":\n host = \"https://ethereum.api.nodesmith.io/v1/kovan/jsonrpc\";\n break;\n default:\n logger.throwArgumentError(\"unsupported network\", \"network\", arguments[0]);\n }\n return (host + \"?apiKey=\" + apiKey);\n }\n}\n//# sourceMappingURL=nodesmith-provider.js.map","\"use strict\";\nimport { getStatic } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { UrlJsonRpcProvider } from \"./url-json-rpc-provider\";\n// These are load-balancer-based application IDs\nconst defaultApplicationIds = {\n homestead: \"6004bcd10040261633ade990\",\n ropsten: \"6004bd4d0040261633ade991\",\n rinkeby: \"6004bda20040261633ade994\",\n goerli: \"6004bd860040261633ade992\",\n};\nexport class PocketProvider extends UrlJsonRpcProvider {\n constructor(network, apiKey) {\n // We need a bit of creativity in the constructor because\n // Pocket uses different default API keys based on the network\n if (apiKey == null) {\n const n = getStatic(new.target, \"getNetwork\")(network);\n if (n) {\n const applicationId = defaultApplicationIds[n.name];\n if (applicationId) {\n apiKey = {\n applicationId: applicationId,\n loadBalancer: true\n };\n }\n }\n // If there was any issue above, we don't know this network\n if (apiKey == null) {\n logger.throwError(\"unsupported network\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"network\",\n value: network\n });\n }\n }\n super(network, apiKey);\n }\n static getApiKey(apiKey) {\n // Most API Providers allow null to get the default configuration, but\n // Pocket requires the network to decide the default provider, so we\n // rely on hijacking the constructor to add a sensible default for us\n if (apiKey == null) {\n logger.throwArgumentError(\"PocketProvider.getApiKey does not support null apiKey\", \"apiKey\", apiKey);\n }\n const apiKeyObj = {\n applicationId: null,\n loadBalancer: false,\n applicationSecretKey: null\n };\n // Parse applicationId and applicationSecretKey\n if (typeof (apiKey) === \"string\") {\n apiKeyObj.applicationId = apiKey;\n }\n else if (apiKey.applicationSecretKey != null) {\n logger.assertArgument((typeof (apiKey.applicationId) === \"string\"), \"applicationSecretKey requires an applicationId\", \"applicationId\", apiKey.applicationId);\n logger.assertArgument((typeof (apiKey.applicationSecretKey) === \"string\"), \"invalid applicationSecretKey\", \"applicationSecretKey\", \"[REDACTED]\");\n apiKeyObj.applicationId = apiKey.applicationId;\n apiKeyObj.applicationSecretKey = apiKey.applicationSecretKey;\n apiKeyObj.loadBalancer = !!apiKey.loadBalancer;\n }\n else if (apiKey.applicationId) {\n logger.assertArgument((typeof (apiKey.applicationId) === \"string\"), \"apiKey.applicationId must be a string\", \"apiKey.applicationId\", apiKey.applicationId);\n apiKeyObj.applicationId = apiKey.applicationId;\n apiKeyObj.loadBalancer = !!apiKey.loadBalancer;\n }\n else {\n logger.throwArgumentError(\"unsupported PocketProvider apiKey\", \"apiKey\", apiKey);\n }\n return apiKeyObj;\n }\n static getUrl(network, apiKey) {\n let host = null;\n switch (network ? network.name : \"unknown\") {\n case \"homestead\":\n host = \"eth-mainnet.gateway.pokt.network\";\n break;\n case \"ropsten\":\n host = \"eth-ropsten.gateway.pokt.network\";\n break;\n case \"rinkeby\":\n host = \"eth-rinkeby.gateway.pokt.network\";\n break;\n case \"goerli\":\n host = \"eth-goerli.gateway.pokt.network\";\n break;\n default:\n logger.throwError(\"unsupported network\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"network\",\n value: network\n });\n }\n let url = null;\n if (apiKey.loadBalancer) {\n url = `https:/\\/${host}/v1/lb/${apiKey.applicationId}`;\n }\n else {\n url = `https:/\\/${host}/v1/${apiKey.applicationId}`;\n }\n const connection = { url };\n // Initialize empty headers\n connection.headers = {};\n // Apply application secret key\n if (apiKey.applicationSecretKey != null) {\n connection.user = \"\";\n connection.password = apiKey.applicationSecretKey;\n }\n return connection;\n }\n isCommunityResource() {\n return (this.applicationId === defaultApplicationIds[this.network.name]);\n }\n}\n//# sourceMappingURL=pocket-provider.js.map","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Identicon = function (_Component) {\n _inherits(Identicon, _Component);\n\n function Identicon(props) {\n _classCallCheck(this, Identicon);\n\n var _this = _possibleConstructorReturn(this, (Identicon.__proto__ || Object.getPrototypeOf(Identicon)).call(this, props));\n\n _this.generateIdenticon = _this.generateIdenticon.bind(_this);\n return _this;\n }\n\n _createClass(Identicon, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.generateIdenticon(_extends({}, this.props));\n }\n }, {\n key: 'componentWillUpdate',\n value: function componentWillUpdate(nextProps) {\n if (!this.isEquivalent(this.props, nextProps)) this.generateIdenticon(_extends({}, nextProps));\n }\n }, {\n key: 'isEquivalent',\n value: function isEquivalent(prevProps, nextProps) {\n var aProps = Object.getOwnPropertyNames(prevProps);\n var bProps = Object.getOwnPropertyNames(nextProps);\n\n if (aProps.length != bProps.length) {\n return false;\n }\n\n for (var i = 0; i < aProps.length; i++) {\n var propName = aProps[i];\n\n if (prevProps[propName] !== nextProps[propName]) {\n return false;\n }\n }\n\n return true;\n }\n }, {\n key: 'generateIdenticon',\n value: function generateIdenticon(options) {\n // NOTE -- Majority of this code is referenced from: https://github.com/alexvandesande/blockies\n // Mostly to ensure congruence to Ethereum Mist's Identicons\n\n // The random number is a js implementation of the Xorshift PRNG\n var randseed = new Array(4); // Xorshift: [x, y, z, w] 32 bit values\n\n function seedrand(seed) {\n for (var i = 0; i < randseed.length; i++) {\n randseed[i] = 0;\n }\n for (var _i = 0; _i < seed.length; _i++) {\n randseed[_i % 4] = (randseed[_i % 4] << 5) - randseed[_i % 4] + seed.charCodeAt(_i);\n }\n }\n\n function rand() {\n // based on Java's String.hashCode(), expanded to 4 32bit values\n var t = randseed[0] ^ randseed[0] << 11;\n\n randseed[0] = randseed[1];\n randseed[1] = randseed[2];\n randseed[2] = randseed[3];\n randseed[3] = randseed[3] ^ randseed[3] >> 19 ^ t ^ t >> 8;\n\n return (randseed[3] >>> 0) / (1 << 31 >>> 0);\n }\n\n function createColor() {\n // saturation is the whole color spectrum\n var h = Math.floor(rand() * 360);\n // saturation goes from 40 to 100, it avoids greyish colors\n var s = rand() * 60 + 40 + '%';\n // lightness can be anything from 0 to 100, but probabilities are a bell curve around 50%\n var l = (rand() + rand() + rand() + rand()) * 25 + '%';\n\n var color = 'hsl(' + h + ',' + s + ',' + l + ')';\n return color;\n }\n\n function createImageData(size) {\n var width = size; // Only support square icons for now\n var height = size;\n\n var dataWidth = Math.ceil(width / 2);\n var mirrorWidth = width - dataWidth;\n\n var data = [];\n for (var y = 0; y < height; y++) {\n var row = [];\n for (var x = 0; x < dataWidth; x++) {\n // this makes foreground and background color to have a 43% (1/2.3) probability\n // spot color has 13% chance\n row[x] = Math.floor(rand() * 2.3);\n }\n var r = row.slice(0, mirrorWidth);\n r.reverse();\n row = row.concat(r);\n\n for (var i = 0; i < row.length; i++) {\n data.push(row[i]);\n }\n }\n\n return data;\n }\n\n function setCanvas(identicon, imageData, color, scale, bgcolor, spotcolor) {\n var width = Math.sqrt(imageData.length);\n var size = width * scale;\n\n identicon.width = size;\n identicon.style.width = size + 'px';\n\n identicon.height = size;\n identicon.style.height = size + 'px';\n\n var cc = identicon.getContext('2d');\n cc.fillStyle = bgcolor;\n cc.fillRect(0, 0, identicon.width, identicon.height);\n cc.fillStyle = color;\n\n for (var i = 0; i < imageData.length; i++) {\n // if data is 2, choose spot color, if 1 choose foreground\n cc.fillStyle = imageData[i] === 1 ? color : spotcolor;\n\n // if data is 0, leave the background\n if (imageData[i]) {\n var row = Math.floor(i / width);\n var col = i % width;\n\n cc.fillRect(col * scale, row * scale, scale, scale);\n }\n }\n }\n\n var opts = options || {};\n var size = opts.size || 8;\n var scale = opts.scale || 4;\n var seed = opts.seed || Math.floor(Math.random() * Math.pow(10, 16)).toString(16);\n\n seedrand(seed);\n\n var color = opts.color || createColor();\n var bgcolor = opts.bgColor || createColor();\n var spotcolor = opts.spotColor || createColor();\n var imageData = createImageData(size);\n var canvas = setCanvas(this.identicon, imageData, color, scale, bgcolor, spotcolor);\n\n return canvas;\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n return _react2.default.createElement('canvas', {\n ref: function ref(identicon) {\n _this2.identicon = identicon;\n },\n className: this.props.className\n });\n }\n }]);\n\n return Identicon;\n}(_react.Component);\n\nexports.default = Identicon;\n\n\nIdenticon.defaultProps = {\n className: 'identicon'\n};\n\nIdenticon.propTypes = {\n seed: _propTypes2.default.string.isRequired,\n size: _propTypes2.default.number,\n scale: _propTypes2.default.number,\n color: _propTypes2.default.string,\n bgColor: _propTypes2.default.string,\n spotColor: _propTypes2.default.string\n};\n\n","import canUseDom from \"rc-util/es/Dom/canUseDom\";\nexport var canUseDocElement = function canUseDocElement() {\n return canUseDom() && window.document.documentElement;\n};\nexport var isStyleSupport = function isStyleSupport(styleName) {\n if (canUseDocElement()) {\n var styleNameList = Array.isArray(styleName) ? styleName : [styleName];\n var documentElement = window.document.documentElement;\n return styleNameList.some(function (name) {\n return name in documentElement.style;\n });\n }\n\n return false;\n};\nvar flexGapSupported;\nexport var detectFlexGapSupported = function detectFlexGapSupported() {\n if (!canUseDocElement()) {\n return false;\n }\n\n if (flexGapSupported !== undefined) {\n return flexGapSupported;\n } // create flex container with row-gap set\n\n\n var flex = document.createElement('div');\n flex.style.display = 'flex';\n flex.style.flexDirection = 'column';\n flex.style.rowGap = '1px'; // create two, elements inside it\n\n flex.appendChild(document.createElement('div'));\n flex.appendChild(document.createElement('div')); // append to the DOM (needed to obtain scrollHeight)\n\n document.body.appendChild(flex);\n flexGapSupported = flex.scrollHeight === 1; // flex container should be 1px high from the row-gap\n\n document.body.removeChild(flex);\n return flexGapSupported;\n};","import Button from './button';\nexport default Button;","var baseHas = require('./_baseHas'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","export default {\n // Options.jsx\n items_per_page: '/ page',\n jump_to: 'Go to',\n jump_to_confirm: 'confirm',\n page: '',\n // Pagination.jsx\n prev_page: 'Previous Page',\n next_page: 'Next Page',\n prev_5: 'Previous 5 Pages',\n next_5: 'Next 5 Pages',\n prev_3: 'Previous 3 Pages',\n next_3: 'Next 3 Pages'\n};","var locale = {\n locale: 'en_US',\n today: 'Today',\n now: 'Now',\n backToToday: 'Back to today',\n ok: 'Ok',\n clear: 'Clear',\n month: 'Month',\n year: 'Year',\n timeSelect: 'select time',\n dateSelect: 'select date',\n weekSelect: 'Choose a week',\n monthSelect: 'Choose a month',\n yearSelect: 'Choose a year',\n decadeSelect: 'Choose a decade',\n yearFormat: 'YYYY',\n dateFormat: 'M/D/YYYY',\n dayFormat: 'D',\n dateTimeFormat: 'M/D/YYYY HH:mm:ss',\n monthBeforeYear: true,\n previousMonth: 'Previous month (PageUp)',\n nextMonth: 'Next month (PageDown)',\n previousYear: 'Last year (Control + left)',\n nextYear: 'Next year (Control + right)',\n previousDecade: 'Last decade',\n nextDecade: 'Next decade',\n previousCentury: 'Last century',\n nextCentury: 'Next century'\n};\nexport default locale;","var locale = {\n placeholder: 'Select time',\n rangePlaceholder: ['Start time', 'End time']\n};\nexport default locale;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport CalendarLocale from \"rc-picker/es/locale/en_US\";\nimport TimePickerLocale from '../../time-picker/locale/en_US'; // Merge into a locale object\n\nvar locale = {\n lang: _extends({\n placeholder: 'Select date',\n yearPlaceholder: 'Select year',\n quarterPlaceholder: 'Select quarter',\n monthPlaceholder: 'Select month',\n weekPlaceholder: 'Select week',\n rangePlaceholder: ['Start date', 'End date'],\n rangeYearPlaceholder: ['Start year', 'End year'],\n rangeMonthPlaceholder: ['Start month', 'End month'],\n rangeWeekPlaceholder: ['Start week', 'End week']\n }, CalendarLocale),\n timePickerLocale: _extends({}, TimePickerLocale)\n}; // All settings at:\n// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json\n\nexport default locale;","/* eslint-disable no-template-curly-in-string */\nimport Pagination from \"rc-pagination/es/locale/en_US\";\nimport DatePicker from '../date-picker/locale/en_US';\nimport TimePicker from '../time-picker/locale/en_US';\nimport Calendar from '../calendar/locale/en_US';\nvar typeTemplate = '${label} is not a valid ${type}';\nvar localeValues = {\n locale: 'en',\n Pagination: Pagination,\n DatePicker: DatePicker,\n TimePicker: TimePicker,\n Calendar: Calendar,\n global: {\n placeholder: 'Please select'\n },\n Table: {\n filterTitle: 'Filter menu',\n filterConfirm: 'OK',\n filterReset: 'Reset',\n filterEmptyText: 'No filters',\n emptyText: 'No data',\n selectAll: 'Select current page',\n selectInvert: 'Invert current page',\n selectNone: 'Clear all data',\n selectionAll: 'Select all data',\n sortTitle: 'Sort',\n expand: 'Expand row',\n collapse: 'Collapse row',\n triggerDesc: 'Click to sort descending',\n triggerAsc: 'Click to sort ascending',\n cancelSort: 'Click to cancel sorting'\n },\n Modal: {\n okText: 'OK',\n cancelText: 'Cancel',\n justOkText: 'OK'\n },\n Popconfirm: {\n okText: 'OK',\n cancelText: 'Cancel'\n },\n Transfer: {\n titles: ['', ''],\n searchPlaceholder: 'Search here',\n itemUnit: 'item',\n itemsUnit: 'items',\n remove: 'Remove',\n selectCurrent: 'Select current page',\n removeCurrent: 'Remove current page',\n selectAll: 'Select all data',\n removeAll: 'Remove all data',\n selectInvert: 'Invert current page'\n },\n Upload: {\n uploading: 'Uploading...',\n removeFile: 'Remove file',\n uploadError: 'Upload error',\n previewFile: 'Preview file',\n downloadFile: 'Download file'\n },\n Empty: {\n description: 'No Data'\n },\n Icon: {\n icon: 'icon'\n },\n Text: {\n edit: 'Edit',\n copy: 'Copy',\n copied: 'Copied',\n expand: 'Expand'\n },\n PageHeader: {\n back: 'Back'\n },\n Form: {\n optional: '(optional)',\n defaultValidateMessages: {\n \"default\": 'Field validation error for ${label}',\n required: 'Please enter ${label}',\n \"enum\": '${label} must be one of [${enum}]',\n whitespace: '${label} cannot be a blank character',\n date: {\n format: '${label} date format is invalid',\n parse: '${label} cannot be converted to a date',\n invalid: '${label} is an invalid date'\n },\n types: {\n string: typeTemplate,\n method: typeTemplate,\n array: typeTemplate,\n object: typeTemplate,\n number: typeTemplate,\n date: typeTemplate,\n \"boolean\": typeTemplate,\n integer: typeTemplate,\n \"float\": typeTemplate,\n regexp: typeTemplate,\n email: typeTemplate,\n url: typeTemplate,\n hex: typeTemplate\n },\n string: {\n len: '${label} must be ${len} characters',\n min: '${label} must be at least ${min} characters',\n max: '${label} must be up to ${max} characters',\n range: '${label} must be between ${min}-${max} characters'\n },\n number: {\n len: '${label} must be equal to ${len}',\n min: '${label} must be minimum ${min}',\n max: '${label} must be maximum ${max}',\n range: '${label} must be between ${min}-${max}'\n },\n array: {\n len: 'Must be ${len} ${label}',\n min: 'At least ${min} ${label}',\n max: 'At most ${max} ${label}',\n range: 'The amount of ${label} must be between ${min}-${max}'\n },\n pattern: {\n mismatch: '${label} does not match the pattern ${pattern}'\n }\n }\n },\n Image: {\n preview: 'Preview'\n }\n};\nexport default localeValues;","// This icon file is generated automatically.\nvar ExclamationCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z\" } }] }, \"name\": \"exclamation-circle\", \"theme\": \"outlined\" };\nexport default ExclamationCircleOutlined;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport ExclamationCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/ExclamationCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar ExclamationCircleOutlined = function ExclamationCircleOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: ExclamationCircleOutlinedSvg\n }));\n};\n\nExclamationCircleOutlined.displayName = 'ExclamationCircleOutlined';\nexport default /*#__PURE__*/React.forwardRef(ExclamationCircleOutlined);","import raf from \"rc-util/es/raf\";\nvar id = 0;\nvar ids = {}; // Support call raf with delay specified frame\n\nexport default function wrapperRaf(callback) {\n var delayFrames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var myId = id++;\n var restFrames = delayFrames;\n\n function internalCallback() {\n restFrames -= 1;\n\n if (restFrames <= 0) {\n callback();\n delete ids[myId];\n } else {\n ids[myId] = raf(internalCallback);\n }\n }\n\n ids[myId] = raf(internalCallback);\n return myId;\n}\n\nwrapperRaf.cancel = function cancel(pid) {\n if (pid === undefined) return;\n raf.cancel(ids[pid]);\n delete ids[pid];\n};\n\nwrapperRaf.ids = ids; // export this for test usage","import ReactDOM from 'react-dom';\nexport default function addEventListenerWrap(target, eventType, cb, option) {\n /* eslint camelcase: 2 */\n var callback = ReactDOM.unstable_batchedUpdates ? function run(e) {\n ReactDOM.unstable_batchedUpdates(cb, e);\n } : cb;\n\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, option);\n }\n\n return {\n remove: function remove() {\n if (target.removeEventListener) {\n target.removeEventListener(eventType, callback);\n }\n }\n };\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","import { keccak256 } from \"@ethersproject/keccak256\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nexport function id(text) {\n return keccak256(toUtf8Bytes(text));\n}\n//# sourceMappingURL=id.js.map","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","/**\n * Implementation of a subset of node.js Buffer methods for the browser.\n * Based on https://github.com/feross/buffer\n */\n\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar isArray = require('isarray')\n\nfunction typedArraySupport () {\n // Can typed array instances be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nvar K_MAX_LENGTH = Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n\nfunction Buffer (arg, offset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, offset, length)\n }\n\n if (typeof arg === 'number') {\n return allocUnsafe(this, arg)\n }\n\n return from(this, arg, offset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\nfunction createBuffer (that, length) {\n var buf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n buf = that\n if (buf === null) {\n buf = new Buffer(length)\n }\n buf.length = length\n }\n\n return buf\n}\n\nfunction allocUnsafe (that, size) {\n var buf = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n buf[i] = 0\n }\n }\n\n return buf\n}\n\nfunction fromString (that, string) {\n var length = byteLength(string) | 0\n var buf = createBuffer(that, length)\n\n var actual = buf.write(string)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n buf.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n buf = fromArrayLike(that, buf)\n }\n\n return buf\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(that, len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction byteLength (string) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n return utf8ToBytes(string).length\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction from (that, value, offset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, offset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, offset)\n }\n\n return fromObject(that, value)\n}\n\nBuffer.prototype.write = function write (string, offset, length) {\n // Buffer#write(string)\n if (offset === undefined) {\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n } else {\n length = undefined\n }\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n return utf8Write(this, string, offset, length)\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\nBuffer.prototype.fill = function fill (val, start, end) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : new Buffer(val)\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return createBuffer(null, 0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = allocUnsafe(null, length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nBuffer.byteLength = byteLength\n\nBuffer.prototype._isBuffer = true\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nmodule.exports.alloc = function (size) {\n var buffer = new Buffer(size)\n buffer.fill(0)\n return buffer\n}\n\nmodule.exports.from = function (data) {\n return new Buffer(data)\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","const createPayload = require('../util/create-payload.js')\n\nmodule.exports = SubProvider\n\n// this is the base class for a subprovider -- mostly helpers\n\n\nfunction SubProvider() {\n\n}\n\nSubProvider.prototype.setEngine = function(engine) {\n const self = this\n if (self.engine) return\n self.engine = engine\n engine.on('block', function(block) {\n self.currentBlock = block\n })\n\n engine.on('start', function () {\n self.start()\n })\n\n engine.on('stop', function () {\n self.stop()\n })\n}\n\nSubProvider.prototype.handleRequest = function(payload, next, end) {\n throw new Error('Subproviders should override `handleRequest`.')\n}\n\nSubProvider.prototype.emitPayload = function(payload, cb){\n const self = this\n self.engine.sendAsync(createPayload(payload), cb)\n}\n\n// dummies for overriding\n\nSubProvider.prototype.stop = function () {}\n\nSubProvider.prototype.start = function () {}\n","\"use strict\";\n\nconst Debug = require('debug');\n\nconst fetch = require('cross-fetch');\n\nconst BN = require('bn.js');\n\nconst {\n Contract,\n BigNumber\n} = require('ethers');\n\nconst {\n ethersBnToBn,\n bnToEthersBn,\n truncateBnWeiToBnNRlc,\n bnNRlcToBnWei,\n checksummedAddress,\n formatRLC,\n NULL_BYTES\n} = require('../utils/utils');\n\nconst {\n addressSchema,\n uint256Schema,\n nRlcAmountSchema,\n weiAmountSchema,\n throwIfMissing\n} = require('../utils/validator');\n\nconst {\n wrapCall,\n wrapSend,\n wrapWait\n} = require('../utils/errorWrappers');\n\nconst {\n BridgeError\n} = require('../utils/errors');\n\nconst foreignBridgeErcToNativeDesc = require('../abi/bridge/ForeignBridgeErcToNative.json');\n\nconst homeBridgeErcToNativeDesc = require('../abi/bridge/HomeBridgeErcToNative.json');\n\nconst debug = Debug('iexec:wallet');\nconst ethFaucets = [{\n chainName: 'ropsten',\n name: 'faucet.ropsten.be',\n getETH: address => fetch(\"http://faucet.ropsten.be:3001/donate/\".concat(address)).then(res => res.json()).catch(() => ({\n error: 'ETH faucet is down.'\n }))\n}, {\n chainName: 'ropsten',\n name: 'ropsten.faucet.b9lab.com',\n getETH: address => fetch('https://ropsten.faucet.b9lab.com/tap', {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'POST',\n body: JSON.stringify({\n toWhom: address\n })\n }).then(res => res.json()).catch(() => ({\n error: 'ETH faucet is down.'\n }))\n}, {\n chainName: 'rinkeby',\n name: 'faucet.rinkeby.io',\n getETH: () => ({\n error: 'Go to https://faucet.rinkeby.io/ to manually ask for ETH'\n })\n}, {\n chainName: 'kovan',\n name: 'gitter.im/kovan-testnet/faucet',\n getETH: () => ({\n error: 'Go to https://gitter.im/kovan-testnet/faucet to manually ask for ETH'\n })\n}, {\n chainName: 'kovan',\n name: 'faucet.kovan.network',\n getETH: () => ({\n error: 'Go to https://faucet.kovan.network to manually ask for ETH'\n })\n}, {\n chainName: 'goerli',\n name: 'goerli-faucet.slock.it',\n getETH: () => ({\n error: 'Go to https://goerli-faucet.slock.it/ to manually ask for ETH'\n })\n}];\n\nconst getAddress = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n if (!contracts.signer) throw Error('Missing Signer');\n const address = await wrapCall(contracts.signer.getAddress());\n return checksummedAddress(address);\n};\n\nconst isInWhitelist = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let {\n strict = true\n } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (contracts.flavour !== 'enterprise') {\n throw Error('Cannot check authorized eRLC holders on current chain');\n }\n\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(address);\n\n try {\n const eRlcAddress = await wrapCall(contracts.fetchRLCAddress());\n const eRlcContract = contracts.getRLCContract({\n at: eRlcAddress\n });\n const isKYC = await wrapCall(eRlcContract.isKYC(vAddress));\n\n if (!isKYC && strict) {\n throw Error(\"\".concat(vAddress, \" is not authorized to interact with eRLC\"));\n }\n\n return isKYC;\n } catch (error) {\n debug('isInWhitelist()', error);\n throw error;\n }\n};\n\nconst getRlcBalance = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(address);\n const {\n isNative\n } = contracts;\n\n if (isNative) {\n const weiBalance = await contracts.provider.getBalance(vAddress);\n return truncateBnWeiToBnNRlc(ethersBnToBn(weiBalance));\n }\n\n const rlcAddress = await contracts.fetchRLCAddress();\n const nRlcBalance = await contracts.getRLCContract({\n at: rlcAddress\n }).balanceOf(vAddress);\n return ethersBnToBn(nRlcBalance);\n};\n\nconst getEthBalance = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(address);\n const weiBalance = await contracts.provider.getBalance(vAddress);\n return ethersBnToBn(weiBalance);\n};\n\nconst checkBalances = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(address);\n const [weiBalance, rlcBalance] = await Promise.all([getEthBalance(contracts, vAddress), getRlcBalance(contracts, vAddress)]);\n const balances = {\n wei: weiBalance,\n nRLC: rlcBalance\n };\n debug('balances', balances);\n return balances;\n } catch (error) {\n debug('checkBalances()', error);\n throw error;\n }\n};\n\nconst getETH = async function () {\n let chainName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let account = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema().validate(account);\n const filteredFaucets = ethFaucets.filter(e => e.chainName === chainName);\n if (filteredFaucets.length === 0) throw Error(\"No ETH faucet on chain \".concat(chainName));\n const faucetsResponses = await Promise.all(filteredFaucets.map(faucet => faucet.getETH(vAddress)));\n const responses = filteredFaucets.reduce((accu, curr, index) => {\n accu.push({\n name: curr.name,\n response: faucetsResponses[index]\n });\n return accu;\n }, []);\n return responses;\n } catch (error) {\n debug('getETH()', error);\n throw error;\n }\n};\n\nconst rlcFaucets = [{\n name: 'faucet.iex.ec',\n getRLC: (chainName, address) => fetch(\"https://api.faucet.iex.ec/getRLC?chainName=\".concat(chainName, \"&address=\").concat(address)).then(res => res.json())\n}];\n\nconst getRLC = async function () {\n let chainName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let account = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema().validate(account);\n const faucetsResponses = await Promise.all(rlcFaucets.map(faucet => faucet.getRLC(chainName, vAddress)));\n const responses = rlcFaucets.reduce((accu, curr, index) => {\n accu.push({\n name: curr.name,\n response: faucetsResponses[index]\n });\n return accu;\n }, []);\n return responses;\n } catch (error) {\n debug('getRLC()', error);\n throw error;\n }\n};\n\nconst sendNativeToken = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(to);\n const vValue = await uint256Schema().validate(value);\n const hexValue = BigNumber.from(vValue).toHexString();\n if (!contracts.signer) throw Error('Missing Signer');\n const tx = await wrapSend(contracts.signer.sendTransaction({\n data: '0x',\n to: vAddress,\n value: hexValue,\n gasPrice: contracts.txOptions && contracts.txOptions.gasPrice || undefined\n }));\n await wrapWait(tx.wait(contracts.confirms));\n return tx.hash;\n } catch (error) {\n debug('sendNativeToken()', error);\n throw error;\n }\n};\n\nconst sendERC20 = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let nRlcAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(to);\n const vAmount = await nRlcAmountSchema().validate(nRlcAmount);\n\n try {\n const rlcAddress = await wrapCall(contracts.fetchRLCAddress());\n const rlcContract = contracts.getRLCContract({\n at: rlcAddress\n });\n const tx = await wrapSend(rlcContract.transfer(vAddress, vAmount, contracts.txOptions));\n await wrapWait(tx.wait(contracts.confirms));\n return tx.hash;\n } catch (error) {\n debug('sendERC20()', error);\n throw error;\n }\n};\n\nconst sendETH = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(to);\n const vAmount = await weiAmountSchema().validate(amount);\n if (contracts.isNative) throw Error('sendETH() is disabled on sidechain, use sendRLC()');\n const balance = await getEthBalance(contracts, await getAddress(contracts));\n\n if (balance.lt(new BN(vAmount))) {\n throw Error('Amount to send exceed wallet balance');\n }\n\n const txHash = await sendNativeToken(contracts, vAmount, vAddress);\n return txHash;\n } catch (error) {\n debug('sendETH()', error);\n throw error;\n }\n};\n\nconst sendRLC = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let nRlcAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(to);\n\n if (contracts.flavour === 'enterprise') {\n await isInWhitelist(contracts, await getAddress(contracts), {\n strict: true\n });\n await isInWhitelist(contracts, to, {\n strict: true\n });\n }\n\n const vAmount = await nRlcAmountSchema().validate(nRlcAmount);\n const balance = await getRlcBalance(contracts, await getAddress(contracts));\n\n if (balance.lt(new BN(vAmount))) {\n throw Error('Amount to send exceed wallet balance');\n }\n\n if (contracts.isNative) {\n debug('send native token');\n const weiValue = bnNRlcToBnWei(new BN(vAmount)).toString();\n const txHash = await sendNativeToken(contracts, weiValue, vAddress);\n return txHash;\n }\n\n debug('send ERC20 token');\n const txHash = await sendERC20(contracts, vAmount, vAddress);\n return txHash;\n } catch (error) {\n debug('sendRLC()', error);\n throw error;\n }\n};\n\nconst sweep = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAddressTo = await addressSchema({\n ethProvider: contracts.provider\n }).validate(to);\n const userAddress = await getAddress(contracts);\n const code = await contracts.provider.getCode(vAddressTo);\n\n if (code !== '0x') {\n throw new Error('Cannot sweep to a contract');\n }\n\n if (contracts.flavour === 'enterprise') {\n await isInWhitelist(contracts, await getAddress(contracts), {\n strict: true\n });\n await isInWhitelist(contracts, to, {\n strict: true\n });\n }\n\n let balances = await checkBalances(contracts, userAddress);\n const res = {};\n const errors = [];\n\n if (!contracts.isNative) {\n if (balances.nRLC.gt(new BN(0))) {\n try {\n const sendERC20TxHash = await sendERC20(contracts, bnToEthersBn(balances.nRLC), vAddressTo);\n Object.assign(res, {\n sendERC20TxHash\n });\n } catch (error) {\n debug('error', error);\n errors.push(\"Failed to transfert ERC20': \".concat(error.message));\n throw Error(\"Failed to sweep ERC20, sweep aborted. errors: \".concat(errors));\n }\n\n balances = await checkBalances(contracts, userAddress);\n }\n }\n\n const gasPrice = contracts.txOptions && contracts.txOptions.gasPrice ? ethersBnToBn(BigNumber.from(contracts.txOptions.gasPrice)) : ethersBnToBn(await contracts.provider.getGasPrice());\n const gasLimit = new BN(21000);\n const txFee = gasPrice.mul(gasLimit);\n const sweepNative = balances.wei.sub(txFee);\n\n if (balances.wei.gt(new BN(txFee))) {\n try {\n const sendNativeTxHash = await sendNativeToken(contracts, bnToEthersBn(sweepNative), vAddressTo);\n debug('sendNativeTxHash', sendNativeTxHash);\n Object.assign(res, {\n sendNativeTxHash\n });\n } catch (error) {\n debug(error);\n errors.push(\"Failed to transfert native token': \".concat(error.message));\n }\n } else {\n const err = 'Tx fees are greather than wallet balance';\n debug(err);\n errors.push(\"Failed to transfert native token': \".concat(err));\n }\n\n if (errors.length > 0) Object.assign(res, {\n errors\n });\n return res;\n } catch (error) {\n debug('sweep()', error);\n throw error;\n }\n};\n\nconst bridgeToSidechain = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let bridgeAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let nRlcAmount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n let {\n sidechainBridgeAddress,\n bridgedContracts\n } = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n let sendTxHash;\n let receiveTxHash;\n\n try {\n const vBridgeAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(bridgeAddress);\n const vSidechainBridgeAddress = sidechainBridgeAddress ? await addressSchema({\n ethProvider: contracts.provider\n }).validate(sidechainBridgeAddress) : undefined;\n const vAmount = await nRlcAmountSchema().validate(nRlcAmount);\n if (contracts.isNative) throw Error('Current chain is a sidechain');\n const balance = await getRlcBalance(contracts, await getAddress(contracts));\n\n if (balance.lt(new BN(vAmount))) {\n throw Error('Amount to bridge exceed wallet balance');\n }\n\n const ercBridgeContract = new Contract(vBridgeAddress, foreignBridgeErcToNativeDesc.abi, contracts.provider);\n const [minPerTx, maxPerTx, currentDay, dailyLimit] = await Promise.all([wrapCall(ercBridgeContract.minPerTx()), wrapCall(ercBridgeContract.maxPerTx()), wrapCall(ercBridgeContract.getCurrentDay()), wrapCall(ercBridgeContract.dailyLimit())]);\n\n if (new BN(vAmount).lt(ethersBnToBn(minPerTx))) {\n throw Error(\"Minimum amount allowed to bridge is \".concat(formatRLC(minPerTx.toString()), \" RLC\"));\n }\n\n if (new BN(vAmount).gt(ethersBnToBn(maxPerTx))) {\n throw Error(\"Maximum amount allowed to bridge is \".concat(formatRLC(maxPerTx.toString()), \" RLC\"));\n } // check daily amount transfered to bridge\n\n\n const dayStartTimestamp = currentDay.toNumber() * (60 * 60 * 24);\n debug('dayStartTimestamp', dayStartTimestamp);\n const currentBlockNumber = await wrapCall(contracts.provider.getBlockNumber());\n debug('currentBlockNumber', currentBlockNumber);\n const currentBlock = await wrapCall(contracts.provider.getBlock(currentBlockNumber));\n\n const findBlockNumberByTimestamp = async (lastTriedBlock, targetTimestamp, step) => {\n const triedBlockNumber = Math.max(lastTriedBlock.number - step, 0);\n const triedBlock = await wrapCall(contracts.provider.getBlock(triedBlockNumber));\n const triedBlockTimestamp = triedBlock.timestamp;\n const remainingTime = triedBlockTimestamp - targetTimestamp;\n debug('remainingTime', remainingTime);\n\n if (remainingTime > 0) {\n debug('triedBlockTimestamp', triedBlockTimestamp, 'lastTriedBlock.timestamp', lastTriedBlock.timestamp);\n const stepTime = Math.max(lastTriedBlock.timestamp - triedBlockTimestamp, 100);\n debug('stepTime', stepTime);\n const nextStep = Math.min(Math.ceil(remainingTime / stepTime * step) + 5, 1000);\n debug('nextStep', nextStep);\n return findBlockNumberByTimestamp(triedBlock, targetTimestamp, nextStep);\n }\n\n return triedBlock.number;\n };\n\n const startBlockNumber = await findBlockNumberByTimestamp(currentBlock, dayStartTimestamp, 100);\n debug('startBlockNumber', startBlockNumber);\n const erc20Address = await contracts.fetchRLCAddress();\n const erc20conctract = contracts.getRLCContract({\n at: erc20Address\n });\n const transferLogs = await contracts.provider.getLogs({\n fromBlock: startBlockNumber,\n toBlock: 'latest',\n address: erc20Address,\n topics: ['0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef']\n });\n const erc20Interface = erc20conctract.interface;\n let totalSpentPerDay = new BN(0);\n\n const processTransferLogs = async function (logs) {\n let checkTimestamp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (logs.length === 0) return;\n let isInvalidTimestamp = checkTimestamp;\n\n if (checkTimestamp) {\n const logTimestamp = (await wrapCall(contracts.provider.getBlock(logs[0].blockNumber))).timestamp;\n isInvalidTimestamp = logTimestamp < dayStartTimestamp;\n }\n\n if (!isInvalidTimestamp) {\n const parsedLog = erc20Interface.parseLog(logs[0]);\n\n if (parsedLog.args.to === vBridgeAddress) {\n totalSpentPerDay = totalSpentPerDay.add(ethersBnToBn(parsedLog.args.value));\n }\n }\n\n logs.shift();\n await processTransferLogs(logs, isInvalidTimestamp);\n };\n\n await processTransferLogs(transferLogs);\n debug('totalSpentPerDay', totalSpentPerDay.toString());\n const withinLimit = totalSpentPerDay.lt(ethersBnToBn(dailyLimit));\n\n if (!withinLimit) {\n throw Error(\"Amount to bridge would exceed bridge daily limit. \".concat(formatRLC(totalSpentPerDay), \"/\").concat(formatRLC(dailyLimit), \" RLC already bridged today.\"));\n }\n\n const sidechainBlockNumber = vSidechainBridgeAddress && bridgedContracts ? await bridgedContracts.provider.getBlockNumber() : 0;\n sendTxHash = await sendRLC(contracts, vAmount, vBridgeAddress);\n debug('sendTxHash', sendTxHash);\n\n if (vSidechainBridgeAddress && bridgedContracts) {\n const waitAffirmationCompleted = txHash => new Promise(resolve => {\n debug('waitAffirmationCompleted');\n const sidechainBridge = new Contract(vSidechainBridgeAddress, homeBridgeErcToNativeDesc.abi, bridgedContracts.provider);\n\n const cleanListeners = () => sidechainBridge.removeAllListeners('AffirmationCompleted');\n\n try {\n sidechainBridge.on(sidechainBridge.filters.AffirmationCompleted(), (address, amount, refTxHash, event) => {\n if (refTxHash === txHash) {\n cleanListeners();\n debug('AffirmationCompleted', event);\n resolve(event);\n }\n });\n bridgedContracts.provider.resetEventsBlock(sidechainBlockNumber);\n debug(\"watching events from block \".concat(sidechainBlockNumber));\n } catch (e) {\n cleanListeners();\n throw e;\n }\n });\n\n const event = await waitAffirmationCompleted(sendTxHash);\n receiveTxHash = event.transactionHash;\n }\n\n return {\n sendTxHash,\n receiveTxHash\n };\n } catch (error) {\n debug('bridgeToSidechain()', error);\n if (sendTxHash) throw new BridgeError(error, sendTxHash);\n throw error;\n }\n};\n\nconst bridgeToMainchain = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let bridgeAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let nRlcAmount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n let {\n mainchainBridgeAddress,\n bridgedContracts\n } = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n let sendTxHash;\n let receiveTxHash;\n\n try {\n const vBridgeAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(bridgeAddress);\n const vMainchainBridgeAddress = mainchainBridgeAddress ? await addressSchema({\n ethProvider: contracts.provider\n }).validate(mainchainBridgeAddress) : undefined;\n const vAmount = await nRlcAmountSchema().validate(nRlcAmount);\n if (!contracts.isNative) throw Error('Current chain is a mainchain');\n const balance = await getRlcBalance(contracts, await getAddress(contracts));\n\n if (balance.lt(new BN(vAmount))) {\n throw Error('Amount to bridge exceed wallet balance');\n }\n\n const sidechainBridgeContract = new Contract(vBridgeAddress, homeBridgeErcToNativeDesc.abi, contracts.provider);\n const bnWeiValue = bnNRlcToBnWei(new BN(vAmount));\n const weiValue = bnWeiValue.toString();\n const [minPerTx, maxPerTx, withinLimit, dailyLimit, totalSpentPerDay] = await Promise.all([wrapCall(sidechainBridgeContract.minPerTx()), wrapCall(sidechainBridgeContract.maxPerTx()), wrapCall(sidechainBridgeContract.withinLimit(weiValue)), wrapCall(sidechainBridgeContract.dailyLimit()), wrapCall(sidechainBridgeContract.getCurrentDay().then(currentDay => sidechainBridgeContract.totalSpentPerDay(currentDay)))]);\n debug('minPerTx', minPerTx.toString());\n debug('maxPerTx', maxPerTx.toString());\n debug('withinLimit', withinLimit);\n debug('dailyLimit', dailyLimit.toString());\n debug('totalSpentPerDay', totalSpentPerDay.toString());\n\n if (bnWeiValue.lt(ethersBnToBn(minPerTx))) {\n throw Error(\"Minimum amount allowed to bridge is \".concat(formatRLC(truncateBnWeiToBnNRlc(ethersBnToBn(minPerTx))), \" RLC\"));\n }\n\n if (bnWeiValue.gt(ethersBnToBn(maxPerTx))) {\n throw Error(\"Maximum amount allowed to bridge is \".concat(formatRLC(truncateBnWeiToBnNRlc(ethersBnToBn(maxPerTx))), \" RLC\"));\n }\n\n if (!withinLimit) {\n throw Error(\"Amount to bridge would exceed bridge daily limit. \".concat(formatRLC(truncateBnWeiToBnNRlc(ethersBnToBn(totalSpentPerDay))), \"/\").concat(formatRLC(truncateBnWeiToBnNRlc(ethersBnToBn(dailyLimit))), \" RLC already bridged today\"));\n }\n\n const mainchainBlockNumber = vMainchainBridgeAddress && bridgedContracts ? await wrapCall(bridgedContracts.provider.getBlockNumber()) : 0;\n sendTxHash = await sendNativeToken(contracts, weiValue, vBridgeAddress);\n debug('sendTxHash', sendTxHash);\n\n if (vMainchainBridgeAddress && bridgedContracts) {\n const waitRelayedMessage = txHash => new Promise(resolve => {\n debug('waitRelayedMessage');\n const mainchainBridge = new Contract(vMainchainBridgeAddress, foreignBridgeErcToNativeDesc.abi, bridgedContracts.provider);\n\n const cleanListeners = () => mainchainBridge.removeAllListeners('RelayedMessage');\n\n try {\n mainchainBridge.on(mainchainBridge.filters.RelayedMessage(), (address, amount, refTxHash, event) => {\n if (refTxHash === txHash) {\n debug('RelayedMessage', event);\n cleanListeners();\n resolve(event);\n }\n });\n bridgedContracts.provider.resetEventsBlock(mainchainBlockNumber);\n debug(\"watching events from block \".concat(mainchainBlockNumber));\n } catch (e) {\n cleanListeners();\n throw e;\n }\n });\n\n const event = await waitRelayedMessage(sendTxHash);\n receiveTxHash = event.transactionHash;\n }\n\n return {\n sendTxHash,\n receiveTxHash\n };\n } catch (error) {\n debug('bridgeToMainchain()', error);\n if (sendTxHash) throw new BridgeError(error, sendTxHash);\n throw error;\n }\n};\n\nconst wrapEnterpriseRLC = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let enterpriseContracts = arguments.length > 1 ? arguments[1] : undefined;\n let nRlcAmount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n\n if (contracts.flavour !== 'standard' || contracts.isNative) {\n throw Error('Unable to wrap RLC into eRLC on current chain');\n }\n\n if (!enterpriseContracts) {\n throw Error('Unable to find eRLC on current chain');\n }\n\n const vAmount = await nRlcAmountSchema().validate(nRlcAmount);\n await isInWhitelist(enterpriseContracts, await getAddress(contracts), {\n strict: true\n });\n const balance = await getRlcBalance(contracts, await getAddress(contracts));\n\n if (balance.lt(new BN(vAmount))) {\n throw Error('Amount to wrap exceed wallet balance');\n }\n\n try {\n const eRlcAddress = await wrapCall(enterpriseContracts.fetchRLCAddress());\n const rlcAddress = await wrapCall(contracts.fetchRLCAddress());\n const rlcContract = contracts.getRLCContract({\n at: rlcAddress\n });\n const tx = await wrapSend(rlcContract.approveAndCall(eRlcAddress, vAmount, NULL_BYTES, contracts.txOptions));\n await wrapWait(tx.wait(contracts.confirms));\n return tx.hash;\n } catch (error) {\n debug('wrapEnterpriseRLC()', error);\n throw error;\n }\n};\n\nconst unwrapEnterpriseRLC = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let nRlcAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n if (contracts.flavour !== 'enterprise' || contracts.isNative) {\n throw Error('Unable to unwrap eRLC into RLC on current chain');\n }\n\n const vAmount = await nRlcAmountSchema().validate(nRlcAmount);\n await isInWhitelist(contracts, await getAddress(contracts), {\n strict: true\n });\n const balance = await getRlcBalance(contracts, await getAddress(contracts));\n\n if (balance.lt(new BN(vAmount))) {\n throw Error('Amount to unwrap exceed wallet balance');\n }\n\n try {\n const eRlcAddress = await wrapCall(contracts.fetchRLCAddress());\n const eRlcContract = contracts.getRLCContract({\n at: eRlcAddress\n });\n const tx = await wrapSend(eRlcContract.withdraw(vAmount));\n await wrapWait(tx.wait(contracts.confirms));\n return tx.hash;\n } catch (error) {\n debug('unwrapEnterpriseRLC()', error);\n throw error;\n }\n};\n\nmodule.exports = {\n bridgeToMainchain,\n bridgeToSidechain,\n getAddress,\n isInWhitelist,\n checkBalances,\n getETH,\n getRLC,\n sendETH,\n sendRLC,\n sweep,\n wrapEnterpriseRLC,\n unwrapEnterpriseRLC\n};","/*\r\n * Basic JavaScript BN library - subset useful for RSA encryption.\r\n * \r\n * Copyright (c) 2003-2005 Tom Wu\r\n * All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND, \r\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY \r\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. \r\n *\r\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\r\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\r\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\r\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\r\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n *\r\n * In addition, the following condition applies:\r\n *\r\n * All redistributions must retain an intact copy of this copyright notice\r\n * and disclaimer.\r\n */\r\n\r\n/*\r\n * Added Node.js Buffers support\r\n * 2014 rzcoder\r\n */\r\n\r\nvar crypt = require('crypto');\r\nvar _ = require('../utils')._;\r\n\r\n// Bits per digit\r\nvar dbits;\r\n\r\n// JavaScript engine analysis\r\nvar canary = 0xdeadbeefcafe;\r\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\r\n\r\n// (public) Constructor\r\nfunction BigInteger(a, b) {\r\n if (a != null) {\r\n if (\"number\" == typeof a) {\r\n this.fromNumber(a, b);\r\n } else if (Buffer.isBuffer(a)) {\r\n this.fromBuffer(a);\r\n } else if (b == null && \"string\" != typeof a) {\r\n this.fromByteArray(a);\r\n } else {\r\n this.fromString(a, b);\r\n }\r\n }\r\n}\r\n\r\n// return new, unset BigInteger\r\nfunction nbi() {\r\n return new BigInteger(null);\r\n}\r\n\r\n// am: Compute w_j += (x*this_i), propagate carries,\r\n// c is initial carry, returns final carry.\r\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\r\n// We need to select the fastest one that works in this environment.\r\n\r\n// am1: use a single mult and divide to get the high bits,\r\n// max digit bits should be 26 because\r\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\r\nfunction am1(i, x, w, j, c, n) {\r\n while (--n >= 0) {\r\n var v = x * this[i++] + w[j] + c;\r\n c = Math.floor(v / 0x4000000);\r\n w[j++] = v & 0x3ffffff;\r\n }\r\n return c;\r\n}\r\n// am2 avoids a big mult-and-extract completely.\r\n// Max digit bits should be <= 30 because we do bitwise ops\r\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\r\nfunction am2(i, x, w, j, c, n) {\r\n var xl = x & 0x7fff, xh = x >> 15;\r\n while (--n >= 0) {\r\n var l = this[i] & 0x7fff;\r\n var h = this[i++] >> 15;\r\n var m = xh * l + h * xl;\r\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\r\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\r\n w[j++] = l & 0x3fffffff;\r\n }\r\n return c;\r\n}\r\n// Alternately, set max digit bits to 28 since some\r\n// browsers slow down when dealing with 32-bit numbers.\r\nfunction am3(i, x, w, j, c, n) {\r\n var xl = x & 0x3fff, xh = x >> 14;\r\n while (--n >= 0) {\r\n var l = this[i] & 0x3fff;\r\n var h = this[i++] >> 14;\r\n var m = xh * l + h * xl;\r\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\r\n c = (l >> 28) + (m >> 14) + xh * h;\r\n w[j++] = l & 0xfffffff;\r\n }\r\n return c;\r\n}\r\n\r\n// We need to select the fastest one that works in this environment. \r\n//if (j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\r\n//\tBigInteger.prototype.am = am2;\r\n//\tdbits = 30;\r\n//} else if (j_lm && (navigator.appName != \"Netscape\")) {\r\n//\tBigInteger.prototype.am = am1;\r\n//\tdbits = 26;\r\n//} else { // Mozilla/Netscape seems to prefer am3\r\n//\tBigInteger.prototype.am = am3;\r\n//\tdbits = 28;\r\n//}\r\n\r\n// For node.js, we pick am3 with max dbits to 28.\r\nBigInteger.prototype.am = am3;\r\ndbits = 28;\r\n\r\nBigInteger.prototype.DB = dbits;\r\nBigInteger.prototype.DM = ((1 << dbits) - 1);\r\nBigInteger.prototype.DV = (1 << dbits);\r\n\r\nvar BI_FP = 52;\r\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\r\nBigInteger.prototype.F1 = BI_FP - dbits;\r\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\r\n\r\n// Digit conversions\r\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\nvar BI_RC = new Array();\r\nvar rr, vv;\r\nrr = \"0\".charCodeAt(0);\r\nfor (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\r\nrr = \"a\".charCodeAt(0);\r\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\r\nrr = \"A\".charCodeAt(0);\r\nfor (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\r\n\r\nfunction int2char(n) {\r\n return BI_RM.charAt(n);\r\n}\r\nfunction intAt(s, i) {\r\n var c = BI_RC[s.charCodeAt(i)];\r\n return (c == null) ? -1 : c;\r\n}\r\n\r\n// (protected) copy this to r\r\nfunction bnpCopyTo(r) {\r\n for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];\r\n r.t = this.t;\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) set from integer value x, -DV <= x < DV\r\nfunction bnpFromInt(x) {\r\n this.t = 1;\r\n this.s = (x < 0) ? -1 : 0;\r\n if (x > 0) this[0] = x;\r\n else if (x < -1) this[0] = x + DV;\r\n else this.t = 0;\r\n}\r\n\r\n// return bigint initialized to value\r\nfunction nbv(i) {\r\n var r = nbi();\r\n r.fromInt(i);\r\n return r;\r\n}\r\n\r\n// (protected) set from string and radix\r\nfunction bnpFromString(data, radix, unsigned) {\r\n var k;\r\n switch (radix) {\r\n case 2:\r\n k = 1;\r\n break;\r\n case 4:\r\n k = 2;\r\n break;\r\n case 8:\r\n k = 3;\r\n break;\r\n case 16:\r\n k = 4;\r\n break;\r\n case 32:\r\n k = 5;\r\n break;\r\n case 256:\r\n k = 8;\r\n break;\r\n default:\r\n this.fromRadix(data, radix);\r\n return;\r\n }\r\n\r\n this.t = 0;\r\n this.s = 0;\r\n\r\n var i = data.length;\r\n var mi = false;\r\n var sh = 0;\r\n\r\n while (--i >= 0) {\r\n var x = (k == 8) ? data[i] & 0xff : intAt(data, i);\r\n if (x < 0) {\r\n if (data.charAt(i) == \"-\") mi = true;\r\n continue;\r\n }\r\n mi = false;\r\n if (sh === 0)\r\n this[this.t++] = x;\r\n else if (sh + k > this.DB) {\r\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\r\n this[this.t++] = (x >> (this.DB - sh));\r\n }\r\n else\r\n this[this.t - 1] |= x << sh;\r\n sh += k;\r\n if (sh >= this.DB) sh -= this.DB;\r\n }\r\n if ((!unsigned) && k == 8 && (data[0] & 0x80) != 0) {\r\n this.s = -1;\r\n if (sh > 0) this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\r\n }\r\n this.clamp();\r\n if (mi) BigInteger.ZERO.subTo(this, this);\r\n}\r\n\r\nfunction bnpFromByteArray(a, unsigned) {\r\n this.fromString(a, 256, unsigned)\r\n}\r\n\r\nfunction bnpFromBuffer(a) {\r\n this.fromString(a, 256, true)\r\n}\r\n\r\n// (protected) clamp off excess high words\r\nfunction bnpClamp() {\r\n var c = this.s & this.DM;\r\n while (this.t > 0 && this[this.t - 1] == c) --this.t;\r\n}\r\n\r\n// (public) return string representation in given radix\r\nfunction bnToString(b) {\r\n if (this.s < 0) return \"-\" + this.negate().toString(b);\r\n var k;\r\n if (b == 16) k = 4;\r\n else if (b == 8) k = 3;\r\n else if (b == 2) k = 1;\r\n else if (b == 32) k = 5;\r\n else if (b == 4) k = 2;\r\n else return this.toRadix(b);\r\n var km = (1 << k) - 1, d, m = false, r = \"\", i = this.t;\r\n var p = this.DB - (i * this.DB) % k;\r\n if (i-- > 0) {\r\n if (p < this.DB && (d = this[i] >> p) > 0) {\r\n m = true;\r\n r = int2char(d);\r\n }\r\n while (i >= 0) {\r\n if (p < k) {\r\n d = (this[i] & ((1 << p) - 1)) << (k - p);\r\n d |= this[--i] >> (p += this.DB - k);\r\n }\r\n else {\r\n d = (this[i] >> (p -= k)) & km;\r\n if (p <= 0) {\r\n p += this.DB;\r\n --i;\r\n }\r\n }\r\n if (d > 0) m = true;\r\n if (m) r += int2char(d);\r\n }\r\n }\r\n return m ? r : \"0\";\r\n}\r\n\r\n// (public) -this\r\nfunction bnNegate() {\r\n var r = nbi();\r\n BigInteger.ZERO.subTo(this, r);\r\n return r;\r\n}\r\n\r\n// (public) |this|\r\nfunction bnAbs() {\r\n return (this.s < 0) ? this.negate() : this;\r\n}\r\n\r\n// (public) return + if this > a, - if this < a, 0 if equal\r\nfunction bnCompareTo(a) {\r\n var r = this.s - a.s;\r\n if (r != 0) return r;\r\n var i = this.t;\r\n r = i - a.t;\r\n if (r != 0) return (this.s < 0) ? -r : r;\r\n while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r;\r\n return 0;\r\n}\r\n\r\n// returns bit length of the integer x\r\nfunction nbits(x) {\r\n var r = 1, t;\r\n if ((t = x >>> 16) != 0) {\r\n x = t;\r\n r += 16;\r\n }\r\n if ((t = x >> 8) != 0) {\r\n x = t;\r\n r += 8;\r\n }\r\n if ((t = x >> 4) != 0) {\r\n x = t;\r\n r += 4;\r\n }\r\n if ((t = x >> 2) != 0) {\r\n x = t;\r\n r += 2;\r\n }\r\n if ((t = x >> 1) != 0) {\r\n x = t;\r\n r += 1;\r\n }\r\n return r;\r\n}\r\n\r\n// (public) return the number of bits in \"this\"\r\nfunction bnBitLength() {\r\n if (this.t <= 0) return 0;\r\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\r\n}\r\n\r\n// (protected) r = this << n*DB\r\nfunction bnpDLShiftTo(n, r) {\r\n var i;\r\n for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];\r\n for (i = n - 1; i >= 0; --i) r[i] = 0;\r\n r.t = this.t + n;\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) r = this >> n*DB\r\nfunction bnpDRShiftTo(n, r) {\r\n for (var i = n; i < this.t; ++i) r[i - n] = this[i];\r\n r.t = Math.max(this.t - n, 0);\r\n r.s = this.s;\r\n}\r\n\r\n// (protected) r = this << n\r\nfunction bnpLShiftTo(n, r) {\r\n var bs = n % this.DB;\r\n var cbs = this.DB - bs;\r\n var bm = (1 << cbs) - 1;\r\n var ds = Math.floor(n / this.DB), c = (this.s << bs) & this.DM, i;\r\n for (i = this.t - 1; i >= 0; --i) {\r\n r[i + ds + 1] = (this[i] >> cbs) | c;\r\n c = (this[i] & bm) << bs;\r\n }\r\n for (i = ds - 1; i >= 0; --i) r[i] = 0;\r\n r[ds] = c;\r\n r.t = this.t + ds + 1;\r\n r.s = this.s;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this >> n\r\nfunction bnpRShiftTo(n, r) {\r\n r.s = this.s;\r\n var ds = Math.floor(n / this.DB);\r\n if (ds >= this.t) {\r\n r.t = 0;\r\n return;\r\n }\r\n var bs = n % this.DB;\r\n var cbs = this.DB - bs;\r\n var bm = (1 << bs) - 1;\r\n r[0] = this[ds] >> bs;\r\n for (var i = ds + 1; i < this.t; ++i) {\r\n r[i - ds - 1] |= (this[i] & bm) << cbs;\r\n r[i - ds] = this[i] >> bs;\r\n }\r\n if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\r\n r.t = this.t - ds;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this - a\r\nfunction bnpSubTo(a, r) {\r\n var i = 0, c = 0, m = Math.min(a.t, this.t);\r\n while (i < m) {\r\n c += this[i] - a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n if (a.t < this.t) {\r\n c -= a.s;\r\n while (i < this.t) {\r\n c += this[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += this.s;\r\n }\r\n else {\r\n c += this.s;\r\n while (i < a.t) {\r\n c -= a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c -= a.s;\r\n }\r\n r.s = (c < 0) ? -1 : 0;\r\n if (c < -1) r[i++] = this.DV + c;\r\n else if (c > 0) r[i++] = c;\r\n r.t = i;\r\n r.clamp();\r\n}\r\n\r\n// (protected) r = this * a, r != this,a (HAC 14.12)\r\n// \"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyTo(a, r) {\r\n var x = this.abs(), y = a.abs();\r\n var i = x.t;\r\n r.t = i + y.t;\r\n while (--i >= 0) r[i] = 0;\r\n for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\r\n r.s = 0;\r\n r.clamp();\r\n if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\r\n}\r\n\r\n// (protected) r = this^2, r != this (HAC 14.16)\r\nfunction bnpSquareTo(r) {\r\n var x = this.abs();\r\n var i = r.t = 2 * x.t;\r\n while (--i >= 0) r[i] = 0;\r\n for (i = 0; i < x.t - 1; ++i) {\r\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\r\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\r\n r[i + x.t] -= x.DV;\r\n r[i + x.t + 1] = 1;\r\n }\r\n }\r\n if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\r\n r.s = 0;\r\n r.clamp();\r\n}\r\n\r\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\r\n// r != q, this != m. q or r may be null.\r\nfunction bnpDivRemTo(m, q, r) {\r\n var pm = m.abs();\r\n if (pm.t <= 0) return;\r\n var pt = this.abs();\r\n if (pt.t < pm.t) {\r\n if (q != null) q.fromInt(0);\r\n if (r != null) this.copyTo(r);\r\n return;\r\n }\r\n if (r == null) r = nbi();\r\n var y = nbi(), ts = this.s, ms = m.s;\r\n var nsh = this.DB - nbits(pm[pm.t - 1]);\t// normalize modulus\r\n if (nsh > 0) {\r\n pm.lShiftTo(nsh, y);\r\n pt.lShiftTo(nsh, r);\r\n }\r\n else {\r\n pm.copyTo(y);\r\n pt.copyTo(r);\r\n }\r\n var ys = y.t;\r\n var y0 = y[ys - 1];\r\n if (y0 === 0) return;\r\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\r\n var d1 = this.FV / yt, d2 = (1 << this.F1) / yt, e = 1 << this.F2;\r\n var i = r.t, j = i - ys, t = (q == null) ? nbi() : q;\r\n y.dlShiftTo(j, t);\r\n if (r.compareTo(t) >= 0) {\r\n r[r.t++] = 1;\r\n r.subTo(t, r);\r\n }\r\n BigInteger.ONE.dlShiftTo(ys, t);\r\n t.subTo(y, y);\t// \"negative\" y so we can replace sub with am later\r\n while (y.t < ys) y[y.t++] = 0;\r\n while (--j >= 0) {\r\n // Estimate quotient digit\r\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\r\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\t// Try it out\r\n y.dlShiftTo(j, t);\r\n r.subTo(t, r);\r\n while (r[i] < --qd) r.subTo(t, r);\r\n }\r\n }\r\n if (q != null) {\r\n r.drShiftTo(ys, q);\r\n if (ts != ms) BigInteger.ZERO.subTo(q, q);\r\n }\r\n r.t = ys;\r\n r.clamp();\r\n if (nsh > 0) r.rShiftTo(nsh, r);\t// Denormalize remainder\r\n if (ts < 0) BigInteger.ZERO.subTo(r, r);\r\n}\r\n\r\n// (public) this mod a\r\nfunction bnMod(a) {\r\n var r = nbi();\r\n this.abs().divRemTo(a, null, r);\r\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\r\n return r;\r\n}\r\n\r\n// Modular reduction using \"classic\" algorithm\r\nfunction Classic(m) {\r\n this.m = m;\r\n}\r\nfunction cConvert(x) {\r\n if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\r\n else return x;\r\n}\r\nfunction cRevert(x) {\r\n return x;\r\n}\r\nfunction cReduce(x) {\r\n x.divRemTo(this.m, null, x);\r\n}\r\nfunction cMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\nfunction cSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\nClassic.prototype.convert = cConvert;\r\nClassic.prototype.revert = cRevert;\r\nClassic.prototype.reduce = cReduce;\r\nClassic.prototype.mulTo = cMulTo;\r\nClassic.prototype.sqrTo = cSqrTo;\r\n\r\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\r\n// justification:\r\n// xy == 1 (mod m)\r\n// xy = 1+km\r\n// xy(2-xy) = (1+km)(1-km)\r\n// x[y(2-xy)] = 1-k^2m^2\r\n// x[y(2-xy)] == 1 (mod m^2)\r\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\r\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\r\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\r\nfunction bnpInvDigit() {\r\n if (this.t < 1) return 0;\r\n var x = this[0];\r\n if ((x & 1) === 0) return 0;\r\n var y = x & 3;\t\t// y == 1/x mod 2^2\r\n y = (y * (2 - (x & 0xf) * y)) & 0xf;\t// y == 1/x mod 2^4\r\n y = (y * (2 - (x & 0xff) * y)) & 0xff;\t// y == 1/x mod 2^8\r\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff;\t// y == 1/x mod 2^16\r\n // last step - calculate inverse mod DV directly;\r\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\r\n y = (y * (2 - x * y % this.DV)) % this.DV;\t\t// y == 1/x mod 2^dbits\r\n // we really want the negative inverse, and -DV < y < DV\r\n return (y > 0) ? this.DV - y : -y;\r\n}\r\n\r\n// Montgomery reduction\r\nfunction Montgomery(m) {\r\n this.m = m;\r\n this.mp = m.invDigit();\r\n this.mpl = this.mp & 0x7fff;\r\n this.mph = this.mp >> 15;\r\n this.um = (1 << (m.DB - 15)) - 1;\r\n this.mt2 = 2 * m.t;\r\n}\r\n\r\n// xR mod m\r\nfunction montConvert(x) {\r\n var r = nbi();\r\n x.abs().dlShiftTo(this.m.t, r);\r\n r.divRemTo(this.m, null, r);\r\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\r\n return r;\r\n}\r\n\r\n// x/R mod m\r\nfunction montRevert(x) {\r\n var r = nbi();\r\n x.copyTo(r);\r\n this.reduce(r);\r\n return r;\r\n}\r\n\r\n// x = x/R mod m (HAC 14.32)\r\nfunction montReduce(x) {\r\n while (x.t <= this.mt2)\t// pad x so am has enough room later\r\n x[x.t++] = 0;\r\n for (var i = 0; i < this.m.t; ++i) {\r\n // faster way of calculating u0 = x[i]*mp mod DV\r\n var j = x[i] & 0x7fff;\r\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\r\n // use am to combine the multiply-shift-add into one call\r\n j = i + this.m.t;\r\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\r\n // propagate carry\r\n while (x[j] >= x.DV) {\r\n x[j] -= x.DV;\r\n x[++j]++;\r\n }\r\n }\r\n x.clamp();\r\n x.drShiftTo(this.m.t, x);\r\n if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\r\n}\r\n\r\n// r = \"x^2/R mod m\"; x != r\r\nfunction montSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\n// r = \"xy/R mod m\"; x,y != r\r\nfunction montMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\n\r\nMontgomery.prototype.convert = montConvert;\r\nMontgomery.prototype.revert = montRevert;\r\nMontgomery.prototype.reduce = montReduce;\r\nMontgomery.prototype.mulTo = montMulTo;\r\nMontgomery.prototype.sqrTo = montSqrTo;\r\n\r\n// (protected) true iff this is even\r\nfunction bnpIsEven() {\r\n return ((this.t > 0) ? (this[0] & 1) : this.s) === 0;\r\n}\r\n\r\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\r\nfunction bnpExp(e, z) {\r\n if (e > 0xffffffff || e < 1) return BigInteger.ONE;\r\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e) - 1;\r\n g.copyTo(r);\r\n while (--i >= 0) {\r\n z.sqrTo(r, r2);\r\n if ((e & (1 << i)) > 0) z.mulTo(r2, g, r);\r\n else {\r\n var t = r;\r\n r = r2;\r\n r2 = t;\r\n }\r\n }\r\n return z.revert(r);\r\n}\r\n\r\n// (public) this^e % m, 0 <= e < 2^32\r\nfunction bnModPowInt(e, m) {\r\n var z;\r\n if (e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\r\n return this.exp(e, z);\r\n}\r\n\r\n// Copyright (c) 2005-2009 Tom Wu\r\n// All Rights Reserved.\r\n// See \"LICENSE\" for details.\r\n\r\n// Extended JavaScript BN functions, required for RSA private ops.\r\n\r\n// Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\r\n// Version 1.2: square() API, isProbablePrime fix\r\n\r\n//(public)\r\nfunction bnClone() {\r\n var r = nbi();\r\n this.copyTo(r);\r\n return r;\r\n}\r\n\r\n//(public) return value as integer\r\nfunction bnIntValue() {\r\n if (this.s < 0) {\r\n if (this.t == 1) return this[0] - this.DV;\r\n else if (this.t === 0) return -1;\r\n }\r\n else if (this.t == 1) return this[0];\r\n else if (this.t === 0) return 0;\r\n// assumes 16 < DB < 32\r\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\r\n}\r\n\r\n//(public) return value as byte\r\nfunction bnByteValue() {\r\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\r\n}\r\n\r\n//(public) return value as short (assumes DB>=16)\r\nfunction bnShortValue() {\r\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\r\n}\r\n\r\n//(protected) return x s.t. r^x < DV\r\nfunction bnpChunkSize(r) {\r\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\r\n}\r\n\r\n//(public) 0 if this === 0, 1 if this > 0\r\nfunction bnSigNum() {\r\n if (this.s < 0) return -1;\r\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\r\n else return 1;\r\n}\r\n\r\n//(protected) convert to radix string\r\nfunction bnpToRadix(b) {\r\n if (b == null) b = 10;\r\n if (this.signum() === 0 || b < 2 || b > 36) return \"0\";\r\n var cs = this.chunkSize(b);\r\n var a = Math.pow(b, cs);\r\n var d = nbv(a), y = nbi(), z = nbi(), r = \"\";\r\n this.divRemTo(d, y, z);\r\n while (y.signum() > 0) {\r\n r = (a + z.intValue()).toString(b).substr(1) + r;\r\n y.divRemTo(d, y, z);\r\n }\r\n return z.intValue().toString(b) + r;\r\n}\r\n\r\n//(protected) convert from radix string\r\nfunction bnpFromRadix(s, b) {\r\n this.fromInt(0);\r\n if (b == null) b = 10;\r\n var cs = this.chunkSize(b);\r\n var d = Math.pow(b, cs), mi = false, j = 0, w = 0;\r\n for (var i = 0; i < s.length; ++i) {\r\n var x = intAt(s, i);\r\n if (x < 0) {\r\n if (s.charAt(i) == \"-\" && this.signum() === 0) mi = true;\r\n continue;\r\n }\r\n w = b * w + x;\r\n if (++j >= cs) {\r\n this.dMultiply(d);\r\n this.dAddOffset(w, 0);\r\n j = 0;\r\n w = 0;\r\n }\r\n }\r\n if (j > 0) {\r\n this.dMultiply(Math.pow(b, j));\r\n this.dAddOffset(w, 0);\r\n }\r\n if (mi) BigInteger.ZERO.subTo(this, this);\r\n}\r\n\r\n//(protected) alternate constructor\r\nfunction bnpFromNumber(a, b) {\r\n if (\"number\" == typeof b) {\r\n // new BigInteger(int,int,RNG)\r\n if (a < 2) this.fromInt(1);\r\n else {\r\n this.fromNumber(a);\r\n if (!this.testBit(a - 1))\t// force MSB set\r\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this);\r\n if (this.isEven()) this.dAddOffset(1, 0); // force odd\r\n while (!this.isProbablePrime(b)) {\r\n this.dAddOffset(2, 0);\r\n if (this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\r\n }\r\n }\r\n } else {\r\n // new BigInteger(int,RNG)\r\n var x = crypt.randomBytes((a >> 3) + 1)\r\n var t = a & 7;\r\n\r\n if (t > 0)\r\n x[0] &= ((1 << t) - 1);\r\n else\r\n x[0] = 0;\r\n\r\n this.fromByteArray(x);\r\n }\r\n}\r\n\r\n//(public) convert to bigendian byte array\r\nfunction bnToByteArray() {\r\n var i = this.t, r = new Array();\r\n r[0] = this.s;\r\n var p = this.DB - (i * this.DB) % 8, d, k = 0;\r\n if (i-- > 0) {\r\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p)\r\n r[k++] = d | (this.s << (this.DB - p));\r\n while (i >= 0) {\r\n if (p < 8) {\r\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\r\n d |= this[--i] >> (p += this.DB - 8);\r\n }\r\n else {\r\n d = (this[i] >> (p -= 8)) & 0xff;\r\n if (p <= 0) {\r\n p += this.DB;\r\n --i;\r\n }\r\n }\r\n if ((d & 0x80) != 0) d |= -256;\r\n if (k === 0 && (this.s & 0x80) != (d & 0x80)) ++k;\r\n if (k > 0 || d != this.s) r[k++] = d;\r\n }\r\n }\r\n return r;\r\n}\r\n\r\n/**\r\n * return Buffer object\r\n * @param trim {boolean} slice buffer if first element == 0\r\n * @returns {Buffer}\r\n */\r\nfunction bnToBuffer(trimOrSize) {\r\n var res = Buffer.from(this.toByteArray());\r\n if (trimOrSize === true && res[0] === 0) {\r\n res = res.slice(1);\r\n } else if (_.isNumber(trimOrSize)) {\r\n if (res.length > trimOrSize) {\r\n for (var i = 0; i < res.length - trimOrSize; i++) {\r\n if (res[i] !== 0) {\r\n return null;\r\n }\r\n }\r\n return res.slice(res.length - trimOrSize);\r\n } else if (res.length < trimOrSize) {\r\n var padded = Buffer.alloc(trimOrSize);\r\n padded.fill(0, 0, trimOrSize - res.length);\r\n res.copy(padded, trimOrSize - res.length);\r\n return padded;\r\n }\r\n }\r\n return res;\r\n}\r\n\r\nfunction bnEquals(a) {\r\n return (this.compareTo(a) == 0);\r\n}\r\nfunction bnMin(a) {\r\n return (this.compareTo(a) < 0) ? this : a;\r\n}\r\nfunction bnMax(a) {\r\n return (this.compareTo(a) > 0) ? this : a;\r\n}\r\n\r\n//(protected) r = this op a (bitwise)\r\nfunction bnpBitwiseTo(a, op, r) {\r\n var i, f, m = Math.min(a.t, this.t);\r\n for (i = 0; i < m; ++i) r[i] = op(this[i], a[i]);\r\n if (a.t < this.t) {\r\n f = a.s & this.DM;\r\n for (i = m; i < this.t; ++i) r[i] = op(this[i], f);\r\n r.t = this.t;\r\n }\r\n else {\r\n f = this.s & this.DM;\r\n for (i = m; i < a.t; ++i) r[i] = op(f, a[i]);\r\n r.t = a.t;\r\n }\r\n r.s = op(this.s, a.s);\r\n r.clamp();\r\n}\r\n\r\n//(public) this & a\r\nfunction op_and(x, y) {\r\n return x & y;\r\n}\r\nfunction bnAnd(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_and, r);\r\n return r;\r\n}\r\n\r\n//(public) this | a\r\nfunction op_or(x, y) {\r\n return x | y;\r\n}\r\nfunction bnOr(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_or, r);\r\n return r;\r\n}\r\n\r\n//(public) this ^ a\r\nfunction op_xor(x, y) {\r\n return x ^ y;\r\n}\r\nfunction bnXor(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_xor, r);\r\n return r;\r\n}\r\n\r\n//(public) this & ~a\r\nfunction op_andnot(x, y) {\r\n return x & ~y;\r\n}\r\nfunction bnAndNot(a) {\r\n var r = nbi();\r\n this.bitwiseTo(a, op_andnot, r);\r\n return r;\r\n}\r\n\r\n//(public) ~this\r\nfunction bnNot() {\r\n var r = nbi();\r\n for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i];\r\n r.t = this.t;\r\n r.s = ~this.s;\r\n return r;\r\n}\r\n\r\n//(public) this << n\r\nfunction bnShiftLeft(n) {\r\n var r = nbi();\r\n if (n < 0) this.rShiftTo(-n, r); else this.lShiftTo(n, r);\r\n return r;\r\n}\r\n\r\n//(public) this >> n\r\nfunction bnShiftRight(n) {\r\n var r = nbi();\r\n if (n < 0) this.lShiftTo(-n, r); else this.rShiftTo(n, r);\r\n return r;\r\n}\r\n\r\n//return index of lowest 1-bit in x, x < 2^31\r\nfunction lbit(x) {\r\n if (x === 0) return -1;\r\n var r = 0;\r\n if ((x & 0xffff) === 0) {\r\n x >>= 16;\r\n r += 16;\r\n }\r\n if ((x & 0xff) === 0) {\r\n x >>= 8;\r\n r += 8;\r\n }\r\n if ((x & 0xf) === 0) {\r\n x >>= 4;\r\n r += 4;\r\n }\r\n if ((x & 3) === 0) {\r\n x >>= 2;\r\n r += 2;\r\n }\r\n if ((x & 1) === 0) ++r;\r\n return r;\r\n}\r\n\r\n//(public) returns index of lowest 1-bit (or -1 if none)\r\nfunction bnGetLowestSetBit() {\r\n for (var i = 0; i < this.t; ++i)\r\n if (this[i] != 0) return i * this.DB + lbit(this[i]);\r\n if (this.s < 0) return this.t * this.DB;\r\n return -1;\r\n}\r\n\r\n//return number of 1 bits in x\r\nfunction cbit(x) {\r\n var r = 0;\r\n while (x != 0) {\r\n x &= x - 1;\r\n ++r;\r\n }\r\n return r;\r\n}\r\n\r\n//(public) return number of set bits\r\nfunction bnBitCount() {\r\n var r = 0, x = this.s & this.DM;\r\n for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x);\r\n return r;\r\n}\r\n\r\n//(public) true iff nth bit is set\r\nfunction bnTestBit(n) {\r\n var j = Math.floor(n / this.DB);\r\n if (j >= this.t) return (this.s != 0);\r\n return ((this[j] & (1 << (n % this.DB))) != 0);\r\n}\r\n\r\n//(protected) this op (1<>= this.DB;\r\n }\r\n if (a.t < this.t) {\r\n c += a.s;\r\n while (i < this.t) {\r\n c += this[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += this.s;\r\n }\r\n else {\r\n c += this.s;\r\n while (i < a.t) {\r\n c += a[i];\r\n r[i++] = c & this.DM;\r\n c >>= this.DB;\r\n }\r\n c += a.s;\r\n }\r\n r.s = (c < 0) ? -1 : 0;\r\n if (c > 0) r[i++] = c;\r\n else if (c < -1) r[i++] = this.DV + c;\r\n r.t = i;\r\n r.clamp();\r\n}\r\n\r\n//(public) this + a\r\nfunction bnAdd(a) {\r\n var r = nbi();\r\n this.addTo(a, r);\r\n return r;\r\n}\r\n\r\n//(public) this - a\r\nfunction bnSubtract(a) {\r\n var r = nbi();\r\n this.subTo(a, r);\r\n return r;\r\n}\r\n\r\n//(public) this * a\r\nfunction bnMultiply(a) {\r\n var r = nbi();\r\n this.multiplyTo(a, r);\r\n return r;\r\n}\r\n\r\n// (public) this^2\r\nfunction bnSquare() {\r\n var r = nbi();\r\n this.squareTo(r);\r\n return r;\r\n}\r\n\r\n//(public) this / a\r\nfunction bnDivide(a) {\r\n var r = nbi();\r\n this.divRemTo(a, r, null);\r\n return r;\r\n}\r\n\r\n//(public) this % a\r\nfunction bnRemainder(a) {\r\n var r = nbi();\r\n this.divRemTo(a, null, r);\r\n return r;\r\n}\r\n\r\n//(public) [this/a,this%a]\r\nfunction bnDivideAndRemainder(a) {\r\n var q = nbi(), r = nbi();\r\n this.divRemTo(a, q, r);\r\n return new Array(q, r);\r\n}\r\n\r\n//(protected) this *= n, this >= 0, 1 < n < DV\r\nfunction bnpDMultiply(n) {\r\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\r\n ++this.t;\r\n this.clamp();\r\n}\r\n\r\n//(protected) this += n << w words, this >= 0\r\nfunction bnpDAddOffset(n, w) {\r\n if (n === 0) return;\r\n while (this.t <= w) this[this.t++] = 0;\r\n this[w] += n;\r\n while (this[w] >= this.DV) {\r\n this[w] -= this.DV;\r\n if (++w >= this.t) this[this.t++] = 0;\r\n ++this[w];\r\n }\r\n}\r\n\r\n//A \"null\" reducer\r\nfunction NullExp() {\r\n}\r\nfunction nNop(x) {\r\n return x;\r\n}\r\nfunction nMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n}\r\nfunction nSqrTo(x, r) {\r\n x.squareTo(r);\r\n}\r\n\r\nNullExp.prototype.convert = nNop;\r\nNullExp.prototype.revert = nNop;\r\nNullExp.prototype.mulTo = nMulTo;\r\nNullExp.prototype.sqrTo = nSqrTo;\r\n\r\n//(public) this^e\r\nfunction bnPow(e) {\r\n return this.exp(e, new NullExp());\r\n}\r\n\r\n//(protected) r = lower n words of \"this * a\", a.t <= n\r\n//\"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyLowerTo(a, n, r) {\r\n var i = Math.min(this.t + a.t, n);\r\n r.s = 0; // assumes a,this >= 0\r\n r.t = i;\r\n while (i > 0) r[--i] = 0;\r\n var j;\r\n for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\r\n for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i);\r\n r.clamp();\r\n}\r\n\r\n//(protected) r = \"this * a\" without lower n words, n > 0\r\n//\"this\" should be the larger one if appropriate.\r\nfunction bnpMultiplyUpperTo(a, n, r) {\r\n --n;\r\n var i = r.t = this.t + a.t - n;\r\n r.s = 0; // assumes a,this >= 0\r\n while (--i >= 0) r[i] = 0;\r\n for (i = Math.max(n - this.t, 0); i < a.t; ++i)\r\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\r\n r.clamp();\r\n r.drShiftTo(1, r);\r\n}\r\n\r\n//Barrett modular reduction\r\nfunction Barrett(m) {\r\n// setup Barrett\r\n this.r2 = nbi();\r\n this.q3 = nbi();\r\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\r\n this.mu = this.r2.divide(m);\r\n this.m = m;\r\n}\r\n\r\nfunction barrettConvert(x) {\r\n if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m);\r\n else if (x.compareTo(this.m) < 0) return x;\r\n else {\r\n var r = nbi();\r\n x.copyTo(r);\r\n this.reduce(r);\r\n return r;\r\n }\r\n}\r\n\r\nfunction barrettRevert(x) {\r\n return x;\r\n}\r\n\r\n//x = x mod m (HAC 14.42)\r\nfunction barrettReduce(x) {\r\n x.drShiftTo(this.m.t - 1, this.r2);\r\n if (x.t > this.m.t + 1) {\r\n x.t = this.m.t + 1;\r\n x.clamp();\r\n }\r\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\r\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\r\n while (x.compareTo(this.r2) < 0) x.dAddOffset(1, this.m.t + 1);\r\n x.subTo(this.r2, x);\r\n while (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\r\n}\r\n\r\n//r = x^2 mod m; x != r\r\nfunction barrettSqrTo(x, r) {\r\n x.squareTo(r);\r\n this.reduce(r);\r\n}\r\n\r\n//r = x*y mod m; x,y != r\r\nfunction barrettMulTo(x, y, r) {\r\n x.multiplyTo(y, r);\r\n this.reduce(r);\r\n}\r\n\r\nBarrett.prototype.convert = barrettConvert;\r\nBarrett.prototype.revert = barrettRevert;\r\nBarrett.prototype.reduce = barrettReduce;\r\nBarrett.prototype.mulTo = barrettMulTo;\r\nBarrett.prototype.sqrTo = barrettSqrTo;\r\n\r\n//(public) this^e % m (HAC 14.85)\r\nfunction bnModPow(e, m) {\r\n var i = e.bitLength(), k, r = nbv(1), z;\r\n if (i <= 0) return r;\r\n else if (i < 18) k = 1;\r\n else if (i < 48) k = 3;\r\n else if (i < 144) k = 4;\r\n else if (i < 768) k = 5;\r\n else k = 6;\r\n if (i < 8)\r\n z = new Classic(m);\r\n else if (m.isEven())\r\n z = new Barrett(m);\r\n else\r\n z = new Montgomery(m);\r\n\r\n// precomputation\r\n var g = new Array(), n = 3, k1 = k - 1, km = (1 << k) - 1;\r\n g[1] = z.convert(this);\r\n if (k > 1) {\r\n var g2 = nbi();\r\n z.sqrTo(g[1], g2);\r\n while (n <= km) {\r\n g[n] = nbi();\r\n z.mulTo(g2, g[n - 2], g[n]);\r\n n += 2;\r\n }\r\n }\r\n\r\n var j = e.t - 1, w, is1 = true, r2 = nbi(), t;\r\n i = nbits(e[j]) - 1;\r\n while (j >= 0) {\r\n if (i >= k1) w = (e[j] >> (i - k1)) & km;\r\n else {\r\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\r\n if (j > 0) w |= e[j - 1] >> (this.DB + i - k1);\r\n }\r\n\r\n n = k;\r\n while ((w & 1) === 0) {\r\n w >>= 1;\r\n --n;\r\n }\r\n if ((i -= n) < 0) {\r\n i += this.DB;\r\n --j;\r\n }\r\n if (is1) {\t// ret == 1, don't bother squaring or multiplying it\r\n g[w].copyTo(r);\r\n is1 = false;\r\n }\r\n else {\r\n while (n > 1) {\r\n z.sqrTo(r, r2);\r\n z.sqrTo(r2, r);\r\n n -= 2;\r\n }\r\n if (n > 0) z.sqrTo(r, r2); else {\r\n t = r;\r\n r = r2;\r\n r2 = t;\r\n }\r\n z.mulTo(r2, g[w], r);\r\n }\r\n\r\n while (j >= 0 && (e[j] & (1 << i)) === 0) {\r\n z.sqrTo(r, r2);\r\n t = r;\r\n r = r2;\r\n r2 = t;\r\n if (--i < 0) {\r\n i = this.DB - 1;\r\n --j;\r\n }\r\n }\r\n }\r\n return z.revert(r);\r\n}\r\n\r\n//(public) gcd(this,a) (HAC 14.54)\r\nfunction bnGCD(a) {\r\n var x = (this.s < 0) ? this.negate() : this.clone();\r\n var y = (a.s < 0) ? a.negate() : a.clone();\r\n if (x.compareTo(y) < 0) {\r\n var t = x;\r\n x = y;\r\n y = t;\r\n }\r\n var i = x.getLowestSetBit(), g = y.getLowestSetBit();\r\n if (g < 0) return x;\r\n if (i < g) g = i;\r\n if (g > 0) {\r\n x.rShiftTo(g, x);\r\n y.rShiftTo(g, y);\r\n }\r\n while (x.signum() > 0) {\r\n if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x);\r\n if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y);\r\n if (x.compareTo(y) >= 0) {\r\n x.subTo(y, x);\r\n x.rShiftTo(1, x);\r\n }\r\n else {\r\n y.subTo(x, y);\r\n y.rShiftTo(1, y);\r\n }\r\n }\r\n if (g > 0) y.lShiftTo(g, y);\r\n return y;\r\n}\r\n\r\n//(protected) this % n, n < 2^26\r\nfunction bnpModInt(n) {\r\n if (n <= 0) return 0;\r\n var d = this.DV % n, r = (this.s < 0) ? n - 1 : 0;\r\n if (this.t > 0)\r\n if (d === 0) r = this[0] % n;\r\n else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n;\r\n return r;\r\n}\r\n\r\n//(public) 1/this % m (HAC 14.61)\r\nfunction bnModInverse(m) {\r\n var ac = m.isEven();\r\n if ((this.isEven() && ac) || m.signum() === 0) return BigInteger.ZERO;\r\n var u = m.clone(), v = this.clone();\r\n var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\r\n while (u.signum() != 0) {\r\n while (u.isEven()) {\r\n u.rShiftTo(1, u);\r\n if (ac) {\r\n if (!a.isEven() || !b.isEven()) {\r\n a.addTo(this, a);\r\n b.subTo(m, b);\r\n }\r\n a.rShiftTo(1, a);\r\n }\r\n else if (!b.isEven()) b.subTo(m, b);\r\n b.rShiftTo(1, b);\r\n }\r\n while (v.isEven()) {\r\n v.rShiftTo(1, v);\r\n if (ac) {\r\n if (!c.isEven() || !d.isEven()) {\r\n c.addTo(this, c);\r\n d.subTo(m, d);\r\n }\r\n c.rShiftTo(1, c);\r\n }\r\n else if (!d.isEven()) d.subTo(m, d);\r\n d.rShiftTo(1, d);\r\n }\r\n if (u.compareTo(v) >= 0) {\r\n u.subTo(v, u);\r\n if (ac) a.subTo(c, a);\r\n b.subTo(d, b);\r\n }\r\n else {\r\n v.subTo(u, v);\r\n if (ac) c.subTo(a, c);\r\n d.subTo(b, d);\r\n }\r\n }\r\n if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\r\n if (d.compareTo(m) >= 0) return d.subtract(m);\r\n if (d.signum() < 0) d.addTo(m, d); else return d;\r\n if (d.signum() < 0) return d.add(m); else return d;\r\n}\r\n\r\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\r\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\r\n\r\n//(public) test primality with certainty >= 1-.5^t\r\nfunction bnIsProbablePrime(t) {\r\n var i, x = this.abs();\r\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\r\n for (i = 0; i < lowprimes.length; ++i)\r\n if (x[0] == lowprimes[i]) return true;\r\n return false;\r\n }\r\n if (x.isEven()) return false;\r\n i = 1;\r\n while (i < lowprimes.length) {\r\n var m = lowprimes[i], j = i + 1;\r\n while (j < lowprimes.length && m < lplim) m *= lowprimes[j++];\r\n m = x.modInt(m);\r\n while (i < j) if (m % lowprimes[i++] === 0) return false;\r\n }\r\n return x.millerRabin(t);\r\n}\r\n\r\n//(protected) true if probably prime (HAC 4.24, Miller-Rabin)\r\nfunction bnpMillerRabin(t) {\r\n var n1 = this.subtract(BigInteger.ONE);\r\n var k = n1.getLowestSetBit();\r\n if (k <= 0) return false;\r\n var r = n1.shiftRight(k);\r\n t = (t + 1) >> 1;\r\n if (t > lowprimes.length) t = lowprimes.length;\r\n var a = nbi();\r\n for (var i = 0; i < t; ++i) {\r\n //Pick bases at random, instead of starting at 2\r\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\r\n var y = a.modPow(r, this);\r\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\r\n var j = 1;\r\n while (j++ < k && y.compareTo(n1) != 0) {\r\n y = y.modPowInt(2, this);\r\n if (y.compareTo(BigInteger.ONE) === 0) return false;\r\n }\r\n if (y.compareTo(n1) != 0) return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n// protected\r\nBigInteger.prototype.copyTo = bnpCopyTo;\r\nBigInteger.prototype.fromInt = bnpFromInt;\r\nBigInteger.prototype.fromString = bnpFromString;\r\nBigInteger.prototype.fromByteArray = bnpFromByteArray;\r\nBigInteger.prototype.fromBuffer = bnpFromBuffer;\r\nBigInteger.prototype.clamp = bnpClamp;\r\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\r\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\r\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\r\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\r\nBigInteger.prototype.subTo = bnpSubTo;\r\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\r\nBigInteger.prototype.squareTo = bnpSquareTo;\r\nBigInteger.prototype.divRemTo = bnpDivRemTo;\r\nBigInteger.prototype.invDigit = bnpInvDigit;\r\nBigInteger.prototype.isEven = bnpIsEven;\r\nBigInteger.prototype.exp = bnpExp;\r\n\r\nBigInteger.prototype.chunkSize = bnpChunkSize;\r\nBigInteger.prototype.toRadix = bnpToRadix;\r\nBigInteger.prototype.fromRadix = bnpFromRadix;\r\nBigInteger.prototype.fromNumber = bnpFromNumber;\r\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\r\nBigInteger.prototype.changeBit = bnpChangeBit;\r\nBigInteger.prototype.addTo = bnpAddTo;\r\nBigInteger.prototype.dMultiply = bnpDMultiply;\r\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\r\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\r\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\r\nBigInteger.prototype.modInt = bnpModInt;\r\nBigInteger.prototype.millerRabin = bnpMillerRabin;\r\n\r\n\r\n// public\r\nBigInteger.prototype.toString = bnToString;\r\nBigInteger.prototype.negate = bnNegate;\r\nBigInteger.prototype.abs = bnAbs;\r\nBigInteger.prototype.compareTo = bnCompareTo;\r\nBigInteger.prototype.bitLength = bnBitLength;\r\nBigInteger.prototype.mod = bnMod;\r\nBigInteger.prototype.modPowInt = bnModPowInt;\r\n\r\nBigInteger.prototype.clone = bnClone;\r\nBigInteger.prototype.intValue = bnIntValue;\r\nBigInteger.prototype.byteValue = bnByteValue;\r\nBigInteger.prototype.shortValue = bnShortValue;\r\nBigInteger.prototype.signum = bnSigNum;\r\nBigInteger.prototype.toByteArray = bnToByteArray;\r\nBigInteger.prototype.toBuffer = bnToBuffer;\r\nBigInteger.prototype.equals = bnEquals;\r\nBigInteger.prototype.min = bnMin;\r\nBigInteger.prototype.max = bnMax;\r\nBigInteger.prototype.and = bnAnd;\r\nBigInteger.prototype.or = bnOr;\r\nBigInteger.prototype.xor = bnXor;\r\nBigInteger.prototype.andNot = bnAndNot;\r\nBigInteger.prototype.not = bnNot;\r\nBigInteger.prototype.shiftLeft = bnShiftLeft;\r\nBigInteger.prototype.shiftRight = bnShiftRight;\r\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\r\nBigInteger.prototype.bitCount = bnBitCount;\r\nBigInteger.prototype.testBit = bnTestBit;\r\nBigInteger.prototype.setBit = bnSetBit;\r\nBigInteger.prototype.clearBit = bnClearBit;\r\nBigInteger.prototype.flipBit = bnFlipBit;\r\nBigInteger.prototype.add = bnAdd;\r\nBigInteger.prototype.subtract = bnSubtract;\r\nBigInteger.prototype.multiply = bnMultiply;\r\nBigInteger.prototype.divide = bnDivide;\r\nBigInteger.prototype.remainder = bnRemainder;\r\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\r\nBigInteger.prototype.modPow = bnModPow;\r\nBigInteger.prototype.modInverse = bnModInverse;\r\nBigInteger.prototype.pow = bnPow;\r\nBigInteger.prototype.gcd = bnGCD;\r\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\r\nBigInteger.int2char = int2char;\r\n\r\n// \"constants\"\r\nBigInteger.ZERO = nbv(0);\r\nBigInteger.ONE = nbv(1);\r\n\r\n// JSBN-specific extension\r\nBigInteger.prototype.square = bnSquare;\r\n\r\n//BigInteger interfaces not implemented in jsbn:\r\n\r\n//BigInteger(int signum, byte[] magnitude)\r\n//double doubleValue()\r\n//float floatValue()\r\n//int hashCode()\r\n//long longValue()\r\n//static BigInteger valueOf(long val)\r\n\r\nmodule.exports = BigInteger;","module.exports = {\r\n pkcs1: require('./pkcs1'),\r\n pkcs1_oaep: require('./oaep'),\r\n pss: require('./pss'),\r\n\r\n /**\r\n * Check if scheme has padding methods\r\n * @param scheme {string}\r\n * @returns {Boolean}\r\n */\r\n isEncryption: function (scheme) {\r\n return module.exports[scheme] && module.exports[scheme].isEncryption;\r\n },\r\n\r\n /**\r\n * Check if scheme has sign/verify methods\r\n * @param scheme {string}\r\n * @returns {Boolean}\r\n */\r\n isSignature: function (scheme) {\r\n return module.exports[scheme] && module.exports[scheme].isSignature;\r\n }\r\n};","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.js');\n\nconst base64 = base.rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n});\nconst base64pad = base.rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n});\nconst base64url = base.rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n});\nconst base64urlpad = base.rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n});\n\nexports.base64 = base64;\nexports.base64pad = base64pad;\nexports.base64url = base64url;\nexports.base64urlpad = base64urlpad;\n","\"use strict\";\n\nconst Debug = require('debug');\n\nconst fetch = require('cross-fetch');\n\nconst qs = require('query-string');\n\nconst {\n hashEIP712\n} = require('./sig-utils');\n\nconst {\n wrapSignTypedData\n} = require('./errorWrappers');\n\nconst debug = Debug('iexec:api-utils');\n\nconst makeBody = (method, body) => {\n if (method === 'POST' || method === 'PUT') {\n if (typeof body === 'object') {\n return {\n body: JSON.stringify(body)\n };\n }\n\n return {\n body\n };\n }\n\n return {};\n};\n\nconst makeQueryString = (method, queryParams) => {\n if (Object.keys(queryParams).length !== 0) {\n return '?'.concat(qs.stringify(queryParams));\n }\n\n return '';\n};\n\nconst makeHeaders = (method, headers, body) => {\n const generatedHeaders = {};\n\n if (method === 'POST' || method === 'PUT') {\n generatedHeaders['Content-Type'] = typeof body === 'object' ? 'application/json' : 'text/plain';\n }\n\n return {\n headers: { ...generatedHeaders,\n ...headers\n }\n };\n};\n\nconst httpRequest = method => async _ref => {\n let {\n api,\n endpoint,\n query = {},\n body = {},\n headers = {}\n } = _ref;\n debug('httpRequest()', '\\nmethod', method, '\\napi', api, '\\nendpoint', endpoint, '\\nquery', query, '\\nbody', body, '\\nheaders', headers);\n const baseURL = api;\n const queryString = makeQueryString(method, query);\n const url = baseURL.concat(endpoint, queryString);\n const response = await fetch(url, {\n method,\n ...makeHeaders(method, headers, body),\n ...makeBody(method, body)\n });\n return response;\n};\n\nconst checkResponseOk = response => {\n if (!response.ok) {\n throw Error(\"API call error: \".concat(response.status, \" \").concat(response.statusText ? response.statusText : ''));\n }\n\n return response;\n};\n\nconst responseToJson = async response => {\n const contentType = response.headers.get('Content-Type');\n\n if (contentType && contentType.indexOf('application/json') !== -1) {\n const json = await response.json();\n if (json.error) throw new Error(\"API error: \".concat(json.error));\n if (response.status === 200 && json) return json;\n }\n\n throw new Error('The http response is not of JSON type');\n};\n\nconst wrapPaginableRequest = request => async args => request(args).then(_ref2 => {\n let {\n nextPage,\n ...rest\n } = _ref2;\n return { ...rest,\n ...(nextPage && {\n more: () => wrapPaginableRequest(request)({ ...args,\n query: { ...args.query,\n page: nextPage\n }\n })\n })\n };\n});\n\nconst jsonApi = {\n get: args => httpRequest('GET')({ ...args,\n ...{\n headers: {\n Accept: 'application/json',\n ...args.headers\n }\n }\n }).then(responseToJson),\n post: args => httpRequest('POST')({ ...args,\n ...{\n headers: {\n Accept: 'application/json',\n ...args.headers\n }\n }\n }).then(responseToJson),\n put: args => httpRequest('PUT')({ ...args,\n ...{\n headers: {\n Accept: 'application/json',\n ...args.headers\n }\n }\n }).then(responseToJson)\n};\nconst downloadZipApi = {\n get: args => httpRequest('GET')({ ...args,\n ...{\n headers: {\n Accept: 'application/zip',\n ...args.headers\n }\n }\n }).then(checkResponseOk),\n post: args => httpRequest('POST')({ ...args,\n ...{\n headers: {\n Accept: 'application/zip',\n ...args.headers\n }\n }\n }).then(checkResponseOk)\n};\n\nconst getAuthorization = function (api) {\n let endpoint = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '/challenge';\n return async (chainId, address, signer) => {\n try {\n const challenge = await jsonApi.get({\n api,\n endpoint,\n query: {\n chainId,\n address\n }\n });\n const typedData = challenge.data || challenge;\n const {\n domain,\n message\n } = typedData;\n const {\n EIP712Domain,\n ...types\n } = typedData.types;\n const sign = await wrapSignTypedData( // use experiental ether Signer._signTypedData (to remove when signTypedData is included)\n // https://docs.ethers.io/v5/api/signer/#Signer-signTypedData\n\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_signTypedData\"] }] */\n signer._signTypedData && typeof signer._signTypedData === 'function' ? signer._signTypedData(domain, types, message) : signer.signTypedData(domain, types, message));\n const hash = hashEIP712(typedData);\n const separator = '_';\n const authorization = hash.concat(separator).concat(sign).concat(separator).concat(address);\n return authorization;\n } catch (error) {\n debug('getAuthorization()', error);\n throw Error('Failed to get authorization');\n }\n };\n};\n\nmodule.exports = {\n wrapPaginableRequest,\n httpRequest,\n jsonApi,\n downloadZipApi,\n getAuthorization\n};","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar encode = require('./lib/encode.js');\nvar decode = require('./lib/decode.js');\nvar token = require('./lib/token.js');\n\n\n\nexports.encode = encode.encode;\nexports.decode = decode.decode;\nexports.Token = token.Token;\nexports.Type = token.Type;\n","'use strict'\n\nconst { Multiaddr } = require('multiaddr')\n\n/**\n * @typedef {import('./types').MatchesFunction} MatchesFunction\n * @typedef {import('./types').PartialMatchesFunction} PartialMatchesFunction\n * @typedef {import('./types').Mafmt} Mafmt\n */\n\n/*\n * Valid combinations\n */\nconst DNS4 = base('dns4')\nconst DNS6 = base('dns6')\nconst DNSADDR = base('dnsaddr')\nconst DNS = or(\n base('dns'),\n DNSADDR,\n DNS4,\n DNS6\n)\n\nconst IP = or(base('ip4'), base('ip6'))\nconst TCP = or(\n and(IP, base('tcp')),\n and(DNS, base('tcp'))\n)\nconst UDP = and(IP, base('udp'))\nconst UTP = and(UDP, base('utp'))\n\nconst QUIC = and(UDP, base('quic'))\n\nconst WebSockets = or(\n and(TCP, base('ws')),\n and(DNS, base('ws'))\n)\n\nconst WebSocketsSecure = or(\n and(TCP, base('wss')),\n and(DNS, base('wss'))\n)\n\nconst HTTP = or(\n and(TCP, base('http')),\n and(IP, base('http')),\n and(DNS, base('http'))\n)\n\nconst HTTPS = or(\n and(TCP, base('https')),\n and(IP, base('https')),\n and(DNS, base('https'))\n)\n\nconst WebRTCStar = or(\n and(WebSockets, base('p2p-webrtc-star'), base('p2p')),\n and(WebSocketsSecure, base('p2p-webrtc-star'), base('p2p')),\n and(WebSockets, base('p2p-webrtc-star')),\n and(WebSocketsSecure, base('p2p-webrtc-star'))\n)\n\nconst WebSocketStar = or(\n and(WebSockets, base('p2p-websocket-star'), base('p2p')),\n and(WebSocketsSecure, base('p2p-websocket-star'), base('p2p')),\n and(WebSockets, base('p2p-websocket-star')),\n and(WebSocketsSecure, base('p2p-websocket-star'))\n)\n\nconst WebRTCDirect = or(\n and(HTTP, base('p2p-webrtc-direct'), base('p2p')),\n and(HTTPS, base('p2p-webrtc-direct'), base('p2p')),\n and(HTTP, base('p2p-webrtc-direct')),\n and(HTTPS, base('p2p-webrtc-direct'))\n)\n\nconst Reliable = or(\n WebSockets,\n WebSocketsSecure,\n HTTP,\n HTTPS,\n WebRTCStar,\n WebRTCDirect,\n TCP,\n UTP,\n QUIC,\n DNS\n)\n\n// Unlike ws-star, stardust can run over any transport thus removing the requirement for websockets (but don't even think about running a stardust server over webrtc-star ;) )\nconst Stardust = or(\n and(Reliable, base('p2p-stardust'), base('p2p')),\n and(Reliable, base('p2p-stardust'))\n)\n\nconst _P2P = or(\n and(Reliable, base('p2p')),\n WebRTCStar,\n WebRTCDirect,\n base('p2p')\n)\n\nconst _Circuit = or(\n and(_P2P, base('p2p-circuit'), _P2P),\n and(_P2P, base('p2p-circuit')),\n and(base('p2p-circuit'), _P2P),\n and(Reliable, base('p2p-circuit')),\n and(base('p2p-circuit'), Reliable),\n base('p2p-circuit')\n)\n\nconst CircuitRecursive = () => or(\n and(_Circuit, CircuitRecursive),\n _Circuit\n)\n\nconst Circuit = CircuitRecursive()\n\nconst P2P = or(\n and(Circuit, _P2P, Circuit),\n and(_P2P, Circuit),\n and(Circuit, _P2P),\n Circuit,\n _P2P\n)\n\nmodule.exports = {\n DNS,\n DNS4,\n DNS6,\n DNSADDR,\n IP,\n TCP,\n UDP,\n QUIC,\n UTP,\n HTTP,\n HTTPS,\n WebSockets,\n WebSocketsSecure,\n WebSocketStar,\n WebRTCStar,\n WebRTCDirect,\n Reliable,\n Stardust,\n Circuit,\n P2P,\n IPFS: P2P\n}\n\n/*\n * Validation funcs\n */\n\n/**\n * @param {PartialMatchesFunction} partialMatch\n */\nfunction makeMatchesFunction (partialMatch) {\n /**\n * @type {MatchesFunction}\n */\n function matches (a) {\n if (!Multiaddr.isMultiaddr(a)) {\n try {\n a = new Multiaddr(a)\n } catch (err) { // catch error\n return false // also if it's invalid it's propably not matching as well so return false\n }\n }\n const out = partialMatch(a.protoNames())\n if (out === null) {\n return false\n }\n\n if (out === true || out === false) {\n return out\n }\n\n return out.length === 0\n }\n\n return matches\n}\n\n/**\n * @param {Array Mafmt)>} args\n * @returns {Mafmt}\n */\nfunction and (...args) {\n /**\n * @type {PartialMatchesFunction}\n */\n function partialMatch (a) {\n if (a.length < args.length) {\n return null\n }\n\n /** @type {boolean | string[] | null} */\n let out = a\n\n args.some((arg) => {\n out = typeof arg === 'function'\n ? arg().partialMatch(a)\n : arg.partialMatch(a)\n\n if (Array.isArray(out)) {\n a = out\n }\n\n if (out === null) {\n return true\n }\n\n return false\n })\n\n return out\n }\n\n return {\n toString: function () { return '{ ' + args.join(' ') + ' }' },\n input: args,\n matches: makeMatchesFunction(partialMatch),\n partialMatch: partialMatch\n }\n}\n\n/**\n * @param {Array Mafmt)>} args\n * @returns {Mafmt}\n */\nfunction or (...args) {\n /**\n * @type {PartialMatchesFunction}\n */\n function partialMatch (a) {\n let out = null\n args.some((arg) => {\n const res = typeof arg === 'function'\n ? arg().partialMatch(a)\n : arg.partialMatch(a)\n if (res) {\n out = res\n return true\n }\n return false\n })\n\n return out\n }\n\n const result = {\n toString: function () { return '{ ' + args.join(' ') + ' }' },\n input: args,\n matches: makeMatchesFunction(partialMatch),\n partialMatch: partialMatch\n }\n\n return result\n}\n\n/**\n * @param {string} n\n * @returns {Mafmt}\n */\nfunction base (n) {\n const name = n\n\n /**\n * @type {MatchesFunction}\n */\n function matches (a) {\n let ma\n\n if (typeof a === 'string' || a instanceof Uint8Array) {\n try {\n ma = new Multiaddr(a)\n } catch (err) { // catch error\n return false // also if it's invalid it's probably not matching as well so return false\n }\n } else {\n ma = a\n }\n\n const pnames = ma.protoNames()\n if (pnames.length === 1 && pnames[0] === name) {\n return true\n }\n return false\n }\n\n /**\n * @type {PartialMatchesFunction}\n */\n function partialMatch (protos) {\n if (protos.length === 0) {\n return null\n }\n\n if (protos[0] === name) {\n return protos.slice(1)\n }\n return null\n }\n\n return {\n toString: function () { return name },\n matches: matches,\n partialMatch: partialMatch\n }\n}\n","/**\n * An API for getting cryptographically-secure random bytes. The bytes are\n * generated using the Fortuna algorithm devised by Bruce Schneier and\n * Niels Ferguson.\n *\n * Getting strong random bytes is not yet easy to do in javascript. The only\n * truish random entropy that can be collected is from the mouse, keyboard, or\n * from timing with respect to page loads, etc. This generator makes a poor\n * attempt at providing random bytes when those sources haven't yet provided\n * enough entropy to initially seed or to reseed the PRNG.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2009-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./sha256');\nrequire('./prng');\nrequire('./util');\n\n(function() {\n\n// forge.random already defined\nif(forge.random && forge.random.getBytes) {\n module.exports = forge.random;\n return;\n}\n\n(function(jQuery) {\n\n// the default prng plugin, uses AES-128\nvar prng_aes = {};\nvar _prng_aes_output = new Array(4);\nvar _prng_aes_buffer = forge.util.createBuffer();\nprng_aes.formatKey = function(key) {\n // convert the key into 32-bit integers\n var tmp = forge.util.createBuffer(key);\n key = new Array(4);\n key[0] = tmp.getInt32();\n key[1] = tmp.getInt32();\n key[2] = tmp.getInt32();\n key[3] = tmp.getInt32();\n\n // return the expanded key\n return forge.aes._expandKey(key, false);\n};\nprng_aes.formatSeed = function(seed) {\n // convert seed into 32-bit integers\n var tmp = forge.util.createBuffer(seed);\n seed = new Array(4);\n seed[0] = tmp.getInt32();\n seed[1] = tmp.getInt32();\n seed[2] = tmp.getInt32();\n seed[3] = tmp.getInt32();\n return seed;\n};\nprng_aes.cipher = function(key, seed) {\n forge.aes._updateBlock(key, seed, _prng_aes_output, false);\n _prng_aes_buffer.putInt32(_prng_aes_output[0]);\n _prng_aes_buffer.putInt32(_prng_aes_output[1]);\n _prng_aes_buffer.putInt32(_prng_aes_output[2]);\n _prng_aes_buffer.putInt32(_prng_aes_output[3]);\n return _prng_aes_buffer.getBytes();\n};\nprng_aes.increment = function(seed) {\n // FIXME: do we care about carry or signed issues?\n ++seed[3];\n return seed;\n};\nprng_aes.md = forge.md.sha256;\n\n/**\n * Creates a new PRNG.\n */\nfunction spawnPrng() {\n var ctx = forge.prng.create(prng_aes);\n\n /**\n * Gets random bytes. If a native secure crypto API is unavailable, this\n * method tries to make the bytes more unpredictable by drawing from data that\n * can be collected from the user of the browser, eg: mouse movement.\n *\n * If a callback is given, this method will be called asynchronously.\n *\n * @param count the number of random bytes to get.\n * @param [callback(err, bytes)] called once the operation completes.\n *\n * @return the random bytes in a string.\n */\n ctx.getBytes = function(count, callback) {\n return ctx.generate(count, callback);\n };\n\n /**\n * Gets random bytes asynchronously. If a native secure crypto API is\n * unavailable, this method tries to make the bytes more unpredictable by\n * drawing from data that can be collected from the user of the browser,\n * eg: mouse movement.\n *\n * @param count the number of random bytes to get.\n *\n * @return the random bytes in a string.\n */\n ctx.getBytesSync = function(count) {\n return ctx.generate(count);\n };\n\n return ctx;\n}\n\n// create default prng context\nvar _ctx = spawnPrng();\n\n// add other sources of entropy only if window.crypto.getRandomValues is not\n// available -- otherwise this source will be automatically used by the prng\nvar getRandomValues = null;\nvar globalScope = forge.util.globalScope;\nvar _crypto = globalScope.crypto || globalScope.msCrypto;\nif(_crypto && _crypto.getRandomValues) {\n getRandomValues = function(arr) {\n return _crypto.getRandomValues(arr);\n };\n}\n\nif(forge.options.usePureJavaScript ||\n (!forge.util.isNodejs && !getRandomValues)) {\n // if this is a web worker, do not use weak entropy, instead register to\n // receive strong entropy asynchronously from the main thread\n if(typeof window === 'undefined' || window.document === undefined) {\n // FIXME:\n }\n\n // get load time entropy\n _ctx.collectInt(+new Date(), 32);\n\n // add some entropy from navigator object\n if(typeof(navigator) !== 'undefined') {\n var _navBytes = '';\n for(var key in navigator) {\n try {\n if(typeof(navigator[key]) == 'string') {\n _navBytes += navigator[key];\n }\n } catch(e) {\n /* Some navigator keys might not be accessible, e.g. the geolocation\n attribute throws an exception if touched in Mozilla chrome://\n context.\n\n Silently ignore this and just don't use this as a source of\n entropy. */\n }\n }\n _ctx.collect(_navBytes);\n _navBytes = null;\n }\n\n // add mouse and keyboard collectors if jquery is available\n if(jQuery) {\n // set up mouse entropy capture\n jQuery().mousemove(function(e) {\n // add mouse coords\n _ctx.collectInt(e.clientX, 16);\n _ctx.collectInt(e.clientY, 16);\n });\n\n // set up keyboard entropy capture\n jQuery().keypress(function(e) {\n _ctx.collectInt(e.charCode, 8);\n });\n }\n}\n\n/* Random API */\nif(!forge.random) {\n forge.random = _ctx;\n} else {\n // extend forge.random with _ctx\n for(var key in _ctx) {\n forge.random[key] = _ctx[key];\n }\n}\n\n// expose spawn PRNG\nforge.random.createInstance = spawnPrng;\n\nmodule.exports = forge.random;\n\n})(typeof(jQuery) !== 'undefined' ? jQuery : null);\n\n})();\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar NanoDate = require('timestamp-nano');\nvar key = require('interface-datastore/key');\nvar crypto = require('libp2p-crypto');\nvar PeerId = require('peer-id');\nvar Digest = require('multiformats/hashes/digest');\nvar identity = require('multiformats/hashes/identity');\nvar errCode = require('err-code');\nvar base32 = require('multiformats/bases/base32');\nvar fromString = require('uint8arrays/from-string');\nvar toString = require('uint8arrays/to-string');\nvar concat = require('uint8arrays/concat');\nvar equals = require('uint8arrays/equals');\nvar cborg = require('cborg');\nvar Long = require('long');\nvar debug = require('debug');\nvar ipns = require('./pb/ipns.js');\nvar utils = require('./utils.js');\nvar errors = require('./errors.js');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar NanoDate__default = /*#__PURE__*/_interopDefaultLegacy(NanoDate);\nvar crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);\nvar PeerId__default = /*#__PURE__*/_interopDefaultLegacy(PeerId);\nvar Digest__namespace = /*#__PURE__*/_interopNamespace(Digest);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar cborg__namespace = /*#__PURE__*/_interopNamespace(cborg);\nvar Long__default = /*#__PURE__*/_interopDefaultLegacy(Long);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\n\nconst log = Object.assign(debug__default[\"default\"]('jsipns'), { error: debug__default[\"default\"]('jsipns:error') });\nconst ID_MULTIHASH_CODE = identity.identity.code;\nconst IPNS_PREFIX = fromString.fromString('/ipns/');\nconst namespace = '/ipns/';\nconst namespaceLength = namespace.length;\nconst create = (privateKey, value, seq, lifetime) => {\n const expirationDate = new NanoDate__default[\"default\"](Date.now() + Number(lifetime));\n const validityType = ipns.IpnsEntry.ValidityType.EOL;\n const [ms, ns] = lifetime.toString().split('.');\n const lifetimeNs = BigInt(ms) * BigInt(100000) + BigInt(ns || 0);\n return _create(privateKey, value, seq, validityType, expirationDate, lifetimeNs);\n};\nconst createWithExpiration = (privateKey, value, seq, expiration) => {\n const expirationDate = NanoDate__default[\"default\"].fromString(expiration);\n const validityType = ipns.IpnsEntry.ValidityType.EOL;\n const ttlMs = expirationDate.toDate().getTime() - Date.now();\n const ttlNs = BigInt(ttlMs) * BigInt(100000) + BigInt(expirationDate.getNano());\n return _create(privateKey, value, seq, validityType, expirationDate, ttlNs);\n};\nconst _create = async (privateKey, value, seq, validityType, expirationDate, ttl) => {\n seq = BigInt(seq);\n const isoValidity = fromString.fromString(expirationDate.toString());\n const signatureV1 = await sign(privateKey, value, validityType, isoValidity);\n const data = createCborData(value, isoValidity, validityType, seq, ttl);\n const sigData = ipnsEntryDataForV2Sig(data);\n const signatureV2 = await privateKey.sign(sigData);\n const entry = {\n value,\n signature: signatureV1,\n validityType: validityType,\n validity: isoValidity,\n sequence: seq,\n ttl,\n signatureV2,\n data\n };\n log(`ipns entry for ${ value } created`);\n return entry;\n};\nconst createCborData = (value, validity, validityType, sequence, ttl) => {\n const data = {\n Value: value,\n Validity: validity,\n ValidityType: validityType,\n Sequence: sequence,\n TTL: ttl\n };\n return cborg__namespace.encode(data);\n};\nconst validate = async (publicKey, entry) => {\n const {value, validityType, validity} = entry;\n let dataForSignature;\n let signature;\n if (entry.signatureV2 && entry.data) {\n signature = entry.signatureV2;\n dataForSignature = ipnsEntryDataForV2Sig(entry.data);\n validateCborDataMatchesPbData(entry);\n } else {\n signature = entry.signature;\n dataForSignature = ipnsEntryDataForV1Sig(value, validityType, validity);\n }\n let isValid;\n try {\n isValid = await publicKey.verify(dataForSignature, signature);\n } catch (err) {\n isValid = false;\n }\n if (!isValid) {\n log.error('record signature verification failed');\n throw errCode__default[\"default\"](new Error('record signature verification failed'), errors.ERR_SIGNATURE_VERIFICATION);\n }\n if (validityType === ipns.IpnsEntry.ValidityType.EOL) {\n let validityDate;\n try {\n validityDate = utils.parseRFC3339(toString.toString(validity));\n } catch (e) {\n log.error('unrecognized validity format (not an rfc3339 format)');\n throw errCode__default[\"default\"](new Error('unrecognized validity format (not an rfc3339 format)'), errors.ERR_UNRECOGNIZED_FORMAT);\n }\n if (validityDate.getTime() < Date.now()) {\n log.error('record has expired');\n throw errCode__default[\"default\"](new Error('record has expired'), errors.ERR_IPNS_EXPIRED_RECORD);\n }\n } else if (validityType) {\n log.error('unrecognized validity type');\n throw errCode__default[\"default\"](new Error('unrecognized validity type'), errors.ERR_UNRECOGNIZED_VALIDITY);\n }\n log(`ipns entry for ${ value } is valid`);\n};\nconst validateCborDataMatchesPbData = entry => {\n if (!entry.data) {\n throw errCode__default[\"default\"](new Error('Record data is missing'), errors.ERR_INVALID_RECORD_DATA);\n }\n const data = cborg__namespace.decode(entry.data);\n if (Number.isInteger(data.Sequence)) {\n data.Sequence = BigInt(data.Sequence);\n }\n if (Number.isInteger(data.TTL)) {\n data.TTL = BigInt(data.TTL);\n }\n if (!equals.equals(data.Value, entry.value)) {\n throw errCode__default[\"default\"](new Error('Field \"value\" did not match between protobuf and CBOR'), errors.ERR_SIGNATURE_VERIFICATION);\n }\n if (!equals.equals(data.Validity, entry.validity)) {\n throw errCode__default[\"default\"](new Error('Field \"validity\" did not match between protobuf and CBOR'), errors.ERR_SIGNATURE_VERIFICATION);\n }\n if (data.ValidityType !== entry.validityType) {\n throw errCode__default[\"default\"](new Error('Field \"validityType\" did not match between protobuf and CBOR'), errors.ERR_SIGNATURE_VERIFICATION);\n }\n if (data.Sequence !== entry.sequence) {\n throw errCode__default[\"default\"](new Error('Field \"sequence\" did not match between protobuf and CBOR'), errors.ERR_SIGNATURE_VERIFICATION);\n }\n if (data.TTL !== entry.ttl) {\n throw errCode__default[\"default\"](new Error('Field \"ttl\" did not match between protobuf and CBOR'), errors.ERR_SIGNATURE_VERIFICATION);\n }\n};\nconst embedPublicKey = async (publicKey, entry) => {\n if (!publicKey || !publicKey.bytes || !entry) {\n const error = new Error('one or more of the provided parameters are not defined');\n log.error(error);\n throw errCode__default[\"default\"](error, errors.ERR_UNDEFINED_PARAMETER);\n }\n let peerId;\n try {\n peerId = await PeerId__default[\"default\"].createFromPubKey(publicKey.bytes);\n } catch (err) {\n throw errCode__default[\"default\"](err, errors.ERR_PEER_ID_FROM_PUBLIC_KEY);\n }\n let extractedPublicKey;\n try {\n extractedPublicKey = extractPublicKeyFromId(peerId);\n } catch (err) {\n log.error(err);\n throw errCode__default[\"default\"](err, errors.ERR_PUBLIC_KEY_FROM_ID);\n }\n if (extractedPublicKey) {\n return null;\n }\n try {\n entry.pubKey = crypto__default[\"default\"].keys.marshalPublicKey(publicKey);\n } catch (err) {\n log.error(err);\n throw err;\n }\n return entry;\n};\nconst extractPublicKey = async (peerId, entry) => {\n if (!entry || !peerId) {\n const error = new Error('one or more of the provided parameters are not defined');\n log.error(error);\n throw errCode__default[\"default\"](error, errors.ERR_UNDEFINED_PARAMETER);\n }\n let pubKey;\n if (entry.pubKey) {\n try {\n pubKey = crypto__default[\"default\"].keys.unmarshalPublicKey(entry.pubKey);\n } catch (err) {\n log.error(err);\n throw err;\n }\n const otherId = await PeerId__default[\"default\"].createFromPubKey(entry.pubKey);\n if (!otherId.equals(peerId)) {\n throw errCode__default[\"default\"](new Error('Embedded public key did not match PeerID'), errors.ERR_INVALID_EMBEDDED_KEY);\n }\n } else if (peerId.pubKey) {\n pubKey = peerId.pubKey;\n }\n if (pubKey) {\n return pubKey;\n }\n throw errCode__default[\"default\"](new Error('no public key is available'), errors.ERR_UNDEFINED_PARAMETER);\n};\nconst rawStdEncoding = key => base32.base32upper.encode(key).slice(1);\nconst getLocalKey = key$1 => new key.Key(`/ipns/${ rawStdEncoding(key$1) }`);\nconst getIdKeys = pid => {\n const pkBuffer = fromString.fromString('/pk/');\n const ipnsBuffer = fromString.fromString('/ipns/');\n return {\n routingPubKey: new key.Key(concat.concat([\n pkBuffer,\n pid\n ]), false),\n pkKey: new key.Key(rawStdEncoding(concat.concat([\n pkBuffer,\n pid\n ]))),\n routingKey: new key.Key(concat.concat([\n ipnsBuffer,\n pid\n ]), false),\n ipnsKey: new key.Key(rawStdEncoding(concat.concat([\n ipnsBuffer,\n pid\n ])))\n };\n};\nconst sign = (privateKey, value, validityType, validity) => {\n try {\n const dataForSignature = ipnsEntryDataForV1Sig(value, validityType, validity);\n return privateKey.sign(dataForSignature);\n } catch (error) {\n log.error('record signature creation failed');\n throw errCode__default[\"default\"](new Error('record signature creation failed: ' + error.message), errors.ERR_SIGNATURE_CREATION);\n }\n};\nconst getValidityType = validityType => {\n if (validityType.toString() === '0') {\n return 'EOL';\n }\n const error = new Error(`unrecognized validity type ${ validityType.toString() }`);\n log.error(error);\n throw errCode__default[\"default\"](error, errors.ERR_UNRECOGNIZED_VALIDITY);\n};\nconst ipnsEntryDataForV1Sig = (value, validityType, validity) => {\n const validityTypeBuffer = fromString.fromString(getValidityType(validityType));\n return concat.concat([\n value,\n validity,\n validityTypeBuffer\n ]);\n};\nconst ipnsEntryDataForV2Sig = data => {\n const entryData = fromString.fromString('ipns-signature:');\n return concat.concat([\n entryData,\n data\n ]);\n};\nconst extractPublicKeyFromId = peerId => {\n const digest = Digest__namespace.decode(peerId.id);\n if (digest.code !== ID_MULTIHASH_CODE) {\n return null;\n }\n return crypto__default[\"default\"].keys.unmarshalPublicKey(digest.digest);\n};\nconst marshal = obj => {\n return ipns.IpnsEntry.encode({\n ...obj,\n sequence: Long__default[\"default\"].fromString(obj.sequence.toString()),\n ttl: obj.ttl == null ? undefined : Long__default[\"default\"].fromString(obj.ttl.toString())\n }).finish();\n};\nconst unmarshal = buf => {\n const message = ipns.IpnsEntry.decode(buf);\n const object = ipns.IpnsEntry.toObject(message, {\n defaults: false,\n arrays: true,\n objects: false\n });\n return {\n value: object.value,\n signature: object.signature,\n validityType: object.validityType,\n validity: object.validity,\n sequence: Object.hasOwnProperty.call(object, 'sequence') ? BigInt(`${ object.sequence }`) : 0,\n pubKey: object.pubKey,\n ttl: Object.hasOwnProperty.call(object, 'ttl') ? BigInt(`${ object.ttl }`) : undefined,\n signatureV2: object.signatureV2,\n data: object.data\n };\n};\nconst validator = {\n validate: async (marshalledData, key) => {\n const receivedEntry = unmarshal(marshalledData);\n const bufferId = key.slice(IPNS_PREFIX.length);\n const peerId = PeerId__default[\"default\"].createFromBytes(bufferId);\n const pubKey = await extractPublicKey(peerId, receivedEntry);\n await validate(pubKey, receivedEntry);\n },\n select: (dataA, dataB) => {\n const entryA = unmarshal(dataA);\n const entryB = unmarshal(dataB);\n if (entryA.signatureV2 && !entryB.signatureV2) {\n return 0;\n } else if (entryB.signatureV2 && !entryA.signatureV2) {\n return 1;\n }\n if (entryA.sequence > entryB.sequence) {\n return 0;\n } else if (entryA.sequence < entryB.sequence) {\n return 1;\n }\n const entryAValidityDate = utils.parseRFC3339(toString.toString(entryA.validity));\n const entryBValidityDate = utils.parseRFC3339(toString.toString(entryB.validity));\n return entryBValidityDate.getTime() > entryAValidityDate.getTime() ? 1 : 0;\n }\n};\n\nexports.create = create;\nexports.createWithExpiration = createWithExpiration;\nexports.embedPublicKey = embedPublicKey;\nexports.extractPublicKey = extractPublicKey;\nexports.getIdKeys = getIdKeys;\nexports.getLocalKey = getLocalKey;\nexports.marshal = marshal;\nexports.namespace = namespace;\nexports.namespaceLength = namespaceLength;\nexports.unmarshal = unmarshal;\nexports.validate = validate;\nexports.validator = validator;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar utils = require('./utils.js');\nvar drain = require('it-drain');\nvar filter = require('it-filter');\nvar take = require('it-take');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar drain__default = /*#__PURE__*/_interopDefaultLegacy(drain);\nvar filter__default = /*#__PURE__*/_interopDefaultLegacy(filter);\nvar take__default = /*#__PURE__*/_interopDefaultLegacy(take);\n\nclass BaseDatastore {\n open() {\n return Promise.reject(new Error('.open is not implemented'));\n }\n close() {\n return Promise.reject(new Error('.close is not implemented'));\n }\n put(key, val, options) {\n return Promise.reject(new Error('.put is not implemented'));\n }\n get(key, options) {\n return Promise.reject(new Error('.get is not implemented'));\n }\n has(key, options) {\n return Promise.reject(new Error('.has is not implemented'));\n }\n delete(key, options) {\n return Promise.reject(new Error('.delete is not implemented'));\n }\n async *putMany(source, options = {}) {\n for await (const {key, value} of source) {\n await this.put(key, value, options);\n yield {\n key,\n value\n };\n }\n }\n async *getMany(source, options = {}) {\n for await (const key of source) {\n yield this.get(key, options);\n }\n }\n async *deleteMany(source, options = {}) {\n for await (const key of source) {\n await this.delete(key, options);\n yield key;\n }\n }\n batch() {\n let puts = [];\n let dels = [];\n return {\n put(key, value) {\n puts.push({\n key,\n value\n });\n },\n delete(key) {\n dels.push(key);\n },\n commit: async options => {\n await drain__default['default'](this.putMany(puts, options));\n puts = [];\n await drain__default['default'](this.deleteMany(dels, options));\n dels = [];\n }\n };\n }\n async *_all(q, options) {\n throw new Error('._all is not implemented');\n }\n async *_allKeys(q, options) {\n throw new Error('._allKeys is not implemented');\n }\n query(q, options) {\n let it = this._all(q, options);\n if (q.prefix != null) {\n it = filter__default['default'](it, e => e.key.toString().startsWith(q.prefix));\n }\n if (Array.isArray(q.filters)) {\n it = q.filters.reduce((it, f) => filter__default['default'](it, f), it);\n }\n if (Array.isArray(q.orders)) {\n it = q.orders.reduce((it, f) => utils.sortAll(it, f), it);\n }\n if (q.offset != null) {\n let i = 0;\n it = filter__default['default'](it, () => i++ >= q.offset);\n }\n if (q.limit != null) {\n it = take__default['default'](it, q.limit);\n }\n return it;\n }\n queryKeys(q, options) {\n let it = this._allKeys(q, options);\n if (q.prefix != null) {\n it = filter__default['default'](it, key => key.toString().startsWith(q.prefix));\n }\n if (Array.isArray(q.filters)) {\n it = q.filters.reduce((it, f) => filter__default['default'](it, f), it);\n }\n if (Array.isArray(q.orders)) {\n it = q.orders.reduce((it, f) => utils.sortAll(it, f), it);\n }\n if (q.offset != null) {\n let i = 0;\n it = filter__default['default'](it, () => i++ >= q.offset);\n }\n if (q.limit != null) {\n it = take__default['default'](it, q.limit);\n }\n return it;\n }\n}\n\nexports.BaseDatastore = BaseDatastore;\n","'use strict'\n\n/**\n * Collects all values from an (async) iterable into an array and returns it.\n *\n * @template T\n * @param {AsyncIterable|Iterable} source\n */\nconst all = async (source) => {\n const arr = []\n\n for await (const entry of source) {\n arr.push(entry)\n }\n\n return arr\n}\n\nmodule.exports = all\n","'use strict'\n\n/**\n * Stop iteration after n items have been received.\n *\n * @template T\n * @param {AsyncIterable|Iterable} source\n * @param {number} limit\n * @returns {AsyncIterable}\n */\nconst take = async function * (source, limit) {\n let items = 0\n\n if (limit < 1) {\n return\n }\n\n for await (const entry of source) {\n yield entry\n\n items++\n\n if (items === limit) {\n return\n }\n }\n}\n\nmodule.exports = take\n","'use strict'\n\n/**\n * Returns the first result from an (async) iterable, unless empty, in which\n * case returns `undefined`.\n *\n * @template T\n * @param {AsyncIterable|Iterable} source\n */\nconst first = async (source) => {\n for await (const entry of source) { // eslint-disable-line no-unreachable-loop\n return entry\n }\n\n return undefined\n}\n\nmodule.exports = first\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar dagPB = require('@ipld/dag-pb');\nvar cid = require('multiformats/cid');\nvar debug = require('debug');\nvar ipfsUnixfs = require('ipfs-unixfs');\nvar dirSharded = require('./dir-sharded.js');\nvar hamtUtils = require('./hamt-utils.js');\nvar errCode = require('err-code');\nvar last = require('it-last');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar dagPB__namespace = /*#__PURE__*/_interopNamespace(dagPB);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar last__default = /*#__PURE__*/_interopDefaultLegacy(last);\n\nconst log = debug__default[\"default\"]('ipfs:mfs:core:utils:add-link');\nasync function addLink(context, options) {\n let parent = options.parent;\n if (options.parentCid) {\n const parentCid = cid.CID.asCID(options.parentCid);\n if (parentCid === null) {\n throw errCode__default[\"default\"](new Error('Invalid CID passed to addLink'), 'EINVALIDPARENTCID');\n }\n if (parentCid.code !== dagPB__namespace.code) {\n throw errCode__default[\"default\"](new Error('Unsupported codec. Only DAG-PB is supported'), 'EINVALIDPARENTCID');\n }\n log(`Loading parent node ${ parentCid }`);\n const block = await context.repo.blocks.get(parentCid);\n parent = dagPB__namespace.decode(block);\n }\n if (!parent) {\n throw errCode__default[\"default\"](new Error('No parent node or CID passed to addLink'), 'EINVALIDPARENT');\n }\n if (!options.cid) {\n throw errCode__default[\"default\"](new Error('No child cid passed to addLink'), 'EINVALIDCHILDCID');\n }\n if (!options.name) {\n throw errCode__default[\"default\"](new Error('No child name passed to addLink'), 'EINVALIDCHILDNAME');\n }\n if (!options.size && options.size !== 0) {\n throw errCode__default[\"default\"](new Error('No child size passed to addLink'), 'EINVALIDCHILDSIZE');\n }\n if (!parent.Data) {\n throw errCode__default[\"default\"](new Error('Parent node with no data passed to addLink'), 'ERR_INVALID_PARENT');\n }\n const meta = ipfsUnixfs.UnixFS.unmarshal(parent.Data);\n if (meta.type === 'hamt-sharded-directory') {\n log('Adding link to sharded directory');\n return addToShardedDirectory(context, {\n ...options,\n parent\n });\n }\n if (parent.Links.length >= options.shardSplitThreshold) {\n log('Converting directory to sharded directory');\n return convertToShardedDirectory(context, {\n ...options,\n parent,\n mtime: meta.mtime,\n mode: meta.mode\n });\n }\n log(`Adding ${ options.name } (${ options.cid }) to regular directory`);\n return addToDirectory(context, {\n ...options,\n parent\n });\n}\nconst convertToShardedDirectory = async (context, options) => {\n const result = await hamtUtils.createShard(context, options.parent.Links.map(link => ({\n name: link.Name || '',\n size: link.Tsize || 0,\n cid: link.Hash\n })).concat({\n name: options.name,\n size: options.size,\n cid: options.cid\n }), options);\n log(`Converted directory to sharded directory ${ result.cid }`);\n return result;\n};\nconst addToDirectory = async (context, options) => {\n const parentLinks = options.parent.Links.filter(link => {\n return link.Name !== options.name;\n });\n parentLinks.push({\n Name: options.name,\n Tsize: options.size,\n Hash: options.cid\n });\n if (!options.parent.Data) {\n throw errCode__default[\"default\"](new Error('Parent node with no data passed to addToDirectory'), 'ERR_INVALID_PARENT');\n }\n const node = ipfsUnixfs.UnixFS.unmarshal(options.parent.Data);\n let data;\n if (node.mtime) {\n const ms = Date.now();\n const secs = Math.floor(ms / 1000);\n node.mtime = {\n secs: secs,\n nsecs: (ms - secs * 1000) * 1000\n };\n data = node.marshal();\n } else {\n data = options.parent.Data;\n }\n options.parent = dagPB__namespace.prepare({\n Data: data,\n Links: parentLinks\n });\n const hasher = await context.hashers.getHasher(options.hashAlg);\n const buf = dagPB__namespace.encode(options.parent);\n const hash = await hasher.digest(buf);\n const cid$1 = cid.CID.create(options.cidVersion, dagPB__namespace.code, hash);\n if (options.flush) {\n await context.repo.blocks.put(cid$1, buf);\n }\n return {\n node: options.parent,\n cid: cid$1,\n size: buf.length\n };\n};\nconst addToShardedDirectory = async (context, options) => {\n const {shard, path} = await addFileToShardedDirectory(context, options);\n const result = await last__default[\"default\"](shard.flush(context.repo.blocks));\n if (!result) {\n throw new Error('No result from flushing shard');\n }\n const block = await context.repo.blocks.get(result.cid);\n const node = dagPB__namespace.decode(block);\n const parentLinks = options.parent.Links.filter(link => {\n return (link.Name || '').substring(0, 2) !== path[0].prefix;\n });\n const newLink = node.Links.find(link => (link.Name || '').substring(0, 2) === path[0].prefix);\n if (!newLink) {\n throw new Error(`No link found with prefix ${ path[0].prefix }`);\n }\n parentLinks.push(newLink);\n return hamtUtils.updateHamtDirectory(context, parentLinks, path[0].bucket, options);\n};\nconst addFileToShardedDirectory = async (context, options) => {\n const file = {\n name: options.name,\n cid: options.cid,\n size: options.size\n };\n if (!options.parent.Data) {\n throw errCode__default[\"default\"](new Error('Parent node with no data passed to addFileToShardedDirectory'), 'ERR_INVALID_PARENT');\n }\n const rootBucket = await hamtUtils.recreateInitialHamtLevel(options.parent.Links);\n const node = ipfsUnixfs.UnixFS.unmarshal(options.parent.Data);\n const shard = new dirSharded.DirSharded({\n root: true,\n dir: true,\n parent: undefined,\n parentKey: undefined,\n path: '',\n dirty: true,\n flat: false,\n mode: node.mode\n }, options);\n shard._bucket = rootBucket;\n if (node.mtime) {\n shard.mtime = { secs: Math.round(Date.now() / 1000) };\n }\n const position = await rootBucket._findNewBucketAndPos(file.name);\n const path = toBucketPath(position);\n path[0].node = options.parent;\n let index = 0;\n while (index < path.length) {\n const segment = path[index];\n index++;\n const node = segment.node;\n if (!node) {\n throw new Error('Segment had no node');\n }\n const link = node.Links.find(link => (link.Name || '').substring(0, 2) === segment.prefix);\n if (!link) {\n log(`Link ${ segment.prefix }${ file.name } will be added`);\n index = path.length;\n break;\n }\n if (link.Name === `${ segment.prefix }${ file.name }`) {\n log(`Link ${ segment.prefix }${ file.name } will be replaced`);\n index = path.length;\n break;\n }\n if ((link.Name || '').length > 2) {\n log(`Link ${ link.Name } ${ link.Hash } will be replaced with a subshard`);\n index = path.length;\n break;\n }\n log(`Found subshard ${ segment.prefix }`);\n const block = await context.repo.blocks.get(link.Hash);\n const subShard = dagPB__namespace.decode(block);\n if (!path[index]) {\n log(`Loaded new subshard ${ segment.prefix }`);\n await hamtUtils.recreateHamtLevel(context, subShard.Links, rootBucket, segment.bucket, parseInt(segment.prefix, 16));\n const position = await rootBucket._findNewBucketAndPos(file.name);\n path.push({\n bucket: position.bucket,\n prefix: hamtUtils.toPrefix(position.pos),\n node: subShard\n });\n break;\n }\n const nextSegment = path[index];\n await hamtUtils.addLinksToHamtBucket(context, subShard.Links, nextSegment.bucket, rootBucket);\n nextSegment.node = subShard;\n }\n await shard._bucket.put(file.name, {\n size: file.size,\n cid: file.cid\n });\n return {\n shard,\n path\n };\n};\nconst toBucketPath = position => {\n const path = [{\n bucket: position.bucket,\n prefix: hamtUtils.toPrefix(position.pos)\n }];\n let bucket = position.bucket._parent;\n let positionInBucket = position.bucket._posAtParent;\n while (bucket) {\n path.push({\n bucket,\n prefix: hamtUtils.toPrefix(positionInBucket)\n });\n positionInBucket = bucket._posAtParent;\n bucket = bucket._parent;\n }\n path.reverse();\n return path;\n};\n\nexports.addLink = addLink;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar debug = require('debug');\nvar addLink = require('./add-link.js');\nvar dagPB = require('@ipld/dag-pb');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\n\nconst log = debug__default[\"default\"]('ipfs:mfs:utils:update-tree');\nconst defaultOptions = { shardSplitThreshold: 1000 };\nasync function updateTree(context, trail, options) {\n options = Object.assign({}, defaultOptions, options);\n log('Trail', trail);\n trail = trail.slice().reverse();\n let index = 0;\n let child;\n for await (const block of context.repo.blocks.getMany(trail.map(node => node.cid))) {\n const node = dagPB.decode(block);\n const cid = trail[index].cid;\n const name = trail[index].name;\n index++;\n if (!child) {\n child = {\n cid,\n name,\n size: block.length\n };\n continue;\n }\n const result = await addLink.addLink(context, {\n parent: node,\n name: child.name,\n cid: child.cid,\n size: child.size,\n flush: options.flush,\n shardSplitThreshold: options.shardSplitThreshold,\n hashAlg: options.hashAlg,\n cidVersion: options.cidVersion\n });\n child = {\n cid: result.cid,\n name,\n size: result.size\n };\n }\n const {cid} = child;\n log(`Final CID ${ cid }`);\n return cid;\n}\n\nexports.updateTree = updateTree;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar debug = require('debug');\nvar utils = require('../../../utils.js');\nvar errCode = require('err-code');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nconst log = debug__default[\"default\"]('ipfs:mfs:utils:update-mfs-root');\nasync function updateMfsRoot(context, cid, options) {\n if (options && options.signal && options.signal.aborted) {\n throw errCode__default[\"default\"](new Error('Request aborted'), 'ERR_ABORTED', { name: 'Aborted' });\n }\n log(`New MFS root will be ${ cid }`);\n await context.repo.datastore.put(utils.MFS_ROOT_KEY, cid.bytes);\n return cid;\n}\n\nexports.updateMfsRoot = updateMfsRoot;\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./create-gossip-rpc\"), exports);\n__exportStar(require(\"./shuffle\"), exports);\n__exportStar(require(\"./has-gossip-protocol\"), exports);\n__exportStar(require(\"./messageIdToString\"), exports);\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERR_TOPIC_VALIDATOR_IGNORE = exports.ERR_TOPIC_VALIDATOR_REJECT = exports.TimeCacheDuration = exports.GossipsubSeenTTL = exports.GossipsubIWantFollowupTime = exports.GossipsubMaxIHaveMessages = exports.GossipsubMaxIHaveLength = exports.GossipsubGraftFloodThreshold = exports.GossipsubOpportunisticGraftPeers = exports.GossipsubOpportunisticGraftTicks = exports.GossipsubDirectConnectInitialDelay = exports.GossipsubDirectConnectTicks = exports.GossipsubConnectionTimeout = exports.GossipsubMaxPendingConnections = exports.GossipsubConnectors = exports.GossipsubPruneBackoffTicks = exports.GossipsubPruneBackoff = exports.GossipsubPrunePeers = exports.GossipsubFanoutTTL = exports.GossipsubHeartbeatInterval = exports.GossipsubHeartbeatInitialDelay = exports.GossipsubGossipRetransmission = exports.GossipsubGossipFactor = exports.GossipsubDlazy = exports.GossipsubHistoryGossip = exports.GossipsubHistoryLength = exports.GossipsubDout = exports.GossipsubDscore = exports.GossipsubDhi = exports.GossipsubDlo = exports.GossipsubD = exports.GossipsubIDv11 = exports.GossipsubIDv10 = exports.FloodsubID = exports.minute = exports.second = void 0;\nexports.second = 1000;\nexports.minute = 60 * exports.second;\n// Protocol identifiers\nexports.FloodsubID = '/floodsub/1.0.0';\n/**\n * The protocol ID for version 1.0.0 of the Gossipsub protocol\n * It is advertised along with GossipsubIDv11 for backwards compatability\n */\nexports.GossipsubIDv10 = '/meshsub/1.0.0';\n/**\n * The protocol ID for version 1.1.0 of the Gossipsub protocol\n * See the spec for details about how v1.1.0 compares to v1.0.0:\n * https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md\n */\nexports.GossipsubIDv11 = '/meshsub/1.1.0';\n// Overlay parameters\n/**\n * GossipsubD sets the optimal degree for a Gossipsub topic mesh. For example, if GossipsubD == 6,\n * each peer will want to have about six peers in their mesh for each topic they're subscribed to.\n * GossipsubD should be set somewhere between GossipsubDlo and GossipsubDhi.\n */\nexports.GossipsubD = 6;\n/**\n * GossipsubDlo sets the lower bound on the number of peers we keep in a Gossipsub topic mesh.\n * If we have fewer than GossipsubDlo peers, we will attempt to graft some more into the mesh at\n * the next heartbeat.\n */\nexports.GossipsubDlo = 4;\n/**\n * GossipsubDhi sets the upper bound on the number of peers we keep in a Gossipsub topic mesh.\n * If we have more than GossipsubDhi peers, we will select some to prune from the mesh at the next heartbeat.\n */\nexports.GossipsubDhi = 12;\n/**\n * GossipsubDscore affects how peers are selected when pruning a mesh due to over subscription.\n * At least GossipsubDscore of the retained peers will be high-scoring, while the remainder are\n * chosen randomly.\n */\nexports.GossipsubDscore = 4;\n/**\n * GossipsubDout sets the quota for the number of outbound connections to maintain in a topic mesh.\n * When the mesh is pruned due to over subscription, we make sure that we have outbound connections\n * to at least GossipsubDout of the survivor peers. This prevents sybil attackers from overwhelming\n * our mesh with incoming connections.\n *\n * GossipsubDout must be set below GossipsubDlo, and must not exceed GossipsubD / 2.\n */\nexports.GossipsubDout = 2;\n// Gossip parameters\n/**\n * GossipsubHistoryLength controls the size of the message cache used for gossip.\n * The message cache will remember messages for GossipsubHistoryLength heartbeats.\n */\nexports.GossipsubHistoryLength = 5;\n/**\n * GossipsubHistoryGossip controls how many cached message ids we will advertise in\n * IHAVE gossip messages. When asked for our seen message IDs, we will return\n * only those from the most recent GossipsubHistoryGossip heartbeats. The slack between\n * GossipsubHistoryGossip and GossipsubHistoryLength allows us to avoid advertising messages\n * that will be expired by the time they're requested.\n *\n * GossipsubHistoryGossip must be less than or equal to GossipsubHistoryLength to\n * avoid a runtime panic.\n */\nexports.GossipsubHistoryGossip = 3;\n/**\n * GossipsubDlazy affects how many peers we will emit gossip to at each heartbeat.\n * We will send gossip to at least GossipsubDlazy peers outside our mesh. The actual\n * number may be more, depending on GossipsubGossipFactor and how many peers we're\n * connected to.\n */\nexports.GossipsubDlazy = 6;\n/**\n * GossipsubGossipFactor affects how many peers we will emit gossip to at each heartbeat.\n * We will send gossip to GossipsubGossipFactor * (total number of non-mesh peers), or\n * GossipsubDlazy, whichever is greater.\n */\nexports.GossipsubGossipFactor = 0.25;\n/**\n * GossipsubGossipRetransmission controls how many times we will allow a peer to request\n * the same message id through IWANT gossip before we start ignoring them. This is designed\n * to prevent peers from spamming us with requests and wasting our resources.\n */\nexports.GossipsubGossipRetransmission = 3;\n// Heartbeat interval\n/**\n * GossipsubHeartbeatInitialDelay is the short delay before the heartbeat timer begins\n * after the router is initialized.\n */\nexports.GossipsubHeartbeatInitialDelay = 100;\n/**\n * GossipsubHeartbeatInterval controls the time between heartbeats.\n */\nexports.GossipsubHeartbeatInterval = exports.second;\n/**\n * GossipsubFanoutTTL controls how long we keep track of the fanout state. If it's been\n * GossipsubFanoutTTL since we've published to a topic that we're not subscribed to,\n * we'll delete the fanout map for that topic.\n */\nexports.GossipsubFanoutTTL = exports.minute;\n/**\n * GossipsubPrunePeers controls the number of peers to include in prune Peer eXchange.\n * When we prune a peer that's eligible for PX (has a good score, etc), we will try to\n * send them signed peer records for up to GossipsubPrunePeers other peers that we\n * know of.\n */\nexports.GossipsubPrunePeers = 16;\n/**\n * GossipsubPruneBackoff controls the backoff time for pruned peers. This is how long\n * a peer must wait before attempting to graft into our mesh again after being pruned.\n * When pruning a peer, we send them our value of GossipsubPruneBackoff so they know\n * the minimum time to wait. Peers running older versions may not send a backoff time,\n * so if we receive a prune message without one, we will wait at least GossipsubPruneBackoff\n * before attempting to re-graft.\n */\nexports.GossipsubPruneBackoff = exports.minute;\n/**\n * GossipsubPruneBackoffTicks is the number of heartbeat ticks for attempting to prune expired\n * backoff timers.\n */\nexports.GossipsubPruneBackoffTicks = 15;\n/**\n * GossipsubConnectors controls the number of active connection attempts for peers obtained through PX.\n */\nexports.GossipsubConnectors = 8;\n/**\n * GossipsubMaxPendingConnections sets the maximum number of pending connections for peers attempted through px.\n */\nexports.GossipsubMaxPendingConnections = 128;\n/**\n * GossipsubConnectionTimeout controls the timeout for connection attempts.\n */\nexports.GossipsubConnectionTimeout = 30 * exports.second;\n/**\n * GossipsubDirectConnectTicks is the number of heartbeat ticks for attempting to reconnect direct peers\n * that are not currently connected.\n */\nexports.GossipsubDirectConnectTicks = 300;\n/**\n * GossipsubDirectConnectInitialDelay is the initial delay before opening connections to direct peers\n */\nexports.GossipsubDirectConnectInitialDelay = exports.second;\n/**\n * GossipsubOpportunisticGraftTicks is the number of heartbeat ticks for attempting to improve the mesh\n * with opportunistic grafting. Every GossipsubOpportunisticGraftTicks we will attempt to select some\n * high-scoring mesh peers to replace lower-scoring ones, if the median score of our mesh peers falls\n * below a threshold\n */\nexports.GossipsubOpportunisticGraftTicks = 60;\n/**\n * GossipsubOpportunisticGraftPeers is the number of peers to opportunistically graft.\n */\nexports.GossipsubOpportunisticGraftPeers = 2;\n/**\n * If a GRAFT comes before GossipsubGraftFloodThreshold has elapsed since the last PRUNE,\n * then there is an extra score penalty applied to the peer through P7.\n */\nexports.GossipsubGraftFloodThreshold = 10 * exports.second;\n/**\n * GossipsubMaxIHaveLength is the maximum number of messages to include in an IHAVE message.\n * Also controls the maximum number of IHAVE ids we will accept and request with IWANT from a\n * peer within a heartbeat, to protect from IHAVE floods. You should adjust this value from the\n * default if your system is pushing more than 5000 messages in GossipsubHistoryGossip heartbeats;\n * with the defaults this is 1666 messages/s.\n */\nexports.GossipsubMaxIHaveLength = 5000;\n/**\n * GossipsubMaxIHaveMessages is the maximum number of IHAVE messages to accept from a peer within a heartbeat.\n */\nexports.GossipsubMaxIHaveMessages = 10;\n/**\n * Time to wait for a message requested through IWANT following an IHAVE advertisement.\n * If the message is not received within this window, a broken promise is declared and\n * the router may apply bahavioural penalties.\n */\nexports.GossipsubIWantFollowupTime = 3 * exports.second;\n/**\n * Time in milliseconds to keep message ids in the seen cache\n */\nexports.GossipsubSeenTTL = 30 * exports.second;\nexports.TimeCacheDuration = 120 * 1000;\nexports.ERR_TOPIC_VALIDATOR_REJECT = 'ERR_TOPIC_VALIDATOR_REJECT';\nexports.ERR_TOPIC_VALIDATOR_IGNORE = 'ERR_TOPIC_VALIDATOR_IGNORE';\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar fromString = require('uint8arrays/from-string');\nvar responseTypes = require('./response-types.js');\nvar multiaddr = require('multiaddr');\n\nconst mapEvent = event => {\n if (event.Type === responseTypes.SendingQuery) {\n return {\n to: event.ID,\n name: 'SENDING_QUERY',\n type: event.Type\n };\n }\n if (event.Type === responseTypes.PeerResponse) {\n return {\n from: event.ID,\n name: 'PEER_RESPONSE',\n type: event.Type,\n messageType: 0,\n messageName: 'PUT_VALUE',\n closer: (event.Responses || []).map(({ID, Addrs}) => ({\n id: ID,\n multiaddrs: Addrs.map(addr => new multiaddr.Multiaddr(addr))\n })),\n providers: (event.Responses || []).map(({ID, Addrs}) => ({\n id: ID,\n multiaddrs: Addrs.map(addr => new multiaddr.Multiaddr(addr))\n }))\n };\n }\n if (event.Type === responseTypes.FinalPeer) {\n let peer = {\n id: event.ID,\n multiaddrs: []\n };\n if (event.Responses && event.Responses.length) {\n peer = {\n id: event.Responses[0].ID,\n multiaddrs: event.Responses[0].Addrs.map(addr => new multiaddr.Multiaddr(addr))\n };\n }\n return {\n from: event.ID,\n name: 'FINAL_PEER',\n type: event.Type,\n peer\n };\n }\n if (event.Type === responseTypes.QueryError) {\n return {\n from: event.ID,\n name: 'QUERY_ERROR',\n type: event.Type,\n error: new Error(event.Extra)\n };\n }\n if (event.Type === responseTypes.Provider) {\n return {\n from: event.ID,\n name: 'PROVIDER',\n type: event.Type,\n providers: event.Responses.map(({ID, Addrs}) => ({\n id: ID,\n multiaddrs: Addrs.map(addr => new multiaddr.Multiaddr(addr))\n }))\n };\n }\n if (event.Type === responseTypes.Value) {\n return {\n from: event.ID,\n name: 'VALUE',\n type: event.Type,\n value: fromString.fromString(event.Extra, 'base64pad')\n };\n }\n if (event.Type === responseTypes.AddingPeer) {\n const peers = event.Responses.map(({ID}) => ID);\n if (!peers.length) {\n throw new Error('No peer found');\n }\n return {\n name: 'ADDING_PEER',\n type: event.Type,\n peer: peers[0]\n };\n }\n if (event.Type === responseTypes.DialingPeer) {\n return {\n name: 'DIALING_PEER',\n type: event.Type,\n peer: event.ID\n };\n }\n throw new Error('Unknown DHT event type');\n};\n\nexports.mapEvent = mapEvent;\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","'use strict'\n\nconst { MESSAGE_TYPE_LOOKUP } = require('../message')\n\n/** @type {import('../types').MessageName[]} */\nconst MESSAGE_NAMES = [\n 'PUT_VALUE',\n 'GET_VALUE',\n 'ADD_PROVIDER',\n 'GET_PROVIDERS',\n 'FIND_NODE',\n 'PING'\n]\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('../types').QueryEvent} QueryEvent\n * @typedef {import('../types').PeerData} PeerData\n * @typedef {import('../message').Message} Message\n * @typedef {import('../message/dht').Message.MessageType} MessageType\n * @typedef {import('../types').DHTRecord} Record\n */\n\n/**\n * @param {object} fields\n * @param {PeerId} fields.to\n * @param {number} fields.type\n * @returns {import('../types').SendingQueryEvent}\n */\nfunction sendingQueryEvent (fields) {\n return {\n ...fields,\n name: 'SENDING_QUERY',\n type: 0,\n // @ts-expect-error MESSAGE_TYPE_LOOKUP is string[]\n messageName: MESSAGE_TYPE_LOOKUP[fields.type],\n messageType: fields.type\n }\n}\n\n/**\n * @param {object} fields\n * @param {PeerId} fields.from\n * @param {MessageType} fields.messageType\n * @param {PeerData[]} [fields.closer]\n * @param {PeerData[]} [fields.providers]\n * @param {Record} [fields.record]\n * @returns {import('../types').PeerResponseEvent}\n */\nfunction peerResponseEvent (fields) {\n return {\n ...fields,\n name: 'PEER_RESPONSE',\n type: 1,\n messageName: MESSAGE_NAMES[fields.messageType],\n closer: fields.closer ? fields.closer : [],\n providers: fields.providers ? fields.providers : []\n }\n}\n\n/**\n * @param {object} fields\n * @param {PeerId} fields.from\n * @param {PeerData} fields.peer\n * @returns {import('../types').FinalPeerEvent}\n */\nfunction finalPeerEvent (fields) {\n return {\n ...fields,\n name: 'FINAL_PEER',\n type: 2\n }\n}\n\n/**\n * @param {object} fields\n * @param {PeerId} fields.from\n * @param {Error} fields.error\n * @returns {import('../types').QueryErrorEvent}\n */\nfunction queryErrorEvent (fields) {\n return {\n ...fields,\n name: 'QUERY_ERROR',\n type: 3\n }\n}\n\n/**\n * @param {object} fields\n * @param {PeerId} fields.from\n * @param {PeerData[]} fields.providers\n * @returns {import('../types').ProviderEvent}\n */\nfunction providerEvent (fields) {\n return {\n ...fields,\n name: 'PROVIDER',\n type: 4\n }\n}\n\n/**\n * @param {object} fields\n * @param {PeerId} fields.from\n * @param {Uint8Array} fields.value\n * @returns {import('../types').ValueEvent}\n */\nfunction valueEvent (fields) {\n return {\n ...fields,\n name: 'VALUE',\n type: 5\n }\n}\n\n/**\n * @param {object} fields\n * @param {PeerId} fields.peer\n * @returns {import('../types').AddingPeerEvent}\n */\nfunction addingPeerEvent (fields) {\n return {\n ...fields,\n name: 'ADDING_PEER',\n type: 6\n }\n}\n\n/**\n * @param {object} fields\n * @param {PeerId} fields.peer\n * @returns {import('../types').DialingPeerEvent}\n */\nfunction dialingPeerEvent (fields) {\n return {\n ...fields,\n name: 'DIALING_PEER',\n type: 7\n }\n}\n\nmodule.exports = {\n sendingQueryEvent,\n peerResponseEvent,\n finalPeerEvent,\n queryErrorEvent,\n providerEvent,\n valueEvent,\n addingPeerEvent,\n dialingPeerEvent\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.readyState = \"\";\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api protected\n */\n onError(msg, desc) {\n const err = new Error(msg);\n // @ts-ignore\n err.type = \"TransportError\";\n // @ts-ignore\n err.description = desc;\n super.emit(\"error\", err);\n return this;\n }\n /**\n * Opens the transport.\n *\n * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n return this;\n }\n /**\n * Closes the transport.\n *\n * @api public\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api public\n */\n send(packets) {\n if (\"open\" === this.readyState) {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @api protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emit(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @api protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @api protected\n */\n onPacket(packet) {\n super.emit(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @api protected\n */\n onClose() {\n this.readyState = \"closed\";\n super.emit(\"close\");\n }\n}\n","import * as React from 'react';\nimport {\n findCommentNode,\n arrayToObject,\n createLinkElement,\n isElement,\n} from './utils';\n\nenum Status {\n idle = 'idle',\n loading = 'loading',\n loaded = 'loaded',\n}\n\ninterface IThemeSwitcherContext {\n currentTheme: string | undefined;\n themes: Record;\n switcher: ({ theme }: { theme: string }) => void;\n status: Status;\n}\n\nconst ThemeSwitcherContext = React.createContext<\n IThemeSwitcherContext | undefined\n>(undefined);\n\ninterface Props {\n themeMap: Record;\n children?: React.ReactNode;\n insertionPoint?: string | HTMLElement | null;\n id?: string;\n defaultTheme?: string;\n attr?: string;\n}\n\nexport function ThemeSwitcherProvider({\n themeMap,\n insertionPoint,\n defaultTheme,\n id = 'current-theme-style',\n attr = 'data-theme',\n ...rest\n}: Props) {\n const [status, setStatus] = React.useState(Status.idle);\n const [currentTheme, setCurrentTheme] = React.useState();\n\n const insertStyle = React.useCallback(\n (linkElement: HTMLElement): HTMLElement | void => {\n if (insertionPoint || insertionPoint === null) {\n const insertionPointElement = isElement(insertionPoint)\n ? (insertionPoint as HTMLElement)\n : findCommentNode(insertionPoint as string);\n\n if (!insertionPointElement) {\n console.warn(\n `Insertion point '${insertionPoint}' does not exist. Be sure to add comment on head and that it matches the insertionPoint`\n );\n return document.head.appendChild(linkElement);\n }\n\n const { parentNode } = insertionPointElement;\n if (parentNode) {\n return parentNode.insertBefore(\n linkElement,\n insertionPointElement.nextSibling\n );\n }\n } else {\n return document.head.appendChild(linkElement);\n }\n },\n [insertionPoint]\n );\n\n const switcher = React.useCallback(\n ({ theme }: { theme: string }) => {\n if (theme === currentTheme) return;\n\n const previousStyle = document.getElementById(id);\n if (previousStyle) {\n previousStyle.remove();\n }\n\n if (themeMap[theme]) {\n setStatus(Status.loading);\n\n const linkElement = createLinkElement({\n type: 'text/css',\n rel: 'stylesheet',\n id: id,\n href: themeMap[theme],\n onload: () => {\n setStatus(Status.loaded);\n },\n });\n\n insertStyle(linkElement);\n setCurrentTheme(theme);\n } else {\n return console.warn('Could not find specified theme');\n }\n\n document.body.setAttribute(attr, theme);\n },\n [themeMap, insertStyle, attr, id, currentTheme]\n );\n\n React.useEffect(() => {\n if (defaultTheme) {\n switcher({ theme: defaultTheme });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultTheme]);\n\n React.useEffect(() => {\n const themes = Object.keys(themeMap);\n\n themes.map(theme => {\n const themeAssetId = `theme-prefetch-${theme}`;\n if (!document.getElementById(themeAssetId)) {\n const stylePrefetch = document.createElement('link');\n stylePrefetch.rel = 'prefetch';\n stylePrefetch.type = 'text/css';\n stylePrefetch.id = themeAssetId;\n stylePrefetch.href = themeMap[theme];\n\n insertStyle(stylePrefetch);\n }\n return '';\n });\n }, [themeMap, insertStyle]);\n\n const value = React.useMemo(\n () => ({\n switcher,\n status,\n currentTheme,\n themes: arrayToObject(Object.keys(themeMap)),\n }),\n [switcher, status, currentTheme, themeMap]\n );\n\n return ;\n}\n\nexport function useThemeSwitcher() {\n const context = React.useContext(ThemeSwitcherContext);\n if (!context) {\n throw new Error(\n 'To use `useThemeSwitcher`, component must be within a ThemeSwitcherProvider'\n );\n }\n return context;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.serializeError = exports.isValidCode = exports.getMessageFromCode = exports.JSON_RPC_SERVER_ERROR_MESSAGE = void 0;\nconst error_constants_1 = require(\"./error-constants\");\nconst classes_1 = require(\"./classes\");\nconst FALLBACK_ERROR_CODE = error_constants_1.errorCodes.rpc.internal;\nconst FALLBACK_MESSAGE = 'Unspecified error message. This is a bug, please report it.';\nconst FALLBACK_ERROR = {\n code: FALLBACK_ERROR_CODE,\n message: getMessageFromCode(FALLBACK_ERROR_CODE),\n};\nexports.JSON_RPC_SERVER_ERROR_MESSAGE = 'Unspecified server error.';\n/**\n * Gets the message for a given code, or a fallback message if the code has\n * no corresponding message.\n */\nfunction getMessageFromCode(code, fallbackMessage = FALLBACK_MESSAGE) {\n if (Number.isInteger(code)) {\n const codeString = code.toString();\n if (hasKey(error_constants_1.errorValues, codeString)) {\n return error_constants_1.errorValues[codeString].message;\n }\n if (isJsonRpcServerError(code)) {\n return exports.JSON_RPC_SERVER_ERROR_MESSAGE;\n }\n }\n return fallbackMessage;\n}\nexports.getMessageFromCode = getMessageFromCode;\n/**\n * Returns whether the given code is valid.\n * A code is only valid if it has a message.\n */\nfunction isValidCode(code) {\n if (!Number.isInteger(code)) {\n return false;\n }\n const codeString = code.toString();\n if (error_constants_1.errorValues[codeString]) {\n return true;\n }\n if (isJsonRpcServerError(code)) {\n return true;\n }\n return false;\n}\nexports.isValidCode = isValidCode;\n/**\n * Serializes the given error to an Ethereum JSON RPC-compatible error object.\n * Merely copies the given error's values if it is already compatible.\n * If the given error is not fully compatible, it will be preserved on the\n * returned object's data.originalError property.\n */\nfunction serializeError(error, { fallbackError = FALLBACK_ERROR, shouldIncludeStack = false, } = {}) {\n var _a, _b;\n if (!fallbackError ||\n !Number.isInteger(fallbackError.code) ||\n typeof fallbackError.message !== 'string') {\n throw new Error('Must provide fallback error with integer number code and string message.');\n }\n if (error instanceof classes_1.EthereumRpcError) {\n return error.serialize();\n }\n const serialized = {};\n if (error &&\n typeof error === 'object' &&\n !Array.isArray(error) &&\n hasKey(error, 'code') &&\n isValidCode(error.code)) {\n const _error = error;\n serialized.code = _error.code;\n if (_error.message && typeof _error.message === 'string') {\n serialized.message = _error.message;\n if (hasKey(_error, 'data')) {\n serialized.data = _error.data;\n }\n }\n else {\n serialized.message = getMessageFromCode(serialized.code);\n serialized.data = { originalError: assignOriginalError(error) };\n }\n }\n else {\n serialized.code = fallbackError.code;\n const message = (_a = error) === null || _a === void 0 ? void 0 : _a.message;\n serialized.message = (message && typeof message === 'string'\n ? message\n : fallbackError.message);\n serialized.data = { originalError: assignOriginalError(error) };\n }\n const stack = (_b = error) === null || _b === void 0 ? void 0 : _b.stack;\n if (shouldIncludeStack && error && stack && typeof stack === 'string') {\n serialized.stack = stack;\n }\n return serialized;\n}\nexports.serializeError = serializeError;\n// Internal\nfunction isJsonRpcServerError(code) {\n return code >= -32099 && code <= -32000;\n}\nfunction assignOriginalError(error) {\n if (error && typeof error === 'object' && !Array.isArray(error)) {\n return Object.assign({}, error);\n }\n return error;\n}\nfunction hasKey(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQTREO0FBQzVELHVDQUF5RTtBQUV6RSxNQUFNLG1CQUFtQixHQUFHLDRCQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUNwRCxNQUFNLGdCQUFnQixHQUFHLDZEQUE2RCxDQUFDO0FBQ3ZGLE1BQU0sY0FBYyxHQUErQjtJQUNqRCxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQztDQUNqRCxDQUFDO0FBRVcsUUFBQSw2QkFBNkIsR0FBRywyQkFBMkIsQ0FBQztBQUl6RTs7O0dBR0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsSUFBWSxFQUNaLGtCQUEwQixnQkFBZ0I7SUFFMUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVuQyxJQUFJLE1BQU0sQ0FBQyw2QkFBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQ25DLE9BQU8sNkJBQVcsQ0FBQyxVQUEyQixDQUFDLENBQUMsT0FBTyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixPQUFPLHFDQUE2QixDQUFDO1NBQ3RDO0tBQ0Y7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBZkQsZ0RBZUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixXQUFXLENBQUMsSUFBWTtJQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLElBQUksNkJBQVcsQ0FBQyxVQUEy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","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import ReactDOM from 'react-dom';\n/**\n * Return if a node is a DOM node. Else will return by `findDOMNode`\n */\n\nexport default function findDOMNode(node) {\n if (node instanceof HTMLElement) {\n return node;\n }\n\n return ReactDOM.findDOMNode(node);\n}","import { createContext } from 'react';\nvar IconContext = /*#__PURE__*/createContext({});\nexport default IconContext;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport Notice from './Notice';\nexport default function useNotification(notificationInstance) {\n var createdRef = React.useRef({});\n\n var _React$useState = React.useState([]),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n elements = _React$useState2[0],\n setElements = _React$useState2[1];\n\n function notify(noticeProps) {\n var firstMount = true;\n notificationInstance.add(noticeProps, function (div, props) {\n var key = props.key;\n\n if (div && (!createdRef.current[key] || firstMount)) {\n var noticeEle = /*#__PURE__*/React.createElement(Notice, _extends({}, props, {\n holder: div\n }));\n createdRef.current[key] = noticeEle;\n setElements(function (originElements) {\n var index = originElements.findIndex(function (ele) {\n return ele.key === props.key;\n });\n\n if (index === -1) {\n return [].concat(_toConsumableArray(originElements), [noticeEle]);\n }\n\n var cloneList = _toConsumableArray(originElements);\n\n cloneList[index] = noticeEle;\n return cloneList;\n });\n }\n\n firstMount = false;\n });\n }\n\n return [notify, /*#__PURE__*/React.createElement(React.Fragment, null, elements)];\n}","/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n var str = '';\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length) str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n\n return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n var qry = {};\n var pairs = qs.split('&');\n for (var i = 0, l = pairs.length; i < l; i++) {\n var pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n};\n","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { supportRef, composeRef } from \"rc-util/es/ref\";\nimport raf from './raf';\nimport { ConfigConsumer, ConfigContext } from '../config-provider';\nimport { cloneElement } from './reactNode';\nvar styleForPseudo; // Where el is the DOM element you'd like to test for visibility\n\nfunction isHidden(element) {\n if (process.env.NODE_ENV === 'test') {\n return false;\n }\n\n return !element || element.offsetParent === null || element.hidden;\n}\n\nfunction isNotGrey(color) {\n // eslint-disable-next-line no-useless-escape\n var match = (color || '').match(/rgba?\\((\\d*), (\\d*), (\\d*)(, [\\d.]*)?\\)/);\n\n if (match && match[1] && match[2] && match[3]) {\n return !(match[1] === match[2] && match[2] === match[3]);\n }\n\n return true;\n}\n\nvar Wave = /*#__PURE__*/function (_React$Component) {\n _inherits(Wave, _React$Component);\n\n var _super = _createSuper(Wave);\n\n function Wave() {\n var _this;\n\n _classCallCheck(this, Wave);\n\n _this = _super.apply(this, arguments);\n _this.containerRef = /*#__PURE__*/React.createRef();\n _this.animationStart = false;\n _this.destroyed = false;\n\n _this.onClick = function (node, waveColor) {\n var _a, _b;\n\n if (!node || isHidden(node) || node.className.indexOf('-leave') >= 0) {\n return;\n }\n\n var insertExtraNode = _this.props.insertExtraNode;\n _this.extraNode = document.createElement('div');\n\n var _assertThisInitialize = _assertThisInitialized(_this),\n extraNode = _assertThisInitialize.extraNode;\n\n var getPrefixCls = _this.context.getPrefixCls;\n extraNode.className = \"\".concat(getPrefixCls(''), \"-click-animating-node\");\n\n var attributeName = _this.getAttributeName();\n\n node.setAttribute(attributeName, 'true'); // Not white or transparent or grey\n\n if (waveColor && waveColor !== '#ffffff' && waveColor !== 'rgb(255, 255, 255)' && isNotGrey(waveColor) && !/rgba\\((?:\\d*, ){3}0\\)/.test(waveColor) && // any transparent rgba color\n waveColor !== 'transparent') {\n extraNode.style.borderColor = waveColor;\n var nodeRoot = ((_a = node.getRootNode) === null || _a === void 0 ? void 0 : _a.call(node)) || node.ownerDocument;\n var nodeBody = nodeRoot instanceof Document ? nodeRoot.body : (_b = nodeRoot.firstChild) !== null && _b !== void 0 ? _b : nodeRoot;\n styleForPseudo = updateCSS(\"\\n [\".concat(getPrefixCls(''), \"-click-animating-without-extra-node='true']::after, .\").concat(getPrefixCls(''), \"-click-animating-node {\\n --antd-wave-shadow-color: \").concat(waveColor, \";\\n }\"), 'antd-wave', {\n csp: _this.csp,\n attachTo: nodeBody\n });\n }\n\n if (insertExtraNode) {\n node.appendChild(extraNode);\n }\n\n ['transition', 'animation'].forEach(function (name) {\n node.addEventListener(\"\".concat(name, \"start\"), _this.onTransitionStart);\n node.addEventListener(\"\".concat(name, \"end\"), _this.onTransitionEnd);\n });\n };\n\n _this.onTransitionStart = function (e) {\n if (_this.destroyed) {\n return;\n }\n\n var node = _this.containerRef.current;\n\n if (!e || e.target !== node || _this.animationStart) {\n return;\n }\n\n _this.resetEffect(node);\n };\n\n _this.onTransitionEnd = function (e) {\n if (!e || e.animationName !== 'fadeEffect') {\n return;\n }\n\n _this.resetEffect(e.target);\n };\n\n _this.bindAnimationEvent = function (node) {\n if (!node || !node.getAttribute || node.getAttribute('disabled') || node.className.indexOf('disabled') >= 0) {\n return;\n }\n\n var onClick = function onClick(e) {\n // Fix radio button click twice\n if (e.target.tagName === 'INPUT' || isHidden(e.target)) {\n return;\n }\n\n _this.resetEffect(node); // Get wave color from target\n\n\n var waveColor = getComputedStyle(node).getPropertyValue('border-top-color') || // Firefox Compatible\n getComputedStyle(node).getPropertyValue('border-color') || getComputedStyle(node).getPropertyValue('background-color');\n _this.clickWaveTimeoutId = window.setTimeout(function () {\n return _this.onClick(node, waveColor);\n }, 0);\n raf.cancel(_this.animationStartId);\n _this.animationStart = true; // Render to trigger transition event cost 3 frames. Let's delay 10 frames to reset this.\n\n _this.animationStartId = raf(function () {\n _this.animationStart = false;\n }, 10);\n };\n\n node.addEventListener('click', onClick, true);\n return {\n cancel: function cancel() {\n node.removeEventListener('click', onClick, true);\n }\n };\n };\n\n _this.renderWave = function (_ref) {\n var csp = _ref.csp;\n var children = _this.props.children;\n _this.csp = csp;\n if (! /*#__PURE__*/React.isValidElement(children)) return children;\n var ref = _this.containerRef;\n\n if (supportRef(children)) {\n ref = composeRef(children.ref, _this.containerRef);\n }\n\n return cloneElement(children, {\n ref: ref\n });\n };\n\n return _this;\n }\n\n _createClass(Wave, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var node = this.containerRef.current;\n\n if (!node || node.nodeType !== 1) {\n return;\n }\n\n this.instance = this.bindAnimationEvent(node);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.instance) {\n this.instance.cancel();\n }\n\n if (this.clickWaveTimeoutId) {\n clearTimeout(this.clickWaveTimeoutId);\n }\n\n this.destroyed = true;\n }\n }, {\n key: \"getAttributeName\",\n value: function getAttributeName() {\n var getPrefixCls = this.context.getPrefixCls;\n var insertExtraNode = this.props.insertExtraNode;\n return insertExtraNode ? \"\".concat(getPrefixCls(''), \"-click-animating\") : \"\".concat(getPrefixCls(''), \"-click-animating-without-extra-node\");\n }\n }, {\n key: \"resetEffect\",\n value: function resetEffect(node) {\n var _this2 = this;\n\n if (!node || node === this.extraNode || !(node instanceof Element)) {\n return;\n }\n\n var insertExtraNode = this.props.insertExtraNode;\n var attributeName = this.getAttributeName();\n node.setAttribute(attributeName, 'false'); // edge has bug on `removeAttribute` #14466\n\n if (styleForPseudo) {\n styleForPseudo.innerHTML = '';\n }\n\n if (insertExtraNode && this.extraNode && node.contains(this.extraNode)) {\n node.removeChild(this.extraNode);\n }\n\n ['transition', 'animation'].forEach(function (name) {\n node.removeEventListener(\"\".concat(name, \"start\"), _this2.onTransitionStart);\n node.removeEventListener(\"\".concat(name, \"end\"), _this2.onTransitionEnd);\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React.createElement(ConfigConsumer, null, this.renderWave);\n }\n }]);\n\n return Wave;\n}(React.Component);\n\nexport { Wave as default };\nWave.contextType = ConfigContext;","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\n\nvar UnreachableException = function UnreachableException(value) {\n _classCallCheck(this, UnreachableException);\n\n return new Error(\"unreachable case: \".concat(JSON.stringify(value)));\n};\n\nexport { UnreachableException as default };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ConfigConsumer } from '../config-provider';\nimport UnreachableException from '../_util/unreachableException';\n\nvar ButtonGroup = function ButtonGroup(props) {\n return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (_ref) {\n var _classNames;\n\n var getPrefixCls = _ref.getPrefixCls,\n direction = _ref.direction;\n\n var customizePrefixCls = props.prefixCls,\n size = props.size,\n className = props.className,\n others = __rest(props, [\"prefixCls\", \"size\", \"className\"]);\n\n var prefixCls = getPrefixCls('btn-group', customizePrefixCls); // large => lg\n // small => sm\n\n var sizeCls = '';\n\n switch (size) {\n case 'large':\n sizeCls = 'lg';\n break;\n\n case 'small':\n sizeCls = 'sm';\n break;\n\n case 'middle':\n case undefined:\n break;\n\n default:\n // eslint-disable-next-line no-console\n console.warn(new UnreachableException(size));\n }\n\n var classes = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(sizeCls), sizeCls), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _classNames), className);\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, others, {\n className: classes\n }));\n });\n};\n\nexport default ButtonGroup;","import React from 'react';\nimport CSSMotion from 'rc-motion';\nimport LoadingOutlined from \"@ant-design/icons/es/icons/LoadingOutlined\";\n\nvar getCollapsedWidth = function getCollapsedWidth() {\n return {\n width: 0,\n opacity: 0,\n transform: 'scale(0)'\n };\n};\n\nvar getRealWidth = function getRealWidth(node) {\n return {\n width: node.scrollWidth,\n opacity: 1,\n transform: 'scale(1)'\n };\n};\n\nvar LoadingIcon = function LoadingIcon(_ref) {\n var prefixCls = _ref.prefixCls,\n loading = _ref.loading,\n existIcon = _ref.existIcon;\n var visible = !!loading;\n\n if (existIcon) {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-loading-icon\")\n }, /*#__PURE__*/React.createElement(LoadingOutlined, null));\n }\n\n return /*#__PURE__*/React.createElement(CSSMotion, {\n visible: visible // We do not really use this motionName\n ,\n motionName: \"\".concat(prefixCls, \"-loading-icon-motion\"),\n removeOnLeave: true,\n onAppearStart: getCollapsedWidth,\n onAppearActive: getRealWidth,\n onEnterStart: getCollapsedWidth,\n onEnterActive: getRealWidth,\n onLeaveStart: getRealWidth,\n onLeaveActive: getCollapsedWidth\n }, function (_ref2, ref) {\n var className = _ref2.className,\n style = _ref2.style;\n return /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-loading-icon\"),\n style: style,\n ref: ref\n }, /*#__PURE__*/React.createElement(LoadingOutlined, {\n className: className\n }));\n });\n};\n\nexport default LoadingIcon;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable react/button-has-type */\n\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport Group from './button-group';\nimport { ConfigContext } from '../config-provider';\nimport Wave from '../_util/wave';\nimport { tuple } from '../_util/type';\nimport devWarning from '../_util/devWarning';\nimport SizeContext from '../config-provider/SizeContext';\nimport LoadingIcon from './LoadingIcon';\nimport { cloneElement } from '../_util/reactNode';\nvar rxTwoCNChar = /^[\\u4e00-\\u9fa5]{2}$/;\nvar isTwoCNChar = rxTwoCNChar.test.bind(rxTwoCNChar);\n\nfunction isString(str) {\n return typeof str === 'string';\n}\n\nfunction isUnborderedButtonType(type) {\n return type === 'text' || type === 'link';\n}\n\nfunction isReactFragment(node) {\n return /*#__PURE__*/React.isValidElement(node) && node.type === React.Fragment;\n} // Insert one space between two chinese characters automatically.\n\n\nfunction insertSpace(child, needInserted) {\n // Check the child if is undefined or null.\n if (child == null) {\n return;\n }\n\n var SPACE = needInserted ? ' ' : ''; // strictNullChecks oops.\n\n if (typeof child !== 'string' && typeof child !== 'number' && isString(child.type) && isTwoCNChar(child.props.children)) {\n return cloneElement(child, {\n children: child.props.children.split('').join(SPACE)\n });\n }\n\n if (typeof child === 'string') {\n return isTwoCNChar(child) ? /*#__PURE__*/React.createElement(\"span\", null, child.split('').join(SPACE)) : /*#__PURE__*/React.createElement(\"span\", null, child);\n }\n\n if (isReactFragment(child)) {\n return /*#__PURE__*/React.createElement(\"span\", null, child);\n }\n\n return child;\n}\n\nfunction spaceChildren(children, needInserted) {\n var isPrevChildPure = false;\n var childList = [];\n React.Children.forEach(children, function (child) {\n var type = _typeof(child);\n\n var isCurrentChildPure = type === 'string' || type === 'number';\n\n if (isPrevChildPure && isCurrentChildPure) {\n var lastIndex = childList.length - 1;\n var lastChild = childList[lastIndex];\n childList[lastIndex] = \"\".concat(lastChild).concat(child);\n } else {\n childList.push(child);\n }\n\n isPrevChildPure = isCurrentChildPure;\n }); // Pass to React.Children.map to auto fill key\n\n return React.Children.map(childList, function (child) {\n return insertSpace(child, needInserted);\n });\n}\n\nvar ButtonTypes = tuple('default', 'primary', 'ghost', 'dashed', 'link', 'text');\nvar ButtonShapes = tuple('circle', 'round');\nvar ButtonHTMLTypes = tuple('submit', 'button', 'reset');\nexport function convertLegacyProps(type) {\n if (type === 'danger') {\n return {\n danger: true\n };\n }\n\n return {\n type: type\n };\n}\n\nvar InternalButton = function InternalButton(props, ref) {\n var _classNames;\n\n var _props$loading = props.loading,\n loading = _props$loading === void 0 ? false : _props$loading,\n customizePrefixCls = props.prefixCls,\n type = props.type,\n danger = props.danger,\n shape = props.shape,\n customizeSize = props.size,\n className = props.className,\n children = props.children,\n icon = props.icon,\n _props$ghost = props.ghost,\n ghost = _props$ghost === void 0 ? false : _props$ghost,\n _props$block = props.block,\n block = _props$block === void 0 ? false : _props$block,\n _props$htmlType = props.htmlType,\n htmlType = _props$htmlType === void 0 ? 'button' : _props$htmlType,\n rest = __rest(props, [\"loading\", \"prefixCls\", \"type\", \"danger\", \"shape\", \"size\", \"className\", \"children\", \"icon\", \"ghost\", \"block\", \"htmlType\"]);\n\n var size = React.useContext(SizeContext);\n\n var _React$useState = React.useState(!!loading),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n innerLoading = _React$useState2[0],\n setLoading = _React$useState2[1];\n\n var _React$useState3 = React.useState(false),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n hasTwoCNChar = _React$useState4[0],\n setHasTwoCNChar = _React$useState4[1];\n\n var _React$useContext = React.useContext(ConfigContext),\n getPrefixCls = _React$useContext.getPrefixCls,\n autoInsertSpaceInButton = _React$useContext.autoInsertSpaceInButton,\n direction = _React$useContext.direction;\n\n var buttonRef = ref || /*#__PURE__*/React.createRef();\n var delayTimeoutRef = React.useRef();\n\n var isNeedInserted = function isNeedInserted() {\n return React.Children.count(children) === 1 && !icon && !isUnborderedButtonType(type);\n };\n\n var fixTwoCNChar = function fixTwoCNChar() {\n // Fix for HOC usage like \n if (!buttonRef || !buttonRef.current || autoInsertSpaceInButton === false) {\n return;\n }\n\n var buttonText = buttonRef.current.textContent;\n\n if (isNeedInserted() && isTwoCNChar(buttonText)) {\n if (!hasTwoCNChar) {\n setHasTwoCNChar(true);\n }\n } else if (hasTwoCNChar) {\n setHasTwoCNChar(false);\n }\n }; // =============== Update Loading ===============\n\n\n var loadingOrDelay;\n\n if (_typeof(loading) === 'object' && loading.delay) {\n loadingOrDelay = loading.delay || true;\n } else {\n loadingOrDelay = !!loading;\n }\n\n React.useEffect(function () {\n clearTimeout(delayTimeoutRef.current);\n\n if (typeof loadingOrDelay === 'number') {\n delayTimeoutRef.current = window.setTimeout(function () {\n setLoading(loadingOrDelay);\n }, loadingOrDelay);\n } else {\n setLoading(loadingOrDelay);\n }\n }, [loadingOrDelay]);\n React.useEffect(fixTwoCNChar, [buttonRef]);\n\n var handleClick = function handleClick(e) {\n var _a;\n\n var onClick = props.onClick,\n disabled = props.disabled; // https://github.com/ant-design/ant-design/issues/30207\n\n if (innerLoading || disabled) {\n e.preventDefault();\n return;\n }\n\n (_a = onClick) === null || _a === void 0 ? void 0 : _a(e);\n };\n\n devWarning(!(typeof icon === 'string' && icon.length > 2), 'Button', \"`icon` is using ReactNode instead of string naming in v4. Please check `\".concat(icon, \"` at https://ant.design/components/icon\"));\n devWarning(!(ghost && isUnborderedButtonType(type)), 'Button', \"`link` or `text` button can't be a `ghost` button.\");\n var prefixCls = getPrefixCls('btn', customizePrefixCls);\n var autoInsertSpace = autoInsertSpaceInButton !== false; // large => lg\n // small => sm\n\n var sizeCls = '';\n\n switch (customizeSize || size) {\n case 'large':\n sizeCls = 'lg';\n break;\n\n case 'small':\n sizeCls = 'sm';\n break;\n\n default:\n break;\n }\n\n var iconType = innerLoading ? 'loading' : icon;\n var classes = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(type), type), _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(shape), shape), _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(sizeCls), sizeCls), _defineProperty(_classNames, \"\".concat(prefixCls, \"-icon-only\"), !children && children !== 0 && !!iconType), _defineProperty(_classNames, \"\".concat(prefixCls, \"-background-ghost\"), ghost && !isUnborderedButtonType(type)), _defineProperty(_classNames, \"\".concat(prefixCls, \"-loading\"), innerLoading), _defineProperty(_classNames, \"\".concat(prefixCls, \"-two-chinese-chars\"), hasTwoCNChar && autoInsertSpace), _defineProperty(_classNames, \"\".concat(prefixCls, \"-block\"), block), _defineProperty(_classNames, \"\".concat(prefixCls, \"-dangerous\"), !!danger), _defineProperty(_classNames, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _classNames), className);\n var iconNode = icon && !innerLoading ? icon : /*#__PURE__*/React.createElement(LoadingIcon, {\n existIcon: !!icon,\n prefixCls: prefixCls,\n loading: !!innerLoading\n });\n var kids = children || children === 0 ? spaceChildren(children, isNeedInserted() && autoInsertSpace) : null;\n var linkButtonRestProps = omit(rest, ['navigate']);\n\n if (linkButtonRestProps.href !== undefined) {\n return /*#__PURE__*/React.createElement(\"a\", _extends({}, linkButtonRestProps, {\n className: classes,\n onClick: handleClick,\n ref: buttonRef\n }), iconNode, kids);\n }\n\n var buttonNode = /*#__PURE__*/React.createElement(\"button\", _extends({}, rest, {\n type: htmlType,\n className: classes,\n onClick: handleClick,\n ref: buttonRef\n }), iconNode, kids);\n\n if (isUnborderedButtonType(type)) {\n return buttonNode;\n }\n\n return /*#__PURE__*/React.createElement(Wave, null, buttonNode);\n};\n\nvar Button = /*#__PURE__*/React.forwardRef(InternalButton);\nButton.displayName = 'Button';\nButton.Group = Group;\nButton.__ANT_BUTTON = true;\nexport default Button;","// This icon file is generated automatically.\nvar CloseCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm165.4 618.2l-66-.3L512 563.4l-99.3 118.4-66.1.3c-4.4 0-8-3.5-8-8 0-1.9.7-3.7 1.9-5.2l130.1-155L340.5 359a8.32 8.32 0 01-1.9-5.2c0-4.4 3.6-8 8-8l66.1.3L512 464.6l99.3-118.4 66-.3c4.4 0 8 3.5 8 8 0 1.9-.7 3.7-1.9 5.2L553.5 514l130 155c1.2 1.5 1.9 3.3 1.9 5.2 0 4.4-3.6 8-8 8z\" } }] }, \"name\": \"close-circle\", \"theme\": \"filled\" };\nexport default CloseCircleFilled;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CloseCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CloseCircleFilled\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CloseCircleFilled = function CloseCircleFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: CloseCircleFilledSvg\n }));\n};\n\nCloseCircleFilled.displayName = 'CloseCircleFilled';\nexport default /*#__PURE__*/React.forwardRef(CloseCircleFilled);","// This icon file is generated automatically.\nvar CloseOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z\" } }] }, \"name\": \"close\", \"theme\": \"outlined\" };\nexport default CloseOutlined;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CloseOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CloseOutlined = function CloseOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: CloseOutlinedSvg\n }));\n};\n\nCloseOutlined.displayName = 'CloseOutlined';\nexport default /*#__PURE__*/React.forwardRef(CloseOutlined);","// This icon file is generated automatically.\nvar CheckCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }] }, \"name\": \"check-circle\", \"theme\": \"outlined\" };\nexport default CheckCircleOutlined;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CheckCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/CheckCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CheckCircleOutlined = function CheckCircleOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: CheckCircleOutlinedSvg\n }));\n};\n\nCheckCircleOutlined.displayName = 'CheckCircleOutlined';\nexport default /*#__PURE__*/React.forwardRef(CheckCircleOutlined);","// This icon file is generated automatically.\nvar InfoCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"info-circle\", \"theme\": \"outlined\" };\nexport default InfoCircleOutlined;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport InfoCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/InfoCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar InfoCircleOutlined = function InfoCircleOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: InfoCircleOutlinedSvg\n }));\n};\n\nInfoCircleOutlined.displayName = 'InfoCircleOutlined';\nexport default /*#__PURE__*/React.forwardRef(InfoCircleOutlined);","// This icon file is generated automatically.\nvar CloseCircleOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M685.4 354.8c0-4.4-3.6-8-8-8l-66 .3L512 465.6l-99.3-118.4-66.1-.3c-4.4 0-8 3.5-8 8 0 1.9.7 3.7 1.9 5.2l130.1 155L340.5 670a8.32 8.32 0 00-1.9 5.2c0 4.4 3.6 8 8 8l66.1-.3L512 564.4l99.3 118.4 66 .3c4.4 0 8-3.5 8-8 0-1.9-.7-3.7-1.9-5.2L553.5 515l130.1-155c1.2-1.4 1.8-3.3 1.8-5.2z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M512 65C264.6 65 64 265.6 64 513s200.6 448 448 448 448-200.6 448-448S759.4 65 512 65zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\" } }] }, \"name\": \"close-circle\", \"theme\": \"outlined\" };\nexport default CloseCircleOutlined;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CloseCircleOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseCircleOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CloseCircleOutlined = function CloseCircleOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: CloseCircleOutlinedSvg\n }));\n};\n\nCloseCircleOutlined.displayName = 'CloseCircleOutlined';\nexport default /*#__PURE__*/React.forwardRef(CloseCircleOutlined);","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport CloseCircleFilled from \"@ant-design/icons/es/icons/CloseCircleFilled\";\nimport { tuple } from '../_util/type';\nimport { getInputClassName } from './Input';\nimport { cloneElement } from '../_util/reactNode';\nvar ClearableInputType = tuple('text', 'input');\nexport function hasPrefixSuffix(props) {\n return !!(props.prefix || props.suffix || props.allowClear);\n}\n\nfunction hasAddon(props) {\n return !!(props.addonBefore || props.addonAfter);\n}\n\nvar ClearableLabeledInput = /*#__PURE__*/function (_React$Component) {\n _inherits(ClearableLabeledInput, _React$Component);\n\n var _super = _createSuper(ClearableLabeledInput);\n\n function ClearableLabeledInput() {\n var _this;\n\n _classCallCheck(this, ClearableLabeledInput);\n\n _this = _super.apply(this, arguments);\n /** @private Do Not use out of this class. We do not promise this is always keep. */\n\n _this.containerRef = /*#__PURE__*/React.createRef();\n\n _this.onInputMouseUp = function (e) {\n var _a;\n\n if ((_a = _this.containerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) {\n var triggerFocus = _this.props.triggerFocus;\n triggerFocus === null || triggerFocus === void 0 ? void 0 : triggerFocus();\n }\n };\n\n return _this;\n }\n\n _createClass(ClearableLabeledInput, [{\n key: \"renderClearIcon\",\n value: function renderClearIcon(prefixCls) {\n var _this$props = this.props,\n allowClear = _this$props.allowClear,\n value = _this$props.value,\n disabled = _this$props.disabled,\n readOnly = _this$props.readOnly,\n handleReset = _this$props.handleReset;\n\n if (!allowClear) {\n return null;\n }\n\n var needClear = !disabled && !readOnly && value;\n var className = \"\".concat(prefixCls, \"-clear-icon\");\n return /*#__PURE__*/React.createElement(CloseCircleFilled, {\n onClick: handleReset,\n className: classNames(_defineProperty({}, \"\".concat(className, \"-hidden\"), !needClear), className),\n role: \"button\"\n });\n }\n }, {\n key: \"renderSuffix\",\n value: function renderSuffix(prefixCls) {\n var _this$props2 = this.props,\n suffix = _this$props2.suffix,\n allowClear = _this$props2.allowClear;\n\n if (suffix || allowClear) {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-suffix\")\n }, this.renderClearIcon(prefixCls), suffix);\n }\n\n return null;\n }\n }, {\n key: \"renderLabeledIcon\",\n value: function renderLabeledIcon(prefixCls, element) {\n var _classNames2;\n\n var _this$props3 = this.props,\n focused = _this$props3.focused,\n value = _this$props3.value,\n prefix = _this$props3.prefix,\n className = _this$props3.className,\n size = _this$props3.size,\n suffix = _this$props3.suffix,\n disabled = _this$props3.disabled,\n allowClear = _this$props3.allowClear,\n direction = _this$props3.direction,\n style = _this$props3.style,\n readOnly = _this$props3.readOnly,\n bordered = _this$props3.bordered;\n var suffixNode = this.renderSuffix(prefixCls);\n\n if (!hasPrefixSuffix(this.props)) {\n return cloneElement(element, {\n value: value\n });\n }\n\n var prefixNode = prefix ? /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-prefix\")\n }, prefix) : null;\n var affixWrapperCls = classNames(\"\".concat(prefixCls, \"-affix-wrapper\"), (_classNames2 = {}, _defineProperty(_classNames2, \"\".concat(prefixCls, \"-affix-wrapper-focused\"), focused), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-affix-wrapper-disabled\"), disabled), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-affix-wrapper-sm\"), size === 'small'), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-affix-wrapper-lg\"), size === 'large'), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-affix-wrapper-input-with-clear-btn\"), suffix && allowClear && value), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-affix-wrapper-rtl\"), direction === 'rtl'), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-affix-wrapper-readonly\"), readOnly), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-affix-wrapper-borderless\"), !bordered), _defineProperty(_classNames2, \"\".concat(className), !hasAddon(this.props) && className), _classNames2));\n return /*#__PURE__*/React.createElement(\"span\", {\n ref: this.containerRef,\n className: affixWrapperCls,\n style: style,\n onMouseUp: this.onInputMouseUp\n }, prefixNode, cloneElement(element, {\n style: null,\n value: value,\n className: getInputClassName(prefixCls, bordered, size, disabled)\n }), suffixNode);\n }\n }, {\n key: \"renderInputWithLabel\",\n value: function renderInputWithLabel(prefixCls, labeledElement) {\n var _classNames4;\n\n var _this$props4 = this.props,\n addonBefore = _this$props4.addonBefore,\n addonAfter = _this$props4.addonAfter,\n style = _this$props4.style,\n size = _this$props4.size,\n className = _this$props4.className,\n direction = _this$props4.direction; // Not wrap when there is not addons\n\n if (!hasAddon(this.props)) {\n return labeledElement;\n }\n\n var wrapperClassName = \"\".concat(prefixCls, \"-group\");\n var addonClassName = \"\".concat(wrapperClassName, \"-addon\");\n var addonBeforeNode = addonBefore ? /*#__PURE__*/React.createElement(\"span\", {\n className: addonClassName\n }, addonBefore) : null;\n var addonAfterNode = addonAfter ? /*#__PURE__*/React.createElement(\"span\", {\n className: addonClassName\n }, addonAfter) : null;\n var mergedWrapperClassName = classNames(\"\".concat(prefixCls, \"-wrapper\"), wrapperClassName, _defineProperty({}, \"\".concat(wrapperClassName, \"-rtl\"), direction === 'rtl'));\n var mergedGroupClassName = classNames(\"\".concat(prefixCls, \"-group-wrapper\"), (_classNames4 = {}, _defineProperty(_classNames4, \"\".concat(prefixCls, \"-group-wrapper-sm\"), size === 'small'), _defineProperty(_classNames4, \"\".concat(prefixCls, \"-group-wrapper-lg\"), size === 'large'), _defineProperty(_classNames4, \"\".concat(prefixCls, \"-group-wrapper-rtl\"), direction === 'rtl'), _classNames4), className); // Need another wrapper for changing display:table to display:inline-block\n // and put style prop in wrapper\n\n return /*#__PURE__*/React.createElement(\"span\", {\n className: mergedGroupClassName,\n style: style\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: mergedWrapperClassName\n }, addonBeforeNode, cloneElement(labeledElement, {\n style: null\n }), addonAfterNode));\n }\n }, {\n key: \"renderTextAreaWithClearIcon\",\n value: function renderTextAreaWithClearIcon(prefixCls, element) {\n var _classNames5;\n\n var _this$props5 = this.props,\n value = _this$props5.value,\n allowClear = _this$props5.allowClear,\n className = _this$props5.className,\n style = _this$props5.style,\n direction = _this$props5.direction,\n bordered = _this$props5.bordered;\n\n if (!allowClear) {\n return cloneElement(element, {\n value: value\n });\n }\n\n var affixWrapperCls = classNames(\"\".concat(prefixCls, \"-affix-wrapper\"), \"\".concat(prefixCls, \"-affix-wrapper-textarea-with-clear-btn\"), (_classNames5 = {}, _defineProperty(_classNames5, \"\".concat(prefixCls, \"-affix-wrapper-rtl\"), direction === 'rtl'), _defineProperty(_classNames5, \"\".concat(prefixCls, \"-affix-wrapper-borderless\"), !bordered), _defineProperty(_classNames5, \"\".concat(className), !hasAddon(this.props) && className), _classNames5));\n return /*#__PURE__*/React.createElement(\"span\", {\n className: affixWrapperCls,\n style: style\n }, cloneElement(element, {\n style: null,\n value: value\n }), this.renderClearIcon(prefixCls));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props6 = this.props,\n prefixCls = _this$props6.prefixCls,\n inputType = _this$props6.inputType,\n element = _this$props6.element;\n\n if (inputType === ClearableInputType[0]) {\n return this.renderTextAreaWithClearIcon(prefixCls, element);\n }\n\n return this.renderInputWithLabel(prefixCls, this.renderLabeledIcon(prefixCls, element));\n }\n }]);\n\n return ClearableLabeledInput;\n}(React.Component);\n\nexport default ClearableLabeledInput;","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nvar SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(function(line) {\n return line.trim();\n });\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n var parts = blob.split('\\nm=');\n return parts.map(function(part, index) {\n return (index > 0 ? 'm=' + part : part).trim() + '\\r\\n';\n });\n};\n\n// returns the session description.\nSDPUtils.getDescription = function(blob) {\n var sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n var sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(function(line) {\n return line.indexOf(prefix) === 0;\n });\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\nSDPUtils.parseCandidate = function(line) {\n var parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n var candidate = {\n foundation: parts[0],\n component: parseInt(parts[1], 10),\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n\n for (var i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compability.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag\n candidate[parts[i]] = parts[i + 1];\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\nSDPUtils.writeCandidate = function(candidate) {\n var sdp = [];\n sdp.push(candidate.foundation);\n sdp.push(candidate.component);\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n var type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n var parts = line.substr(9).split(' ');\n var parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generate an a=rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n var channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses an a=extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n var parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1]\n };\n};\n\n// Generates a=extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses an ftmp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n var parsed = {};\n var kv;\n var parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (var j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n var line = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n var params = [];\n Object.keys(codec.parameters).forEach(function(param) {\n if (codec.parameters[param]) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n};\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n var lines = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(function(fb) {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses an RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n var sp = line.indexOf(' ');\n var parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10)\n };\n var colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\nSDPUtils.parseSsrcGroup = function(line) {\n var parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(function(ssrc) {\n return parseInt(ssrc, 10);\n })\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\nSDPUtils.parseFingerprint = function(line) {\n var parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1]\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role.\n // Note2: 'algorithm' is not case sensitive except in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n var sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(function(fp) {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n var parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n var parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES paramters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n return 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n var description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n var pt = mline[i];\n var rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n var codec = SDPUtils.parseRtpMap(rtpmapline);\n var fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n var sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(function(codec) {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(function(codec) {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n var maxptime = 0;\n caps.codecs.forEach(function(codec) {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n sdp += 'a=rtcp-mux\\r\\n';\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(function(extension) {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n var encodingParameters = [];\n var description = SDPUtils.parseRtpParameters(mediaSection);\n var hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(parts) {\n return parts.attribute === 'cname';\n });\n var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n var secondarySsrc;\n\n var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(function(line) {\n var parts = line.substr(17).split(' ');\n return parts.map(function(part) {\n return parseInt(part, 10);\n });\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(function(codec) {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n var encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(function(params) {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n var rtcpParameters = {};\n\n // Gets the first SSRC. Note tha with RTX there might be multiple\n // SSRCs.\n var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(obj) {\n return obj.attribute === 'cname';\n })[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n var parts;\n var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(msidParts) {\n return msidParts.attribute === 'msid';\n });\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n var mline = SDPUtils.parseMLine(mediaSection);\n var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n var maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize: maxMessageSize\n };\n }\n var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n var parts = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:')[0]\n .substr(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize: maxMessageSize\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n var output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n'\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boilder plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n var sessionId;\n var version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n var user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\nSDPUtils.writeMediaSection = function(transceiver, caps, type, stream) {\n var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n // Map ICE parameters (ufrag, pwd) to SDP.\n sdp += SDPUtils.writeIceParameters(\n transceiver.iceGatherer.getLocalParameters());\n\n // Map DTLS parameters to SDP.\n sdp += SDPUtils.writeDtlsParameters(\n transceiver.dtlsTransport.getLocalParameters(),\n type === 'offer' ? 'actpass' : 'active');\n\n sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n if (transceiver.direction) {\n sdp += 'a=' + transceiver.direction + '\\r\\n';\n } else if (transceiver.rtpSender && transceiver.rtpReceiver) {\n sdp += 'a=sendrecv\\r\\n';\n } else if (transceiver.rtpSender) {\n sdp += 'a=sendonly\\r\\n';\n } else if (transceiver.rtpReceiver) {\n sdp += 'a=recvonly\\r\\n';\n } else {\n sdp += 'a=inactive\\r\\n';\n }\n\n if (transceiver.rtpSender) {\n // spec.\n var msid = 'msid:' + stream.id + ' ' +\n transceiver.rtpSender.track.id + '\\r\\n';\n sdp += 'a=' + msid;\n\n // for Chrome.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' ' + msid;\n if (transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' ' + msid;\n sdp += 'a=ssrc-group:FID ' +\n transceiver.sendEncodingParameters[0].ssrc + ' ' +\n transceiver.sendEncodingParameters[0].rtx.ssrc +\n '\\r\\n';\n }\n }\n // FIXME: this should be written by writeRtpDescription.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n }\n return sdp;\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n var lines = SDPUtils.splitLines(mediaSection);\n for (var i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' ')\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n var parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n var lines = SDPUtils.splitLines(blob);\n for (var i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { placements } from \"rc-tooltip/es/placements\";\nvar autoAdjustOverflowEnabled = {\n adjustX: 1,\n adjustY: 1\n};\nvar autoAdjustOverflowDisabled = {\n adjustX: 0,\n adjustY: 0\n};\nvar targetOffset = [0, 0];\nexport function getOverflowOptions(autoAdjustOverflow) {\n if (typeof autoAdjustOverflow === 'boolean') {\n return autoAdjustOverflow ? autoAdjustOverflowEnabled : autoAdjustOverflowDisabled;\n }\n\n return _extends(_extends({}, autoAdjustOverflowDisabled), autoAdjustOverflow);\n}\nexport default function getPlacements(config) {\n var _config$arrowWidth = config.arrowWidth,\n arrowWidth = _config$arrowWidth === void 0 ? 5 : _config$arrowWidth,\n _config$horizontalArr = config.horizontalArrowShift,\n horizontalArrowShift = _config$horizontalArr === void 0 ? 16 : _config$horizontalArr,\n _config$verticalArrow = config.verticalArrowShift,\n verticalArrowShift = _config$verticalArrow === void 0 ? 8 : _config$verticalArrow,\n autoAdjustOverflow = config.autoAdjustOverflow;\n var placementMap = {\n left: {\n points: ['cr', 'cl'],\n offset: [-4, 0]\n },\n right: {\n points: ['cl', 'cr'],\n offset: [4, 0]\n },\n top: {\n points: ['bc', 'tc'],\n offset: [0, -4]\n },\n bottom: {\n points: ['tc', 'bc'],\n offset: [0, 4]\n },\n topLeft: {\n points: ['bl', 'tc'],\n offset: [-(horizontalArrowShift + arrowWidth), -4]\n },\n leftTop: {\n points: ['tr', 'cl'],\n offset: [-4, -(verticalArrowShift + arrowWidth)]\n },\n topRight: {\n points: ['br', 'tc'],\n offset: [horizontalArrowShift + arrowWidth, -4]\n },\n rightTop: {\n points: ['tl', 'cr'],\n offset: [4, -(verticalArrowShift + arrowWidth)]\n },\n bottomRight: {\n points: ['tr', 'bc'],\n offset: [horizontalArrowShift + arrowWidth, 4]\n },\n rightBottom: {\n points: ['bl', 'cr'],\n offset: [4, verticalArrowShift + arrowWidth]\n },\n bottomLeft: {\n points: ['tl', 'bc'],\n offset: [-(horizontalArrowShift + arrowWidth), 4]\n },\n leftBottom: {\n points: ['br', 'cl'],\n offset: [-4, verticalArrowShift + arrowWidth]\n }\n };\n Object.keys(placementMap).forEach(function (key) {\n placementMap[key] = config.arrowPointAtCenter ? _extends(_extends({}, placementMap[key]), {\n overflow: getOverflowOptions(autoAdjustOverflow),\n targetOffset: targetOffset\n }) : _extends(_extends({}, placements[key]), {\n overflow: getOverflowOptions(autoAdjustOverflow)\n });\n placementMap[key].ignoreShake = true;\n });\n return placementMap;\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n\nimport * as React from 'react';\nimport RcTooltip from 'rc-tooltip';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport classNames from 'classnames';\nimport getPlacements from './placements';\nimport { cloneElement, isValidElement } from '../_util/reactNode';\nimport { ConfigContext } from '../config-provider';\nimport { PresetColorTypes } from '../_util/colors';\nimport { getTransitionName } from '../_util/motion';\n\nvar splitObject = function splitObject(obj, keys) {\n var picked = {};\n\n var omitted = _extends({}, obj);\n\n keys.forEach(function (key) {\n if (obj && key in obj) {\n picked[key] = obj[key];\n delete omitted[key];\n }\n });\n return {\n picked: picked,\n omitted: omitted\n };\n};\n\nvar PresetColorRegex = new RegExp(\"^(\".concat(PresetColorTypes.join('|'), \")(-inverse)?$\")); // Fix Tooltip won't hide at disabled button\n// mouse events don't trigger at disabled button in Chrome\n// https://github.com/react-component/tooltip/issues/18\n\nfunction getDisabledCompatibleChildren(element, prefixCls) {\n var elementType = element.type;\n\n if ((elementType.__ANT_BUTTON === true || elementType.__ANT_SWITCH === true || elementType.__ANT_CHECKBOX === true || element.type === 'button') && element.props.disabled) {\n // Pick some layout related style properties up to span\n // Prevent layout bugs like https://github.com/ant-design/ant-design/issues/5254\n var _splitObject = splitObject(element.props.style, ['position', 'left', 'right', 'top', 'bottom', 'float', 'display', 'zIndex']),\n picked = _splitObject.picked,\n omitted = _splitObject.omitted;\n\n var spanStyle = _extends(_extends({\n display: 'inline-block'\n }, picked), {\n cursor: 'not-allowed',\n width: element.props.block ? '100%' : null\n });\n\n var buttonStyle = _extends(_extends({}, omitted), {\n pointerEvents: 'none'\n });\n\n var child = cloneElement(element, {\n style: buttonStyle,\n className: null\n });\n return /*#__PURE__*/React.createElement(\"span\", {\n style: spanStyle,\n className: classNames(element.props.className, \"\".concat(prefixCls, \"-disabled-compatible-wrapper\"))\n }, child);\n }\n\n return element;\n}\n\nvar Tooltip = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _classNames2;\n\n var _React$useContext = React.useContext(ConfigContext),\n getContextPopupContainer = _React$useContext.getPopupContainer,\n getPrefixCls = _React$useContext.getPrefixCls,\n direction = _React$useContext.direction;\n\n var _useMergedState = useMergedState(false, {\n value: props.visible,\n defaultValue: props.defaultVisible\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n visible = _useMergedState2[0],\n setVisible = _useMergedState2[1];\n\n var isNoTitle = function isNoTitle() {\n var title = props.title,\n overlay = props.overlay;\n return !title && !overlay && title !== 0; // overlay for old version compatibility\n };\n\n var onVisibleChange = function onVisibleChange(vis) {\n var _a;\n\n setVisible(isNoTitle() ? false : vis);\n\n if (!isNoTitle()) {\n (_a = props.onVisibleChange) === null || _a === void 0 ? void 0 : _a.call(props, vis);\n }\n };\n\n var getTooltipPlacements = function getTooltipPlacements() {\n var builtinPlacements = props.builtinPlacements,\n arrowPointAtCenter = props.arrowPointAtCenter,\n autoAdjustOverflow = props.autoAdjustOverflow;\n return builtinPlacements || getPlacements({\n arrowPointAtCenter: arrowPointAtCenter,\n autoAdjustOverflow: autoAdjustOverflow\n });\n }; // 动态设置动画点\n\n\n var onPopupAlign = function onPopupAlign(domNode, align) {\n var placements = getTooltipPlacements(); // 当前返回的位置\n\n var placement = Object.keys(placements).filter(function (key) {\n return placements[key].points[0] === align.points[0] && placements[key].points[1] === align.points[1];\n })[0];\n\n if (!placement) {\n return;\n } // 根据当前坐标设置动画点\n\n\n var rect = domNode.getBoundingClientRect();\n var transformOrigin = {\n top: '50%',\n left: '50%'\n };\n\n if (placement.indexOf('top') >= 0 || placement.indexOf('Bottom') >= 0) {\n transformOrigin.top = \"\".concat(rect.height - align.offset[1], \"px\");\n } else if (placement.indexOf('Top') >= 0 || placement.indexOf('bottom') >= 0) {\n transformOrigin.top = \"\".concat(-align.offset[1], \"px\");\n }\n\n if (placement.indexOf('left') >= 0 || placement.indexOf('Right') >= 0) {\n transformOrigin.left = \"\".concat(rect.width - align.offset[0], \"px\");\n } else if (placement.indexOf('right') >= 0 || placement.indexOf('Left') >= 0) {\n transformOrigin.left = \"\".concat(-align.offset[0], \"px\");\n }\n\n domNode.style.transformOrigin = \"\".concat(transformOrigin.left, \" \").concat(transformOrigin.top);\n };\n\n var getOverlay = function getOverlay() {\n var title = props.title,\n overlay = props.overlay;\n\n if (title === 0) {\n return title;\n }\n\n return overlay || title || '';\n };\n\n var getPopupContainer = props.getPopupContainer,\n otherProps = __rest(props, [\"getPopupContainer\"]);\n\n var customizePrefixCls = props.prefixCls,\n openClassName = props.openClassName,\n getTooltipContainer = props.getTooltipContainer,\n overlayClassName = props.overlayClassName,\n color = props.color,\n overlayInnerStyle = props.overlayInnerStyle,\n children = props.children;\n var prefixCls = getPrefixCls('tooltip', customizePrefixCls);\n var rootPrefixCls = getPrefixCls();\n var tempVisible = visible; // Hide tooltip when there is no title\n\n if (!('visible' in props) && isNoTitle()) {\n tempVisible = false;\n }\n\n var child = getDisabledCompatibleChildren(isValidElement(children) ? children : /*#__PURE__*/React.createElement(\"span\", null, children), prefixCls);\n var childProps = child.props;\n var childCls = classNames(childProps.className, _defineProperty({}, openClassName || \"\".concat(prefixCls, \"-open\"), true));\n var customOverlayClassName = classNames(overlayClassName, (_classNames2 = {}, _defineProperty(_classNames2, \"\".concat(prefixCls, \"-rtl\"), direction === 'rtl'), _defineProperty(_classNames2, \"\".concat(prefixCls, \"-\").concat(color), color && PresetColorRegex.test(color)), _classNames2));\n var formattedOverlayInnerStyle = overlayInnerStyle;\n var arrowContentStyle;\n\n if (color && !PresetColorRegex.test(color)) {\n formattedOverlayInnerStyle = _extends(_extends({}, overlayInnerStyle), {\n background: color\n });\n arrowContentStyle = {\n background: color\n };\n }\n\n return /*#__PURE__*/React.createElement(RcTooltip, _extends({}, otherProps, {\n prefixCls: prefixCls,\n overlayClassName: customOverlayClassName,\n getTooltipContainer: getPopupContainer || getTooltipContainer || getContextPopupContainer,\n ref: ref,\n builtinPlacements: getTooltipPlacements(),\n overlay: getOverlay(),\n visible: tempVisible,\n onVisibleChange: onVisibleChange,\n onPopupAlign: onPopupAlign,\n overlayInnerStyle: formattedOverlayInnerStyle,\n arrowContent: /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-arrow-content\"),\n style: arrowContentStyle\n }),\n motion: {\n motionName: getTransitionName(rootPrefixCls, 'zoom-big-fast', props.transitionName),\n motionDeadline: 1000\n }\n }), tempVisible ? cloneElement(child, {\n className: childCls\n }) : child);\n});\nTooltip.displayName = 'Tooltip';\nTooltip.defaultProps = {\n placement: 'top',\n mouseEnterDelay: 0.1,\n mouseLeaveDelay: 0.1,\n arrowPointAtCenter: false,\n autoAdjustOverflow: true\n};\nexport default Tooltip;","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","\nmodule.exports = {\n minBlockRef,\n maxBlockRef,\n sortBlockRefs,\n bnToHex,\n blockRefIsNumber,\n hexToInt,\n incrementHexInt,\n intToHex,\n unsafeRandomBytes,\n}\n\nfunction minBlockRef(...refs) {\n const sortedRefs = sortBlockRefs(refs)\n return sortedRefs[0]\n}\n\nfunction maxBlockRef(...refs) {\n const sortedRefs = sortBlockRefs(refs)\n return sortedRefs[sortedRefs.length-1]\n}\n\nfunction sortBlockRefs(refs) {\n return refs.sort((refA, refB) => {\n if (refA === 'latest' || refB === 'earliest') return 1\n if (refB === 'latest' || refA === 'earliest') return -1\n return hexToInt(refA) - hexToInt(refB)\n })\n}\n\nfunction bnToHex(bn) {\n return '0x' + bn.toString(16)\n}\n\nfunction blockRefIsNumber(blockRef){\n return blockRef && !['earliest', 'latest', 'pending'].includes(blockRef)\n}\n\nfunction hexToInt(hexString) {\n if (hexString === undefined || hexString === null) return hexString\n return Number.parseInt(hexString, 16)\n}\n\nfunction incrementHexInt(hexString){\n if (hexString === undefined || hexString === null) return hexString\n const value = hexToInt(hexString)\n return intToHex(value + 1)\n}\n\nfunction intToHex(int) {\n if (int === undefined || int === null) return int\n let hexString = int.toString(16)\n const needsLeftPad = hexString.length % 2\n if (needsLeftPad) hexString = '0' + hexString\n return '0x' + hexString\n}\n\nfunction unsafeRandomBytes(byteCount) {\n let result = '0x'\n for (let i = 0; i < byteCount; i++) {\n result += unsafeRandomNibble()\n result += unsafeRandomNibble()\n }\n return result\n}\n\nfunction unsafeRandomNibble() {\n return Math.floor(Math.random() * 16).toString(16)\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.baToJSON = exports.addHexPrefix = exports.toUnsigned = exports.fromSigned = exports.bufferToHex = exports.bufferToInt = exports.toBuffer = exports.stripZeros = exports.unpad = exports.setLengthRight = exports.setLength = exports.setLengthLeft = exports.zeros = void 0;\nvar ethjsUtil = require('ethjs-util');\nvar BN = require(\"bn.js\");\n/**\n * Returns a buffer filled with 0s.\n * @param bytes the number of bytes the buffer should be\n */\nexports.zeros = function (bytes) {\n return Buffer.allocUnsafe(bytes).fill(0);\n};\n/**\n * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @param msg the value to pad (Buffer|Array)\n * @param length the number of bytes the output should be\n * @param right whether to start padding form the left or right\n * @return (Buffer|Array)\n */\nexports.setLengthLeft = function (msg, length, right) {\n if (right === void 0) { right = false; }\n var buf = exports.zeros(length);\n msg = exports.toBuffer(msg);\n if (right) {\n if (msg.length < length) {\n msg.copy(buf);\n return buf;\n }\n return msg.slice(0, length);\n }\n else {\n if (msg.length < length) {\n msg.copy(buf, length - msg.length);\n return buf;\n }\n return msg.slice(-length);\n }\n};\nexports.setLength = exports.setLengthLeft;\n/**\n * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @param msg the value to pad (Buffer|Array)\n * @param length the number of bytes the output should be\n * @return (Buffer|Array)\n */\nexports.setLengthRight = function (msg, length) {\n return exports.setLength(msg, length, true);\n};\n/**\n * Trims leading zeros from a `Buffer` or an `Array`.\n * @param a (Buffer|Array|String)\n * @return (Buffer|Array|String)\n */\nexports.unpad = function (a) {\n a = ethjsUtil.stripHexPrefix(a);\n var first = a[0];\n while (a.length > 0 && first.toString() === '0') {\n a = a.slice(1);\n first = a[0];\n }\n return a;\n};\nexports.stripZeros = exports.unpad;\n/**\n * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.\n * @param v the value\n */\nexports.toBuffer = function (v) {\n if (!Buffer.isBuffer(v)) {\n if (Array.isArray(v)) {\n v = Buffer.from(v);\n }\n else if (typeof v === 'string') {\n if (ethjsUtil.isHexString(v)) {\n v = Buffer.from(ethjsUtil.padToEven(ethjsUtil.stripHexPrefix(v)), 'hex');\n }\n else {\n throw new Error(\"Cannot convert string to buffer. toBuffer only supports 0x-prefixed hex strings and this string was given: \" + v);\n }\n }\n else if (typeof v === 'number') {\n v = ethjsUtil.intToBuffer(v);\n }\n else if (v === null || v === undefined) {\n v = Buffer.allocUnsafe(0);\n }\n else if (BN.isBN(v)) {\n v = v.toArrayLike(Buffer);\n }\n else if (v.toArray) {\n // converts a BN to a Buffer\n v = Buffer.from(v.toArray());\n }\n else {\n throw new Error('invalid type');\n }\n }\n return v;\n};\n/**\n * Converts a `Buffer` to a `Number`.\n * @param buf `Buffer` object to convert\n * @throws If the input number exceeds 53 bits.\n */\nexports.bufferToInt = function (buf) {\n return new BN(exports.toBuffer(buf)).toNumber();\n};\n/**\n * Converts a `Buffer` into a `0x`-prefixed hex `String`.\n * @param buf `Buffer` object to convert\n */\nexports.bufferToHex = function (buf) {\n buf = exports.toBuffer(buf);\n return '0x' + buf.toString('hex');\n};\n/**\n * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.\n * @param num Signed integer value\n */\nexports.fromSigned = function (num) {\n return new BN(num).fromTwos(256);\n};\n/**\n * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.\n * @param num\n */\nexports.toUnsigned = function (num) {\n return Buffer.from(num.toTwos(256).toArray());\n};\n/**\n * Adds \"0x\" to a given `String` if it does not already start with \"0x\".\n */\nexports.addHexPrefix = function (str) {\n if (typeof str !== 'string') {\n return str;\n }\n return ethjsUtil.isHexPrefixed(str) ? str : '0x' + str;\n};\n/**\n * Converts a `Buffer` or `Array` to JSON.\n * @param ba (Buffer|Array)\n * @return (Array|String|null)\n */\nexports.baToJSON = function (ba) {\n if (Buffer.isBuffer(ba)) {\n return \"0x\" + ba.toString('hex');\n }\n else if (ba instanceof Array) {\n var array = [];\n for (var i = 0; i < ba.length; i++) {\n array.push(exports.baToJSON(ba[i]));\n }\n return array;\n }\n};\n//# sourceMappingURL=bytes.js.map","const getRandomId = require('./random-id.js')\nconst extend = require('xtend')\n\nmodule.exports = createPayload\n\n\nfunction createPayload(data){\n return extend({\n // defaults\n id: getRandomId(),\n jsonrpc: '2.0',\n params: [],\n // user-specified\n }, data)\n}\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar digest = require('./digest.js');\n\nconst from = ({name, code, encode}) => new Hasher(name, code, encode);\nclass Hasher {\n constructor(name, code, encode) {\n this.name = name;\n this.code = code;\n this.encode = encode;\n }\n async digest(input) {\n if (input instanceof Uint8Array) {\n const digest$1 = await this.encode(input);\n return digest.create(this.code, digest$1);\n } else {\n throw Error('Unknown type, must be binary type');\n }\n }\n}\n\nexports.Hasher = Hasher;\nexports.from = from;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('./cid.js');\nvar varint = require('./varint.js');\nvar bytes = require('./bytes.js');\nvar hasher = require('./hashes/hasher.js');\nvar digest = require('./hashes/digest.js');\n\n\n\nexports.CID = cid.CID;\nexports.varint = varint;\nexports.bytes = bytes;\nexports.hasher = hasher;\nexports.digest = digest;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cborg = require('cborg');\nvar cid = require('multiformats/cid');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar cborg__namespace = /*#__PURE__*/_interopNamespace(cborg);\n\nconst CID_CBOR_TAG = 42;\nfunction cidEncoder(obj) {\n if (obj.asCID !== obj) {\n return null;\n }\n const cid$1 = cid.CID.asCID(obj);\n if (!cid$1) {\n return null;\n }\n const bytes = new Uint8Array(cid$1.bytes.byteLength + 1);\n bytes.set(cid$1.bytes, 1);\n return [\n new cborg__namespace.Token(cborg__namespace.Type.tag, CID_CBOR_TAG),\n new cborg__namespace.Token(cborg__namespace.Type.bytes, bytes)\n ];\n}\nfunction undefinedEncoder() {\n throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded');\n}\nfunction numberEncoder(num) {\n if (Number.isNaN(num)) {\n throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded');\n }\n if (num === Infinity || num === -Infinity) {\n throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded');\n }\n return null;\n}\nconst encodeOptions = {\n float64: true,\n typeEncoders: {\n Object: cidEncoder,\n undefined: undefinedEncoder,\n number: numberEncoder\n }\n};\nfunction cidDecoder(bytes) {\n if (bytes[0] !== 0) {\n throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00');\n }\n return cid.CID.decode(bytes.subarray(1));\n}\nconst decodeOptions = {\n allowIndefinite: false,\n coerceUndefinedToNull: true,\n allowNaN: false,\n allowInfinity: false,\n allowBigInt: true,\n strict: true,\n useMaps: false,\n tags: []\n};\ndecodeOptions.tags[CID_CBOR_TAG] = cidDecoder;\nconst name = 'dag-cbor';\nconst code = 113;\nconst encode = node => cborg__namespace.encode(node, encodeOptions);\nconst decode = data => cborg__namespace.decode(data, decodeOptions);\n\nexports.code = code;\nexports.decode = decode;\nexports.encode = encode;\nexports.name = name;\n","'use strict'\n\nconst { base58btc } = require('multiformats/bases/base58')\nconst { base32 } = require('multiformats/bases/base32')\nconst Digest = require('multiformats/hashes/digest')\nconst { Multiaddr } = require('multiaddr')\nconst mafmt = require('mafmt')\nconst { CID } = require('multiformats/cid')\nconst { URL } = require('iso-url')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\n\nconst pathGatewayPattern = /^https?:\\/\\/[^/]+\\/(ip[fn]s)\\/([^/?#]+)/\nconst pathPattern = /^\\/(ip[fn]s)\\/([^/?#]+)/\nconst defaultProtocolMatch = 1\nconst defaultHashMath = 2\n\n// CID, libp2p-key or DNSLink\nconst subdomainGatewayPattern = /^https?:\\/\\/([^/]+)\\.(ip[fn]s)\\.[^/?]+/\nconst subdomainIdMatch = 1\nconst subdomainProtocolMatch = 2\n\n// Fully qualified domain name (FQDN) that has an explicit .tld suffix\nconst fqdnWithTld = /^(([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])\\.)+([a-z0-9]|[a-z0-9][a-z0-9-]*[a-z0-9])$/\n\n/**\n * @param {*} hash\n */\nfunction isMultihash (hash) {\n const formatted = convertToString(hash)\n try {\n Digest.decode(base58btc.decode('z' + formatted))\n } catch {\n return false\n }\n\n return true\n}\n\n/**\n * @param {*} hash\n */\nfunction isBase32EncodedMultibase (hash) {\n try {\n base32.decode(hash)\n } catch {\n return false\n }\n\n return true\n}\n\n/**\n * @param {*} hash\n */\nfunction isCID (hash) {\n try {\n if (typeof hash === 'string') {\n return Boolean(CID.parse(hash))\n }\n\n if (hash instanceof Uint8Array) {\n return Boolean(CID.decode(hash))\n }\n\n return Boolean(CID.asCID(hash)) // eslint-disable-line no-new\n } catch (e) {\n return false\n }\n}\n\n/**\n * @param {*} input\n */\nfunction isMultiaddr (input) {\n if (!input) return false\n if (Multiaddr.isMultiaddr(input)) return true\n try {\n new Multiaddr(input) // eslint-disable-line no-new\n return true\n } catch (e) {\n return false\n }\n}\n\n/**\n * @param {string | Uint8Array | Multiaddr} input\n */\nfunction isPeerMultiaddr (input) {\n return isMultiaddr(input) && mafmt.P2P.matches(input)\n}\n\n/**\n * @param {string | Uint8Array} input\n * @param {RegExp | string} pattern\n * @param {number} [protocolMatch=1]\n * @param {number} [hashMatch=2]\n */\nfunction isIpfs (input, pattern, protocolMatch = defaultProtocolMatch, hashMatch = defaultHashMath) {\n const formatted = convertToString(input)\n if (!formatted) {\n return false\n }\n\n const match = formatted.match(pattern)\n if (!match) {\n return false\n }\n\n if (match[protocolMatch] !== 'ipfs') {\n return false\n }\n\n let hash = match[hashMatch]\n\n if (hash && pattern === subdomainGatewayPattern) {\n // when doing checks for subdomain context\n // ensure hash is case-insensitive\n // (browsers force-lowercase authority component anyway)\n hash = hash.toLowerCase()\n }\n\n return isCID(hash)\n}\n\n/**\n *\n * @param {string | Uint8Array} input\n * @param {string | RegExp} pattern\n * @param {number} [protocolMatch=1]\n * @param {number} [hashMatch=1]\n */\nfunction isIpns (input, pattern, protocolMatch = defaultProtocolMatch, hashMatch = defaultHashMath) {\n const formatted = convertToString(input)\n if (!formatted) {\n return false\n }\n const match = formatted.match(pattern)\n if (!match) {\n return false\n }\n\n if (match[protocolMatch] !== 'ipns') {\n return false\n }\n\n let ipnsId = match[hashMatch]\n\n if (ipnsId && pattern === subdomainGatewayPattern) {\n // when doing checks for subdomain context\n // ensure ipnsId is case-insensitive\n // (browsers force-lowercase authority compotent anyway)\n ipnsId = ipnsId.toLowerCase()\n // Check if it is cidv1\n if (isCID(ipnsId)) return true\n // Check if it looks like FQDN\n try {\n if (!ipnsId.includes('.') && ipnsId.includes('-')) {\n // name without tld, assuming its inlined into a single DNS label\n // (https://github.com/ipfs/in-web-browsers/issues/169)\n // en-wikipedia--on--ipfs-org → en.wikipedia-on-ipfs.org\n ipnsId = ipnsId.replace(/--/g, '@').replace(/-/g, '.').replace(/@/g, '-')\n }\n // URL implementation in web browsers forces lowercase of the hostname\n const { hostname } = new URL(`http://${ipnsId}`) // eslint-disable-line no-new\n // Check if potential FQDN has an explicit TLD\n return fqdnWithTld.test(hostname)\n } catch (e) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * @param {any} input\n */\nfunction isString (input) {\n return typeof input === 'string'\n}\n\n/**\n * @param {Uint8Array | string} input\n */\nfunction convertToString (input) {\n if (input instanceof Uint8Array) {\n return uint8ArrayToString(input, 'base58btc')\n }\n\n if (isString(input)) {\n return input\n }\n\n return false\n}\n\n/**\n * @param {string | Uint8Array} url\n */\nconst ipfsSubdomain = (url) => isIpfs(url, subdomainGatewayPattern, subdomainProtocolMatch, subdomainIdMatch)\n/**\n * @param {string | Uint8Array} url\n */\nconst ipnsSubdomain = (url) => isIpns(url, subdomainGatewayPattern, subdomainProtocolMatch, subdomainIdMatch)\n/**\n * @param {string | Uint8Array} url\n */\nconst subdomain = (url) => ipfsSubdomain(url) || ipnsSubdomain(url)\n\n/**\n * @param {string | Uint8Array} url\n */\nconst ipfsUrl = (url) => isIpfs(url, pathGatewayPattern) || ipfsSubdomain(url)\n/**\n * @param {string | Uint8Array} url\n */\nconst ipnsUrl = (url) => isIpns(url, pathGatewayPattern) || ipnsSubdomain(url)\n/**\n * @param {string | Uint8Array} url\n */\nconst url = (url) => ipfsUrl(url) || ipnsUrl(url) || subdomain(url)\n\n/**\n * @param {string | Uint8Array} path\n */\nconst path = (path) => isIpfs(path, pathPattern) || isIpns(path, pathPattern)\n\nmodule.exports = {\n multihash: isMultihash,\n multiaddr: isMultiaddr,\n peerMultiaddr: isPeerMultiaddr,\n cid: isCID,\n /**\n * @param {CID | string | Uint8Array} cid\n */\n base32cid: (cid) => (isBase32EncodedMultibase(cid) && isCID(cid)),\n ipfsSubdomain,\n ipnsSubdomain,\n subdomain,\n subdomainGatewayPattern,\n ipfsUrl,\n ipnsUrl,\n url,\n pathGatewayPattern: pathGatewayPattern,\n /**\n * @param {string | Uint8Array} path\n */\n ipfsPath: (path) => isIpfs(path, pathPattern),\n /**\n * @param {string | Uint8Array} path\n */\n ipnsPath: (path) => isIpns(path, pathPattern),\n path,\n pathPattern,\n /**\n * @param {string | Uint8Array} x\n */\n urlOrPath: (x) => url(x) || path(x),\n /**\n * @param {string | Uint8Array | CID} path\n */\n cidPath: path => isString(path) && !isCID(path) && isIpfs(`/ipfs/${path}`, pathPattern)\n}\n","module.exports = function (max) {\n\n if (!max) throw Error('hashlru must have a max value, of type number, greater than 0')\n\n var size = 0, cache = Object.create(null), _cache = Object.create(null)\n\n function update (key, value) {\n cache[key] = value\n size ++\n if(size >= max) {\n size = 0\n _cache = cache\n cache = Object.create(null)\n }\n }\n\n return {\n has: function (key) {\n return cache[key] !== undefined || _cache[key] !== undefined\n },\n remove: function (key) {\n if(cache[key] !== undefined)\n cache[key] = undefined\n if(_cache[key] !== undefined)\n _cache[key] = undefined\n },\n get: function (key) {\n var v = cache[key]\n if(v !== undefined) return v\n if((v = _cache[key]) !== undefined) {\n update(key, v)\n return v\n }\n },\n set: function (key, value) {\n if(cache[key] !== undefined) cache[key] = value\n else update(key, value)\n },\n clear: function () {\n cache = Object.create(null)\n _cache = Object.create(null)\n }\n }\n}\n\n\n\n\n\n\n\n","/* eslint-disable no-undef */\n'use strict'\n\nconst { fetch, Request, Headers } = require('./http/fetch')\nconst { TimeoutError, HTTPError } = require('./http/error')\nconst merge = require('merge-options').bind({ ignoreUndefined: true })\nconst { URL, URLSearchParams } = require('iso-url')\nconst { AbortController } = require('native-abort-controller')\nconst anySignal = require('any-signal')\n\n/**\n * @typedef {import('stream').Readable} NodeReadableStream\n * @typedef {import('./types').HTTPOptions} HTTPOptions\n * @typedef {import('./types').ExtendedResponse} ExtendedResponse\n */\n\n/**\n * @template TResponse\n * @param {Promise} promise\n * @param {number | undefined} ms\n * @param {AbortController} abortController\n * @returns {Promise}\n */\nconst timeout = (promise, ms, abortController) => {\n if (ms === undefined) {\n return promise\n }\n\n const start = Date.now()\n\n const timedOut = () => {\n const time = Date.now() - start\n\n return time >= ms\n }\n\n return new Promise((resolve, reject) => {\n const timeoutID = setTimeout(() => {\n if (timedOut()) {\n reject(new TimeoutError())\n abortController.abort()\n }\n }, ms)\n\n /**\n * @param {(value: any) => void } next\n */\n const after = (next) => {\n /**\n * @param {any} res\n */\n const fn = (res) => {\n clearTimeout(timeoutID)\n\n if (timedOut()) {\n reject(new TimeoutError())\n return\n }\n\n next(res)\n }\n return fn\n }\n\n promise\n .then(after(resolve), after(reject))\n })\n}\n\nconst defaults = {\n throwHttpErrors: true,\n credentials: 'same-origin'\n}\n\nclass HTTP {\n /**\n *\n * @param {HTTPOptions} options\n */\n constructor (options = {}) {\n /** @type {HTTPOptions} */\n this.opts = merge(defaults, options)\n }\n\n /**\n * Fetch\n *\n * @param {string | Request} resource\n * @param {HTTPOptions} options\n * @returns {Promise}\n */\n async fetch (resource, options = {}) {\n /** @type {HTTPOptions} */\n const opts = merge(this.opts, options)\n const headers = new Headers(opts.headers)\n\n // validate resource type\n if (typeof resource !== 'string' && !(resource instanceof URL || resource instanceof Request)) {\n throw new TypeError('`resource` must be a string, URL, or Request')\n }\n\n const url = new URL(resource.toString(), opts.base)\n\n const {\n searchParams,\n transformSearchParams,\n json\n } = opts\n\n if (searchParams) {\n if (typeof transformSearchParams === 'function') {\n // @ts-ignore\n url.search = transformSearchParams(new URLSearchParams(opts.searchParams))\n } else {\n // @ts-ignore\n url.search = new URLSearchParams(opts.searchParams)\n }\n }\n\n if (json) {\n opts.body = JSON.stringify(opts.json)\n headers.set('content-type', 'application/json')\n }\n\n const abortController = new AbortController()\n // @ts-ignore\n const signal = anySignal([abortController.signal, opts.signal])\n\n const response = await timeout(\n fetch(\n url.toString(),\n {\n ...opts,\n signal,\n timeout: undefined,\n headers\n }\n ),\n opts.timeout,\n abortController\n )\n\n if (!response.ok && opts.throwHttpErrors) {\n if (opts.handleError) {\n await opts.handleError(response)\n }\n throw new HTTPError(response)\n }\n\n response.iterator = function () {\n return fromStream(response.body)\n }\n\n response.ndjson = async function * () {\n for await (const chunk of ndjson(response.iterator())) {\n if (options.transform) {\n yield options.transform(chunk)\n } else {\n yield chunk\n }\n }\n }\n\n return response\n }\n\n /**\n * @param {string | Request} resource\n * @param {HTTPOptions} options\n */\n post (resource, options = {}) {\n return this.fetch(resource, { ...options, method: 'POST' })\n }\n\n /**\n * @param {string | Request} resource\n * @param {HTTPOptions} options\n */\n get (resource, options = {}) {\n return this.fetch(resource, { ...options, method: 'GET' })\n }\n\n /**\n * @param {string | Request} resource\n * @param {HTTPOptions} options\n */\n put (resource, options = {}) {\n return this.fetch(resource, { ...options, method: 'PUT' })\n }\n\n /**\n * @param {string | Request} resource\n * @param {HTTPOptions} options\n */\n delete (resource, options = {}) {\n return this.fetch(resource, { ...options, method: 'DELETE' })\n }\n\n /**\n * @param {string | Request} resource\n * @param {HTTPOptions} options\n */\n options (resource, options = {}) {\n return this.fetch(resource, { ...options, method: 'OPTIONS' })\n }\n}\n\n/**\n * Parses NDJSON chunks from an iterator\n *\n * @param {AsyncIterable} source\n * @returns {AsyncIterable}\n */\nconst ndjson = async function * (source) {\n const decoder = new TextDecoder()\n let buf = ''\n\n for await (const chunk of source) {\n buf += decoder.decode(chunk, { stream: true })\n const lines = buf.split(/\\r?\\n/)\n\n for (let i = 0; i < lines.length - 1; i++) {\n const l = lines[i].trim()\n if (l.length > 0) {\n yield JSON.parse(l)\n }\n }\n buf = lines[lines.length - 1]\n }\n buf += decoder.decode()\n buf = buf.trim()\n if (buf.length !== 0) {\n yield JSON.parse(buf)\n }\n}\n\n/**\n * Stream to AsyncIterable\n *\n * @template TChunk\n * @param {ReadableStream | NodeReadableStream | null} source\n * @returns {AsyncIterable}\n */\nconst fromStream = (source) => {\n // Workaround for https://github.com/node-fetch/node-fetch/issues/766\n if (isNodeReadableStream(source)) {\n const iter = source[Symbol.asyncIterator]()\n return {\n [Symbol.asyncIterator] () {\n return {\n next: iter.next.bind(iter),\n return (value) {\n source.destroy()\n if (typeof iter.return === 'function') {\n return iter.return()\n }\n return Promise.resolve({ done: true, value })\n }\n }\n }\n }\n }\n\n if (isWebReadableStream(source)) {\n const reader = source.getReader()\n return (async function * () {\n try {\n while (true) {\n // Read from the stream\n const { done, value } = await reader.read()\n // Exit if we're done\n if (done) return\n // Else yield the chunk\n if (value) {\n yield value\n }\n }\n } finally {\n reader.releaseLock()\n }\n })()\n }\n\n if (isAsyncIterable(source)) {\n return source\n }\n\n throw new TypeError('Body can\\'t be converted to AsyncIterable')\n}\n\n/**\n * Check if it's an AsyncIterable\n *\n * @template {unknown} TChunk\n * @template {any} Other\n * @param {Other|AsyncIterable} value\n * @returns {value is AsyncIterable}\n */\nconst isAsyncIterable = (value) => {\n return typeof value === 'object' &&\n value !== null &&\n typeof /** @type {any} */(value)[Symbol.asyncIterator] === 'function'\n}\n\n/**\n * Check for web readable stream\n *\n * @template {unknown} TChunk\n * @template {any} Other\n * @param {Other|ReadableStream} value\n * @returns {value is ReadableStream}\n */\nconst isWebReadableStream = (value) => {\n return value && typeof /** @type {any} */(value).getReader === 'function'\n}\n\n/**\n * @param {any} value\n * @returns {value is NodeReadableStream}\n */\nconst isNodeReadableStream = (value) =>\n Object.prototype.hasOwnProperty.call(value, 'readable') &&\n Object.prototype.hasOwnProperty.call(value, 'writable')\n\nHTTP.HTTPError = HTTPError\nHTTP.TimeoutError = TimeoutError\nHTTP.streamToAsyncIterator = fromStream\n\n/**\n * @param {string | Request} resource\n * @param {HTTPOptions} [options]\n */\nHTTP.post = (resource, options) => new HTTP(options).post(resource, options)\n\n/**\n * @param {string | Request} resource\n * @param {HTTPOptions} [options]\n */\nHTTP.get = (resource, options) => new HTTP(options).get(resource, options)\n\n/**\n * @param {string | Request} resource\n * @param {HTTPOptions} [options]\n */\nHTTP.put = (resource, options) => new HTTP(options).put(resource, options)\n\n/**\n * @param {string | Request} resource\n * @param {HTTPOptions} [options]\n */\nHTTP.delete = (resource, options) => new HTTP(options).delete(resource, options)\n\n/**\n * @param {string | Request} resource\n * @param {HTTPOptions} [options]\n */\nHTTP.options = (resource, options) => new HTTP(options).options(resource, options)\n\nmodule.exports = HTTP\n","/**\n * Object IDs for ASN.1.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\nforge.pki = forge.pki || {};\nvar oids = module.exports = forge.pki.oids = forge.oids = forge.oids || {};\n\n// set id to name mapping and name to id mapping\nfunction _IN(id, name) {\n oids[id] = name;\n oids[name] = id;\n}\n// set id to name mapping only\nfunction _I_(id, name) {\n oids[id] = name;\n}\n\n// algorithm OIDs\n_IN('1.2.840.113549.1.1.1', 'rsaEncryption');\n// Note: md2 & md4 not implemented\n//_IN('1.2.840.113549.1.1.2', 'md2WithRSAEncryption');\n//_IN('1.2.840.113549.1.1.3', 'md4WithRSAEncryption');\n_IN('1.2.840.113549.1.1.4', 'md5WithRSAEncryption');\n_IN('1.2.840.113549.1.1.5', 'sha1WithRSAEncryption');\n_IN('1.2.840.113549.1.1.7', 'RSAES-OAEP');\n_IN('1.2.840.113549.1.1.8', 'mgf1');\n_IN('1.2.840.113549.1.1.9', 'pSpecified');\n_IN('1.2.840.113549.1.1.10', 'RSASSA-PSS');\n_IN('1.2.840.113549.1.1.11', 'sha256WithRSAEncryption');\n_IN('1.2.840.113549.1.1.12', 'sha384WithRSAEncryption');\n_IN('1.2.840.113549.1.1.13', 'sha512WithRSAEncryption');\n// Edwards-curve Digital Signature Algorithm (EdDSA) Ed25519\n_IN('1.3.101.112', 'EdDSA25519');\n\n_IN('1.2.840.10040.4.3', 'dsa-with-sha1');\n\n_IN('1.3.14.3.2.7', 'desCBC');\n\n_IN('1.3.14.3.2.26', 'sha1');\n_IN('2.16.840.1.101.3.4.2.1', 'sha256');\n_IN('2.16.840.1.101.3.4.2.2', 'sha384');\n_IN('2.16.840.1.101.3.4.2.3', 'sha512');\n_IN('1.2.840.113549.2.5', 'md5');\n\n// pkcs#7 content types\n_IN('1.2.840.113549.1.7.1', 'data');\n_IN('1.2.840.113549.1.7.2', 'signedData');\n_IN('1.2.840.113549.1.7.3', 'envelopedData');\n_IN('1.2.840.113549.1.7.4', 'signedAndEnvelopedData');\n_IN('1.2.840.113549.1.7.5', 'digestedData');\n_IN('1.2.840.113549.1.7.6', 'encryptedData');\n\n// pkcs#9 oids\n_IN('1.2.840.113549.1.9.1', 'emailAddress');\n_IN('1.2.840.113549.1.9.2', 'unstructuredName');\n_IN('1.2.840.113549.1.9.3', 'contentType');\n_IN('1.2.840.113549.1.9.4', 'messageDigest');\n_IN('1.2.840.113549.1.9.5', 'signingTime');\n_IN('1.2.840.113549.1.9.6', 'counterSignature');\n_IN('1.2.840.113549.1.9.7', 'challengePassword');\n_IN('1.2.840.113549.1.9.8', 'unstructuredAddress');\n_IN('1.2.840.113549.1.9.14', 'extensionRequest');\n\n_IN('1.2.840.113549.1.9.20', 'friendlyName');\n_IN('1.2.840.113549.1.9.21', 'localKeyId');\n_IN('1.2.840.113549.1.9.22.1', 'x509Certificate');\n\n// pkcs#12 safe bags\n_IN('1.2.840.113549.1.12.10.1.1', 'keyBag');\n_IN('1.2.840.113549.1.12.10.1.2', 'pkcs8ShroudedKeyBag');\n_IN('1.2.840.113549.1.12.10.1.3', 'certBag');\n_IN('1.2.840.113549.1.12.10.1.4', 'crlBag');\n_IN('1.2.840.113549.1.12.10.1.5', 'secretBag');\n_IN('1.2.840.113549.1.12.10.1.6', 'safeContentsBag');\n\n// password-based-encryption for pkcs#12\n_IN('1.2.840.113549.1.5.13', 'pkcs5PBES2');\n_IN('1.2.840.113549.1.5.12', 'pkcs5PBKDF2');\n\n_IN('1.2.840.113549.1.12.1.1', 'pbeWithSHAAnd128BitRC4');\n_IN('1.2.840.113549.1.12.1.2', 'pbeWithSHAAnd40BitRC4');\n_IN('1.2.840.113549.1.12.1.3', 'pbeWithSHAAnd3-KeyTripleDES-CBC');\n_IN('1.2.840.113549.1.12.1.4', 'pbeWithSHAAnd2-KeyTripleDES-CBC');\n_IN('1.2.840.113549.1.12.1.5', 'pbeWithSHAAnd128BitRC2-CBC');\n_IN('1.2.840.113549.1.12.1.6', 'pbewithSHAAnd40BitRC2-CBC');\n\n// hmac OIDs\n_IN('1.2.840.113549.2.7', 'hmacWithSHA1');\n_IN('1.2.840.113549.2.8', 'hmacWithSHA224');\n_IN('1.2.840.113549.2.9', 'hmacWithSHA256');\n_IN('1.2.840.113549.2.10', 'hmacWithSHA384');\n_IN('1.2.840.113549.2.11', 'hmacWithSHA512');\n\n// symmetric key algorithm oids\n_IN('1.2.840.113549.3.7', 'des-EDE3-CBC');\n_IN('2.16.840.1.101.3.4.1.2', 'aes128-CBC');\n_IN('2.16.840.1.101.3.4.1.22', 'aes192-CBC');\n_IN('2.16.840.1.101.3.4.1.42', 'aes256-CBC');\n\n// certificate issuer/subject OIDs\n_IN('2.5.4.3', 'commonName');\n_IN('2.5.4.5', 'serialName');\n_IN('2.5.4.6', 'countryName');\n_IN('2.5.4.7', 'localityName');\n_IN('2.5.4.8', 'stateOrProvinceName');\n_IN('2.5.4.9', 'streetAddress');\n_IN('2.5.4.10', 'organizationName');\n_IN('2.5.4.11', 'organizationalUnitName');\n_IN('2.5.4.13', 'description');\n_IN('2.5.4.15', 'businessCategory');\n_IN('2.5.4.17', 'postalCode');\n_IN('1.3.6.1.4.1.311.60.2.1.2', 'jurisdictionOfIncorporationStateOrProvinceName');\n_IN('1.3.6.1.4.1.311.60.2.1.3', 'jurisdictionOfIncorporationCountryName');\n\n// X.509 extension OIDs\n_IN('2.16.840.1.113730.1.1', 'nsCertType');\n_IN('2.16.840.1.113730.1.13', 'nsComment'); // deprecated in theory; still widely used\n_I_('2.5.29.1', 'authorityKeyIdentifier'); // deprecated, use .35\n_I_('2.5.29.2', 'keyAttributes'); // obsolete use .37 or .15\n_I_('2.5.29.3', 'certificatePolicies'); // deprecated, use .32\n_I_('2.5.29.4', 'keyUsageRestriction'); // obsolete use .37 or .15\n_I_('2.5.29.5', 'policyMapping'); // deprecated use .33\n_I_('2.5.29.6', 'subtreesConstraint'); // obsolete use .30\n_I_('2.5.29.7', 'subjectAltName'); // deprecated use .17\n_I_('2.5.29.8', 'issuerAltName'); // deprecated use .18\n_I_('2.5.29.9', 'subjectDirectoryAttributes');\n_I_('2.5.29.10', 'basicConstraints'); // deprecated use .19\n_I_('2.5.29.11', 'nameConstraints'); // deprecated use .30\n_I_('2.5.29.12', 'policyConstraints'); // deprecated use .36\n_I_('2.5.29.13', 'basicConstraints'); // deprecated use .19\n_IN('2.5.29.14', 'subjectKeyIdentifier');\n_IN('2.5.29.15', 'keyUsage');\n_I_('2.5.29.16', 'privateKeyUsagePeriod');\n_IN('2.5.29.17', 'subjectAltName');\n_IN('2.5.29.18', 'issuerAltName');\n_IN('2.5.29.19', 'basicConstraints');\n_I_('2.5.29.20', 'cRLNumber');\n_I_('2.5.29.21', 'cRLReason');\n_I_('2.5.29.22', 'expirationDate');\n_I_('2.5.29.23', 'instructionCode');\n_I_('2.5.29.24', 'invalidityDate');\n_I_('2.5.29.25', 'cRLDistributionPoints'); // deprecated use .31\n_I_('2.5.29.26', 'issuingDistributionPoint'); // deprecated use .28\n_I_('2.5.29.27', 'deltaCRLIndicator');\n_I_('2.5.29.28', 'issuingDistributionPoint');\n_I_('2.5.29.29', 'certificateIssuer');\n_I_('2.5.29.30', 'nameConstraints');\n_IN('2.5.29.31', 'cRLDistributionPoints');\n_IN('2.5.29.32', 'certificatePolicies');\n_I_('2.5.29.33', 'policyMappings');\n_I_('2.5.29.34', 'policyConstraints'); // deprecated use .36\n_IN('2.5.29.35', 'authorityKeyIdentifier');\n_I_('2.5.29.36', 'policyConstraints');\n_IN('2.5.29.37', 'extKeyUsage');\n_I_('2.5.29.46', 'freshestCRL');\n_I_('2.5.29.54', 'inhibitAnyPolicy');\n\n// extKeyUsage purposes\n_IN('1.3.6.1.4.1.11129.2.4.2', 'timestampList');\n_IN('1.3.6.1.5.5.7.1.1', 'authorityInfoAccess');\n_IN('1.3.6.1.5.5.7.3.1', 'serverAuth');\n_IN('1.3.6.1.5.5.7.3.2', 'clientAuth');\n_IN('1.3.6.1.5.5.7.3.3', 'codeSigning');\n_IN('1.3.6.1.5.5.7.3.4', 'emailProtection');\n_IN('1.3.6.1.5.5.7.3.8', 'timeStamping');\n","/**\n * Advanced Encryption Standard (AES) implementation.\n *\n * This implementation is based on the public domain library 'jscrypto' which\n * was written by:\n *\n * Emily Stark (estark@stanford.edu)\n * Mike Hamburg (mhamburg@stanford.edu)\n * Dan Boneh (dabo@cs.stanford.edu)\n *\n * Parts of this code are based on the OpenSSL implementation of AES:\n * http://www.openssl.org\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./cipher');\nrequire('./cipherModes');\nrequire('./util');\n\n/* AES API */\nmodule.exports = forge.aes = forge.aes || {};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('AES-', key);\n * cipher.start({iv: iv});\n *\n * Creates an AES cipher object to encrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as a string of bytes, an array of bytes,\n * a byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.startEncrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: false,\n mode: mode\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('AES-', key);\n *\n * Creates an AES cipher object to encrypt data using the given symmetric key.\n *\n * The key may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.createEncryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: false,\n mode: mode\n });\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('AES-', key);\n * decipher.start({iv: iv});\n *\n * Creates an AES cipher object to decrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as a string of bytes, an array of bytes,\n * a byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.startDecrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: true,\n mode: mode\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('AES-', key);\n *\n * Creates an AES cipher object to decrypt data using the given symmetric key.\n *\n * The key may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.createDecryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: true,\n mode: mode\n });\n};\n\n/**\n * Creates a new AES cipher algorithm object.\n *\n * @param name the name of the algorithm.\n * @param mode the mode factory function.\n *\n * @return the AES algorithm object.\n */\nforge.aes.Algorithm = function(name, mode) {\n if(!init) {\n initialize();\n }\n var self = this;\n self.name = name;\n self.mode = new mode({\n blockSize: 16,\n cipher: {\n encrypt: function(inBlock, outBlock) {\n return _updateBlock(self._w, inBlock, outBlock, false);\n },\n decrypt: function(inBlock, outBlock) {\n return _updateBlock(self._w, inBlock, outBlock, true);\n }\n }\n });\n self._init = false;\n};\n\n/**\n * Initializes this AES algorithm by expanding its key.\n *\n * @param options the options to use.\n * key the key to use with this algorithm.\n * decrypt true if the algorithm should be initialized for decryption,\n * false for encryption.\n */\nforge.aes.Algorithm.prototype.initialize = function(options) {\n if(this._init) {\n return;\n }\n\n var key = options.key;\n var tmp;\n\n /* Note: The key may be a string of bytes, an array of bytes, a byte\n buffer, or an array of 32-bit integers. If the key is in bytes, then\n it must be 16, 24, or 32 bytes in length. If it is in 32-bit\n integers, it must be 4, 6, or 8 integers long. */\n\n if(typeof key === 'string' &&\n (key.length === 16 || key.length === 24 || key.length === 32)) {\n // convert key string into byte buffer\n key = forge.util.createBuffer(key);\n } else if(forge.util.isArray(key) &&\n (key.length === 16 || key.length === 24 || key.length === 32)) {\n // convert key integer array into byte buffer\n tmp = key;\n key = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n key.putByte(tmp[i]);\n }\n }\n\n // convert key byte buffer into 32-bit integer array\n if(!forge.util.isArray(key)) {\n tmp = key;\n key = [];\n\n // key lengths of 16, 24, 32 bytes allowed\n var len = tmp.length();\n if(len === 16 || len === 24 || len === 32) {\n len = len >>> 2;\n for(var i = 0; i < len; ++i) {\n key.push(tmp.getInt32());\n }\n }\n }\n\n // key must be an array of 32-bit integers by now\n if(!forge.util.isArray(key) ||\n !(key.length === 4 || key.length === 6 || key.length === 8)) {\n throw new Error('Invalid key parameter.');\n }\n\n // encryption operation is always used for these modes\n var mode = this.mode.name;\n var encryptOp = (['CFB', 'OFB', 'CTR', 'GCM'].indexOf(mode) !== -1);\n\n // do key expansion\n this._w = _expandKey(key, options.decrypt && !encryptOp);\n this._init = true;\n};\n\n/**\n * Expands a key. Typically only used for testing.\n *\n * @param key the symmetric key to expand, as an array of 32-bit words.\n * @param decrypt true to expand for decryption, false for encryption.\n *\n * @return the expanded key.\n */\nforge.aes._expandKey = function(key, decrypt) {\n if(!init) {\n initialize();\n }\n return _expandKey(key, decrypt);\n};\n\n/**\n * Updates a single block. Typically only used for testing.\n *\n * @param w the expanded key to use.\n * @param input an array of block-size 32-bit words.\n * @param output an array of block-size 32-bit words.\n * @param decrypt true to decrypt, false to encrypt.\n */\nforge.aes._updateBlock = _updateBlock;\n\n/** Register AES algorithms **/\n\nregisterAlgorithm('AES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('AES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('AES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('AES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('AES-CTR', forge.cipher.modes.ctr);\nregisterAlgorithm('AES-GCM', forge.cipher.modes.gcm);\n\nfunction registerAlgorithm(name, mode) {\n var factory = function() {\n return new forge.aes.Algorithm(name, mode);\n };\n forge.cipher.registerAlgorithm(name, factory);\n}\n\n/** AES implementation **/\n\nvar init = false; // not yet initialized\nvar Nb = 4; // number of words comprising the state (AES = 4)\nvar sbox; // non-linear substitution table used in key expansion\nvar isbox; // inversion of sbox\nvar rcon; // round constant word array\nvar mix; // mix-columns table\nvar imix; // inverse mix-columns table\n\n/**\n * Performs initialization, ie: precomputes tables to optimize for speed.\n *\n * One way to understand how AES works is to imagine that 'addition' and\n * 'multiplication' are interfaces that require certain mathematical\n * properties to hold true (ie: they are associative) but they might have\n * different implementations and produce different kinds of results ...\n * provided that their mathematical properties remain true. AES defines\n * its own methods of addition and multiplication but keeps some important\n * properties the same, ie: associativity and distributivity. The\n * explanation below tries to shed some light on how AES defines addition\n * and multiplication of bytes and 32-bit words in order to perform its\n * encryption and decryption algorithms.\n *\n * The basics:\n *\n * The AES algorithm views bytes as binary representations of polynomials\n * that have either 1 or 0 as the coefficients. It defines the addition\n * or subtraction of two bytes as the XOR operation. It also defines the\n * multiplication of two bytes as a finite field referred to as GF(2^8)\n * (Note: 'GF' means \"Galois Field\" which is a field that contains a finite\n * number of elements so GF(2^8) has 256 elements).\n *\n * This means that any two bytes can be represented as binary polynomials;\n * when they multiplied together and modularly reduced by an irreducible\n * polynomial of the 8th degree, the results are the field GF(2^8). The\n * specific irreducible polynomial that AES uses in hexadecimal is 0x11b.\n * This multiplication is associative with 0x01 as the identity:\n *\n * (b * 0x01 = GF(b, 0x01) = b).\n *\n * The operation GF(b, 0x02) can be performed at the byte level by left\n * shifting b once and then XOR'ing it (to perform the modular reduction)\n * with 0x11b if b is >= 128. Repeated application of the multiplication\n * of 0x02 can be used to implement the multiplication of any two bytes.\n *\n * For instance, multiplying 0x57 and 0x13, denoted as GF(0x57, 0x13), can\n * be performed by factoring 0x13 into 0x01, 0x02, and 0x10. Then these\n * factors can each be multiplied by 0x57 and then added together. To do\n * the multiplication, values for 0x57 multiplied by each of these 3 factors\n * can be precomputed and stored in a table. To add them, the values from\n * the table are XOR'd together.\n *\n * AES also defines addition and multiplication of words, that is 4-byte\n * numbers represented as polynomials of 3 degrees where the coefficients\n * are the values of the bytes.\n *\n * The word [a0, a1, a2, a3] is a polynomial a3x^3 + a2x^2 + a1x + a0.\n *\n * Addition is performed by XOR'ing like powers of x. Multiplication\n * is performed in two steps, the first is an algebriac expansion as\n * you would do normally (where addition is XOR). But the result is\n * a polynomial larger than 3 degrees and thus it cannot fit in a word. So\n * next the result is modularly reduced by an AES-specific polynomial of\n * degree 4 which will always produce a polynomial of less than 4 degrees\n * such that it will fit in a word. In AES, this polynomial is x^4 + 1.\n *\n * The modular product of two polynomials 'a' and 'b' is thus:\n *\n * d(x) = d3x^3 + d2x^2 + d1x + d0\n * with\n * d0 = GF(a0, b0) ^ GF(a3, b1) ^ GF(a2, b2) ^ GF(a1, b3)\n * d1 = GF(a1, b0) ^ GF(a0, b1) ^ GF(a3, b2) ^ GF(a2, b3)\n * d2 = GF(a2, b0) ^ GF(a1, b1) ^ GF(a0, b2) ^ GF(a3, b3)\n * d3 = GF(a3, b0) ^ GF(a2, b1) ^ GF(a1, b2) ^ GF(a0, b3)\n *\n * As a matrix:\n *\n * [d0] = [a0 a3 a2 a1][b0]\n * [d1] [a1 a0 a3 a2][b1]\n * [d2] [a2 a1 a0 a3][b2]\n * [d3] [a3 a2 a1 a0][b3]\n *\n * Special polynomials defined by AES (0x02 == {02}):\n * a(x) = {03}x^3 + {01}x^2 + {01}x + {02}\n * a^-1(x) = {0b}x^3 + {0d}x^2 + {09}x + {0e}.\n *\n * These polynomials are used in the MixColumns() and InverseMixColumns()\n * operations, respectively, to cause each element in the state to affect\n * the output (referred to as diffusing).\n *\n * RotWord() uses: a0 = a1 = a2 = {00} and a3 = {01}, which is the\n * polynomial x3.\n *\n * The ShiftRows() method modifies the last 3 rows in the state (where\n * the state is 4 words with 4 bytes per word) by shifting bytes cyclically.\n * The 1st byte in the second row is moved to the end of the row. The 1st\n * and 2nd bytes in the third row are moved to the end of the row. The 1st,\n * 2nd, and 3rd bytes are moved in the fourth row.\n *\n * More details on how AES arithmetic works:\n *\n * In the polynomial representation of binary numbers, XOR performs addition\n * and subtraction and multiplication in GF(2^8) denoted as GF(a, b)\n * corresponds with the multiplication of polynomials modulo an irreducible\n * polynomial of degree 8. In other words, for AES, GF(a, b) will multiply\n * polynomial 'a' with polynomial 'b' and then do a modular reduction by\n * an AES-specific irreducible polynomial of degree 8.\n *\n * A polynomial is irreducible if its only divisors are one and itself. For\n * the AES algorithm, this irreducible polynomial is:\n *\n * m(x) = x^8 + x^4 + x^3 + x + 1,\n *\n * or {01}{1b} in hexadecimal notation, where each coefficient is a bit:\n * 100011011 = 283 = 0x11b.\n *\n * For example, GF(0x57, 0x83) = 0xc1 because\n *\n * 0x57 = 87 = 01010111 = x^6 + x^4 + x^2 + x + 1\n * 0x85 = 131 = 10000101 = x^7 + x + 1\n *\n * (x^6 + x^4 + x^2 + x + 1) * (x^7 + x + 1)\n * = x^13 + x^11 + x^9 + x^8 + x^7 +\n * x^7 + x^5 + x^3 + x^2 + x +\n * x^6 + x^4 + x^2 + x + 1\n * = x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 = y\n * y modulo (x^8 + x^4 + x^3 + x + 1)\n * = x^7 + x^6 + 1.\n *\n * The modular reduction by m(x) guarantees the result will be a binary\n * polynomial of less than degree 8, so that it can fit in a byte.\n *\n * The operation to multiply a binary polynomial b with x (the polynomial\n * x in binary representation is 00000010) is:\n *\n * b_7x^8 + b_6x^7 + b_5x^6 + b_4x^5 + b_3x^4 + b_2x^3 + b_1x^2 + b_0x^1\n *\n * To get GF(b, x) we must reduce that by m(x). If b_7 is 0 (that is the\n * most significant bit is 0 in b) then the result is already reduced. If\n * it is 1, then we can reduce it by subtracting m(x) via an XOR.\n *\n * It follows that multiplication by x (00000010 or 0x02) can be implemented\n * by performing a left shift followed by a conditional bitwise XOR with\n * 0x1b. This operation on bytes is denoted by xtime(). Multiplication by\n * higher powers of x can be implemented by repeated application of xtime().\n *\n * By adding intermediate results, multiplication by any constant can be\n * implemented. For instance:\n *\n * GF(0x57, 0x13) = 0xfe because:\n *\n * xtime(b) = (b & 128) ? (b << 1 ^ 0x11b) : (b << 1)\n *\n * Note: We XOR with 0x11b instead of 0x1b because in javascript our\n * datatype for b can be larger than 1 byte, so a left shift will not\n * automatically eliminate bits that overflow a byte ... by XOR'ing the\n * overflow bit with 1 (the extra one from 0x11b) we zero it out.\n *\n * GF(0x57, 0x02) = xtime(0x57) = 0xae\n * GF(0x57, 0x04) = xtime(0xae) = 0x47\n * GF(0x57, 0x08) = xtime(0x47) = 0x8e\n * GF(0x57, 0x10) = xtime(0x8e) = 0x07\n *\n * GF(0x57, 0x13) = GF(0x57, (0x01 ^ 0x02 ^ 0x10))\n *\n * And by the distributive property (since XOR is addition and GF() is\n * multiplication):\n *\n * = GF(0x57, 0x01) ^ GF(0x57, 0x02) ^ GF(0x57, 0x10)\n * = 0x57 ^ 0xae ^ 0x07\n * = 0xfe.\n */\nfunction initialize() {\n init = true;\n\n /* Populate the Rcon table. These are the values given by\n [x^(i-1),{00},{00},{00}] where x^(i-1) are powers of x (and x = 0x02)\n in the field of GF(2^8), where i starts at 1.\n\n rcon[0] = [0x00, 0x00, 0x00, 0x00]\n rcon[1] = [0x01, 0x00, 0x00, 0x00] 2^(1-1) = 2^0 = 1\n rcon[2] = [0x02, 0x00, 0x00, 0x00] 2^(2-1) = 2^1 = 2\n ...\n rcon[9] = [0x1B, 0x00, 0x00, 0x00] 2^(9-1) = 2^8 = 0x1B\n rcon[10] = [0x36, 0x00, 0x00, 0x00] 2^(10-1) = 2^9 = 0x36\n\n We only store the first byte because it is the only one used.\n */\n rcon = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36];\n\n // compute xtime table which maps i onto GF(i, 0x02)\n var xtime = new Array(256);\n for(var i = 0; i < 128; ++i) {\n xtime[i] = i << 1;\n xtime[i + 128] = (i + 128) << 1 ^ 0x11B;\n }\n\n // compute all other tables\n sbox = new Array(256);\n isbox = new Array(256);\n mix = new Array(4);\n imix = new Array(4);\n for(var i = 0; i < 4; ++i) {\n mix[i] = new Array(256);\n imix[i] = new Array(256);\n }\n var e = 0, ei = 0, e2, e4, e8, sx, sx2, me, ime;\n for(var i = 0; i < 256; ++i) {\n /* We need to generate the SubBytes() sbox and isbox tables so that\n we can perform byte substitutions. This requires us to traverse\n all of the elements in GF, find their multiplicative inverses,\n and apply to each the following affine transformation:\n\n bi' = bi ^ b(i + 4) mod 8 ^ b(i + 5) mod 8 ^ b(i + 6) mod 8 ^\n b(i + 7) mod 8 ^ ci\n for 0 <= i < 8, where bi is the ith bit of the byte, and ci is the\n ith bit of a byte c with the value {63} or {01100011}.\n\n It is possible to traverse every possible value in a Galois field\n using what is referred to as a 'generator'. There are many\n generators (128 out of 256): 3,5,6,9,11,82 to name a few. To fully\n traverse GF we iterate 255 times, multiplying by our generator\n each time.\n\n On each iteration we can determine the multiplicative inverse for\n the current element.\n\n Suppose there is an element in GF 'e'. For a given generator 'g',\n e = g^x. The multiplicative inverse of e is g^(255 - x). It turns\n out that if use the inverse of a generator as another generator\n it will produce all of the corresponding multiplicative inverses\n at the same time. For this reason, we choose 5 as our inverse\n generator because it only requires 2 multiplies and 1 add and its\n inverse, 82, requires relatively few operations as well.\n\n In order to apply the affine transformation, the multiplicative\n inverse 'ei' of 'e' can be repeatedly XOR'd (4 times) with a\n bit-cycling of 'ei'. To do this 'ei' is first stored in 's' and\n 'x'. Then 's' is left shifted and the high bit of 's' is made the\n low bit. The resulting value is stored in 's'. Then 'x' is XOR'd\n with 's' and stored in 'x'. On each subsequent iteration the same\n operation is performed. When 4 iterations are complete, 'x' is\n XOR'd with 'c' (0x63) and the transformed value is stored in 'x'.\n For example:\n\n s = 01000001\n x = 01000001\n\n iteration 1: s = 10000010, x ^= s\n iteration 2: s = 00000101, x ^= s\n iteration 3: s = 00001010, x ^= s\n iteration 4: s = 00010100, x ^= s\n x ^= 0x63\n\n This can be done with a loop where s = (s << 1) | (s >> 7). However,\n it can also be done by using a single 16-bit (in this case 32-bit)\n number 'sx'. Since XOR is an associative operation, we can set 'sx'\n to 'ei' and then XOR it with 'sx' left-shifted 1,2,3, and 4 times.\n The most significant bits will flow into the high 8 bit positions\n and be correctly XOR'd with one another. All that remains will be\n to cycle the high 8 bits by XOR'ing them all with the lower 8 bits\n afterwards.\n\n At the same time we're populating sbox and isbox we can precompute\n the multiplication we'll need to do to do MixColumns() later.\n */\n\n // apply affine transformation\n sx = ei ^ (ei << 1) ^ (ei << 2) ^ (ei << 3) ^ (ei << 4);\n sx = (sx >> 8) ^ (sx & 255) ^ 0x63;\n\n // update tables\n sbox[e] = sx;\n isbox[sx] = e;\n\n /* Mixing columns is done using matrix multiplication. The columns\n that are to be mixed are each a single word in the current state.\n The state has Nb columns (4 columns). Therefore each column is a\n 4 byte word. So to mix the columns in a single column 'c' where\n its rows are r0, r1, r2, and r3, we use the following matrix\n multiplication:\n\n [2 3 1 1]*[r0,c]=[r'0,c]\n [1 2 3 1] [r1,c] [r'1,c]\n [1 1 2 3] [r2,c] [r'2,c]\n [3 1 1 2] [r3,c] [r'3,c]\n\n r0, r1, r2, and r3 are each 1 byte of one of the words in the\n state (a column). To do matrix multiplication for each mixed\n column c' we multiply the corresponding row from the left matrix\n with the corresponding column from the right matrix. In total, we\n get 4 equations:\n\n r0,c' = 2*r0,c + 3*r1,c + 1*r2,c + 1*r3,c\n r1,c' = 1*r0,c + 2*r1,c + 3*r2,c + 1*r3,c\n r2,c' = 1*r0,c + 1*r1,c + 2*r2,c + 3*r3,c\n r3,c' = 3*r0,c + 1*r1,c + 1*r2,c + 2*r3,c\n\n As usual, the multiplication is as previously defined and the\n addition is XOR. In order to optimize mixing columns we can store\n the multiplication results in tables. If you think of the whole\n column as a word (it might help to visualize by mentally rotating\n the equations above by counterclockwise 90 degrees) then you can\n see that it would be useful to map the multiplications performed on\n each byte (r0, r1, r2, r3) onto a word as well. For instance, we\n could map 2*r0,1*r0,1*r0,3*r0 onto a word by storing 2*r0 in the\n highest 8 bits and 3*r0 in the lowest 8 bits (with the other two\n respectively in the middle). This means that a table can be\n constructed that uses r0 as an index to the word. We can do the\n same with r1, r2, and r3, creating a total of 4 tables.\n\n To construct a full c', we can just look up each byte of c in\n their respective tables and XOR the results together.\n\n Also, to build each table we only have to calculate the word\n for 2,1,1,3 for every byte ... which we can do on each iteration\n of this loop since we will iterate over every byte. After we have\n calculated 2,1,1,3 we can get the results for the other tables\n by cycling the byte at the end to the beginning. For instance\n we can take the result of table 2,1,1,3 and produce table 3,2,1,1\n by moving the right most byte to the left most position just like\n how you can imagine the 3 moved out of 2,1,1,3 and to the front\n to produce 3,2,1,1.\n\n There is another optimization in that the same multiples of\n the current element we need in order to advance our generator\n to the next iteration can be reused in performing the 2,1,1,3\n calculation. We also calculate the inverse mix column tables,\n with e,9,d,b being the inverse of 2,1,1,3.\n\n When we're done, and we need to actually mix columns, the first\n byte of each state word should be put through mix[0] (2,1,1,3),\n the second through mix[1] (3,2,1,1) and so forth. Then they should\n be XOR'd together to produce the fully mixed column.\n */\n\n // calculate mix and imix table values\n sx2 = xtime[sx];\n e2 = xtime[e];\n e4 = xtime[e2];\n e8 = xtime[e4];\n me =\n (sx2 << 24) ^ // 2\n (sx << 16) ^ // 1\n (sx << 8) ^ // 1\n (sx ^ sx2); // 3\n ime =\n (e2 ^ e4 ^ e8) << 24 ^ // E (14)\n (e ^ e8) << 16 ^ // 9\n (e ^ e4 ^ e8) << 8 ^ // D (13)\n (e ^ e2 ^ e8); // B (11)\n // produce each of the mix tables by rotating the 2,1,1,3 value\n for(var n = 0; n < 4; ++n) {\n mix[n][e] = me;\n imix[n][sx] = ime;\n // cycle the right most byte to the left most position\n // ie: 2,1,1,3 becomes 3,2,1,1\n me = me << 24 | me >>> 8;\n ime = ime << 24 | ime >>> 8;\n }\n\n // get next element and inverse\n if(e === 0) {\n // 1 is the inverse of 1\n e = ei = 1;\n } else {\n // e = 2e + 2*2*2*(10e)) = multiply e by 82 (chosen generator)\n // ei = ei + 2*2*ei = multiply ei by 5 (inverse generator)\n e = e2 ^ xtime[xtime[xtime[e2 ^ e8]]];\n ei ^= xtime[xtime[ei]];\n }\n }\n}\n\n/**\n * Generates a key schedule using the AES key expansion algorithm.\n *\n * The AES algorithm takes the Cipher Key, K, and performs a Key Expansion\n * routine to generate a key schedule. The Key Expansion generates a total\n * of Nb*(Nr + 1) words: the algorithm requires an initial set of Nb words,\n * and each of the Nr rounds requires Nb words of key data. The resulting\n * key schedule consists of a linear array of 4-byte words, denoted [wi ],\n * with i in the range 0 <= i < Nb(Nr + 1).\n *\n * KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)\n * AES-128 (Nb=4, Nk=4, Nr=10)\n * AES-192 (Nb=4, Nk=6, Nr=12)\n * AES-256 (Nb=4, Nk=8, Nr=14)\n * Note: Nr=Nk+6.\n *\n * Nb is the number of columns (32-bit words) comprising the State (or\n * number of bytes in a block). For AES, Nb=4.\n *\n * @param key the key to schedule (as an array of 32-bit words).\n * @param decrypt true to modify the key schedule to decrypt, false not to.\n *\n * @return the generated key schedule.\n */\nfunction _expandKey(key, decrypt) {\n // copy the key's words to initialize the key schedule\n var w = key.slice(0);\n\n /* RotWord() will rotate a word, moving the first byte to the last\n byte's position (shifting the other bytes left).\n\n We will be getting the value of Rcon at i / Nk. 'i' will iterate\n from Nk to (Nb * Nr+1). Nk = 4 (4 byte key), Nb = 4 (4 words in\n a block), Nr = Nk + 6 (10). Therefore 'i' will iterate from\n 4 to 44 (exclusive). Each time we iterate 4 times, i / Nk will\n increase by 1. We use a counter iNk to keep track of this.\n */\n\n // go through the rounds expanding the key\n var temp, iNk = 1;\n var Nk = w.length;\n var Nr1 = Nk + 6 + 1;\n var end = Nb * Nr1;\n for(var i = Nk; i < end; ++i) {\n temp = w[i - 1];\n if(i % Nk === 0) {\n // temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk]\n temp =\n sbox[temp >>> 16 & 255] << 24 ^\n sbox[temp >>> 8 & 255] << 16 ^\n sbox[temp & 255] << 8 ^\n sbox[temp >>> 24] ^ (rcon[iNk] << 24);\n iNk++;\n } else if(Nk > 6 && (i % Nk === 4)) {\n // temp = SubWord(temp)\n temp =\n sbox[temp >>> 24] << 24 ^\n sbox[temp >>> 16 & 255] << 16 ^\n sbox[temp >>> 8 & 255] << 8 ^\n sbox[temp & 255];\n }\n w[i] = w[i - Nk] ^ temp;\n }\n\n /* When we are updating a cipher block we always use the code path for\n encryption whether we are decrypting or not (to shorten code and\n simplify the generation of look up tables). However, because there\n are differences in the decryption algorithm, other than just swapping\n in different look up tables, we must transform our key schedule to\n account for these changes:\n\n 1. The decryption algorithm gets its key rounds in reverse order.\n 2. The decryption algorithm adds the round key before mixing columns\n instead of afterwards.\n\n We don't need to modify our key schedule to handle the first case,\n we can just traverse the key schedule in reverse order when decrypting.\n\n The second case requires a little work.\n\n The tables we built for performing rounds will take an input and then\n perform SubBytes() and MixColumns() or, for the decrypt version,\n InvSubBytes() and InvMixColumns(). But the decrypt algorithm requires\n us to AddRoundKey() before InvMixColumns(). This means we'll need to\n apply some transformations to the round key to inverse-mix its columns\n so they'll be correct for moving AddRoundKey() to after the state has\n had its columns inverse-mixed.\n\n To inverse-mix the columns of the state when we're decrypting we use a\n lookup table that will apply InvSubBytes() and InvMixColumns() at the\n same time. However, the round key's bytes are not inverse-substituted\n in the decryption algorithm. To get around this problem, we can first\n substitute the bytes in the round key so that when we apply the\n transformation via the InvSubBytes()+InvMixColumns() table, it will\n undo our substitution leaving us with the original value that we\n want -- and then inverse-mix that value.\n\n This change will correctly alter our key schedule so that we can XOR\n each round key with our already transformed decryption state. This\n allows us to use the same code path as the encryption algorithm.\n\n We make one more change to the decryption key. Since the decryption\n algorithm runs in reverse from the encryption algorithm, we reverse\n the order of the round keys to avoid having to iterate over the key\n schedule backwards when running the encryption algorithm later in\n decryption mode. In addition to reversing the order of the round keys,\n we also swap each round key's 2nd and 4th rows. See the comments\n section where rounds are performed for more details about why this is\n done. These changes are done inline with the other substitution\n described above.\n */\n if(decrypt) {\n var tmp;\n var m0 = imix[0];\n var m1 = imix[1];\n var m2 = imix[2];\n var m3 = imix[3];\n var wnew = w.slice(0);\n end = w.length;\n for(var i = 0, wi = end - Nb; i < end; i += Nb, wi -= Nb) {\n // do not sub the first or last round key (round keys are Nb\n // words) as no column mixing is performed before they are added,\n // but do change the key order\n if(i === 0 || i === (end - Nb)) {\n wnew[i] = w[wi];\n wnew[i + 1] = w[wi + 3];\n wnew[i + 2] = w[wi + 2];\n wnew[i + 3] = w[wi + 1];\n } else {\n // substitute each round key byte because the inverse-mix\n // table will inverse-substitute it (effectively cancel the\n // substitution because round key bytes aren't sub'd in\n // decryption mode) and swap indexes 3 and 1\n for(var n = 0; n < Nb; ++n) {\n tmp = w[wi + n];\n wnew[i + (3&-n)] =\n m0[sbox[tmp >>> 24]] ^\n m1[sbox[tmp >>> 16 & 255]] ^\n m2[sbox[tmp >>> 8 & 255]] ^\n m3[sbox[tmp & 255]];\n }\n }\n }\n w = wnew;\n }\n\n return w;\n}\n\n/**\n * Updates a single block (16 bytes) using AES. The update will either\n * encrypt or decrypt the block.\n *\n * @param w the key schedule.\n * @param input the input block (an array of 32-bit words).\n * @param output the updated output block.\n * @param decrypt true to decrypt the block, false to encrypt it.\n */\nfunction _updateBlock(w, input, output, decrypt) {\n /*\n Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])\n begin\n byte state[4,Nb]\n state = in\n AddRoundKey(state, w[0, Nb-1])\n for round = 1 step 1 to Nr-1\n SubBytes(state)\n ShiftRows(state)\n MixColumns(state)\n AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])\n end for\n SubBytes(state)\n ShiftRows(state)\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n out = state\n end\n\n InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])\n begin\n byte state[4,Nb]\n state = in\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n for round = Nr-1 step -1 downto 1\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])\n InvMixColumns(state)\n end for\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[0, Nb-1])\n out = state\n end\n */\n\n // Encrypt: AddRoundKey(state, w[0, Nb-1])\n // Decrypt: AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n var Nr = w.length / 4 - 1;\n var m0, m1, m2, m3, sub;\n if(decrypt) {\n m0 = imix[0];\n m1 = imix[1];\n m2 = imix[2];\n m3 = imix[3];\n sub = isbox;\n } else {\n m0 = mix[0];\n m1 = mix[1];\n m2 = mix[2];\n m3 = mix[3];\n sub = sbox;\n }\n var a, b, c, d, a2, b2, c2;\n a = input[0] ^ w[0];\n b = input[decrypt ? 3 : 1] ^ w[1];\n c = input[2] ^ w[2];\n d = input[decrypt ? 1 : 3] ^ w[3];\n var i = 3;\n\n /* In order to share code we follow the encryption algorithm when both\n encrypting and decrypting. To account for the changes required in the\n decryption algorithm, we use different lookup tables when decrypting\n and use a modified key schedule to account for the difference in the\n order of transformations applied when performing rounds. We also get\n key rounds in reverse order (relative to encryption). */\n for(var round = 1; round < Nr; ++round) {\n /* As described above, we'll be using table lookups to perform the\n column mixing. Each column is stored as a word in the state (the\n array 'input' has one column as a word at each index). In order to\n mix a column, we perform these transformations on each row in c,\n which is 1 byte in each word. The new column for c0 is c'0:\n\n m0 m1 m2 m3\n r0,c'0 = 2*r0,c0 + 3*r1,c0 + 1*r2,c0 + 1*r3,c0\n r1,c'0 = 1*r0,c0 + 2*r1,c0 + 3*r2,c0 + 1*r3,c0\n r2,c'0 = 1*r0,c0 + 1*r1,c0 + 2*r2,c0 + 3*r3,c0\n r3,c'0 = 3*r0,c0 + 1*r1,c0 + 1*r2,c0 + 2*r3,c0\n\n So using mix tables where c0 is a word with r0 being its upper\n 8 bits and r3 being its lower 8 bits:\n\n m0[c0 >> 24] will yield this word: [2*r0,1*r0,1*r0,3*r0]\n ...\n m3[c0 & 255] will yield this word: [1*r3,1*r3,3*r3,2*r3]\n\n Therefore to mix the columns in each word in the state we\n do the following (& 255 omitted for brevity):\n c'0,r0 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r1 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r2 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r3 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n\n However, before mixing, the algorithm requires us to perform\n ShiftRows(). The ShiftRows() transformation cyclically shifts the\n last 3 rows of the state over different offsets. The first row\n (r = 0) is not shifted.\n\n s'_r,c = s_r,(c + shift(r, Nb) mod Nb\n for 0 < r < 4 and 0 <= c < Nb and\n shift(1, 4) = 1\n shift(2, 4) = 2\n shift(3, 4) = 3.\n\n This causes the first byte in r = 1 to be moved to the end of\n the row, the first 2 bytes in r = 2 to be moved to the end of\n the row, the first 3 bytes in r = 3 to be moved to the end of\n the row:\n\n r1: [c0 c1 c2 c3] => [c1 c2 c3 c0]\n r2: [c0 c1 c2 c3] [c2 c3 c0 c1]\n r3: [c0 c1 c2 c3] [c3 c0 c1 c2]\n\n We can make these substitutions inline with our column mixing to\n generate an updated set of equations to produce each word in the\n state (note the columns have changed positions):\n\n c0 c1 c2 c3 => c0 c1 c2 c3\n c0 c1 c2 c3 c1 c2 c3 c0 (cycled 1 byte)\n c0 c1 c2 c3 c2 c3 c0 c1 (cycled 2 bytes)\n c0 c1 c2 c3 c3 c0 c1 c2 (cycled 3 bytes)\n\n Therefore:\n\n c'0 = 2*r0,c0 + 3*r1,c1 + 1*r2,c2 + 1*r3,c3\n c'0 = 1*r0,c0 + 2*r1,c1 + 3*r2,c2 + 1*r3,c3\n c'0 = 1*r0,c0 + 1*r1,c1 + 2*r2,c2 + 3*r3,c3\n c'0 = 3*r0,c0 + 1*r1,c1 + 1*r2,c2 + 2*r3,c3\n\n c'1 = 2*r0,c1 + 3*r1,c2 + 1*r2,c3 + 1*r3,c0\n c'1 = 1*r0,c1 + 2*r1,c2 + 3*r2,c3 + 1*r3,c0\n c'1 = 1*r0,c1 + 1*r1,c2 + 2*r2,c3 + 3*r3,c0\n c'1 = 3*r0,c1 + 1*r1,c2 + 1*r2,c3 + 2*r3,c0\n\n ... and so forth for c'2 and c'3. The important distinction is\n that the columns are cycling, with c0 being used with the m0\n map when calculating c0, but c1 being used with the m0 map when\n calculating c1 ... and so forth.\n\n When performing the inverse we transform the mirror image and\n skip the bottom row, instead of the top one, and move upwards:\n\n c3 c2 c1 c0 => c0 c3 c2 c1 (cycled 3 bytes) *same as encryption\n c3 c2 c1 c0 c1 c0 c3 c2 (cycled 2 bytes)\n c3 c2 c1 c0 c2 c1 c0 c3 (cycled 1 byte) *same as encryption\n c3 c2 c1 c0 c3 c2 c1 c0\n\n If you compare the resulting matrices for ShiftRows()+MixColumns()\n and for InvShiftRows()+InvMixColumns() the 2nd and 4th columns are\n different (in encrypt mode vs. decrypt mode). So in order to use\n the same code to handle both encryption and decryption, we will\n need to do some mapping.\n\n If in encryption mode we let a=c0, b=c1, c=c2, d=c3, and r be\n a row number in the state, then the resulting matrix in encryption\n mode for applying the above transformations would be:\n\n r1: a b c d\n r2: b c d a\n r3: c d a b\n r4: d a b c\n\n If we did the same in decryption mode we would get:\n\n r1: a d c b\n r2: b a d c\n r3: c b a d\n r4: d c b a\n\n If instead we swap d and b (set b=c3 and d=c1), then we get:\n\n r1: a b c d\n r2: d a b c\n r3: c d a b\n r4: b c d a\n\n Now the 1st and 3rd rows are the same as the encryption matrix. All\n we need to do then to make the mapping exactly the same is to swap\n the 2nd and 4th rows when in decryption mode. To do this without\n having to do it on each iteration, we swapped the 2nd and 4th rows\n in the decryption key schedule. We also have to do the swap above\n when we first pull in the input and when we set the final output. */\n a2 =\n m0[a >>> 24] ^\n m1[b >>> 16 & 255] ^\n m2[c >>> 8 & 255] ^\n m3[d & 255] ^ w[++i];\n b2 =\n m0[b >>> 24] ^\n m1[c >>> 16 & 255] ^\n m2[d >>> 8 & 255] ^\n m3[a & 255] ^ w[++i];\n c2 =\n m0[c >>> 24] ^\n m1[d >>> 16 & 255] ^\n m2[a >>> 8 & 255] ^\n m3[b & 255] ^ w[++i];\n d =\n m0[d >>> 24] ^\n m1[a >>> 16 & 255] ^\n m2[b >>> 8 & 255] ^\n m3[c & 255] ^ w[++i];\n a = a2;\n b = b2;\n c = c2;\n }\n\n /*\n Encrypt:\n SubBytes(state)\n ShiftRows(state)\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n\n Decrypt:\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[0, Nb-1])\n */\n // Note: rows are shifted inline\n output[0] =\n (sub[a >>> 24] << 24) ^\n (sub[b >>> 16 & 255] << 16) ^\n (sub[c >>> 8 & 255] << 8) ^\n (sub[d & 255]) ^ w[++i];\n output[decrypt ? 3 : 1] =\n (sub[b >>> 24] << 24) ^\n (sub[c >>> 16 & 255] << 16) ^\n (sub[d >>> 8 & 255] << 8) ^\n (sub[a & 255]) ^ w[++i];\n output[2] =\n (sub[c >>> 24] << 24) ^\n (sub[d >>> 16 & 255] << 16) ^\n (sub[a >>> 8 & 255] << 8) ^\n (sub[b & 255]) ^ w[++i];\n output[decrypt ? 1 : 3] =\n (sub[d >>> 24] << 24) ^\n (sub[a >>> 16 & 255] << 16) ^\n (sub[b >>> 8 & 255] << 8) ^\n (sub[c & 255]) ^ w[++i];\n}\n\n/**\n * Deprecated. Instead, use:\n *\n * forge.cipher.createCipher('AES-', key);\n * forge.cipher.createDecipher('AES-', key);\n *\n * Creates a deprecated AES cipher object. This object's mode will default to\n * CBC (cipher-block-chaining).\n *\n * The key and iv may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param options the options to use.\n * key the symmetric key to use.\n * output the buffer to write to.\n * decrypt true for decryption, false for encryption.\n * mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nfunction _createCipher(options) {\n options = options || {};\n var mode = (options.mode || 'CBC').toUpperCase();\n var algorithm = 'AES-' + mode;\n\n var cipher;\n if(options.decrypt) {\n cipher = forge.cipher.createDecipher(algorithm, options.key);\n } else {\n cipher = forge.cipher.createCipher(algorithm, options.key);\n }\n\n // backwards compatible start API\n var start = cipher.start;\n cipher.start = function(iv, options) {\n // backwards compatibility: support second arg as output buffer\n var output = null;\n if(options instanceof forge.util.ByteBuffer) {\n output = options;\n options = {};\n }\n options = options || {};\n options.output = output;\n options.iv = iv;\n start.call(cipher, options);\n };\n\n return cipher;\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\nvar cid = require('multiformats/cid');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nasync function* normaliseInput(input) {\n if (input === null || input === undefined) {\n throw errCode__default[\"default\"](new Error(`Unexpected input: ${ input }`), 'ERR_UNEXPECTED_INPUT');\n }\n const cid$1 = cid.CID.asCID(input);\n if (cid$1) {\n yield toPin({ cid: cid$1 });\n return;\n }\n if (input instanceof String || typeof input === 'string') {\n yield toPin({ path: input });\n return;\n }\n if (input.cid != null || input.path != null) {\n return yield toPin(input);\n }\n if (Symbol.iterator in input) {\n const iterator = input[Symbol.iterator]();\n const first = iterator.next();\n if (first.done)\n return iterator;\n if (cid.CID.asCID(first.value) || first.value instanceof String || typeof first.value === 'string') {\n yield toPin({ cid: first.value });\n for (const cid of iterator) {\n yield toPin({ cid });\n }\n return;\n }\n if (first.value.cid != null || first.value.path != null) {\n yield toPin(first.value);\n for (const obj of iterator) {\n yield toPin(obj);\n }\n return;\n }\n throw errCode__default[\"default\"](new Error('Unexpected input: ' + typeof input), 'ERR_UNEXPECTED_INPUT');\n }\n if (Symbol.asyncIterator in input) {\n const iterator = input[Symbol.asyncIterator]();\n const first = await iterator.next();\n if (first.done)\n return iterator;\n if (cid.CID.asCID(first.value) || first.value instanceof String || typeof first.value === 'string') {\n yield toPin({ cid: first.value });\n for await (const cid of iterator) {\n yield toPin({ cid });\n }\n return;\n }\n if (first.value.cid != null || first.value.path != null) {\n yield toPin(first.value);\n for await (const obj of iterator) {\n yield toPin(obj);\n }\n return;\n }\n throw errCode__default[\"default\"](new Error('Unexpected input: ' + typeof input), 'ERR_UNEXPECTED_INPUT');\n }\n throw errCode__default[\"default\"](new Error('Unexpected input: ' + typeof input), 'ERR_UNEXPECTED_INPUT');\n}\nfunction toPin(input) {\n const path = input.cid || `${ input.path }`;\n if (!path) {\n throw errCode__default[\"default\"](new Error('Unexpected input: Please path either a CID or an IPFS path'), 'ERR_UNEXPECTED_INPUT');\n }\n const pin = {\n path,\n recursive: input.recursive !== false\n };\n if (input.metadata != null) {\n pin.metadata = input.metadata;\n }\n return pin;\n}\n\nexports.normaliseInput = normaliseInput;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst PinTypes = {\n direct: 'direct',\n recursive: 'recursive',\n indirect: 'indirect',\n all: 'all'\n};\n\nexports.PinTypes = PinTypes;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar key = require('./key.js');\n\n\n\nexports.Key = key.Key;\n","'use strict'\n\n/**\n * Turns a browser readable stream into an async iterable. Async iteration over\n * returned iterable will lock give stream, preventing any other consumer from\n * acquiring a reader. The lock will be released if iteration loop is broken. To\n * prevent stream cancelling optional `{ preventCancel: true }` could be passed\n * as a second argument.\n * @template T\n * @param {ReadableStream} stream\n * @param {Object} [options]\n * @param {boolean} [options.preventCancel=boolean]\n * @returns {AsyncIterable}\n */\nasync function * browserReadableStreamToIt (stream, options = {}) {\n const reader = stream.getReader()\n\n try {\n while (true) {\n const result = await reader.read()\n\n if (result.done) {\n return\n }\n\n yield result.value\n }\n } finally {\n if (options.preventCancel !== true) {\n reader.cancel()\n }\n\n reader.releaseLock()\n }\n}\n\nmodule.exports = browserReadableStreamToIt\n","'use strict'\n\n/**\n * @template T\n * @typedef {Object} Peek\n * @property {() => IteratorResult} peek\n */\n\n/**\n * @template T\n * @typedef {Object} AsyncPeek\n * @property {() => Promise>} peek\n */\n\n/**\n * @template T\n * @typedef {Object} Push\n * @property {(value:T) => void} push\n */\n\n/**\n * @template T\n * @typedef {Iterable & Peek & Push & Iterator} Peekable\n */\n\n/**\n * @template T\n * @typedef {AsyncIterable & AsyncPeek & Push & AsyncIterator} AsyncPeekable\n */\n\n/**\n * @template {Iterable | AsyncIterable} I\n * @param {I} iterable\n * @returns {I extends Iterable\n * ? Peekable\n * : I extends AsyncIterable\n * ? AsyncPeekable\n * : never\n * }\n */\nfunction peekableIterator (iterable) {\n // @ts-ignore\n const [iterator, symbol] = iterable[Symbol.asyncIterator]\n // @ts-ignore\n ? [iterable[Symbol.asyncIterator](), Symbol.asyncIterator]\n // @ts-ignore\n : [iterable[Symbol.iterator](), Symbol.iterator]\n\n /** @type {any[]} */\n const queue = []\n\n // @ts-ignore\n return {\n peek: () => {\n return iterator.next()\n },\n push: (value) => {\n queue.push(value)\n },\n next: () => {\n if (queue.length) {\n return {\n done: false,\n value: queue.shift()\n }\n }\n\n return iterator.next()\n },\n [symbol] () {\n return this\n }\n }\n}\n\nmodule.exports = peekableIterator\n","'use strict';\n\nvar cid = require('multiformats/cid');\nvar dagPb = require('@ipld/dag-pb');\nvar sha2 = require('multiformats/hashes/sha2');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () {\n return e[k];\n }\n });\n }\n });\n }\n n['default'] = e;\n return Object.freeze(n);\n}\n\nvar dagPb__namespace = /*#__PURE__*/_interopNamespace(dagPb);\n\nconst persist = async (buffer, blockstore, options) => {\n if (!options.codec) {\n options.codec = dagPb__namespace;\n }\n if (!options.hasher) {\n options.hasher = sha2.sha256;\n }\n if (options.cidVersion === undefined) {\n options.cidVersion = 1;\n }\n if (options.codec === dagPb__namespace && options.hasher !== sha2.sha256) {\n options.cidVersion = 1;\n }\n const multihash = await options.hasher.digest(buffer);\n const cid$1 = cid.CID.create(options.cidVersion, options.codec.code, multihash);\n if (!options.onlyHash) {\n await blockstore.put(cid$1, buffer, { signal: options.signal });\n }\n return cid$1;\n};\n\nmodule.exports = persist;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar ipfsUnixfsExporter = require('ipfs-unixfs-exporter');\nvar debug = require('debug');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\n\nconst log = debug__default[\"default\"]('ipfs:mfs:utils:to-trail');\nasync function toTrail(context, path) {\n log(`Creating trail for path ${ path }`);\n const output = [];\n for await (const fsEntry of ipfsUnixfsExporter.walkPath(path, context.repo.blocks)) {\n output.push({\n name: fsEntry.name,\n cid: fsEntry.cid,\n size: fsEntry.size,\n type: fsEntry.type\n });\n }\n return output;\n}\n\nexports.toTrail = toTrail;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar dagPB = require('@ipld/dag-pb');\nvar cid = require('multiformats/cid');\nvar sha2 = require('multiformats/hashes/sha2');\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar dagPB__namespace = /*#__PURE__*/_interopNamespace(dagPB);\n\nfunction createPut({repo, preload}) {\n async function put(obj, options = {}) {\n const release = await repo.gcLock.readLock();\n try {\n const buf = dagPB__namespace.encode(obj);\n const hash = await sha2.sha256.digest(buf);\n const cid$1 = cid.CID.createV1(dagPB__namespace.code, hash);\n await repo.blocks.put(cid$1, buf, { signal: options.signal });\n if (options.preload !== false) {\n preload(cid$1);\n }\n if (options.pin) {\n await repo.pins.pinRecursively(cid$1, { signal: options.signal });\n }\n return cid$1;\n } finally {\n release();\n }\n }\n return withTimeoutOption.withTimeoutOption(put);\n}\n\nexports.createPut = createPut;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass LockExistsError extends Error {\n constructor(message) {\n super(message);\n this.name = 'LockExistsError';\n this.code = LockExistsError.code;\n }\n}\nLockExistsError.code = 'ERR_LOCK_EXISTS';\nclass NotFoundError extends Error {\n constructor(message) {\n super(message);\n this.name = 'NotFoundError';\n this.code = NotFoundError.code;\n }\n}\nNotFoundError.code = 'ERR_NOT_FOUND';\nclass InvalidRepoVersionError extends Error {\n constructor(message) {\n super(message);\n this.name = 'InvalidRepoVersionError';\n this.code = InvalidRepoVersionError.code;\n }\n}\nInvalidRepoVersionError.code = 'ERR_INVALID_REPO_VERSION';\nconst ERR_REPO_NOT_INITIALIZED = 'ERR_REPO_NOT_INITIALIZED';\nconst ERR_REPO_ALREADY_OPEN = 'ERR_REPO_ALREADY_OPEN';\nconst ERR_REPO_ALREADY_CLOSED = 'ERR_REPO_ALREADY_CLOSED';\n\nexports.ERR_REPO_ALREADY_CLOSED = ERR_REPO_ALREADY_CLOSED;\nexports.ERR_REPO_ALREADY_OPEN = ERR_REPO_ALREADY_OPEN;\nexports.ERR_REPO_NOT_INITIALIZED = ERR_REPO_NOT_INITIALIZED;\nexports.InvalidRepoVersionError = InvalidRepoVersionError;\nexports.LockExistsError = LockExistsError;\nexports.NotFoundError = NotFoundError;\n","'use strict'\n\nvar queueTick = require('queue-tick')\n\nexports.fromCallback = function (callback, symbol) {\n if (callback === undefined) {\n var promise = new Promise(function (resolve, reject) {\n callback = function (err, res) {\n if (err) reject(err)\n else resolve(res)\n }\n })\n\n callback[symbol !== undefined ? symbol : 'promise'] = promise\n } else if (typeof callback !== 'function') {\n throw new TypeError('Callback must be a function')\n }\n\n return callback\n}\n\nexports.fromPromise = function (promise, callback) {\n if (callback === undefined) return promise\n\n promise\n .then(function (res) { queueTick(() => callback(null, res)) })\n .catch(function (err) { queueTick(() => callback(err)) })\n}\n","'use strict'\n\nconst Reader = require('it-reader')\nconst Writer = require('it-pushable')\nconst defer = require('p-defer')\n\n// Convert a duplex stream into a reader and writer and rest stream\nmodule.exports = stream => {\n const writer = Writer() // Write bytes on demand to the sink\n const reader = Reader(stream.source) // Read bytes on demand from the source\n\n // Waits for a source to be passed to the rest stream's sink\n const sourcePromise = defer()\n let sinkErr\n\n const sinkPromise = stream.sink((async function * () {\n yield * writer\n const source = await sourcePromise.promise\n yield * source\n })())\n\n sinkPromise.catch(err => {\n sinkErr = err\n })\n\n const rest = {\n sink: source => {\n if (sinkErr) {\n return Promise.reject(sinkErr)\n }\n\n sourcePromise.resolve(source)\n return sinkPromise\n },\n source: reader\n }\n\n return {\n reader,\n writer,\n stream: rest,\n rest: () => writer.end(),\n write: writer.push,\n read: async () => {\n return (await reader.next()).value\n }\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.logCipherState = exports.logRemoteEphemeralKey = exports.logRemoteStaticKey = exports.logLocalEphemeralKeys = exports.logLocalStaticKeys = exports.logger = void 0;\nconst debug_1 = __importDefault(require(\"debug\"));\nconst constants_1 = require(\"./constants\");\nexports.logger = debug_1.default('libp2p:noise');\nlet keyLogger;\nif (constants_1.DUMP_SESSION_KEYS) {\n keyLogger = exports.logger;\n}\nelse {\n keyLogger = () => { };\n}\nfunction logLocalStaticKeys(s) {\n keyLogger(`LOCAL_STATIC_PUBLIC_KEY ${s.publicKey.toString('hex')}`);\n keyLogger(`LOCAL_STATIC_PRIVATE_KEY ${s.privateKey.toString('hex')}`);\n}\nexports.logLocalStaticKeys = logLocalStaticKeys;\nfunction logLocalEphemeralKeys(e) {\n if (e) {\n keyLogger(`LOCAL_PUBLIC_EPHEMERAL_KEY ${e.publicKey.toString('hex')}`);\n keyLogger(`LOCAL_PRIVATE_EPHEMERAL_KEY ${e.privateKey.toString('hex')}`);\n }\n else {\n keyLogger('Missing local ephemeral keys.');\n }\n}\nexports.logLocalEphemeralKeys = logLocalEphemeralKeys;\nfunction logRemoteStaticKey(rs) {\n keyLogger(`REMOTE_STATIC_PUBLIC_KEY ${rs.toString('hex')}`);\n}\nexports.logRemoteStaticKey = logRemoteStaticKey;\nfunction logRemoteEphemeralKey(re) {\n keyLogger(`REMOTE_EPHEMERAL_PUBLIC_KEY ${re.toString('hex')}`);\n}\nexports.logRemoteEphemeralKey = logRemoteEphemeralKey;\nfunction logCipherState(session) {\n if (session.cs1 && session.cs2) {\n keyLogger(`CIPHER_STATE_1 ${session.cs1.n} ${session.cs1.k.toString('hex')}`);\n keyLogger(`CIPHER_STATE_2 ${session.cs2.n} ${session.cs2.k.toString('hex')}`);\n }\n else {\n keyLogger('Missing cipher state.');\n }\n}\nexports.logCipherState = logCipherState;\n//# sourceMappingURL=logger.js.map","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-circuit\"] || ($protobuf.roots[\"libp2p-circuit\"] = {});\n\n$root.CircuitRelay = (function() {\n\n /**\n * Properties of a CircuitRelay.\n * @exports ICircuitRelay\n * @interface ICircuitRelay\n * @property {CircuitRelay.Type|null} [type] CircuitRelay type\n * @property {CircuitRelay.IPeer|null} [srcPeer] CircuitRelay srcPeer\n * @property {CircuitRelay.IPeer|null} [dstPeer] CircuitRelay dstPeer\n * @property {CircuitRelay.Status|null} [code] CircuitRelay code\n */\n\n /**\n * Constructs a new CircuitRelay.\n * @exports CircuitRelay\n * @classdesc Represents a CircuitRelay.\n * @implements ICircuitRelay\n * @constructor\n * @param {ICircuitRelay=} [p] Properties to set\n */\n function CircuitRelay(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * CircuitRelay type.\n * @member {CircuitRelay.Type} type\n * @memberof CircuitRelay\n * @instance\n */\n CircuitRelay.prototype.type = 1;\n\n /**\n * CircuitRelay srcPeer.\n * @member {CircuitRelay.IPeer|null|undefined} srcPeer\n * @memberof CircuitRelay\n * @instance\n */\n CircuitRelay.prototype.srcPeer = null;\n\n /**\n * CircuitRelay dstPeer.\n * @member {CircuitRelay.IPeer|null|undefined} dstPeer\n * @memberof CircuitRelay\n * @instance\n */\n CircuitRelay.prototype.dstPeer = null;\n\n /**\n * CircuitRelay code.\n * @member {CircuitRelay.Status} code\n * @memberof CircuitRelay\n * @instance\n */\n CircuitRelay.prototype.code = 100;\n\n /**\n * Encodes the specified CircuitRelay message. Does not implicitly {@link CircuitRelay.verify|verify} messages.\n * @function encode\n * @memberof CircuitRelay\n * @static\n * @param {ICircuitRelay} m CircuitRelay message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n CircuitRelay.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.type != null && Object.hasOwnProperty.call(m, \"type\"))\n w.uint32(8).int32(m.type);\n if (m.srcPeer != null && Object.hasOwnProperty.call(m, \"srcPeer\"))\n $root.CircuitRelay.Peer.encode(m.srcPeer, w.uint32(18).fork()).ldelim();\n if (m.dstPeer != null && Object.hasOwnProperty.call(m, \"dstPeer\"))\n $root.CircuitRelay.Peer.encode(m.dstPeer, w.uint32(26).fork()).ldelim();\n if (m.code != null && Object.hasOwnProperty.call(m, \"code\"))\n w.uint32(32).int32(m.code);\n return w;\n };\n\n /**\n * Decodes a CircuitRelay message from the specified reader or buffer.\n * @function decode\n * @memberof CircuitRelay\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {CircuitRelay} CircuitRelay\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n CircuitRelay.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.CircuitRelay();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.type = r.int32();\n break;\n case 2:\n m.srcPeer = $root.CircuitRelay.Peer.decode(r, r.uint32());\n break;\n case 3:\n m.dstPeer = $root.CircuitRelay.Peer.decode(r, r.uint32());\n break;\n case 4:\n m.code = r.int32();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a CircuitRelay message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof CircuitRelay\n * @static\n * @param {Object.} d Plain object\n * @returns {CircuitRelay} CircuitRelay\n */\n CircuitRelay.fromObject = function fromObject(d) {\n if (d instanceof $root.CircuitRelay)\n return d;\n var m = new $root.CircuitRelay();\n switch (d.type) {\n case \"HOP\":\n case 1:\n m.type = 1;\n break;\n case \"STOP\":\n case 2:\n m.type = 2;\n break;\n case \"STATUS\":\n case 3:\n m.type = 3;\n break;\n case \"CAN_HOP\":\n case 4:\n m.type = 4;\n break;\n }\n if (d.srcPeer != null) {\n if (typeof d.srcPeer !== \"object\")\n throw TypeError(\".CircuitRelay.srcPeer: object expected\");\n m.srcPeer = $root.CircuitRelay.Peer.fromObject(d.srcPeer);\n }\n if (d.dstPeer != null) {\n if (typeof d.dstPeer !== \"object\")\n throw TypeError(\".CircuitRelay.dstPeer: object expected\");\n m.dstPeer = $root.CircuitRelay.Peer.fromObject(d.dstPeer);\n }\n switch (d.code) {\n case \"SUCCESS\":\n case 100:\n m.code = 100;\n break;\n case \"HOP_SRC_ADDR_TOO_LONG\":\n case 220:\n m.code = 220;\n break;\n case \"HOP_DST_ADDR_TOO_LONG\":\n case 221:\n m.code = 221;\n break;\n case \"HOP_SRC_MULTIADDR_INVALID\":\n case 250:\n m.code = 250;\n break;\n case \"HOP_DST_MULTIADDR_INVALID\":\n case 251:\n m.code = 251;\n break;\n case \"HOP_NO_CONN_TO_DST\":\n case 260:\n m.code = 260;\n break;\n case \"HOP_CANT_DIAL_DST\":\n case 261:\n m.code = 261;\n break;\n case \"HOP_CANT_OPEN_DST_STREAM\":\n case 262:\n m.code = 262;\n break;\n case \"HOP_CANT_SPEAK_RELAY\":\n case 270:\n m.code = 270;\n break;\n case \"HOP_CANT_RELAY_TO_SELF\":\n case 280:\n m.code = 280;\n break;\n case \"STOP_SRC_ADDR_TOO_LONG\":\n case 320:\n m.code = 320;\n break;\n case \"STOP_DST_ADDR_TOO_LONG\":\n case 321:\n m.code = 321;\n break;\n case \"STOP_SRC_MULTIADDR_INVALID\":\n case 350:\n m.code = 350;\n break;\n case \"STOP_DST_MULTIADDR_INVALID\":\n case 351:\n m.code = 351;\n break;\n case \"STOP_RELAY_REFUSED\":\n case 390:\n m.code = 390;\n break;\n case \"MALFORMED_MESSAGE\":\n case 400:\n m.code = 400;\n break;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a CircuitRelay message. Also converts values to other types if specified.\n * @function toObject\n * @memberof CircuitRelay\n * @static\n * @param {CircuitRelay} m CircuitRelay\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n CircuitRelay.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.type = o.enums === String ? \"HOP\" : 1;\n d.srcPeer = null;\n d.dstPeer = null;\n d.code = o.enums === String ? \"SUCCESS\" : 100;\n }\n if (m.type != null && m.hasOwnProperty(\"type\")) {\n d.type = o.enums === String ? $root.CircuitRelay.Type[m.type] : m.type;\n }\n if (m.srcPeer != null && m.hasOwnProperty(\"srcPeer\")) {\n d.srcPeer = $root.CircuitRelay.Peer.toObject(m.srcPeer, o);\n }\n if (m.dstPeer != null && m.hasOwnProperty(\"dstPeer\")) {\n d.dstPeer = $root.CircuitRelay.Peer.toObject(m.dstPeer, o);\n }\n if (m.code != null && m.hasOwnProperty(\"code\")) {\n d.code = o.enums === String ? $root.CircuitRelay.Status[m.code] : m.code;\n }\n return d;\n };\n\n /**\n * Converts this CircuitRelay to JSON.\n * @function toJSON\n * @memberof CircuitRelay\n * @instance\n * @returns {Object.} JSON object\n */\n CircuitRelay.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Status enum.\n * @name CircuitRelay.Status\n * @enum {number}\n * @property {number} SUCCESS=100 SUCCESS value\n * @property {number} HOP_SRC_ADDR_TOO_LONG=220 HOP_SRC_ADDR_TOO_LONG value\n * @property {number} HOP_DST_ADDR_TOO_LONG=221 HOP_DST_ADDR_TOO_LONG value\n * @property {number} HOP_SRC_MULTIADDR_INVALID=250 HOP_SRC_MULTIADDR_INVALID value\n * @property {number} HOP_DST_MULTIADDR_INVALID=251 HOP_DST_MULTIADDR_INVALID value\n * @property {number} HOP_NO_CONN_TO_DST=260 HOP_NO_CONN_TO_DST value\n * @property {number} HOP_CANT_DIAL_DST=261 HOP_CANT_DIAL_DST value\n * @property {number} HOP_CANT_OPEN_DST_STREAM=262 HOP_CANT_OPEN_DST_STREAM value\n * @property {number} HOP_CANT_SPEAK_RELAY=270 HOP_CANT_SPEAK_RELAY value\n * @property {number} HOP_CANT_RELAY_TO_SELF=280 HOP_CANT_RELAY_TO_SELF value\n * @property {number} STOP_SRC_ADDR_TOO_LONG=320 STOP_SRC_ADDR_TOO_LONG value\n * @property {number} STOP_DST_ADDR_TOO_LONG=321 STOP_DST_ADDR_TOO_LONG value\n * @property {number} STOP_SRC_MULTIADDR_INVALID=350 STOP_SRC_MULTIADDR_INVALID value\n * @property {number} STOP_DST_MULTIADDR_INVALID=351 STOP_DST_MULTIADDR_INVALID value\n * @property {number} STOP_RELAY_REFUSED=390 STOP_RELAY_REFUSED value\n * @property {number} MALFORMED_MESSAGE=400 MALFORMED_MESSAGE value\n */\n CircuitRelay.Status = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[100] = \"SUCCESS\"] = 100;\n values[valuesById[220] = \"HOP_SRC_ADDR_TOO_LONG\"] = 220;\n values[valuesById[221] = \"HOP_DST_ADDR_TOO_LONG\"] = 221;\n values[valuesById[250] = \"HOP_SRC_MULTIADDR_INVALID\"] = 250;\n values[valuesById[251] = \"HOP_DST_MULTIADDR_INVALID\"] = 251;\n values[valuesById[260] = \"HOP_NO_CONN_TO_DST\"] = 260;\n values[valuesById[261] = \"HOP_CANT_DIAL_DST\"] = 261;\n values[valuesById[262] = \"HOP_CANT_OPEN_DST_STREAM\"] = 262;\n values[valuesById[270] = \"HOP_CANT_SPEAK_RELAY\"] = 270;\n values[valuesById[280] = \"HOP_CANT_RELAY_TO_SELF\"] = 280;\n values[valuesById[320] = \"STOP_SRC_ADDR_TOO_LONG\"] = 320;\n values[valuesById[321] = \"STOP_DST_ADDR_TOO_LONG\"] = 321;\n values[valuesById[350] = \"STOP_SRC_MULTIADDR_INVALID\"] = 350;\n values[valuesById[351] = \"STOP_DST_MULTIADDR_INVALID\"] = 351;\n values[valuesById[390] = \"STOP_RELAY_REFUSED\"] = 390;\n values[valuesById[400] = \"MALFORMED_MESSAGE\"] = 400;\n return values;\n })();\n\n /**\n * Type enum.\n * @name CircuitRelay.Type\n * @enum {number}\n * @property {number} HOP=1 HOP value\n * @property {number} STOP=2 STOP value\n * @property {number} STATUS=3 STATUS value\n * @property {number} CAN_HOP=4 CAN_HOP value\n */\n CircuitRelay.Type = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"HOP\"] = 1;\n values[valuesById[2] = \"STOP\"] = 2;\n values[valuesById[3] = \"STATUS\"] = 3;\n values[valuesById[4] = \"CAN_HOP\"] = 4;\n return values;\n })();\n\n CircuitRelay.Peer = (function() {\n\n /**\n * Properties of a Peer.\n * @memberof CircuitRelay\n * @interface IPeer\n * @property {Uint8Array} id Peer id\n * @property {Array.|null} [addrs] Peer addrs\n */\n\n /**\n * Constructs a new Peer.\n * @memberof CircuitRelay\n * @classdesc Represents a Peer.\n * @implements IPeer\n * @constructor\n * @param {CircuitRelay.IPeer=} [p] Properties to set\n */\n function Peer(p) {\n this.addrs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Peer id.\n * @member {Uint8Array} id\n * @memberof CircuitRelay.Peer\n * @instance\n */\n Peer.prototype.id = $util.newBuffer([]);\n\n /**\n * Peer addrs.\n * @member {Array.} addrs\n * @memberof CircuitRelay.Peer\n * @instance\n */\n Peer.prototype.addrs = $util.emptyArray;\n\n /**\n * Encodes the specified Peer message. Does not implicitly {@link CircuitRelay.Peer.verify|verify} messages.\n * @function encode\n * @memberof CircuitRelay.Peer\n * @static\n * @param {CircuitRelay.IPeer} m Peer message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Peer.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(10).bytes(m.id);\n if (m.addrs != null && m.addrs.length) {\n for (var i = 0; i < m.addrs.length; ++i)\n w.uint32(18).bytes(m.addrs[i]);\n }\n return w;\n };\n\n /**\n * Decodes a Peer message from the specified reader or buffer.\n * @function decode\n * @memberof CircuitRelay.Peer\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {CircuitRelay.Peer} Peer\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Peer.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.CircuitRelay.Peer();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.id = r.bytes();\n break;\n case 2:\n if (!(m.addrs && m.addrs.length))\n m.addrs = [];\n m.addrs.push(r.bytes());\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"id\"))\n throw $util.ProtocolError(\"missing required 'id'\", { instance: m });\n return m;\n };\n\n /**\n * Creates a Peer message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof CircuitRelay.Peer\n * @static\n * @param {Object.} d Plain object\n * @returns {CircuitRelay.Peer} Peer\n */\n Peer.fromObject = function fromObject(d) {\n if (d instanceof $root.CircuitRelay.Peer)\n return d;\n var m = new $root.CircuitRelay.Peer();\n if (d.id != null) {\n if (typeof d.id === \"string\")\n $util.base64.decode(d.id, m.id = $util.newBuffer($util.base64.length(d.id)), 0);\n else if (d.id.length)\n m.id = d.id;\n }\n if (d.addrs) {\n if (!Array.isArray(d.addrs))\n throw TypeError(\".CircuitRelay.Peer.addrs: array expected\");\n m.addrs = [];\n for (var i = 0; i < d.addrs.length; ++i) {\n if (typeof d.addrs[i] === \"string\")\n $util.base64.decode(d.addrs[i], m.addrs[i] = $util.newBuffer($util.base64.length(d.addrs[i])), 0);\n else if (d.addrs[i].length)\n m.addrs[i] = d.addrs[i];\n }\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Peer message. Also converts values to other types if specified.\n * @function toObject\n * @memberof CircuitRelay.Peer\n * @static\n * @param {CircuitRelay.Peer} m Peer\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n Peer.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.addrs = [];\n }\n if (o.defaults) {\n if (o.bytes === String)\n d.id = \"\";\n else {\n d.id = [];\n if (o.bytes !== Array)\n d.id = $util.newBuffer(d.id);\n }\n }\n if (m.id != null && m.hasOwnProperty(\"id\")) {\n d.id = o.bytes === String ? $util.base64.encode(m.id, 0, m.id.length) : o.bytes === Array ? Array.prototype.slice.call(m.id) : m.id;\n }\n if (m.addrs && m.addrs.length) {\n d.addrs = [];\n for (var j = 0; j < m.addrs.length; ++j) {\n d.addrs[j] = o.bytes === String ? $util.base64.encode(m.addrs[j], 0, m.addrs[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.addrs[j]) : m.addrs[j];\n }\n }\n return d;\n };\n\n /**\n * Converts this Peer to JSON.\n * @function toJSON\n * @memberof CircuitRelay.Peer\n * @instance\n * @returns {Object.} JSON object\n */\n Peer.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Peer;\n })();\n\n return CircuitRelay;\n})();\n\nmodule.exports = $root;\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var ethers = require('ethers');\nvar fs = require('fs');\nconst ProviderEngine = require('web3-provider-engine')\n//const CacheSubprovider = require('web3-provider-engine/subproviders/cache.js')\nconst FixtureSubprovider = require('web3-provider-engine/subproviders/fixture.js')\nconst FilterSubprovider = require('web3-provider-engine/subproviders/filters.js')\nconst HookedWalletSubprovider = require('web3-provider-engine/subproviders/hooked-wallet-ethtx.js')\n// const VmSubprovider = require('web3-provider-engine/subproviders/vm.js')\nconst NonceSubprovider = require('web3-provider-engine/subproviders/nonce-tracker.js')\nconst RpcSubprovider = require('web3-provider-engine/subproviders/rpc.js')\nconst WebSocketSubProvider = require('web3-provider-engine/subproviders/websocket.js')\n\nconst sigUtil = require('eth-sig-util')\n\nmodule.exports = BurnerProvider\n\nlet metaAccount\n\nfunction BurnerProvider(opts = {}){\n var engine;// = new ProviderEngine()\n\n console.log(\"🚛🚛🚛🚛🚛🚛🚛 BurnerProvider 🚛🚛🚛🚛🚛🚛🚛\")\n\n // let them pass in a simple string for the options and use that as infura or whatevs\n if(typeof opts == \"string\"){\n let rpcUrl = opts\n opts = {rpcUrl}\n }\n\n if(opts && opts.provider){\n //console.log(\"Adding optional provider: \",opts.provider)\n //engine.addProvider(opts.provider)\n engine = opts.provider\n //console.log(\"Adding optional provider: \",opts.provider)\n }else{/*engine.addProvider(opts.provider)*/\n engine = new ProviderEngine()\n }\n\n let provider = new ethers.providers.Web3Provider(engine)\n\n\n let privateKeyStorageString = \"metaPrivateKey\"\n if(opts.namespace){\n privateKeyStorageString = privateKeyStorageString+\"_\"+opts.namespace\n }\n\n if(opts&&opts.privateKey){\n //if they passed in a private key, use it to generate an account\n //metaAccount = provider.eth.accounts.privateKeyToAccount(opts.privateKey)\n metaAccount = new ethers.Wallet(opts.privateKey, provider);\n //console.log(\"metaAccount from pk\",metaAccount)\n } else if(typeof localStorage != \"undefined\"&&typeof localStorage.setItem == \"function\"){\n //load private key out of local storage\n let metaPrivateKey = localStorage.getItem(privateKeyStorageString)\n if(metaPrivateKey==\"0\") metaPrivateKey=false;\n if(metaPrivateKey && metaPrivateKey.length!==66) metaPrivateKey=false;\n //if(metaPrivateKey) metaAccount = provider.eth.accounts.privateKeyToAccount(metaPrivateKey)\n if(metaPrivateKey) metaAccount = new ethers.Wallet(metaPrivateKey, provider);\n }else{\n //local storage isn't an option and they didn't pass in a pk attempted to use the filesystem\n try{\n let fsPk = fs.readFileSync(\".pk\").toString()\n if(fsPk){\n metaAccount = new ethers.Wallet(fsPk, provider);\n }\n }catch(e){}\n // if not just generate a temp account in memory for this session\n // (just leave metaAccount false and it will be created in the next block)\n }\n\n if(!metaAccount){\n //generate account either from a provided mnemonic, pk, or random generation\n if(opts.mnemonic){\n const bip39 = require('bip39');\n const hdkey = require('ethereumjs-wallet/hdkey');\n let index = \"0\"\n if(typeof opts.index != \"undefined\"){\n index = opts.index\n }\n const seed = bip39.mnemonicToSeedSync(opts.mnemonic);\n const hdwallet = hdkey.fromMasterSeed(seed);\n const wallet_hdpath = \"m/44'/60'/0'/0/\";\n const wallet = hdwallet.derivePath(wallet_hdpath + index).getWallet();\n const privateKey =\"0x\"+wallet.getPrivateKey().toString(\"hex\")\n //metaAccount = provider.eth.accounts.privateKeyToAccount(privateKey)\n metaAccount = new ethers.Wallet(privateKey, provider);\n }else{\n //metaAccount = provider.eth.accounts.create();\n metaAccount = ethers.Wallet.createRandom()\n }\n //if we needed to generate, save the pk to local storage\n if(typeof localStorage != \"undefined\"&&typeof localStorage.setItem == \"function\"){\n localStorage.setItem(privateKeyStorageString,metaAccount.privateKey)\n }else{\n //if we can't use local storage try saving it to the filesystem\n try{\n fs.writeFileSync(\".pk\",metaAccount.privateKey)\n }catch(e){}\n }\n }\n\n opts.getPrivateKey = (address,cb)=>{\n if(address.toLowerCase()==metaAccount.address.toLowerCase()){\n cb(null,Buffer.from(metaAccount.privateKey.replace(\"0x\",\"\"),'hex'))\n }else{\n cb(\"unknown account\")\n }\n }\n\n opts.getAccounts = (cb)=>{\n //console.log(\"metaAccount\",metaAccount)\n cb(false,[metaAccount.address])\n }\n\n // static results\n engine.addProvider(new FixtureSubprovider({\n web3_clientVersion: 'ProviderEngine/v0.0.0/javascript',\n net_listening: true,\n eth_hashrate: '0x00',\n eth_mining: false,\n eth_syncing: true,\n }))\n\n\n // cache layer // PULLED THANKS TO A HEADS UP FROM GSN! SORRY GUYS!\n //engine.addProvider(new CacheSubprovider())\n\n // filters\n engine.addProvider(new FilterSubprovider())\n\n // pending nonce\n engine.addProvider(new NonceSubprovider())\n\n // vm\n // engine.addProvider(new VmSubprovider())\n\n // id mgmt\n const hookedWalletSubprovider = new HookedWalletSubprovider(opts)\n\n hookedWalletSubprovider.signTypedMessage = function (msgParams, cb) {\n opts.getPrivateKey(msgParams.from, function(err, privateKey) {\n if (err) return cb(err)\n\n if (typeof msgParams.data === 'string') {\n msgParams.data = JSON.parse(msgParams.data);\n }\n\n const serialized = sigUtil.signTypedData_v4(privateKey, msgParams)\n cb(null, serialized)\n })\n }\n engine.addProvider(hookedWalletSubprovider)\n\n\n\n if(opts&&opts.rpcUrl&&opts.rpcUrl.indexOf&&opts.rpcUrl.indexOf(\"wss://\")==0){\n engine.addProvider(new WebSocketSubProvider(opts))\n }else{\n // data source\n engine.addProvider(new RpcSubprovider(opts))\n }\n\n // start polling for blocks\n engine.start()\n\n\n //do this to prevent skipCache: true -- to prevent PollingBlockTracker undefined errors from eth-block-tracker/src/polling.js\n //engine._blockTracker._setSkipCacheFlag = false\n\n return engine\n}\n","import { createContext } from 'react';\nvar LocaleContext = /*#__PURE__*/createContext(undefined);\nexport default LocaleContext;","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","/**\n * Parses an URI\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n var src = str,\n b = str.indexOf('['),\n e = str.indexOf(']');\n\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n\n var m = re.exec(str || ''),\n uri = {},\n i = 14;\n\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n\n return uri;\n};\n\nfunction pathNames(obj, path) {\n var regx = /\\/{2,9}/g,\n names = path.replace(regx, \"/\").split(\"/\");\n\n if (path.substr(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.substr(path.length - 1, 1) == '/') {\n names.splice(names.length - 1, 1);\n }\n\n return names;\n}\n\nfunction queryKey(uri, query) {\n var data = {};\n\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n\n return data;\n}\n","// This icon file is generated automatically.\nvar LoadingOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"0 0 1024 1024\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z\" } }] }, \"name\": \"loading\", \"theme\": \"outlined\" };\nexport default LoadingOutlined;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport LoadingOutlinedSvg from \"@ant-design/icons-svg/es/asn/LoadingOutlined\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar LoadingOutlined = function LoadingOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: LoadingOutlinedSvg\n }));\n};\n\nLoadingOutlined.displayName = 'LoadingOutlined';\nexport default /*#__PURE__*/React.forwardRef(LoadingOutlined);","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERROR_BAD_MAC = exports.EMPTY_UINT_ARRAY = exports.MAX_MSG_LENGTH = exports.MAX_KEY_LENGTH = exports.PREFIXED_KEY_LENGTH = exports.MAC_LENGTH = exports.IV_LENGTH = exports.KEY_LENGTH = exports.PREFIX_LENGTH = exports.RIPEMD160_NODE_ALGO = exports.SHA512_NODE_ALGO = exports.SHA256_NODE_ALGO = exports.HMAC_NODE_ALGO = exports.AES_NODE_ALGO = exports.SHA512_BROWSER_ALGO = exports.SHA256_BROWSER_ALGO = exports.HMAC_BROWSER = exports.HMAC_BROWSER_ALGO = exports.AES_BROWSER_ALGO = exports.HMAC_LENGTH = exports.AES_LENGTH = exports.LENGTH_1024 = exports.LENGTH_512 = exports.LENGTH_256 = exports.LENGTH_128 = exports.LENGTH_64 = exports.LENGTH_32 = exports.LENGTH_16 = exports.LENGTH_1 = exports.LENGTH_0 = exports.VERIFY_OP = exports.SIGN_OP = exports.DECRYPT_OP = exports.ENCRYPT_OP = exports.UTF8_ENC = exports.HEX_ENC = void 0;\nexports.HEX_ENC = 'hex';\nexports.UTF8_ENC = 'utf8';\nexports.ENCRYPT_OP = 'encrypt';\nexports.DECRYPT_OP = 'decrypt';\nexports.SIGN_OP = 'sign';\nexports.VERIFY_OP = 'verify';\nexports.LENGTH_0 = 0;\nexports.LENGTH_1 = 1;\nexports.LENGTH_16 = 16;\nexports.LENGTH_32 = 32;\nexports.LENGTH_64 = 64;\nexports.LENGTH_128 = 128;\nexports.LENGTH_256 = 256;\nexports.LENGTH_512 = 512;\nexports.LENGTH_1024 = 1024;\nexports.AES_LENGTH = exports.LENGTH_256;\nexports.HMAC_LENGTH = exports.LENGTH_256;\nexports.AES_BROWSER_ALGO = 'AES-CBC';\nexports.HMAC_BROWSER_ALGO = `SHA-${exports.AES_LENGTH}`;\nexports.HMAC_BROWSER = 'HMAC';\nexports.SHA256_BROWSER_ALGO = 'SHA-256';\nexports.SHA512_BROWSER_ALGO = 'SHA-512';\nexports.AES_NODE_ALGO = `aes-${exports.AES_LENGTH}-cbc`;\nexports.HMAC_NODE_ALGO = `sha${exports.HMAC_LENGTH}`;\nexports.SHA256_NODE_ALGO = 'sha256';\nexports.SHA512_NODE_ALGO = 'sha512';\nexports.RIPEMD160_NODE_ALGO = 'ripemd160';\nexports.PREFIX_LENGTH = exports.LENGTH_1;\nexports.KEY_LENGTH = exports.LENGTH_32;\nexports.IV_LENGTH = exports.LENGTH_16;\nexports.MAC_LENGTH = exports.LENGTH_32;\nexports.PREFIXED_KEY_LENGTH = exports.KEY_LENGTH + exports.PREFIX_LENGTH;\nexports.MAX_KEY_LENGTH = exports.LENGTH_1024;\nexports.MAX_MSG_LENGTH = exports.LENGTH_32;\nexports.EMPTY_UINT_ARRAY = new Uint8Array(exports.LENGTH_0);\nexports.ERROR_BAD_MAC = 'Bad MAC';\n//# sourceMappingURL=index.js.map","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar hash_utils_1 = require(\"./hash-utils\");\nvar createKeccakHash = require(\"keccak\");\nexports.keccak224 = hash_utils_1.createHashFunction(function () {\n return createKeccakHash(\"keccak224\");\n});\nexports.keccak256 = hash_utils_1.createHashFunction(function () {\n return createKeccakHash(\"keccak256\");\n});\nexports.keccak384 = hash_utils_1.createHashFunction(function () {\n return createKeccakHash(\"keccak384\");\n});\nexports.keccak512 = hash_utils_1.createHashFunction(function () {\n return createKeccakHash(\"keccak512\");\n});\n//# sourceMappingURL=keccak.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar secp256k1_1 = require(\"secp256k1\");\nvar random_1 = require(\"./random\");\nvar SECP256K1_PRIVATE_KEY_SIZE = 32;\nfunction createPrivateKey() {\n return __awaiter(this, void 0, void 0, function () {\n var pk;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!true) return [3 /*break*/, 2];\n return [4 /*yield*/, random_1.getRandomBytes(SECP256K1_PRIVATE_KEY_SIZE)];\n case 1:\n pk = _a.sent();\n if (secp256k1_1.privateKeyVerify(pk)) {\n return [2 /*return*/, pk];\n }\n return [3 /*break*/, 0];\n case 2: return [2 /*return*/];\n }\n });\n });\n}\nexports.createPrivateKey = createPrivateKey;\nfunction createPrivateKeySync() {\n while (true) {\n var pk = random_1.getRandomBytesSync(SECP256K1_PRIVATE_KEY_SIZE);\n if (secp256k1_1.privateKeyVerify(pk)) {\n return pk;\n }\n }\n}\nexports.createPrivateKeySync = createPrivateKeySync;\n__export(require(\"secp256k1\"));\n//# sourceMappingURL=secp256k1.js.map","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = slice;\nfunction slice(arrayLike, start) {\n start = start | 0;\n var newLen = Math.max(arrayLike.length - start, 0);\n var newArr = Array(newLen);\n for (var idx = 0; idx < newLen; idx++) {\n newArr[idx] = arrayLike[start + idx];\n }\n return newArr;\n}\nmodule.exports = exports[\"default\"];","const createPayload = require('../util/create-payload.js')\n\nmodule.exports = SubProvider\n\n// this is the base class for a subprovider -- mostly helpers\n\n\nfunction SubProvider() {\n\n}\n\nSubProvider.prototype.setEngine = function(engine) {\n const self = this\n if (self.engine) return\n self.engine = engine\n engine.on('block', function(block) {\n self.currentBlock = block\n })\n\n engine.on('start', function () {\n self.start()\n })\n\n engine.on('stop', function () {\n self.stop()\n })\n}\n\nSubProvider.prototype.handleRequest = function(payload, next, end) {\n throw new Error('Subproviders should override `handleRequest`.')\n}\n\nSubProvider.prototype.emitPayload = function(payload, cb){\n const self = this\n self.engine.sendAsync(createPayload(payload), cb)\n}\n\n// dummies for overriding\n\nSubProvider.prototype.stop = function () {}\n\nSubProvider.prototype.start = function () {}\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.js');\n\nconst base36 = base.baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n});\nconst base36upper = base.baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n});\n\nexports.base36 = base36;\nexports.base36upper = base36upper;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar varint$1 = require('../vendor/varint.js');\n\nconst decode = data => {\n const code = varint$1.decode(data);\n return [\n code,\n varint$1.decode.bytes\n ];\n};\nconst encodeTo = (int, target, offset = 0) => {\n varint$1.encode(int, target, offset);\n return target;\n};\nconst encodingLength = int => {\n return varint$1.encodingLength(int);\n};\n\nexports.decode = decode;\nexports.encodeTo = encodeTo;\nexports.encodingLength = encodingLength;\n","'use strict'\n/** @typedef {import(\"./types\").Protocol} Protocol */\n\n/**\n * Protocols\n *\n * @param {number | string} proto\n * @returns {Protocol}\n */\nfunction Protocols (proto) {\n if (typeof (proto) === 'number') {\n if (Protocols.codes[proto]) {\n return Protocols.codes[proto]\n }\n\n throw new Error('no protocol with code: ' + proto)\n } else if (typeof (proto) === 'string') {\n if (Protocols.names[proto]) {\n return Protocols.names[proto]\n }\n\n throw new Error('no protocol with name: ' + proto)\n }\n\n throw new Error('invalid protocol id type: ' + proto)\n}\n\nconst V = -1\nProtocols.lengthPrefixedVarSize = V\nProtocols.V = V\n\n/** @type {Array<[number, number, string, (string|boolean)?, string?]>} */\nProtocols.table = [\n [4, 32, 'ip4'],\n [6, 16, 'tcp'],\n [33, 16, 'dccp'],\n [41, 128, 'ip6'],\n [42, V, 'ip6zone'],\n [53, V, 'dns', 'resolvable'],\n [54, V, 'dns4', 'resolvable'],\n [55, V, 'dns6', 'resolvable'],\n [56, V, 'dnsaddr', 'resolvable'],\n [132, 16, 'sctp'],\n [273, 16, 'udp'],\n [275, 0, 'p2p-webrtc-star'],\n [276, 0, 'p2p-webrtc-direct'],\n [277, 0, 'p2p-stardust'],\n [290, 0, 'p2p-circuit'],\n [301, 0, 'udt'],\n [302, 0, 'utp'],\n [400, V, 'unix', false, 'path'],\n // `ipfs` is added before `p2p` for legacy support.\n // All text representations will default to `p2p`, but `ipfs` will\n // still be supported\n [421, V, 'ipfs'],\n // `p2p` is the preferred name for 421, and is now the default\n [421, V, 'p2p'],\n [443, 0, 'https'],\n [444, 96, 'onion'],\n [445, 296, 'onion3'],\n [446, V, 'garlic64'],\n [460, 0, 'quic'],\n [477, 0, 'ws'],\n [478, 0, 'wss'],\n [479, 0, 'p2p-websocket-star'],\n [480, 0, 'http'],\n [777, V, 'memory']\n]\n/** @type {Record} */\nProtocols.names = {}\n/** @type {Record} */\nProtocols.codes = {}\n\n// populate tables\nProtocols.table.map(row => {\n const proto = p.apply(null, row)\n Protocols.codes[proto.code] = proto\n Protocols.names[proto.name] = proto\n return null\n})\n\nProtocols.object = p\n\n/**\n *\n * Create a protocol\n *\n * @param {number} code\n * @param {number} size\n * @param {string} name\n * @param {any} [resolvable]\n * @param {any} [path]\n * @returns {Protocol}\n */\nfunction p (code, size, name, resolvable, path) {\n return {\n code,\n size,\n name,\n resolvable: Boolean(resolvable),\n path: Boolean(path)\n }\n}\n\nmodule.exports = Protocols\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","'use strict'\nconst isElectron = require('is-electron')\n\nconst IS_ENV_WITH_DOM = typeof window === 'object' && typeof document === 'object' && document.nodeType === 9\n// @ts-ignore\nconst IS_ELECTRON = isElectron()\nconst IS_BROWSER = IS_ENV_WITH_DOM && !IS_ELECTRON\nconst IS_ELECTRON_MAIN = IS_ELECTRON && !IS_ENV_WITH_DOM\nconst IS_ELECTRON_RENDERER = IS_ELECTRON && IS_ENV_WITH_DOM\nconst IS_NODE = typeof require === 'function' && typeof process !== 'undefined' && typeof process.release !== 'undefined' && process.release.name === 'node' && !IS_ELECTRON\n// @ts-ignore - we either ignore worker scope or dom scope\nconst IS_WEBWORKER = typeof importScripts === 'function' && typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope\nconst IS_TEST = typeof process !== 'undefined' && typeof process.env !== 'undefined' && process.env.NODE_ENV === 'test'\nconst IS_REACT_NATIVE = typeof navigator !== 'undefined' && navigator.product === 'ReactNative'\n\nmodule.exports = {\n isTest: IS_TEST,\n isElectron: IS_ELECTRON,\n isElectronMain: IS_ELECTRON_MAIN,\n isElectronRenderer: IS_ELECTRON_RENDERER,\n isNode: IS_NODE,\n /**\n * Detects browser main thread **NOT** web worker or service worker\n */\n isBrowser: IS_BROWSER,\n isWebWorker: IS_WEBWORKER,\n isEnvWithDom: IS_ENV_WITH_DOM,\n isReactNative: IS_REACT_NATIVE\n}\n","'use strict'\n\nconst getTime = require('./time')\n\nclass Retimer {\n constructor (callback, timeout, args) {\n const that = this\n\n this._started = getTime()\n this._rescheduled = 0\n this._scheduled = timeout\n this._args = args\n this._triggered = false\n\n this._timerWrapper = () => {\n if (that._rescheduled > 0) {\n that._scheduled = that._rescheduled - (getTime() - that._started)\n that._schedule(that._scheduled)\n } else {\n that._triggered = true\n callback.apply(null, that._args)\n }\n }\n\n this._timer = setTimeout(this._timerWrapper, timeout)\n }\n\n reschedule (timeout) {\n if (!timeout) {\n timeout = this._scheduled\n }\n const now = getTime()\n if ((now + timeout) - (this._started + this._scheduled) < 0) {\n clearTimeout(this._timer)\n this._schedule(timeout)\n } else if (!this._triggered) {\n this._started = now\n this._rescheduled = timeout\n } else {\n this._schedule(timeout)\n }\n }\n\n _schedule (timeout) {\n this._triggered = false\n this._started = getTime()\n this._rescheduled = 0\n this._scheduled = timeout\n this._timer = setTimeout(this._timerWrapper, timeout)\n }\n\n clear () {\n clearTimeout(this._timer)\n }\n}\n\nfunction retimer () {\n if (typeof arguments[0] !== 'function') {\n throw new Error('callback needed')\n }\n\n if (typeof arguments[1] !== 'number') {\n throw new Error('timeout needed')\n }\n\n let args\n\n if (arguments.length > 0) {\n args = new Array(arguments.length - 2)\n\n /* eslint-disable no-var */\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 2]\n }\n }\n\n return new Retimer(arguments[0], arguments[1], args)\n}\n\nmodule.exports = retimer\n","let durationRE = /(-?(?:\\d+\\.?\\d*|\\d*\\.?\\d+)(?:e[-+]?\\d+)?)\\s*([\\p{L}]*)/uig\r\n\r\n\r\n/**\r\n * conversion ratios\r\n */\r\n\r\nparse.nanosecond =\r\nparse.ns = 1 / 1e6\r\n\r\nparse['µs'] =\r\nparse['μs'] =\r\nparse.us =\r\nparse.microsecond = 1 / 1e3\r\n\r\nparse.millisecond =\r\nparse.ms =\r\nparse[''] = 1\r\n\r\nparse.second =\r\nparse.sec =\r\nparse.s = parse.ms * 1000\r\n\r\nparse.minute =\r\nparse.min =\r\nparse.m = parse.s * 60\r\n\r\nparse.hour =\r\nparse.hr =\r\nparse.h = parse.m * 60\r\n\r\nparse.day =\r\nparse.d = parse.h * 24\r\n\r\nparse.week =\r\nparse.wk =\r\nparse.w = parse.d * 7\r\n\r\nparse.month =\r\nparse.b =\r\nparse.d * (365.25 / 12)\r\n\r\nparse.year =\r\nparse.yr =\r\nparse.y = parse.d * 365.25\r\n\r\n/**\r\n * convert `str` to ms\r\n *\r\n * @param {String} str\r\n * @param {String} format\r\n * @return {Number}\r\n */\r\n\r\nfunction parse(str='', format='ms'){\r\n var result = null\r\n // ignore commas/placeholders\r\n str = (str+'').replace(/(\\d)[,_](\\d)/g, '$1$2')\r\n str.replace(durationRE, function(_, n, units){\r\n units = unitRatio(units)\r\n if (units) result = (result || 0) + parseFloat(n, 10) * units\r\n })\r\n\r\n return result && (result / (unitRatio(format) || 1))\r\n}\r\n\r\nfunction unitRatio(str) {\r\n return parse[str] || parse[str.toLowerCase().replace(/s$/, '')]\r\n}\r\n\r\nexport default parse\r\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar errCode = require('err-code');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nconst IPFS_PREFIX = '/ipfs/';\nfunction toCidAndPath(string) {\n if (string instanceof Uint8Array) {\n try {\n string = cid.CID.decode(string);\n } catch (err) {\n throw errCode__default[\"default\"](err, 'ERR_INVALID_CID');\n }\n }\n let cid$1 = cid.CID.asCID(string);\n if (cid$1) {\n return {\n cid: cid$1,\n path: undefined\n };\n }\n string = string.toString();\n if (string.startsWith(IPFS_PREFIX)) {\n string = string.substring(IPFS_PREFIX.length);\n }\n const parts = string.split('/');\n let path;\n try {\n cid$1 = cid.CID.parse(parts.shift() || '');\n } catch (err) {\n throw errCode__default[\"default\"](err, 'ERR_INVALID_CID');\n }\n if (parts.length) {\n path = `/${ parts.join('/') }`;\n }\n return {\n cid: cid$1,\n path\n };\n}\n\nexports.toCidAndPath = toCidAndPath;\n","module.exports = exports = window.fetch;\n\n// Needed for TypeScript and Webpack.\nexports.default = window.fetch.bind(window);\n\nexports.Headers = window.Headers;\nexports.Request = window.Request;\nexports.Response = window.Response;\n","/**\n * Javascript implementation of basic RSA algorithms.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n *\n * The only algorithm currently supported for PKI is RSA.\n *\n * An RSA key is often stored in ASN.1 DER format. The SubjectPublicKeyInfo\n * ASN.1 structure is composed of an algorithm of type AlgorithmIdentifier\n * and a subjectPublicKey of type bit string.\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of RSA, there aren't any.\n *\n * SubjectPublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * subjectPublicKey BIT STRING\n * }\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * For an RSA public key, the subjectPublicKey is:\n *\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n *\n * PrivateKeyInfo ::= SEQUENCE {\n * version Version,\n * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,\n * privateKey PrivateKey,\n * attributes [0] IMPLICIT Attributes OPTIONAL\n * }\n *\n * Version ::= INTEGER\n * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier\n * PrivateKey ::= OCTET STRING\n * Attributes ::= SET OF Attribute\n *\n * An RSA private key as the following structure:\n *\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p-1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER -- (inverse of q) mod p\n * }\n *\n * Version ::= INTEGER\n *\n * The OID for the RSA key algorithm is: 1.2.840.113549.1.1.1\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./jsbn');\nrequire('./oids');\nrequire('./pkcs1');\nrequire('./prime');\nrequire('./random');\nrequire('./util');\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\nvar _crypto = forge.util.isNodejs ? require('crypto') : null;\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for util API\nvar util = forge.util;\n\n/*\n * RSA encryption and decryption, see RFC 2313.\n */\nforge.pki = forge.pki || {};\nmodule.exports = forge.pki.rsa = forge.rsa = forge.rsa || {};\nvar pki = forge.pki;\n\n// for finding primes, which are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29\nvar GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];\n\n// validator for a PrivateKeyInfo structure\nvar privateKeyValidator = {\n // PrivateKeyInfo\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'PrivateKeyInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // privateKeyAlgorithm\n name: 'PrivateKeyInfo.privateKeyAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'privateKeyOid'\n }]\n }, {\n // PrivateKey\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'privateKey'\n }]\n};\n\n// validator for an RSA private key\nvar rsaPrivateKeyValidator = {\n // RSAPrivateKey\n name: 'RSAPrivateKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'RSAPrivateKey.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // modulus (n)\n name: 'RSAPrivateKey.modulus',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyModulus'\n }, {\n // publicExponent (e)\n name: 'RSAPrivateKey.publicExponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPublicExponent'\n }, {\n // privateExponent (d)\n name: 'RSAPrivateKey.privateExponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrivateExponent'\n }, {\n // prime1 (p)\n name: 'RSAPrivateKey.prime1',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrime1'\n }, {\n // prime2 (q)\n name: 'RSAPrivateKey.prime2',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrime2'\n }, {\n // exponent1 (d mod (p-1))\n name: 'RSAPrivateKey.exponent1',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyExponent1'\n }, {\n // exponent2 (d mod (q-1))\n name: 'RSAPrivateKey.exponent2',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyExponent2'\n }, {\n // coefficient ((inverse of q) mod p)\n name: 'RSAPrivateKey.coefficient',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyCoefficient'\n }]\n};\n\n// validator for an RSA public key\nvar rsaPublicKeyValidator = {\n // RSAPublicKey\n name: 'RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // modulus (n)\n name: 'RSAPublicKey.modulus',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'publicKeyModulus'\n }, {\n // publicExponent (e)\n name: 'RSAPublicKey.exponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'publicKeyExponent'\n }]\n};\n\n// validator for an SubjectPublicKeyInfo structure\n// Note: Currently only works with an RSA public key\nvar publicKeyValidator = forge.pki.rsa.publicKeyValidator = {\n name: 'SubjectPublicKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'subjectPublicKeyInfo',\n value: [{\n name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'publicKeyOid'\n }]\n }, {\n // subjectPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n value: [{\n // RSAPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'rsaPublicKey'\n }]\n }]\n};\n\n/**\n * Wrap digest in DigestInfo object.\n *\n * This function implements EMSA-PKCS1-v1_5-ENCODE as per RFC 3447.\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n *\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n * Digest ::= OCTET STRING\n *\n * @param md the message digest object with the hash to sign.\n *\n * @return the encoded message (ready for RSA encrytion)\n */\nvar emsaPkcs1v15encode = function(md) {\n // get the oid for the algorithm\n var oid;\n if(md.algorithm in pki.oids) {\n oid = pki.oids[md.algorithm];\n } else {\n var error = new Error('Unknown message digest algorithm.');\n error.algorithm = md.algorithm;\n throw error;\n }\n var oidBytes = asn1.oidToDer(oid).getBytes();\n\n // create the digest info\n var digestInfo = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var digestAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n digestAlgorithm.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false, oidBytes));\n digestAlgorithm.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.NULL, false, ''));\n var digest = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING,\n false, md.digest().getBytes());\n digestInfo.value.push(digestAlgorithm);\n digestInfo.value.push(digest);\n\n // encode digest info\n return asn1.toDer(digestInfo).getBytes();\n};\n\n/**\n * Performs x^c mod n (RSA encryption or decryption operation).\n *\n * @param x the number to raise and mod.\n * @param key the key to use.\n * @param pub true if the key is public, false if private.\n *\n * @return the result of x^c mod n.\n */\nvar _modPow = function(x, key, pub) {\n if(pub) {\n return x.modPow(key.e, key.n);\n }\n\n if(!key.p || !key.q) {\n // allow calculation without CRT params (slow)\n return x.modPow(key.d, key.n);\n }\n\n // pre-compute dP, dQ, and qInv if necessary\n if(!key.dP) {\n key.dP = key.d.mod(key.p.subtract(BigInteger.ONE));\n }\n if(!key.dQ) {\n key.dQ = key.d.mod(key.q.subtract(BigInteger.ONE));\n }\n if(!key.qInv) {\n key.qInv = key.q.modInverse(key.p);\n }\n\n /* Chinese remainder theorem (CRT) states:\n\n Suppose n1, n2, ..., nk are positive integers which are pairwise\n coprime (n1 and n2 have no common factors other than 1). For any\n integers x1, x2, ..., xk there exists an integer x solving the\n system of simultaneous congruences (where ~= means modularly\n congruent so a ~= b mod n means a mod n = b mod n):\n\n x ~= x1 mod n1\n x ~= x2 mod n2\n ...\n x ~= xk mod nk\n\n This system of congruences has a single simultaneous solution x\n between 0 and n - 1. Furthermore, each xk solution and x itself\n is congruent modulo the product n = n1*n2*...*nk.\n So x1 mod n = x2 mod n = xk mod n = x mod n.\n\n The single simultaneous solution x can be solved with the following\n equation:\n\n x = sum(xi*ri*si) mod n where ri = n/ni and si = ri^-1 mod ni.\n\n Where x is less than n, xi = x mod ni.\n\n For RSA we are only concerned with k = 2. The modulus n = pq, where\n p and q are coprime. The RSA decryption algorithm is:\n\n y = x^d mod n\n\n Given the above:\n\n x1 = x^d mod p\n r1 = n/p = q\n s1 = q^-1 mod p\n x2 = x^d mod q\n r2 = n/q = p\n s2 = p^-1 mod q\n\n So y = (x1r1s1 + x2r2s2) mod n\n = ((x^d mod p)q(q^-1 mod p) + (x^d mod q)p(p^-1 mod q)) mod n\n\n According to Fermat's Little Theorem, if the modulus P is prime,\n for any integer A not evenly divisible by P, A^(P-1) ~= 1 mod P.\n Since A is not divisible by P it follows that if:\n N ~= M mod (P - 1), then A^N mod P = A^M mod P. Therefore:\n\n A^N mod P = A^(M mod (P - 1)) mod P. (The latter takes less effort\n to calculate). In order to calculate x^d mod p more quickly the\n exponent d mod (p - 1) is stored in the RSA private key (the same\n is done for x^d mod q). These values are referred to as dP and dQ\n respectively. Therefore we now have:\n\n y = ((x^dP mod p)q(q^-1 mod p) + (x^dQ mod q)p(p^-1 mod q)) mod n\n\n Since we'll be reducing x^dP by modulo p (same for q) we can also\n reduce x by p (and q respectively) before hand. Therefore, let\n\n xp = ((x mod p)^dP mod p), and\n xq = ((x mod q)^dQ mod q), yielding:\n\n y = (xp*q*(q^-1 mod p) + xq*p*(p^-1 mod q)) mod n\n\n This can be further reduced to a simple algorithm that only\n requires 1 inverse (the q inverse is used) to be used and stored.\n The algorithm is called Garner's algorithm. If qInv is the\n inverse of q, we simply calculate:\n\n y = (qInv*(xp - xq) mod p) * q + xq\n\n However, there are two further complications. First, we need to\n ensure that xp > xq to prevent signed BigIntegers from being used\n so we add p until this is true (since we will be mod'ing with\n p anyway). Then, there is a known timing attack on algorithms\n using the CRT. To mitigate this risk, \"cryptographic blinding\"\n should be used. This requires simply generating a random number r\n between 0 and n-1 and its inverse and multiplying x by r^e before\n calculating y and then multiplying y by r^-1 afterwards. Note that\n r must be coprime with n (gcd(r, n) === 1) in order to have an\n inverse.\n */\n\n // cryptographic blinding\n var r;\n do {\n r = new BigInteger(\n forge.util.bytesToHex(forge.random.getBytes(key.n.bitLength() / 8)),\n 16);\n } while(r.compareTo(key.n) >= 0 || !r.gcd(key.n).equals(BigInteger.ONE));\n x = x.multiply(r.modPow(key.e, key.n)).mod(key.n);\n\n // calculate xp and xq\n var xp = x.mod(key.p).modPow(key.dP, key.p);\n var xq = x.mod(key.q).modPow(key.dQ, key.q);\n\n // xp must be larger than xq to avoid signed bit usage\n while(xp.compareTo(xq) < 0) {\n xp = xp.add(key.p);\n }\n\n // do last step\n var y = xp.subtract(xq)\n .multiply(key.qInv).mod(key.p)\n .multiply(key.q).add(xq);\n\n // remove effect of random for cryptographic blinding\n y = y.multiply(r.modInverse(key.n)).mod(key.n);\n\n return y;\n};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED, use 'sign' on a private key object or\n * 'encrypt' on a public key object instead.\n *\n * Performs RSA encryption.\n *\n * The parameter bt controls whether to put padding bytes before the\n * message passed in. Set bt to either true or false to disable padding\n * completely (in order to handle e.g. EMSA-PSS encoding seperately before),\n * signaling whether the encryption operation is a public key operation\n * (i.e. encrypting data) or not, i.e. private key operation (data signing).\n *\n * For PKCS#1 v1.5 padding pass in the block type to use, i.e. either 0x01\n * (for signing) or 0x02 (for encryption). The key operation mode (private\n * or public) is derived from this flag in that case).\n *\n * @param m the message to encrypt as a byte string.\n * @param key the RSA key to use.\n * @param bt for PKCS#1 v1.5 padding, the block type to use\n * (0x01 for private key, 0x02 for public),\n * to disable padding: true = public key, false = private key.\n *\n * @return the encrypted bytes as a string.\n */\npki.rsa.encrypt = function(m, key, bt) {\n var pub = bt;\n var eb;\n\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n if(bt !== false && bt !== true) {\n // legacy, default to PKCS#1 v1.5 padding\n pub = (bt === 0x02);\n eb = _encodePkcs1_v1_5(m, key, bt);\n } else {\n eb = forge.util.createBuffer();\n eb.putBytes(m);\n }\n\n // load encryption block as big integer 'x'\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var x = new BigInteger(eb.toHex(), 16);\n\n // do RSA encryption\n var y = _modPow(x, key, pub);\n\n // convert y into the encrypted data byte string, if y is shorter in\n // bytes than k, then prepend zero bytes to fill up ed\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var yhex = y.toString(16);\n var ed = forge.util.createBuffer();\n var zeros = k - Math.ceil(yhex.length / 2);\n while(zeros > 0) {\n ed.putByte(0x00);\n --zeros;\n }\n ed.putBytes(forge.util.hexToBytes(yhex));\n return ed.getBytes();\n};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED, use 'decrypt' on a private key object or\n * 'verify' on a public key object instead.\n *\n * Performs RSA decryption.\n *\n * The parameter ml controls whether to apply PKCS#1 v1.5 padding\n * or not. Set ml = false to disable padding removal completely\n * (in order to handle e.g. EMSA-PSS later on) and simply pass back\n * the RSA encryption block.\n *\n * @param ed the encrypted data to decrypt in as a byte string.\n * @param key the RSA key to use.\n * @param pub true for a public key operation, false for private.\n * @param ml the message length, if known, false to disable padding.\n *\n * @return the decrypted message as a byte string.\n */\npki.rsa.decrypt = function(ed, key, pub, ml) {\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n // error if the length of the encrypted data ED is not k\n if(ed.length !== k) {\n var error = new Error('Encrypted message length is invalid.');\n error.length = ed.length;\n error.expected = k;\n throw error;\n }\n\n // convert encrypted data into a big integer\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var y = new BigInteger(forge.util.createBuffer(ed).toHex(), 16);\n\n // y must be less than the modulus or it wasn't the result of\n // a previous mod operation (encryption) using that modulus\n if(y.compareTo(key.n) >= 0) {\n throw new Error('Encrypted message is invalid.');\n }\n\n // do RSA decryption\n var x = _modPow(y, key, pub);\n\n // create the encryption block, if x is shorter in bytes than k, then\n // prepend zero bytes to fill up eb\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var xhex = x.toString(16);\n var eb = forge.util.createBuffer();\n var zeros = k - Math.ceil(xhex.length / 2);\n while(zeros > 0) {\n eb.putByte(0x00);\n --zeros;\n }\n eb.putBytes(forge.util.hexToBytes(xhex));\n\n if(ml !== false) {\n // legacy, default to PKCS#1 v1.5 padding\n return _decodePkcs1_v1_5(eb.getBytes(), key, pub);\n }\n\n // return message\n return eb.getBytes();\n};\n\n/**\n * Creates an RSA key-pair generation state object. It is used to allow\n * key-generation to be performed in steps. It also allows for a UI to\n * display progress updates.\n *\n * @param bits the size for the private key in bits, defaults to 2048.\n * @param e the public exponent to use, defaults to 65537 (0x10001).\n * @param [options] the options to use.\n * prng a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n * algorithm the algorithm to use (default: 'PRIMEINC').\n *\n * @return the state object to use to generate the key-pair.\n */\npki.rsa.createKeyPairGenerationState = function(bits, e, options) {\n // TODO: migrate step-based prime generation code to forge.prime\n\n // set default bits\n if(typeof(bits) === 'string') {\n bits = parseInt(bits, 10);\n }\n bits = bits || 2048;\n\n // create prng with api that matches BigInteger secure random\n options = options || {};\n var prng = options.prng || forge.random;\n var rng = {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n var b = prng.getBytesSync(x.length);\n for(var i = 0; i < x.length; ++i) {\n x[i] = b.charCodeAt(i);\n }\n }\n };\n\n var algorithm = options.algorithm || 'PRIMEINC';\n\n // create PRIMEINC algorithm state\n var rval;\n if(algorithm === 'PRIMEINC') {\n rval = {\n algorithm: algorithm,\n state: 0,\n bits: bits,\n rng: rng,\n eInt: e || 65537,\n e: new BigInteger(null),\n p: null,\n q: null,\n qBits: bits >> 1,\n pBits: bits - (bits >> 1),\n pqState: 0,\n num: null,\n keys: null\n };\n rval.e.fromInt(rval.eInt);\n } else {\n throw new Error('Invalid key generation algorithm: ' + algorithm);\n }\n\n return rval;\n};\n\n/**\n * Attempts to runs the key-generation algorithm for at most n seconds\n * (approximately) using the given state. When key-generation has completed,\n * the keys will be stored in state.keys.\n *\n * To use this function to update a UI while generating a key or to prevent\n * causing browser lockups/warnings, set \"n\" to a value other than 0. A\n * simple pattern for generating a key and showing a progress indicator is:\n *\n * var state = pki.rsa.createKeyPairGenerationState(2048);\n * var step = function() {\n * // step key-generation, run algorithm for 100 ms, repeat\n * if(!forge.pki.rsa.stepKeyPairGenerationState(state, 100)) {\n * setTimeout(step, 1);\n * } else {\n * // key-generation complete\n * // TODO: turn off progress indicator here\n * // TODO: use the generated key-pair in \"state.keys\"\n * }\n * };\n * // TODO: turn on progress indicator here\n * setTimeout(step, 0);\n *\n * @param state the state to use.\n * @param n the maximum number of milliseconds to run the algorithm for, 0\n * to run the algorithm to completion.\n *\n * @return true if the key-generation completed, false if not.\n */\npki.rsa.stepKeyPairGenerationState = function(state, n) {\n // set default algorithm if not set\n if(!('algorithm' in state)) {\n state.algorithm = 'PRIMEINC';\n }\n\n // TODO: migrate step-based prime generation code to forge.prime\n // TODO: abstract as PRIMEINC algorithm\n\n // do key generation (based on Tom Wu's rsa.js, see jsbn.js license)\n // with some minor optimizations and designed to run in steps\n\n // local state vars\n var THIRTY = new BigInteger(null);\n THIRTY.fromInt(30);\n var deltaIdx = 0;\n var op_or = function(x, y) {return x | y;};\n\n // keep stepping until time limit is reached or done\n var t1 = +new Date();\n var t2;\n var total = 0;\n while(state.keys === null && (n <= 0 || total < n)) {\n // generate p or q\n if(state.state === 0) {\n /* Note: All primes are of the form:\n\n 30k+i, for i < 30 and gcd(30, i)=1, where there are 8 values for i\n\n When we generate a random number, we always align it at 30k + 1. Each\n time the number is determined not to be prime we add to get to the\n next 'i', eg: if the number was at 30k + 1 we add 6. */\n var bits = (state.p === null) ? state.pBits : state.qBits;\n var bits1 = bits - 1;\n\n // get a random number\n if(state.pqState === 0) {\n state.num = new BigInteger(bits, state.rng);\n // force MSB set\n if(!state.num.testBit(bits1)) {\n state.num.bitwiseTo(\n BigInteger.ONE.shiftLeft(bits1), op_or, state.num);\n }\n // align number on 30k+1 boundary\n state.num.dAddOffset(31 - state.num.mod(THIRTY).byteValue(), 0);\n deltaIdx = 0;\n\n ++state.pqState;\n } else if(state.pqState === 1) {\n // try to make the number a prime\n if(state.num.bitLength() > bits) {\n // overflow, try again\n state.pqState = 0;\n // do primality test\n } else if(state.num.isProbablePrime(\n _getMillerRabinTests(state.num.bitLength()))) {\n ++state.pqState;\n } else {\n // get next potential prime\n state.num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);\n }\n } else if(state.pqState === 2) {\n // ensure number is coprime with e\n state.pqState =\n (state.num.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) === 0) ? 3 : 0;\n } else if(state.pqState === 3) {\n // store p or q\n state.pqState = 0;\n if(state.p === null) {\n state.p = state.num;\n } else {\n state.q = state.num;\n }\n\n // advance state if both p and q are ready\n if(state.p !== null && state.q !== null) {\n ++state.state;\n }\n state.num = null;\n }\n } else if(state.state === 1) {\n // ensure p is larger than q (swap them if not)\n if(state.p.compareTo(state.q) < 0) {\n state.num = state.p;\n state.p = state.q;\n state.q = state.num;\n }\n ++state.state;\n } else if(state.state === 2) {\n // compute phi: (p - 1)(q - 1) (Euler's totient function)\n state.p1 = state.p.subtract(BigInteger.ONE);\n state.q1 = state.q.subtract(BigInteger.ONE);\n state.phi = state.p1.multiply(state.q1);\n ++state.state;\n } else if(state.state === 3) {\n // ensure e and phi are coprime\n if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) === 0) {\n // phi and e are coprime, advance\n ++state.state;\n } else {\n // phi and e aren't coprime, so generate a new p and q\n state.p = null;\n state.q = null;\n state.state = 0;\n }\n } else if(state.state === 4) {\n // create n, ensure n is has the right number of bits\n state.n = state.p.multiply(state.q);\n\n // ensure n is right number of bits\n if(state.n.bitLength() === state.bits) {\n // success, advance\n ++state.state;\n } else {\n // failed, get new q\n state.q = null;\n state.state = 0;\n }\n } else if(state.state === 5) {\n // set keys\n var d = state.e.modInverse(state.phi);\n state.keys = {\n privateKey: pki.rsa.setPrivateKey(\n state.n, state.e, d, state.p, state.q,\n d.mod(state.p1), d.mod(state.q1),\n state.q.modInverse(state.p)),\n publicKey: pki.rsa.setPublicKey(state.n, state.e)\n };\n }\n\n // update timing\n t2 = +new Date();\n total += t2 - t1;\n t1 = t2;\n }\n\n return state.keys !== null;\n};\n\n/**\n * Generates an RSA public-private key pair in a single call.\n *\n * To generate a key-pair in steps (to allow for progress updates and to\n * prevent blocking or warnings in slow browsers) then use the key-pair\n * generation state functions.\n *\n * To generate a key-pair asynchronously (either through web-workers, if\n * available, or by breaking up the work on the main thread), pass a\n * callback function.\n *\n * @param [bits] the size for the private key in bits, defaults to 2048.\n * @param [e] the public exponent to use, defaults to 65537.\n * @param [options] options for key-pair generation, if given then 'bits'\n * and 'e' must *not* be given:\n * bits the size for the private key in bits, (default: 2048).\n * e the public exponent to use, (default: 65537 (0x10001)).\n * workerScript the worker script URL.\n * workers the number of web workers (if supported) to use,\n * (default: 2).\n * workLoad the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * prng a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\". Disables use of native APIs.\n * algorithm the algorithm to use (default: 'PRIMEINC').\n * @param [callback(err, keypair)] called once the operation completes.\n *\n * @return an object with privateKey and publicKey properties.\n */\npki.rsa.generateKeyPair = function(bits, e, options, callback) {\n // (bits), (options), (callback)\n if(arguments.length === 1) {\n if(typeof bits === 'object') {\n options = bits;\n bits = undefined;\n } else if(typeof bits === 'function') {\n callback = bits;\n bits = undefined;\n }\n } else if(arguments.length === 2) {\n // (bits, e), (bits, options), (bits, callback), (options, callback)\n if(typeof bits === 'number') {\n if(typeof e === 'function') {\n callback = e;\n e = undefined;\n } else if(typeof e !== 'number') {\n options = e;\n e = undefined;\n }\n } else {\n options = bits;\n callback = e;\n bits = undefined;\n e = undefined;\n }\n } else if(arguments.length === 3) {\n // (bits, e, options), (bits, e, callback), (bits, options, callback)\n if(typeof e === 'number') {\n if(typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n } else {\n callback = options;\n options = e;\n e = undefined;\n }\n }\n options = options || {};\n if(bits === undefined) {\n bits = options.bits || 2048;\n }\n if(e === undefined) {\n e = options.e || 0x10001;\n }\n\n // use native code if permitted, available, and parameters are acceptable\n if(!forge.options.usePureJavaScript && !options.prng &&\n bits >= 256 && bits <= 16384 && (e === 0x10001 || e === 3)) {\n if(callback) {\n // try native async\n if(_detectNodeCrypto('generateKeyPair')) {\n return _crypto.generateKeyPair('rsa', {\n modulusLength: bits,\n publicExponent: e,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem'\n }\n }, function(err, pub, priv) {\n if(err) {\n return callback(err);\n }\n callback(null, {\n privateKey: pki.privateKeyFromPem(priv),\n publicKey: pki.publicKeyFromPem(pub)\n });\n });\n }\n if(_detectSubtleCrypto('generateKey') &&\n _detectSubtleCrypto('exportKey')) {\n // use standard native generateKey\n return util.globalScope.crypto.subtle.generateKey({\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: _intToUint8Array(e),\n hash: {name: 'SHA-256'}\n }, true /* key can be exported*/, ['sign', 'verify'])\n .then(function(pair) {\n return util.globalScope.crypto.subtle.exportKey(\n 'pkcs8', pair.privateKey);\n // avoiding catch(function(err) {...}) to support IE <= 8\n }).then(undefined, function(err) {\n callback(err);\n }).then(function(pkcs8) {\n if(pkcs8) {\n var privateKey = pki.privateKeyFromAsn1(\n asn1.fromDer(forge.util.createBuffer(pkcs8)));\n callback(null, {\n privateKey: privateKey,\n publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e)\n });\n }\n });\n }\n if(_detectSubtleMsCrypto('generateKey') &&\n _detectSubtleMsCrypto('exportKey')) {\n var genOp = util.globalScope.msCrypto.subtle.generateKey({\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: _intToUint8Array(e),\n hash: {name: 'SHA-256'}\n }, true /* key can be exported*/, ['sign', 'verify']);\n genOp.oncomplete = function(e) {\n var pair = e.target.result;\n var exportOp = util.globalScope.msCrypto.subtle.exportKey(\n 'pkcs8', pair.privateKey);\n exportOp.oncomplete = function(e) {\n var pkcs8 = e.target.result;\n var privateKey = pki.privateKeyFromAsn1(\n asn1.fromDer(forge.util.createBuffer(pkcs8)));\n callback(null, {\n privateKey: privateKey,\n publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e)\n });\n };\n exportOp.onerror = function(err) {\n callback(err);\n };\n };\n genOp.onerror = function(err) {\n callback(err);\n };\n return;\n }\n } else {\n // try native sync\n if(_detectNodeCrypto('generateKeyPairSync')) {\n var keypair = _crypto.generateKeyPairSync('rsa', {\n modulusLength: bits,\n publicExponent: e,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem'\n }\n });\n return {\n privateKey: pki.privateKeyFromPem(keypair.privateKey),\n publicKey: pki.publicKeyFromPem(keypair.publicKey)\n };\n }\n }\n }\n\n // use JavaScript implementation\n var state = pki.rsa.createKeyPairGenerationState(bits, e, options);\n if(!callback) {\n pki.rsa.stepKeyPairGenerationState(state, 0);\n return state.keys;\n }\n _generateKeyPair(state, options, callback);\n};\n\n/**\n * Sets an RSA public key from BigIntegers modulus and exponent.\n *\n * @param n the modulus.\n * @param e the exponent.\n *\n * @return the public key.\n */\npki.setRsaPublicKey = pki.rsa.setPublicKey = function(n, e) {\n var key = {\n n: n,\n e: e\n };\n\n /**\n * Encrypts the given data with this public key. Newer applications\n * should use the 'RSA-OAEP' decryption scheme, 'RSAES-PKCS1-V1_5' is for\n * legacy applications.\n *\n * @param data the byte string to encrypt.\n * @param scheme the encryption scheme to use:\n * 'RSAES-PKCS1-V1_5' (default),\n * 'RSA-OAEP',\n * 'RAW', 'NONE', or null to perform raw RSA encryption,\n * an object with an 'encode' property set to a function\n * with the signature 'function(data, key)' that returns\n * a binary-encoded string representing the encoded data.\n * @param schemeOptions any scheme-specific options.\n *\n * @return the encrypted byte string.\n */\n key.encrypt = function(data, scheme, schemeOptions) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSAES-PKCS1-V1_5';\n }\n\n if(scheme === 'RSAES-PKCS1-V1_5') {\n scheme = {\n encode: function(m, key, pub) {\n return _encodePkcs1_v1_5(m, key, 0x02).getBytes();\n }\n };\n } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {\n scheme = {\n encode: function(m, key) {\n return forge.pkcs1.encode_rsa_oaep(key, m, schemeOptions);\n }\n };\n } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {\n scheme = {encode: function(e) {return e;}};\n } else if(typeof scheme === 'string') {\n throw new Error('Unsupported encryption scheme: \"' + scheme + '\".');\n }\n\n // do scheme-based encoding then rsa encryption\n var e = scheme.encode(data, key, true);\n return pki.rsa.encrypt(e, key, true);\n };\n\n /**\n * Verifies the given signature against the given digest.\n *\n * PKCS#1 supports multiple (currently two) signature schemes:\n * RSASSA-PKCS1-V1_5 and RSASSA-PSS.\n *\n * By default this implementation uses the \"old scheme\", i.e.\n * RSASSA-PKCS1-V1_5, in which case once RSA-decrypted, the\n * signature is an OCTET STRING that holds a DigestInfo.\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n * Digest ::= OCTET STRING\n *\n * To perform PSS signature verification, provide an instance\n * of Forge PSS object as the scheme parameter.\n *\n * @param digest the message digest hash to compare against the signature,\n * as a binary-encoded string.\n * @param signature the signature to verify, as a binary-encoded string.\n * @param scheme signature verification scheme to use:\n * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,\n * a Forge PSS object for RSASSA-PSS,\n * 'NONE' or null for none, DigestInfo will not be expected, but\n * PKCS#1 v1.5 padding will still be used.\n *\n * @return true if the signature was verified, false if not.\n */\n key.verify = function(digest, signature, scheme) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSASSA-PKCS1-V1_5';\n }\n\n if(scheme === 'RSASSA-PKCS1-V1_5') {\n scheme = {\n verify: function(digest, d) {\n // remove padding\n d = _decodePkcs1_v1_5(d, key, true);\n // d is ASN.1 BER-encoded DigestInfo\n var obj = asn1.fromDer(d);\n // compare the given digest to the decrypted one\n return digest === obj.value[1].value;\n }\n };\n } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {\n scheme = {\n verify: function(digest, d) {\n // remove padding\n d = _decodePkcs1_v1_5(d, key, true);\n return digest === d;\n }\n };\n }\n\n // do rsa decryption w/o any decoding, then verify -- which does decoding\n var d = pki.rsa.decrypt(signature, key, true, false);\n return scheme.verify(digest, d, key.n.bitLength());\n };\n\n return key;\n};\n\n/**\n * Sets an RSA private key from BigIntegers modulus, exponent, primes,\n * prime exponents, and modular multiplicative inverse.\n *\n * @param n the modulus.\n * @param e the public exponent.\n * @param d the private exponent ((inverse of e) mod n).\n * @param p the first prime.\n * @param q the second prime.\n * @param dP exponent1 (d mod (p-1)).\n * @param dQ exponent2 (d mod (q-1)).\n * @param qInv ((inverse of q) mod p)\n *\n * @return the private key.\n */\npki.setRsaPrivateKey = pki.rsa.setPrivateKey = function(\n n, e, d, p, q, dP, dQ, qInv) {\n var key = {\n n: n,\n e: e,\n d: d,\n p: p,\n q: q,\n dP: dP,\n dQ: dQ,\n qInv: qInv\n };\n\n /**\n * Decrypts the given data with this private key. The decryption scheme\n * must match the one used to encrypt the data.\n *\n * @param data the byte string to decrypt.\n * @param scheme the decryption scheme to use:\n * 'RSAES-PKCS1-V1_5' (default),\n * 'RSA-OAEP',\n * 'RAW', 'NONE', or null to perform raw RSA decryption.\n * @param schemeOptions any scheme-specific options.\n *\n * @return the decrypted byte string.\n */\n key.decrypt = function(data, scheme, schemeOptions) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSAES-PKCS1-V1_5';\n }\n\n // do rsa decryption w/o any decoding\n var d = pki.rsa.decrypt(data, key, false, false);\n\n if(scheme === 'RSAES-PKCS1-V1_5') {\n scheme = {decode: _decodePkcs1_v1_5};\n } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {\n scheme = {\n decode: function(d, key) {\n return forge.pkcs1.decode_rsa_oaep(key, d, schemeOptions);\n }\n };\n } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {\n scheme = {decode: function(d) {return d;}};\n } else {\n throw new Error('Unsupported encryption scheme: \"' + scheme + '\".');\n }\n\n // decode according to scheme\n return scheme.decode(d, key, false);\n };\n\n /**\n * Signs the given digest, producing a signature.\n *\n * PKCS#1 supports multiple (currently two) signature schemes:\n * RSASSA-PKCS1-V1_5 and RSASSA-PSS.\n *\n * By default this implementation uses the \"old scheme\", i.e.\n * RSASSA-PKCS1-V1_5. In order to generate a PSS signature, provide\n * an instance of Forge PSS object as the scheme parameter.\n *\n * @param md the message digest object with the hash to sign.\n * @param scheme the signature scheme to use:\n * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,\n * a Forge PSS object for RSASSA-PSS,\n * 'NONE' or null for none, DigestInfo will not be used but\n * PKCS#1 v1.5 padding will still be used.\n *\n * @return the signature as a byte string.\n */\n key.sign = function(md, scheme) {\n /* Note: The internal implementation of RSA operations is being\n transitioned away from a PKCS#1 v1.5 hard-coded scheme. Some legacy\n code like the use of an encoding block identifier 'bt' will eventually\n be removed. */\n\n // private key operation\n var bt = false;\n\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n }\n\n if(scheme === undefined || scheme === 'RSASSA-PKCS1-V1_5') {\n scheme = {encode: emsaPkcs1v15encode};\n bt = 0x01;\n } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {\n scheme = {encode: function() {return md;}};\n bt = 0x01;\n }\n\n // encode and then encrypt\n var d = scheme.encode(md, key.n.bitLength());\n return pki.rsa.encrypt(d, key, bt);\n };\n\n return key;\n};\n\n/**\n * Wraps an RSAPrivateKey ASN.1 object in an ASN.1 PrivateKeyInfo object.\n *\n * @param rsaKey the ASN.1 RSAPrivateKey.\n *\n * @return the ASN.1 PrivateKeyInfo.\n */\npki.wrapRsaPrivateKey = function(rsaKey) {\n // PrivateKeyInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (0)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(0).getBytes()),\n // privateKeyAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.rsaEncryption).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // PrivateKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(rsaKey).getBytes())\n ]);\n};\n\n/**\n * Converts a private key from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a PrivateKeyInfo containing an\n * RSAPrivateKey or an RSAPrivateKey.\n *\n * @return the private key.\n */\npki.privateKeyFromAsn1 = function(obj) {\n // get PrivateKeyInfo\n var capture = {};\n var errors = [];\n if(asn1.validate(obj, privateKeyValidator, capture, errors)) {\n obj = asn1.fromDer(forge.util.createBuffer(capture.privateKey));\n }\n\n // get RSAPrivateKey\n capture = {};\n errors = [];\n if(!asn1.validate(obj, rsaPrivateKeyValidator, capture, errors)) {\n var error = new Error('Cannot read private key. ' +\n 'ASN.1 object does not contain an RSAPrivateKey.');\n error.errors = errors;\n throw error;\n }\n\n // Note: Version is currently ignored.\n // capture.privateKeyVersion\n // FIXME: inefficient, get a BigInteger that uses byte strings\n var n, e, d, p, q, dP, dQ, qInv;\n n = forge.util.createBuffer(capture.privateKeyModulus).toHex();\n e = forge.util.createBuffer(capture.privateKeyPublicExponent).toHex();\n d = forge.util.createBuffer(capture.privateKeyPrivateExponent).toHex();\n p = forge.util.createBuffer(capture.privateKeyPrime1).toHex();\n q = forge.util.createBuffer(capture.privateKeyPrime2).toHex();\n dP = forge.util.createBuffer(capture.privateKeyExponent1).toHex();\n dQ = forge.util.createBuffer(capture.privateKeyExponent2).toHex();\n qInv = forge.util.createBuffer(capture.privateKeyCoefficient).toHex();\n\n // set private key\n return pki.setRsaPrivateKey(\n new BigInteger(n, 16),\n new BigInteger(e, 16),\n new BigInteger(d, 16),\n new BigInteger(p, 16),\n new BigInteger(q, 16),\n new BigInteger(dP, 16),\n new BigInteger(dQ, 16),\n new BigInteger(qInv, 16));\n};\n\n/**\n * Converts a private key to an ASN.1 RSAPrivateKey.\n *\n * @param key the private key.\n *\n * @return the ASN.1 representation of an RSAPrivateKey.\n */\npki.privateKeyToAsn1 = pki.privateKeyToRSAPrivateKey = function(key) {\n // RSAPrivateKey\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (0 = only 2 primes, 1 multiple primes)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(0).getBytes()),\n // modulus (n)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.n)),\n // publicExponent (e)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.e)),\n // privateExponent (d)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.d)),\n // privateKeyPrime1 (p)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.p)),\n // privateKeyPrime2 (q)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.q)),\n // privateKeyExponent1 (dP)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.dP)),\n // privateKeyExponent2 (dQ)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.dQ)),\n // coefficient (qInv)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.qInv))\n ]);\n};\n\n/**\n * Converts a public key from an ASN.1 SubjectPublicKeyInfo or RSAPublicKey.\n *\n * @param obj the asn1 representation of a SubjectPublicKeyInfo or RSAPublicKey.\n *\n * @return the public key.\n */\npki.publicKeyFromAsn1 = function(obj) {\n // get SubjectPublicKeyInfo\n var capture = {};\n var errors = [];\n if(asn1.validate(obj, publicKeyValidator, capture, errors)) {\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n var error = new Error('Cannot read public key. Unknown OID.');\n error.oid = oid;\n throw error;\n }\n obj = capture.rsaPublicKey;\n }\n\n // get RSA params\n errors = [];\n if(!asn1.validate(obj, rsaPublicKeyValidator, capture, errors)) {\n var error = new Error('Cannot read public key. ' +\n 'ASN.1 object does not contain an RSAPublicKey.');\n error.errors = errors;\n throw error;\n }\n\n // FIXME: inefficient, get a BigInteger that uses byte strings\n var n = forge.util.createBuffer(capture.publicKeyModulus).toHex();\n var e = forge.util.createBuffer(capture.publicKeyExponent).toHex();\n\n // set public key\n return pki.setRsaPublicKey(\n new BigInteger(n, 16),\n new BigInteger(e, 16));\n};\n\n/**\n * Converts a public key to an ASN.1 SubjectPublicKeyInfo.\n *\n * @param key the public key.\n *\n * @return the asn1 representation of a SubjectPublicKeyInfo.\n */\npki.publicKeyToAsn1 = pki.publicKeyToSubjectPublicKeyInfo = function(key) {\n // SubjectPublicKeyInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.rsaEncryption).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // subjectPublicKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, [\n pki.publicKeyToRSAPublicKey(key)\n ])\n ]);\n};\n\n/**\n * Converts a public key to an ASN.1 RSAPublicKey.\n *\n * @param key the public key.\n *\n * @return the asn1 representation of a RSAPublicKey.\n */\npki.publicKeyToRSAPublicKey = function(key) {\n // RSAPublicKey\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // modulus (n)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.n)),\n // publicExponent (e)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.e))\n ]);\n};\n\n/**\n * Encodes a message using PKCS#1 v1.5 padding.\n *\n * @param m the message to encode.\n * @param key the RSA key to use.\n * @param bt the block type to use, i.e. either 0x01 (for signing) or 0x02\n * (for encryption).\n *\n * @return the padded byte buffer.\n */\nfunction _encodePkcs1_v1_5(m, key, bt) {\n var eb = forge.util.createBuffer();\n\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n /* use PKCS#1 v1.5 padding */\n if(m.length > (k - 11)) {\n var error = new Error('Message is too long for PKCS#1 v1.5 padding.');\n error.length = m.length;\n error.max = k - 11;\n throw error;\n }\n\n /* A block type BT, a padding string PS, and the data D shall be\n formatted into an octet string EB, the encryption block:\n\n EB = 00 || BT || PS || 00 || D\n\n The block type BT shall be a single octet indicating the structure of\n the encryption block. For this version of the document it shall have\n value 00, 01, or 02. For a private-key operation, the block type\n shall be 00 or 01. For a public-key operation, it shall be 02.\n\n The padding string PS shall consist of k-3-||D|| octets. For block\n type 00, the octets shall have value 00; for block type 01, they\n shall have value FF; and for block type 02, they shall be\n pseudorandomly generated and nonzero. This makes the length of the\n encryption block EB equal to k. */\n\n // build the encryption block\n eb.putByte(0x00);\n eb.putByte(bt);\n\n // create the padding\n var padNum = k - 3 - m.length;\n var padByte;\n // private key op\n if(bt === 0x00 || bt === 0x01) {\n padByte = (bt === 0x00) ? 0x00 : 0xFF;\n for(var i = 0; i < padNum; ++i) {\n eb.putByte(padByte);\n }\n } else {\n // public key op\n // pad with random non-zero values\n while(padNum > 0) {\n var numZeros = 0;\n var padBytes = forge.random.getBytes(padNum);\n for(var i = 0; i < padNum; ++i) {\n padByte = padBytes.charCodeAt(i);\n if(padByte === 0) {\n ++numZeros;\n } else {\n eb.putByte(padByte);\n }\n }\n padNum = numZeros;\n }\n }\n\n // zero followed by message\n eb.putByte(0x00);\n eb.putBytes(m);\n\n return eb;\n}\n\n/**\n * Decodes a message using PKCS#1 v1.5 padding.\n *\n * @param em the message to decode.\n * @param key the RSA key to use.\n * @param pub true if the key is a public key, false if it is private.\n * @param ml the message length, if specified.\n *\n * @return the decoded bytes.\n */\nfunction _decodePkcs1_v1_5(em, key, pub, ml) {\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n /* It is an error if any of the following conditions occurs:\n\n 1. The encryption block EB cannot be parsed unambiguously.\n 2. The padding string PS consists of fewer than eight octets\n or is inconsisent with the block type BT.\n 3. The decryption process is a public-key operation and the block\n type BT is not 00 or 01, or the decryption process is a\n private-key operation and the block type is not 02.\n */\n\n // parse the encryption block\n var eb = forge.util.createBuffer(em);\n var first = eb.getByte();\n var bt = eb.getByte();\n if(first !== 0x00 ||\n (pub && bt !== 0x00 && bt !== 0x01) ||\n (!pub && bt != 0x02) ||\n (pub && bt === 0x00 && typeof(ml) === 'undefined')) {\n throw new Error('Encryption block is invalid.');\n }\n\n var padNum = 0;\n if(bt === 0x00) {\n // check all padding bytes for 0x00\n padNum = k - 3 - ml;\n for(var i = 0; i < padNum; ++i) {\n if(eb.getByte() !== 0x00) {\n throw new Error('Encryption block is invalid.');\n }\n }\n } else if(bt === 0x01) {\n // find the first byte that isn't 0xFF, should be after all padding\n padNum = 0;\n while(eb.length() > 1) {\n if(eb.getByte() !== 0xFF) {\n --eb.read;\n break;\n }\n ++padNum;\n }\n } else if(bt === 0x02) {\n // look for 0x00 byte\n padNum = 0;\n while(eb.length() > 1) {\n if(eb.getByte() === 0x00) {\n --eb.read;\n break;\n }\n ++padNum;\n }\n }\n\n // zero must be 0x00 and padNum must be (k - 3 - message length)\n var zero = eb.getByte();\n if(zero !== 0x00 || padNum !== (k - 3 - eb.length())) {\n throw new Error('Encryption block is invalid.');\n }\n\n return eb.getBytes();\n}\n\n/**\n * Runs the key-generation algorithm asynchronously, either in the background\n * via Web Workers, or using the main thread and setImmediate.\n *\n * @param state the key-pair generation state.\n * @param [options] options for key-pair generation:\n * workerScript the worker script URL.\n * workers the number of web workers (if supported) to use,\n * (default: 2, -1 to use estimated cores minus one).\n * workLoad the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * @param callback(err, keypair) called once the operation completes.\n */\nfunction _generateKeyPair(state, options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n var opts = {\n algorithm: {\n name: options.algorithm || 'PRIMEINC',\n options: {\n workers: options.workers || 2,\n workLoad: options.workLoad || 100,\n workerScript: options.workerScript\n }\n }\n };\n if('prng' in options) {\n opts.prng = options.prng;\n }\n\n generate();\n\n function generate() {\n // find p and then q (done in series to simplify)\n getPrime(state.pBits, function(err, num) {\n if(err) {\n return callback(err);\n }\n state.p = num;\n if(state.q !== null) {\n return finish(err, state.q);\n }\n getPrime(state.qBits, finish);\n });\n }\n\n function getPrime(bits, callback) {\n forge.prime.generateProbablePrime(bits, opts, callback);\n }\n\n function finish(err, num) {\n if(err) {\n return callback(err);\n }\n\n // set q\n state.q = num;\n\n // ensure p is larger than q (swap them if not)\n if(state.p.compareTo(state.q) < 0) {\n var tmp = state.p;\n state.p = state.q;\n state.q = tmp;\n }\n\n // ensure p is coprime with e\n if(state.p.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) !== 0) {\n state.p = null;\n generate();\n return;\n }\n\n // ensure q is coprime with e\n if(state.q.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) !== 0) {\n state.q = null;\n getPrime(state.qBits, finish);\n return;\n }\n\n // compute phi: (p - 1)(q - 1) (Euler's totient function)\n state.p1 = state.p.subtract(BigInteger.ONE);\n state.q1 = state.q.subtract(BigInteger.ONE);\n state.phi = state.p1.multiply(state.q1);\n\n // ensure e and phi are coprime\n if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) !== 0) {\n // phi and e aren't coprime, so generate a new p and q\n state.p = state.q = null;\n generate();\n return;\n }\n\n // create n, ensure n is has the right number of bits\n state.n = state.p.multiply(state.q);\n if(state.n.bitLength() !== state.bits) {\n // failed, get new q\n state.q = null;\n getPrime(state.qBits, finish);\n return;\n }\n\n // set keys\n var d = state.e.modInverse(state.phi);\n state.keys = {\n privateKey: pki.rsa.setPrivateKey(\n state.n, state.e, d, state.p, state.q,\n d.mod(state.p1), d.mod(state.q1),\n state.q.modInverse(state.p)),\n publicKey: pki.rsa.setPublicKey(state.n, state.e)\n };\n\n callback(null, state.keys);\n }\n}\n\n/**\n * Converts a positive BigInteger into 2's-complement big-endian bytes.\n *\n * @param b the big integer to convert.\n *\n * @return the bytes.\n */\nfunction _bnToBytes(b) {\n // prepend 0x00 if first byte >= 0x80\n var hex = b.toString(16);\n if(hex[0] >= '8') {\n hex = '00' + hex;\n }\n var bytes = forge.util.hexToBytes(hex);\n\n // ensure integer is minimally-encoded\n if(bytes.length > 1 &&\n // leading 0x00 for positive integer\n ((bytes.charCodeAt(0) === 0 &&\n (bytes.charCodeAt(1) & 0x80) === 0) ||\n // leading 0xFF for negative integer\n (bytes.charCodeAt(0) === 0xFF &&\n (bytes.charCodeAt(1) & 0x80) === 0x80))) {\n return bytes.substr(1);\n }\n return bytes;\n}\n\n/**\n * Returns the required number of Miller-Rabin tests to generate a\n * prime with an error probability of (1/2)^80.\n *\n * See Handbook of Applied Cryptography Chapter 4, Table 4.4.\n *\n * @param bits the bit size.\n *\n * @return the required number of iterations.\n */\nfunction _getMillerRabinTests(bits) {\n if(bits <= 100) return 27;\n if(bits <= 150) return 18;\n if(bits <= 200) return 15;\n if(bits <= 250) return 12;\n if(bits <= 300) return 9;\n if(bits <= 350) return 8;\n if(bits <= 400) return 7;\n if(bits <= 500) return 6;\n if(bits <= 600) return 5;\n if(bits <= 800) return 4;\n if(bits <= 1250) return 3;\n return 2;\n}\n\n/**\n * Performs feature detection on the Node crypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectNodeCrypto(fn) {\n return forge.util.isNodejs && typeof _crypto[fn] === 'function';\n}\n\n/**\n * Performs feature detection on the SubtleCrypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectSubtleCrypto(fn) {\n return (typeof util.globalScope !== 'undefined' &&\n typeof util.globalScope.crypto === 'object' &&\n typeof util.globalScope.crypto.subtle === 'object' &&\n typeof util.globalScope.crypto.subtle[fn] === 'function');\n}\n\n/**\n * Performs feature detection on the deprecated Microsoft Internet Explorer\n * outdated SubtleCrypto interface. This function should only be used after\n * checking for the modern, standard SubtleCrypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectSubtleMsCrypto(fn) {\n return (typeof util.globalScope !== 'undefined' &&\n typeof util.globalScope.msCrypto === 'object' &&\n typeof util.globalScope.msCrypto.subtle === 'object' &&\n typeof util.globalScope.msCrypto.subtle[fn] === 'function');\n}\n\nfunction _intToUint8Array(x) {\n var bytes = forge.util.hexToBytes(x.toString(16));\n var buffer = new Uint8Array(bytes.length);\n for(var i = 0; i < bytes.length; ++i) {\n buffer[i] = bytes.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction _privateKeyFromJwk(jwk) {\n if(jwk.kty !== 'RSA') {\n throw new Error(\n 'Unsupported key algorithm \"' + jwk.kty + '\"; algorithm must be \"RSA\".');\n }\n return pki.setRsaPrivateKey(\n _base64ToBigInt(jwk.n),\n _base64ToBigInt(jwk.e),\n _base64ToBigInt(jwk.d),\n _base64ToBigInt(jwk.p),\n _base64ToBigInt(jwk.q),\n _base64ToBigInt(jwk.dp),\n _base64ToBigInt(jwk.dq),\n _base64ToBigInt(jwk.qi));\n}\n\nfunction _publicKeyFromJwk(jwk) {\n if(jwk.kty !== 'RSA') {\n throw new Error('Key algorithm must be \"RSA\".');\n }\n return pki.setRsaPublicKey(\n _base64ToBigInt(jwk.n),\n _base64ToBigInt(jwk.e));\n}\n\nfunction _base64ToBigInt(b64) {\n return new BigInteger(forge.util.bytesToHex(forge.util.decode64(b64)), 16);\n}\n","/* eslint-env browser */\n\n'use strict'\n\n// Check native crypto exists and is enabled (In insecure context `self.crypto`\n// exists but `self.crypto.subtle` does not).\nexports.get = (win = globalThis) => {\n const nativeCrypto = win.crypto\n\n if (!nativeCrypto || !nativeCrypto.subtle) {\n throw Object.assign(\n new Error(\n 'Missing Web Crypto API. ' +\n 'The most likely cause of this error is that this page is being accessed ' +\n 'from an insecure context (i.e. not HTTPS). For more information and ' +\n 'possible resolutions see ' +\n 'https://github.com/libp2p/js-libp2p-crypto/blob/master/README.md#web-crypto-api'\n ),\n { code: 'ERR_MISSING_WEB_CRYPTO' }\n )\n }\n\n return nativeCrypto\n}\n","'use strict'\nconst randomBytes = require('iso-random-stream/src/random')\nconst errcode = require('err-code')\n\nmodule.exports = function (length) {\n if (isNaN(length) || length <= 0) {\n throw errcode(new Error('random bytes length must be a Number bigger than 0'), 'ERR_INVALID_LENGTH')\n }\n return randomBytes(length)\n}\n","export default function dlv(obj, key, def, p, undef) {\n\tkey = key.split ? key.split('.') : key;\n\tfor (p = 0; p < key.length; p++) {\n\t\tobj = obj ? obj[key[p]] : undef;\n\t}\n\treturn obj === undef ? def : obj;\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.js');\nvar map = require('it-map');\nvar itPipe = require('it-pipe');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar map__default = /*#__PURE__*/_interopDefaultLegacy(map);\n\nclass KeyTransformDatastore extends base.BaseDatastore {\n constructor(child, transform) {\n super();\n this.child = child;\n this.transform = transform;\n }\n open() {\n return this.child.open();\n }\n put(key, val, options) {\n return this.child.put(this.transform.convert(key), val, options);\n }\n get(key, options) {\n return this.child.get(this.transform.convert(key), options);\n }\n has(key, options) {\n return this.child.has(this.transform.convert(key), options);\n }\n delete(key, options) {\n return this.child.delete(this.transform.convert(key), options);\n }\n async *putMany(source, options = {}) {\n const transform = this.transform;\n const child = this.child;\n yield* itPipe.pipe(source, async function* (source) {\n yield* map__default['default'](source, ({key, value}) => ({\n key: transform.convert(key),\n value\n }));\n }, async function* (source) {\n yield* child.putMany(source, options);\n }, async function* (source) {\n yield* map__default['default'](source, ({key, value}) => ({\n key: transform.invert(key),\n value\n }));\n });\n }\n async *getMany(source, options = {}) {\n const transform = this.transform;\n const child = this.child;\n yield* itPipe.pipe(source, async function* (source) {\n yield* map__default['default'](source, key => transform.convert(key));\n }, async function* (source) {\n yield* child.getMany(source, options);\n });\n }\n async *deleteMany(source, options = {}) {\n const transform = this.transform;\n const child = this.child;\n yield* itPipe.pipe(source, async function* (source) {\n yield* map__default['default'](source, key => transform.convert(key));\n }, async function* (source) {\n yield* child.deleteMany(source, options);\n }, async function* (source) {\n yield* map__default['default'](source, key => transform.invert(key));\n });\n }\n batch() {\n const b = this.child.batch();\n return {\n put: (key, value) => {\n b.put(this.transform.convert(key), value);\n },\n delete: key => {\n b.delete(this.transform.convert(key));\n },\n commit: options => {\n return b.commit(options);\n }\n };\n }\n query(q, options) {\n return map__default['default'](this.child.query(q, options), ({key, value}) => {\n return {\n key: this.transform.invert(key),\n value\n };\n });\n }\n queryKeys(q, options) {\n return map__default['default'](this.child.queryKeys(q, options), key => {\n return this.transform.invert(key);\n });\n }\n close() {\n return this.child.close();\n }\n}\n\nexports.KeyTransformDatastore = KeyTransformDatastore;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction isBytes(obj) {\n return ArrayBuffer.isView(obj) || obj instanceof ArrayBuffer;\n}\nfunction isBlob(obj) {\n return obj.constructor && (obj.constructor.name === 'Blob' || obj.constructor.name === 'File') && typeof obj.stream === 'function';\n}\nfunction isFileObject(obj) {\n return typeof obj === 'object' && (obj.path || obj.content);\n}\nconst isReadableStream = value => value && typeof value.getReader === 'function';\n\nexports.isBlob = isBlob;\nexports.isBytes = isBytes;\nexports.isFileObject = isFileObject;\nexports.isReadableStream = isReadableStream;\n","'use strict'\n\nconst Bucket = require('./bucket')\nconst wrapHash = require('./consumable-hash')\n\n/**\n * @typedef {object} UserBucketOptions\n * @property {(value: Uint8Array) => Promise} hashFn\n * @property {number} [bits=8]\n */\n\n/**\n * @param {UserBucketOptions} options\n */\nfunction createHAMT (options) {\n if (!options || !options.hashFn) {\n throw new Error('please define an options.hashFn')\n }\n\n const bucketOptions = {\n bits: options.bits || 8,\n hash: wrapHash(options.hashFn)\n }\n\n return new Bucket(bucketOptions)\n}\n\nmodule.exports = {\n createHAMT,\n Bucket\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar mergeOpts = require('merge-options');\nvar toMfsPath = require('./utils/to-mfs-path.js');\nvar ipfsUnixfsExporter = require('ipfs-unixfs-exporter');\nvar debug = require('debug');\nvar errCode = require('err-code');\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\nvar dagPB = require('@ipld/dag-pb');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar mergeOpts__default = /*#__PURE__*/_interopDefaultLegacy(mergeOpts);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar dagPB__namespace = /*#__PURE__*/_interopNamespace(dagPB);\n\nconst mergeOptions = mergeOpts__default[\"default\"].bind({ ignoreUndefined: true });\nconst log = debug__default[\"default\"]('ipfs:mfs:stat');\nconst defaultOptions = { withLocal: false };\nfunction createStat(context) {\n async function mfsStat(path, options = {}) {\n options = mergeOptions(defaultOptions, options);\n log(`Fetching stats for ${ path }`);\n const {type, cid, mfsPath} = await toMfsPath.toMfsPath(context, path, options);\n const exportPath = type === 'ipfs' && cid ? cid : mfsPath;\n let file;\n try {\n file = await ipfsUnixfsExporter.exporter(exportPath, context.repo.blocks);\n } catch (err) {\n if (err.code === 'ERR_NOT_FOUND') {\n throw errCode__default[\"default\"](new Error(`${ path } does not exist`), 'ERR_NOT_FOUND');\n }\n throw err;\n }\n if (!statters[file.type]) {\n throw new Error(`Cannot stat codec ${ file.cid.code }`);\n }\n return statters[file.type](file);\n }\n return withTimeoutOption.withTimeoutOption(mfsStat);\n}\nconst statters = {\n raw: file => {\n return {\n cid: file.cid,\n size: file.node.length,\n cumulativeSize: file.node.length,\n blocks: 0,\n type: 'file',\n local: undefined,\n sizeLocal: undefined,\n withLocality: false\n };\n },\n file: file => {\n const stat = {\n cid: file.cid,\n type: 'file',\n size: file.unixfs.fileSize(),\n cumulativeSize: dagPB__namespace.encode(file.node).length + (file.node.Links || []).reduce((acc, curr) => acc + (curr.Tsize || 0), 0),\n blocks: file.unixfs.blockSizes.length,\n local: undefined,\n sizeLocal: undefined,\n withLocality: false,\n mode: file.unixfs.mode\n };\n if (file.unixfs.mtime) {\n stat.mtime = file.unixfs.mtime;\n }\n return stat;\n },\n directory: file => {\n const stat = {\n cid: file.cid,\n type: 'directory',\n size: 0,\n cumulativeSize: dagPB__namespace.encode(file.node).length + (file.node.Links || []).reduce((acc, curr) => acc + (curr.Tsize || 0), 0),\n blocks: file.node.Links.length,\n local: undefined,\n sizeLocal: undefined,\n withLocality: false,\n mode: file.unixfs.mode\n };\n if (file.unixfs.mtime) {\n stat.mtime = file.unixfs.mtime;\n }\n return stat;\n },\n object: file => {\n return {\n cid: file.cid,\n size: file.node.length,\n cumulativeSize: file.node.length,\n type: 'file',\n blocks: 0,\n local: undefined,\n sizeLocal: undefined,\n withLocality: false\n };\n },\n identity: file => {\n return {\n cid: file.cid,\n size: file.node.length,\n cumulativeSize: file.node.length,\n blocks: 0,\n type: 'file',\n local: undefined,\n sizeLocal: undefined,\n withLocality: false\n };\n }\n};\n\nexports.createStat = createStat;\n","'use strict'\n\n/**\n * Consumes the passed iterator and returns the number of items it contained.\n *\n * @param {AsyncIterable | Iterable} iterator\n * @returns {Promise}\n */\nconst length = async (iterator) => {\n let count = 0\n\n for await (const _ of iterator) { // eslint-disable-line no-unused-vars\n count++\n }\n\n return count\n}\n\nmodule.exports = length\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar key = require('interface-datastore/key');\nvar errors = require('datastore-core/errors');\n\nconst CONFIG_KEY = new key.Key('/config');\nconst VERSION_KEY = new key.Key('/version');\nfunction findLevelJs(store) {\n let db = store;\n while (db.db || db.child) {\n db = db.db || db.child;\n if (db.type === 'level-js' || db.constructor.name === 'Level') {\n return db;\n }\n }\n}\nasync function hasWithFallback(key, has, store) {\n const result = await has(key);\n if (result) {\n return result;\n }\n const levelJs = findLevelJs(store);\n if (!levelJs) {\n return false;\n }\n return new Promise((resolve, reject) => {\n const req = levelJs.store('readonly').get(key.toString());\n req.transaction.onabort = () => {\n reject(req.transaction.error);\n };\n req.transaction.oncomplete = () => {\n resolve(Boolean(req.result));\n };\n });\n}\nasync function getWithFallback(key, get, has, store) {\n if (await has(key)) {\n return get(key);\n }\n const levelJs = findLevelJs(store);\n if (!levelJs) {\n throw errors.notFoundError();\n }\n return new Promise((resolve, reject) => {\n const req = levelJs.store('readonly').get(key.toString());\n req.transaction.onabort = () => {\n reject(req.transaction.error);\n };\n req.transaction.oncomplete = () => {\n if (req.result) {\n return resolve(req.result);\n }\n reject(errors.notFoundError());\n };\n });\n}\nfunction wrapStore(store) {\n const originalGet = store.get.bind(store);\n const originalHas = store.has.bind(store);\n store.get = key => getWithFallback(key, originalGet, originalHas, store);\n store.has = key => hasWithFallback(key, originalHas, store);\n return store;\n}\nfunction wrapBackends(backends) {\n return {\n ...backends,\n root: wrapStore(backends.root),\n datastore: wrapStore(backends.datastore),\n pins: wrapStore(backends.pins),\n keys: wrapStore(backends.keys)\n };\n}\n\nexports.CONFIG_KEY = CONFIG_KEY;\nexports.VERSION_KEY = VERSION_KEY;\nexports.findLevelJs = findLevelJs;\nexports.hasWithFallback = hasWithFallback;\nexports.wrapBackends = wrapBackends;\n","'use strict'\n\nmodule.exports = function supports (...manifests) {\n const manifest = manifests.reduce((acc, m) => Object.assign(acc, m), {})\n\n return Object.assign(manifest, {\n // Features of abstract-leveldown\n bufferKeys: manifest.bufferKeys || false,\n snapshots: manifest.snapshots || false,\n permanence: manifest.permanence || false,\n seek: manifest.seek || false,\n clear: manifest.clear || false,\n getMany: manifest.getMany || false,\n keyIterator: manifest.keyIterator || false,\n valueIterator: manifest.valueIterator || false,\n iteratorNextv: manifest.iteratorNextv || false,\n iteratorAll: manifest.iteratorAll || false,\n\n // Features of abstract-leveldown that levelup doesn't have\n status: manifest.status || false,\n idempotentOpen: manifest.idempotentOpen || false,\n passiveOpen: manifest.passiveOpen || false,\n serialize: manifest.serialize || false,\n\n // Features of disk-based implementations\n createIfMissing: manifest.createIfMissing || false,\n errorIfExists: manifest.errorIfExists || false,\n\n // Features of level(up) that abstract-leveldown doesn't have yet\n deferredOpen: manifest.deferredOpen || false,\n openCallback: manifest.openCallback || false,\n promises: manifest.promises || false,\n streams: manifest.streams || false,\n encodings: maybeObject(manifest.encodings),\n events: maybeObject(manifest.events),\n\n // Methods that are not part of abstract-leveldown or levelup\n additionalMethods: Object.assign({}, manifest.additionalMethods)\n })\n}\n\nfunction maybeObject (value) {\n return !value ? false : Object.assign({}, value)\n}\n","'use strict'\n\nexports.getCallback = function (options, callback) {\n return typeof options === 'function' ? options : callback\n}\n\nexports.getOptions = function (options) {\n return typeof options === 'object' && options !== null ? options : {}\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar drain = require('it-drain');\nvar filter = require('it-filter');\nvar take = require('it-take');\nvar all = require('it-all');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar drain__default = /*#__PURE__*/_interopDefaultLegacy(drain);\nvar filter__default = /*#__PURE__*/_interopDefaultLegacy(filter);\nvar take__default = /*#__PURE__*/_interopDefaultLegacy(take);\nvar all__default = /*#__PURE__*/_interopDefaultLegacy(all);\n\nconst sortAll = (iterable, sorter) => {\n return async function* () {\n const values = await all__default['default'](iterable);\n yield* values.sort(sorter);\n }();\n};\nclass BaseBlockstore {\n open() {\n return Promise.reject(new Error('.open is not implemented'));\n }\n close() {\n return Promise.reject(new Error('.close is not implemented'));\n }\n put(key, val, options) {\n return Promise.reject(new Error('.put is not implemented'));\n }\n get(key, options) {\n return Promise.reject(new Error('.get is not implemented'));\n }\n has(key, options) {\n return Promise.reject(new Error('.has is not implemented'));\n }\n delete(key, options) {\n return Promise.reject(new Error('.delete is not implemented'));\n }\n async *putMany(source, options = {}) {\n for await (const {key, value} of source) {\n await this.put(key, value, options);\n yield {\n key,\n value\n };\n }\n }\n async *getMany(source, options = {}) {\n for await (const key of source) {\n yield this.get(key, options);\n }\n }\n async *deleteMany(source, options = {}) {\n for await (const key of source) {\n await this.delete(key, options);\n yield key;\n }\n }\n batch() {\n let puts = [];\n let dels = [];\n return {\n put(key, value) {\n puts.push({\n key,\n value\n });\n },\n delete(key) {\n dels.push(key);\n },\n commit: async options => {\n await drain__default['default'](this.putMany(puts, options));\n puts = [];\n await drain__default['default'](this.deleteMany(dels, options));\n dels = [];\n }\n };\n }\n async *_all(q, options) {\n throw new Error('._all is not implemented');\n }\n async *_allKeys(q, options) {\n throw new Error('._allKeys is not implemented');\n }\n query(q, options) {\n let it = this._all(q, options);\n if (q.prefix != null) {\n it = filter__default['default'](it, e => e.key.toString().startsWith(q.prefix || ''));\n }\n if (Array.isArray(q.filters)) {\n it = q.filters.reduce((it, f) => filter__default['default'](it, f), it);\n }\n if (Array.isArray(q.orders)) {\n it = q.orders.reduce((it, f) => sortAll(it, f), it);\n }\n if (q.offset != null) {\n let i = 0;\n it = filter__default['default'](it, () => i++ >= (q.offset || 0));\n }\n if (q.limit != null) {\n it = take__default['default'](it, q.limit);\n }\n return it;\n }\n queryKeys(q, options) {\n let it = this._allKeys(q, options);\n if (q.prefix != null) {\n it = filter__default['default'](it, cid => cid.toString().startsWith(q.prefix || ''));\n }\n if (Array.isArray(q.filters)) {\n it = q.filters.reduce((it, f) => filter__default['default'](it, f), it);\n }\n if (Array.isArray(q.orders)) {\n it = q.orders.reduce((it, f) => sortAll(it, f), it);\n }\n if (q.offset != null) {\n let i = 0;\n it = filter__default['default'](it, () => i++ >= q.offset);\n }\n if (q.limit != null) {\n it = take__default['default'](it, q.limit);\n }\n return it;\n }\n}\n\nexports.BaseBlockstore = BaseBlockstore;\n","'use strict'\n\nconst errCode = require('err-code')\nconst { concat: uint8arraysConcat } = require('uint8arrays/concat')\nconst { fromString: uint8arraysFromString } = require('uint8arrays/from-string')\n// @ts-ignore libp2p-crypto does not support types\nconst cryptoKeys = require('libp2p-crypto/src/keys')\nconst PeerId = require('peer-id')\nconst varint = require('varint')\nconst { equals: uint8arraysEquals } = require('uint8arrays/equals')\n\nconst { codes } = require('../../errors')\nconst { Envelope: Protobuf } = require('./envelope')\n\n/**\n * @typedef {import('libp2p-interfaces/src/record/types').Record} Record\n */\n\nclass Envelope {\n /**\n * The Envelope is responsible for keeping an arbitrary signed record\n * by a libp2p peer.\n *\n * @class\n * @param {object} params\n * @param {PeerId} params.peerId\n * @param {Uint8Array} params.payloadType\n * @param {Uint8Array} params.payload - marshaled record\n * @param {Uint8Array} params.signature - signature of the domain string :: type hint :: payload.\n */\n constructor ({ peerId, payloadType, payload, signature }) {\n this.peerId = peerId\n this.payloadType = payloadType\n this.payload = payload\n this.signature = signature\n\n // Cache\n this._marshal = undefined\n }\n\n /**\n * Marshal the envelope content.\n *\n * @returns {Uint8Array}\n */\n marshal () {\n if (this._marshal) {\n return this._marshal\n }\n\n const publicKey = cryptoKeys.marshalPublicKey(this.peerId.pubKey)\n\n this._marshal = Protobuf.encode({\n publicKey: publicKey,\n payloadType: this.payloadType,\n payload: this.payload,\n signature: this.signature\n }).finish()\n\n return this._marshal\n }\n\n /**\n * Verifies if the other Envelope is identical to this one.\n *\n * @param {Envelope} other\n * @returns {boolean}\n */\n equals (other) {\n return uint8arraysEquals(this.peerId.pubKey.bytes, other.peerId.pubKey.bytes) &&\n uint8arraysEquals(this.payloadType, other.payloadType) &&\n uint8arraysEquals(this.payload, other.payload) &&\n uint8arraysEquals(this.signature, other.signature)\n }\n\n /**\n * Validate envelope data signature for the given domain.\n *\n * @param {string} domain\n * @returns {Promise}\n */\n validate (domain) {\n const signData = formatSignaturePayload(domain, this.payloadType, this.payload)\n\n return this.peerId.pubKey.verify(signData, this.signature)\n }\n}\n\n/**\n * Helper function that prepares a Uint8Array to sign or verify a signature.\n *\n * @param {string} domain\n * @param {Uint8Array} payloadType\n * @param {Uint8Array} payload\n * @returns {Uint8Array}\n */\nconst formatSignaturePayload = (domain, payloadType, payload) => {\n // When signing, a peer will prepare a Uint8Array by concatenating the following:\n // - The length of the domain separation string string in bytes\n // - The domain separation string, encoded as UTF-8\n // - The length of the payload_type field in bytes\n // - The value of the payload_type field\n // - The length of the payload field in bytes\n // - The value of the payload field\n\n const domainUint8Array = uint8arraysFromString(domain)\n const domainLength = varint.encode(domainUint8Array.byteLength)\n const payloadTypeLength = varint.encode(payloadType.length)\n const payloadLength = varint.encode(payload.length)\n\n return uint8arraysConcat([\n new Uint8Array(domainLength),\n domainUint8Array,\n new Uint8Array(payloadTypeLength),\n payloadType,\n new Uint8Array(payloadLength),\n payload\n ])\n}\n\n/**\n * Unmarshal a serialized Envelope protobuf message.\n *\n * @param {Uint8Array} data\n * @returns {Promise}\n */\nEnvelope.createFromProtobuf = async (data) => {\n const envelopeData = Protobuf.decode(data)\n const peerId = await PeerId.createFromPubKey(envelopeData.publicKey)\n\n return new Envelope({\n peerId,\n payloadType: envelopeData.payloadType,\n payload: envelopeData.payload,\n signature: envelopeData.signature\n })\n}\n\n/**\n * Seal marshals the given Record, places the marshaled bytes inside an Envelope\n * and signs it with the given peerId's private key.\n *\n * @async\n * @param {Record} record\n * @param {PeerId} peerId\n * @returns {Promise}\n */\nEnvelope.seal = async (record, peerId) => {\n const domain = record.domain\n const payloadType = record.codec\n const payload = record.marshal()\n\n const signData = formatSignaturePayload(domain, payloadType, payload)\n const signature = await peerId.privKey.sign(signData)\n\n return new Envelope({\n peerId,\n payloadType,\n payload,\n signature\n })\n}\n\n/**\n * Open and certify a given marshalled envelope.\n * Data is unmarshalled and the signature validated for the given domain.\n *\n * @param {Uint8Array} data\n * @param {string} domain\n * @returns {Promise}\n */\nEnvelope.openAndCertify = async (data, domain) => {\n const envelope = await Envelope.createFromProtobuf(data)\n const valid = await envelope.validate(domain)\n\n if (!valid) {\n throw errCode(new Error('envelope signature is not valid for the given domain'), codes.ERR_SIGNATURE_NOT_VALID)\n }\n\n return envelope\n}\n\nmodule.exports = Envelope\n","module.exports = readable => {\n // Node.js stream\n if (readable[Symbol.asyncIterator]) return readable\n\n // Browser ReadableStream\n if (readable.getReader) {\n return (async function * () {\n const reader = readable.getReader()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) return\n yield value\n }\n } finally {\n reader.releaseLock()\n }\n })()\n }\n\n throw new Error('unknown stream')\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar toUrlSearchParams = require('../../lib/to-url-search-params.js');\n\nconst decodePin = ({\n Name: name,\n Status: status,\n Cid: cid$1\n}) => {\n return {\n cid: cid.CID.parse(cid$1),\n name,\n status\n };\n};\nconst encodeService = service => {\n if (typeof service === 'string' && service !== '') {\n return service;\n } else {\n throw new TypeError('service name must be passed');\n }\n};\nconst encodeCID = cid$1 => {\n if (cid.CID.asCID(cid$1)) {\n return cid$1.toString();\n } else {\n throw new TypeError(`CID instance expected instead of ${ typeof cid$1 }`);\n }\n};\nconst encodeQuery = ({service, cid, name, status, all}) => {\n const query = toUrlSearchParams.toUrlSearchParams({\n service: encodeService(service),\n name,\n force: all ? true : undefined\n });\n if (cid) {\n for (const value of cid) {\n query.append('cid', encodeCID(value));\n }\n }\n if (status) {\n for (const value of status) {\n query.append('status', value);\n }\n }\n return query;\n};\nconst encodeAddParams = ({cid, service, background, name, origins}) => {\n const params = toUrlSearchParams.toUrlSearchParams({\n arg: encodeCID(cid),\n service: encodeService(service),\n name,\n background: background ? true : undefined\n });\n if (origins) {\n for (const origin of origins) {\n params.append('origin', origin.toString());\n }\n }\n return params;\n};\n\nexports.decodePin = decodePin;\nexports.encodeAddParams = encodeAddParams;\nexports.encodeCID = encodeCID;\nexports.encodeQuery = encodeQuery;\nexports.encodeService = encodeService;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar fromString = require('uint8arrays/from-string');\nvar toString = require('uint8arrays/to-string');\nvar base64 = require('multiformats/bases/base64');\n\nconst rpcArrayToTextArray = strings => {\n if (Array.isArray(strings)) {\n return strings.map(rpcToText);\n }\n return strings;\n};\nconst rpcToText = mb => toString.toString(rpcToBytes(mb));\nconst rpcToBytes = mb => base64.base64url.decode(mb);\nconst textToUrlSafeRpc = text => base64.base64url.encode(fromString.fromString(text));\n\nexports.rpcArrayToTextArray = rpcArrayToTextArray;\nexports.rpcToBytes = rpcToBytes;\nexports.rpcToText = rpcToText;\nexports.textToUrlSafeRpc = textToUrlSafeRpc;\n","\"use strict\";\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Package binary provides functions for encoding and decoding numbers in byte arrays.\n */\nvar int_1 = require(\"@stablelib/int\");\n// TODO(dchest): add asserts for correct value ranges and array offsets.\n/**\n * Reads 2 bytes from array starting at offset as big-endian\n * signed 16-bit integer and returns it.\n */\nfunction readInt16BE(array, offset) {\n if (offset === void 0) { offset = 0; }\n return (((array[offset + 0] << 8) | array[offset + 1]) << 16) >> 16;\n}\nexports.readInt16BE = readInt16BE;\n/**\n * Reads 2 bytes from array starting at offset as big-endian\n * unsigned 16-bit integer and returns it.\n */\nfunction readUint16BE(array, offset) {\n if (offset === void 0) { offset = 0; }\n return ((array[offset + 0] << 8) | array[offset + 1]) >>> 0;\n}\nexports.readUint16BE = readUint16BE;\n/**\n * Reads 2 bytes from array starting at offset as little-endian\n * signed 16-bit integer and returns it.\n */\nfunction readInt16LE(array, offset) {\n if (offset === void 0) { offset = 0; }\n return (((array[offset + 1] << 8) | array[offset]) << 16) >> 16;\n}\nexports.readInt16LE = readInt16LE;\n/**\n * Reads 2 bytes from array starting at offset as little-endian\n * unsigned 16-bit integer and returns it.\n */\nfunction readUint16LE(array, offset) {\n if (offset === void 0) { offset = 0; }\n return ((array[offset + 1] << 8) | array[offset]) >>> 0;\n}\nexports.readUint16LE = readUint16LE;\n/**\n * Writes 2-byte big-endian representation of 16-bit unsigned\n * value to byte array starting at offset.\n *\n * If byte array is not given, creates a new 2-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeUint16BE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(2); }\n if (offset === void 0) { offset = 0; }\n out[offset + 0] = value >>> 8;\n out[offset + 1] = value >>> 0;\n return out;\n}\nexports.writeUint16BE = writeUint16BE;\nexports.writeInt16BE = writeUint16BE;\n/**\n * Writes 2-byte little-endian representation of 16-bit unsigned\n * value to array starting at offset.\n *\n * If byte array is not given, creates a new 2-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeUint16LE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(2); }\n if (offset === void 0) { offset = 0; }\n out[offset + 0] = value >>> 0;\n out[offset + 1] = value >>> 8;\n return out;\n}\nexports.writeUint16LE = writeUint16LE;\nexports.writeInt16LE = writeUint16LE;\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * signed 32-bit integer and returns it.\n */\nfunction readInt32BE(array, offset) {\n if (offset === void 0) { offset = 0; }\n return (array[offset] << 24) |\n (array[offset + 1] << 16) |\n (array[offset + 2] << 8) |\n array[offset + 3];\n}\nexports.readInt32BE = readInt32BE;\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * unsigned 32-bit integer and returns it.\n */\nfunction readUint32BE(array, offset) {\n if (offset === void 0) { offset = 0; }\n return ((array[offset] << 24) |\n (array[offset + 1] << 16) |\n (array[offset + 2] << 8) |\n array[offset + 3]) >>> 0;\n}\nexports.readUint32BE = readUint32BE;\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * signed 32-bit integer and returns it.\n */\nfunction readInt32LE(array, offset) {\n if (offset === void 0) { offset = 0; }\n return (array[offset + 3] << 24) |\n (array[offset + 2] << 16) |\n (array[offset + 1] << 8) |\n array[offset];\n}\nexports.readInt32LE = readInt32LE;\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * unsigned 32-bit integer and returns it.\n */\nfunction readUint32LE(array, offset) {\n if (offset === void 0) { offset = 0; }\n return ((array[offset + 3] << 24) |\n (array[offset + 2] << 16) |\n (array[offset + 1] << 8) |\n array[offset]) >>> 0;\n}\nexports.readUint32LE = readUint32LE;\n/**\n * Writes 4-byte big-endian representation of 32-bit unsigned\n * value to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeUint32BE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(4); }\n if (offset === void 0) { offset = 0; }\n out[offset + 0] = value >>> 24;\n out[offset + 1] = value >>> 16;\n out[offset + 2] = value >>> 8;\n out[offset + 3] = value >>> 0;\n return out;\n}\nexports.writeUint32BE = writeUint32BE;\nexports.writeInt32BE = writeUint32BE;\n/**\n * Writes 4-byte little-endian representation of 32-bit unsigned\n * value to array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeUint32LE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(4); }\n if (offset === void 0) { offset = 0; }\n out[offset + 0] = value >>> 0;\n out[offset + 1] = value >>> 8;\n out[offset + 2] = value >>> 16;\n out[offset + 3] = value >>> 24;\n return out;\n}\nexports.writeUint32LE = writeUint32LE;\nexports.writeInt32LE = writeUint32LE;\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * signed 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports exact\n * numbers in range -9007199254740991 to 9007199254740991.\n * If the number stored in the byte array is outside this range,\n * the result is not exact.\n */\nfunction readInt64BE(array, offset) {\n if (offset === void 0) { offset = 0; }\n var hi = readInt32BE(array, offset);\n var lo = readInt32BE(array, offset + 4);\n return hi * 0x100000000 + lo - ((lo >> 31) * 0x100000000);\n}\nexports.readInt64BE = readInt64BE;\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * unsigned 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports values up to 2^53-1.\n */\nfunction readUint64BE(array, offset) {\n if (offset === void 0) { offset = 0; }\n var hi = readUint32BE(array, offset);\n var lo = readUint32BE(array, offset + 4);\n return hi * 0x100000000 + lo;\n}\nexports.readUint64BE = readUint64BE;\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * signed 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports exact\n * numbers in range -9007199254740991 to 9007199254740991.\n * If the number stored in the byte array is outside this range,\n * the result is not exact.\n */\nfunction readInt64LE(array, offset) {\n if (offset === void 0) { offset = 0; }\n var lo = readInt32LE(array, offset);\n var hi = readInt32LE(array, offset + 4);\n return hi * 0x100000000 + lo - ((lo >> 31) * 0x100000000);\n}\nexports.readInt64LE = readInt64LE;\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * unsigned 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports values up to 2^53-1.\n */\nfunction readUint64LE(array, offset) {\n if (offset === void 0) { offset = 0; }\n var lo = readUint32LE(array, offset);\n var hi = readUint32LE(array, offset + 4);\n return hi * 0x100000000 + lo;\n}\nexports.readUint64LE = readUint64LE;\n/**\n * Writes 8-byte big-endian representation of 64-bit unsigned\n * value to byte array starting at offset.\n *\n * Due to JavaScript limitation, supports values up to 2^53-1.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeUint64BE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(8); }\n if (offset === void 0) { offset = 0; }\n writeUint32BE(value / 0x100000000 >>> 0, out, offset);\n writeUint32BE(value >>> 0, out, offset + 4);\n return out;\n}\nexports.writeUint64BE = writeUint64BE;\nexports.writeInt64BE = writeUint64BE;\n/**\n * Writes 8-byte little-endian representation of 64-bit unsigned\n * value to byte array starting at offset.\n *\n * Due to JavaScript limitation, supports values up to 2^53-1.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeUint64LE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(8); }\n if (offset === void 0) { offset = 0; }\n writeUint32LE(value >>> 0, out, offset);\n writeUint32LE(value / 0x100000000 >>> 0, out, offset + 4);\n return out;\n}\nexports.writeUint64LE = writeUint64LE;\nexports.writeInt64LE = writeUint64LE;\n/**\n * Reads bytes from array starting at offset as big-endian\n * unsigned bitLen-bit integer and returns it.\n *\n * Supports bit lengths divisible by 8, up to 48.\n */\nfunction readUintBE(bitLength, array, offset) {\n if (offset === void 0) { offset = 0; }\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"readUintBE supports only bitLengths divisible by 8\");\n }\n if (bitLength / 8 > array.length - offset) {\n throw new Error(\"readUintBE: array is too short for the given bitLength\");\n }\n var result = 0;\n var mul = 1;\n for (var i = bitLength / 8 + offset - 1; i >= offset; i--) {\n result += array[i] * mul;\n mul *= 256;\n }\n return result;\n}\nexports.readUintBE = readUintBE;\n/**\n * Reads bytes from array starting at offset as little-endian\n * unsigned bitLen-bit integer and returns it.\n *\n * Supports bit lengths divisible by 8, up to 48.\n */\nfunction readUintLE(bitLength, array, offset) {\n if (offset === void 0) { offset = 0; }\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"readUintLE supports only bitLengths divisible by 8\");\n }\n if (bitLength / 8 > array.length - offset) {\n throw new Error(\"readUintLE: array is too short for the given bitLength\");\n }\n var result = 0;\n var mul = 1;\n for (var i = offset; i < offset + bitLength / 8; i++) {\n result += array[i] * mul;\n mul *= 256;\n }\n return result;\n}\nexports.readUintLE = readUintLE;\n/**\n * Writes a big-endian representation of bitLen-bit unsigned\n * value to array starting at offset.\n *\n * Supports bit lengths divisible by 8, up to 48.\n *\n * If byte array is not given, creates a new one.\n *\n * Returns the output byte array.\n */\nfunction writeUintBE(bitLength, value, out, offset) {\n if (out === void 0) { out = new Uint8Array(bitLength / 8); }\n if (offset === void 0) { offset = 0; }\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"writeUintBE supports only bitLengths divisible by 8\");\n }\n if (!int_1.isSafeInteger(value)) {\n throw new Error(\"writeUintBE value must be an integer\");\n }\n var div = 1;\n for (var i = bitLength / 8 + offset - 1; i >= offset; i--) {\n out[i] = (value / div) & 0xff;\n div *= 256;\n }\n return out;\n}\nexports.writeUintBE = writeUintBE;\n/**\n * Writes a little-endian representation of bitLen-bit unsigned\n * value to array starting at offset.\n *\n * Supports bit lengths divisible by 8, up to 48.\n *\n * If byte array is not given, creates a new one.\n *\n * Returns the output byte array.\n */\nfunction writeUintLE(bitLength, value, out, offset) {\n if (out === void 0) { out = new Uint8Array(bitLength / 8); }\n if (offset === void 0) { offset = 0; }\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"writeUintLE supports only bitLengths divisible by 8\");\n }\n if (!int_1.isSafeInteger(value)) {\n throw new Error(\"writeUintLE value must be an integer\");\n }\n var div = 1;\n for (var i = offset; i < offset + bitLength / 8; i++) {\n out[i] = (value / div) & 0xff;\n div *= 256;\n }\n return out;\n}\nexports.writeUintLE = writeUintLE;\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * 32-bit floating-point number and returns it.\n */\nfunction readFloat32BE(array, offset) {\n if (offset === void 0) { offset = 0; }\n var view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat32(offset);\n}\nexports.readFloat32BE = readFloat32BE;\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * 32-bit floating-point number and returns it.\n */\nfunction readFloat32LE(array, offset) {\n if (offset === void 0) { offset = 0; }\n var view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat32(offset, true);\n}\nexports.readFloat32LE = readFloat32LE;\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * 64-bit floating-point number (\"double\") and returns it.\n */\nfunction readFloat64BE(array, offset) {\n if (offset === void 0) { offset = 0; }\n var view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat64(offset);\n}\nexports.readFloat64BE = readFloat64BE;\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * 64-bit floating-point number (\"double\") and returns it.\n */\nfunction readFloat64LE(array, offset) {\n if (offset === void 0) { offset = 0; }\n var view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat64(offset, true);\n}\nexports.readFloat64LE = readFloat64LE;\n/**\n * Writes 4-byte big-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeFloat32BE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(4); }\n if (offset === void 0) { offset = 0; }\n var view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat32(offset, value);\n return out;\n}\nexports.writeFloat32BE = writeFloat32BE;\n/**\n * Writes 4-byte little-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeFloat32LE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(4); }\n if (offset === void 0) { offset = 0; }\n var view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat32(offset, value, true);\n return out;\n}\nexports.writeFloat32LE = writeFloat32LE;\n/**\n * Writes 8-byte big-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeFloat64BE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(8); }\n if (offset === void 0) { offset = 0; }\n var view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat64(offset, value);\n return out;\n}\nexports.writeFloat64BE = writeFloat64BE;\n/**\n * Writes 8-byte little-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nfunction writeFloat64LE(value, out, offset) {\n if (out === void 0) { out = new Uint8Array(8); }\n if (offset === void 0) { offset = 0; }\n var view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat64(offset, value, true);\n return out;\n}\nexports.writeFloat64LE = writeFloat64LE;\n//# sourceMappingURL=binary.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode2 = exports.decode1 = exports.decode0 = exports.encode2 = exports.encode1 = exports.encode0 = exports.uint16BEDecode = exports.uint16BEEncode = void 0;\nconst buffer_1 = require(\"buffer\");\nconst uint16BEEncode = (value, target, offset) => {\n target = target || buffer_1.Buffer.allocUnsafe(2);\n target.writeUInt16BE(value, offset);\n return target;\n};\nexports.uint16BEEncode = uint16BEEncode;\nexports.uint16BEEncode.bytes = 2;\nconst uint16BEDecode = (data) => {\n if (data.length < 2)\n throw RangeError('Could not decode int16BE');\n return data.readUInt16BE(0);\n};\nexports.uint16BEDecode = uint16BEDecode;\nexports.uint16BEDecode.bytes = 2;\n// Note: IK and XX encoder usage is opposite (XX uses in stages encode0 where IK uses encode1)\nfunction encode0(message) {\n return buffer_1.Buffer.concat([message.ne, message.ciphertext]);\n}\nexports.encode0 = encode0;\nfunction encode1(message) {\n return buffer_1.Buffer.concat([message.ne, message.ns, message.ciphertext]);\n}\nexports.encode1 = encode1;\nfunction encode2(message) {\n return buffer_1.Buffer.concat([message.ns, message.ciphertext]);\n}\nexports.encode2 = encode2;\nfunction decode0(input) {\n if (input.length < 32) {\n throw new Error('Cannot decode stage 0 MessageBuffer: length less than 32 bytes.');\n }\n return {\n ne: input.slice(0, 32),\n ciphertext: input.slice(32, input.length),\n ns: buffer_1.Buffer.alloc(0)\n };\n}\nexports.decode0 = decode0;\nfunction decode1(input) {\n if (input.length < 80) {\n throw new Error('Cannot decode stage 1 MessageBuffer: length less than 80 bytes.');\n }\n return {\n ne: input.slice(0, 32),\n ns: input.slice(32, 80),\n ciphertext: input.slice(80, input.length)\n };\n}\nexports.decode1 = decode1;\nfunction decode2(input) {\n if (input.length < 48) {\n throw new Error('Cannot decode stage 2 MessageBuffer: length less than 48 bytes.');\n }\n return {\n ne: buffer_1.Buffer.alloc(0),\n ns: input.slice(0, 48),\n ciphertext: input.slice(48, input.length)\n };\n}\nexports.decode2 = decode2;\n//# sourceMappingURL=encoder.js.map","'use strict'\n\nmodule.exports = {\n relay: '/libp2p/circuit/relay/0.1.0'\n}\n","'use strict'\n\nconst errcode = require('err-code')\nconst PeerId = require('peer-id')\nconst { codes } = require('../errors')\n\n/**\n * @param {any} data\n */\nconst passthrough = data => data\n\n/**\n * @typedef {import('./')} PeerStore\n */\n\nclass Book {\n /**\n * The Book is the skeleton for the PeerStore books.\n *\n * @class\n * @param {Object} properties\n * @param {PeerStore} properties.peerStore - PeerStore instance.\n * @param {string} properties.eventName - Name of the event to emit by the PeerStore.\n * @param {string} properties.eventProperty - Name of the property to emit by the PeerStore.\n * @param {(data: any) => any[]} [properties.eventTransformer] - Transformer function of the provided data for being emitted.\n */\n constructor ({ peerStore, eventName, eventProperty, eventTransformer = passthrough }) {\n this._ps = peerStore\n this.eventName = eventName\n this.eventProperty = eventProperty\n this.eventTransformer = eventTransformer\n\n /**\n * Map known peers to their data.\n *\n * @type {Map}\n */\n this.data = new Map()\n }\n\n /**\n * Set known data of a provided peer.\n *\n * @param {PeerId} peerId\n * @param {any[]|any} data\n */\n set (peerId, data) {\n throw errcode(new Error('set must be implemented by the subclass'), codes.ERR_NOT_IMPLEMENTED)\n }\n\n /**\n * Set data into the datastructure, persistence and emit it using the provided transformers.\n *\n * @protected\n * @param {PeerId} peerId - peerId of the data to store\n * @param {any} data - data to store.\n * @param {Object} [options] - storing options.\n * @param {boolean} [options.emit = true] - emit the provided data.\n * @returns {void}\n */\n _setData (peerId, data, { emit = true } = {}) {\n const b58key = peerId.toB58String()\n\n // Store data in memory\n this.data.set(b58key, data)\n\n // Emit event\n emit && this._emit(peerId, data)\n }\n\n /**\n * Emit data.\n *\n * @protected\n * @param {PeerId} peerId\n * @param {any} [data]\n */\n _emit (peerId, data) {\n this._ps.emit(this.eventName, {\n peerId,\n [this.eventProperty]: this.eventTransformer(data)\n })\n }\n\n /**\n * Get the known data of a provided peer.\n * Returns `undefined` if there is no available data for the given peer.\n *\n * @param {PeerId} peerId\n * @returns {any[]|any|undefined}\n */\n get (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n const rec = this.data.get(peerId.toB58String())\n\n // @ts-ignore\n return rec ? [...rec] : undefined\n }\n\n /**\n * Deletes the provided peer from the book.\n *\n * @param {PeerId} peerId\n * @returns {boolean}\n */\n delete (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (!this.data.delete(peerId.toB58String())) {\n return false\n }\n\n this._emit(peerId, [])\n\n return true\n }\n}\n\nmodule.exports = Book\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar sha2 = require('multiformats/hashes/sha2');\nvar base58 = require('multiformats/bases/base58');\nvar vd = require('varint-decoder');\nvar varintEncoder = require('../utils/varint-encoder.js');\nvar index = require('../utils/index.js');\nvar message = require('./message.js');\nvar entry = require('./entry.js');\nvar errcode = require('err-code');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar vd__default = /*#__PURE__*/_interopDefaultLegacy(vd);\nvar errcode__default = /*#__PURE__*/_interopDefaultLegacy(errcode);\n\nclass BitswapMessage {\n constructor(full) {\n this.full = full;\n this.wantlist = new Map();\n this.blocks = new Map();\n this.blockPresences = new Map();\n this.pendingBytes = 0;\n }\n get empty() {\n return this.blocks.size === 0 && this.wantlist.size === 0 && this.blockPresences.size === 0;\n }\n addEntry(cid, priority, wantType, cancel, sendDontHave) {\n if (wantType == null) {\n wantType = BitswapMessage.WantType.Block;\n }\n const cidStr = cid.toString(base58.base58btc);\n const entry$1 = this.wantlist.get(cidStr);\n if (entry$1) {\n if (entry$1.wantType === wantType) {\n entry$1.priority = priority;\n }\n if (cancel) {\n entry$1.cancel = Boolean(cancel);\n }\n if (sendDontHave) {\n entry$1.sendDontHave = Boolean(sendDontHave);\n }\n if (wantType === BitswapMessage.WantType.Block && entry$1.wantType === BitswapMessage.WantType.Have) {\n entry$1.wantType = wantType;\n }\n } else {\n this.wantlist.set(cidStr, new entry.BitswapMessageEntry(cid, priority, wantType, cancel, sendDontHave));\n }\n }\n addBlock(cid, block) {\n const cidStr = cid.toString(base58.base58btc);\n this.blocks.set(cidStr, block);\n }\n addHave(cid) {\n const cidStr = cid.toString(base58.base58btc);\n if (!this.blockPresences.has(cidStr)) {\n this.blockPresences.set(cidStr, BitswapMessage.BlockPresenceType.Have);\n }\n }\n addDontHave(cid) {\n const cidStr = cid.toString(base58.base58btc);\n if (!this.blockPresences.has(cidStr)) {\n this.blockPresences.set(cidStr, BitswapMessage.BlockPresenceType.DontHave);\n }\n }\n cancel(cid) {\n const cidStr = cid.toString(base58.base58btc);\n this.wantlist.delete(cidStr);\n this.addEntry(cid, 0, BitswapMessage.WantType.Block, true, false);\n }\n setPendingBytes(size) {\n this.pendingBytes = size;\n }\n serializeToBitswap100() {\n const msg = {\n wantlist: {\n entries: Array.from(this.wantlist.values()).map(entry => {\n return {\n block: entry.cid.bytes,\n priority: Number(entry.priority),\n cancel: Boolean(entry.cancel)\n };\n }),\n full: this.full ? true : undefined\n },\n blocks: Array.from(this.blocks.values())\n };\n return message.Message.encode(msg).finish();\n }\n serializeToBitswap110() {\n const msg = {\n wantlist: {\n entries: Array.from(this.wantlist.values()).map(entry => {\n return {\n block: entry.cid.bytes,\n priority: Number(entry.priority),\n wantType: entry.wantType,\n cancel: Boolean(entry.cancel),\n sendDontHave: Boolean(entry.sendDontHave)\n };\n }),\n full: this.full ? true : undefined\n },\n blockPresences: [],\n payload: [],\n pendingBytes: this.pendingBytes\n };\n for (const [cidStr, data] of this.blocks.entries()) {\n const cid$1 = cid.CID.parse(cidStr);\n const version = cid$1.version;\n const codec = cid$1.code;\n const multihash = cid$1.multihash.code;\n const digestLength = cid$1.multihash.digest.length;\n const prefix = varintEncoder([\n version,\n codec,\n multihash,\n digestLength\n ]);\n msg.payload.push(new message.Message.Block({\n prefix,\n data\n }));\n }\n for (const [cidStr, bpType] of this.blockPresences) {\n msg.blockPresences.push(new message.Message.BlockPresence({\n cid: cid.CID.parse(cidStr).bytes,\n type: bpType\n }));\n }\n if (this.pendingBytes > 0) {\n msg.pendingBytes = this.pendingBytes;\n }\n return message.Message.encode(msg).finish();\n }\n equals(other) {\n if (this.full !== other.full || this.pendingBytes !== other.pendingBytes || !index.isMapEqual(this.wantlist, other.wantlist) || !index.isMapEqual(this.blocks, other.blocks) || !index.isMapEqual(this.blockPresences, other.blockPresences)) {\n return false;\n }\n return true;\n }\n get [Symbol.toStringTag]() {\n const list = Array.from(this.wantlist.keys());\n const blocks = Array.from(this.blocks.keys());\n return `BitswapMessage `;\n }\n}\nBitswapMessage.deserialize = async (raw, hashLoader) => {\n const decoded = message.Message.decode(raw);\n const isFull = decoded.wantlist && decoded.wantlist.full || false;\n const msg = new BitswapMessage(isFull);\n if (decoded.wantlist && decoded.wantlist.entries) {\n decoded.wantlist.entries.forEach(entry => {\n if (!entry.block) {\n return;\n }\n const cid$1 = cid.CID.decode(entry.block);\n msg.addEntry(cid$1, entry.priority || 0, entry.wantType, Boolean(entry.cancel), Boolean(entry.sendDontHave));\n });\n }\n if (decoded.blockPresences) {\n decoded.blockPresences.forEach(blockPresence => {\n if (!blockPresence.cid) {\n return;\n }\n const cid$1 = cid.CID.decode(blockPresence.cid);\n if (blockPresence.type === BitswapMessage.BlockPresenceType.Have) {\n msg.addHave(cid$1);\n } else {\n msg.addDontHave(cid$1);\n }\n });\n }\n if (decoded.blocks.length > 0) {\n await Promise.all(decoded.blocks.map(async b => {\n const hash = await sha2.sha256.digest(b);\n const cid$1 = cid.CID.createV0(hash);\n msg.addBlock(cid$1, b);\n }));\n return msg;\n }\n if (decoded.payload.length > 0) {\n await Promise.all(decoded.payload.map(async p => {\n if (!p.prefix || !p.data) {\n return;\n }\n const values = vd__default[\"default\"](p.prefix);\n const cidVersion = values[0];\n const multicodec = values[1];\n const hashAlg = values[2];\n const hasher = hashAlg === sha2.sha256.code ? sha2.sha256 : hashLoader && await hashLoader.getHasher(hashAlg);\n if (!hasher) {\n throw errcode__default[\"default\"](new Error('Unknown hash algorithm'), 'ERR_UNKNOWN_HASH_ALG');\n }\n const hash = await hasher.digest(p.data);\n const cid$1 = cid.CID.create(cidVersion, multicodec, hash);\n msg.addBlock(cid$1, p.data);\n }));\n msg.setPendingBytes(decoded.pendingBytes);\n return msg;\n }\n return msg;\n};\nBitswapMessage.blockPresenceSize = cid => {\n return cid.bytes.length + 1;\n};\nBitswapMessage.Entry = entry.BitswapMessageEntry;\nBitswapMessage.WantType = {\n Block: message.Message.Wantlist.WantType.Block,\n Have: message.Message.Wantlist.WantType.Have\n};\nBitswapMessage.BlockPresenceType = {\n Have: message.Message.BlockPresenceType.Have,\n DontHave: message.Message.BlockPresenceType.DontHave\n};\n\nexports.BitswapMessage = BitswapMessage;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar entry = require('./entry.js');\nvar base58 = require('multiformats/bases/base58');\nvar message = require('../message/message.js');\n\nconst WantType = {\n Block: message.Message.Wantlist.WantType.Block,\n Have: message.Message.Wantlist.WantType.Have\n};\nconst sortBy = (fn, list) => {\n return Array.prototype.slice.call(list, 0).sort((a, b) => {\n const aa = fn(a);\n const bb = fn(b);\n return aa < bb ? -1 : aa > bb ? 1 : 0;\n });\n};\nclass Wantlist {\n constructor(stats) {\n this.set = new Map();\n this._stats = stats;\n }\n get length() {\n return this.set.size;\n }\n add(cid, priority, wantType) {\n const cidStr = cid.toString(base58.base58btc);\n const entry$1 = this.set.get(cidStr);\n if (entry$1) {\n entry$1.inc();\n entry$1.priority = priority;\n if (entry$1.wantType === WantType.Have && wantType === WantType.Block) {\n entry$1.wantType = wantType;\n }\n } else {\n this.set.set(cidStr, new entry.WantListEntry(cid, priority, wantType));\n if (this._stats) {\n this._stats.push(null, 'wantListSize', 1);\n }\n }\n }\n remove(cid) {\n const cidStr = cid.toString(base58.base58btc);\n const entry = this.set.get(cidStr);\n if (!entry) {\n return;\n }\n entry.dec();\n if (entry.hasRefs()) {\n return;\n }\n this.set.delete(cidStr);\n if (this._stats) {\n this._stats.push(null, 'wantListSize', -1);\n }\n }\n removeForce(cidStr) {\n if (this.set.has(cidStr)) {\n this.set.delete(cidStr);\n }\n }\n forEach(fn) {\n return this.set.forEach(fn);\n }\n entries() {\n return this.set.entries();\n }\n sortedEntries() {\n return new Map(sortBy(o => o[1].key, Array.from(this.set.entries())));\n }\n contains(cid) {\n const cidStr = cid.toString(base58.base58btc);\n return this.set.has(cidStr);\n }\n get(cid) {\n const cidStr = cid.toString(base58.base58btc);\n return this.set.get(cidStr);\n }\n}\nWantlist.Entry = entry.WantListEntry;\n\nexports.Wantlist = Wantlist;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst SECOND = 1000;\nconst maxProvidersPerRequest = 3;\nconst providerRequestTimeout = 10 * SECOND;\nconst hasBlockTimeout = 15 * SECOND;\nconst provideTimeout = 15 * SECOND;\nconst kMaxPriority = Math.pow(2, 31) - 1;\nconst maxListeners = 1000;\nconst wantlistSendDebounceMs = 1;\n\nexports.hasBlockTimeout = hasBlockTimeout;\nexports.kMaxPriority = kMaxPriority;\nexports.maxListeners = maxListeners;\nexports.maxProvidersPerRequest = maxProvidersPerRequest;\nexports.provideTimeout = provideTimeout;\nexports.providerRequestTimeout = providerRequestTimeout;\nexports.wantlistSendDebounceMs = wantlistSendDebounceMs;\n","// ES6 Map\nvar map\ntry {\n map = Map\n} catch (_) { }\nvar set\n\n// ES6 Set\ntry {\n set = Set\n} catch (_) { }\n\nfunction baseClone (src, circulars, clones) {\n // Null/undefined/functions/etc\n if (!src || typeof src !== 'object' || typeof src === 'function') {\n return src\n }\n\n // DOM Node\n if (src.nodeType && 'cloneNode' in src) {\n return src.cloneNode(true)\n }\n\n // Date\n if (src instanceof Date) {\n return new Date(src.getTime())\n }\n\n // RegExp\n if (src instanceof RegExp) {\n return new RegExp(src)\n }\n\n // Arrays\n if (Array.isArray(src)) {\n return src.map(clone)\n }\n\n // ES6 Maps\n if (map && src instanceof map) {\n return new Map(Array.from(src.entries()))\n }\n\n // ES6 Sets\n if (set && src instanceof set) {\n return new Set(Array.from(src.values()))\n }\n\n // Object\n if (src instanceof Object) {\n circulars.push(src)\n var obj = Object.create(src)\n clones.push(obj)\n for (var key in src) {\n var idx = circulars.findIndex(function (i) {\n return i === src[key]\n })\n obj[key] = idx > -1 ? clones[idx] : baseClone(src[key], circulars, clones)\n }\n return obj\n }\n\n // ???\n return src\n}\n\nexport default function clone (src) {\n return baseClone(src, [], [])\n}\n","const toString = Object.prototype.toString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\n\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && 1 / val < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\n\nfunction printSimpleValue(val, quoteStrings = false) {\n if (val == null || val === true || val === false) return '' + val;\n const typeOf = typeof val;\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return quoteStrings ? `\"${val}\"` : val;\n if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';\n if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n const tag = toString.call(val).slice(8, -1);\n if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);\n if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';\n if (tag === 'RegExp') return regExpToString.call(val);\n return null;\n}\n\nexport default function printValue(value, quoteStrings) {\n let result = printSimpleValue(value, quoteStrings);\n if (result !== null) return result;\n return JSON.stringify(value, function (key, value) {\n let result = printSimpleValue(this[key], quoteStrings);\n if (result !== null) return result;\n return value;\n }, 2);\n}","import printValue from './util/printValue';\nexport let mixed = {\n default: '${path} is invalid',\n required: '${path} is a required field',\n oneOf: '${path} must be one of the following values: ${values}',\n notOneOf: '${path} must not be one of the following values: ${values}',\n notType: ({\n path,\n type,\n value,\n originalValue\n }) => {\n let isCast = originalValue != null && originalValue !== value;\n let msg = `${path} must be a \\`${type}\\` type, ` + `but the final value was: \\`${printValue(value, true)}\\`` + (isCast ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.');\n\n if (value === null) {\n msg += `\\n If \"null\" is intended as an empty value be sure to mark the schema as \\`.nullable()\\``;\n }\n\n return msg;\n },\n defined: '${path} must be defined'\n};\nexport let string = {\n length: '${path} must be exactly ${length} characters',\n min: '${path} must be at least ${min} characters',\n max: '${path} must be at most ${max} characters',\n matches: '${path} must match the following: \"${regex}\"',\n email: '${path} must be a valid email',\n url: '${path} must be a valid URL',\n uuid: '${path} must be a valid UUID',\n trim: '${path} must be a trimmed string',\n lowercase: '${path} must be a lowercase string',\n uppercase: '${path} must be a upper case string'\n};\nexport let number = {\n min: '${path} must be greater than or equal to ${min}',\n max: '${path} must be less than or equal to ${max}',\n lessThan: '${path} must be less than ${less}',\n moreThan: '${path} must be greater than ${more}',\n positive: '${path} must be a positive number',\n negative: '${path} must be a negative number',\n integer: '${path} must be an integer'\n};\nexport let date = {\n min: '${path} field must be later than ${min}',\n max: '${path} field must be at earlier than ${max}'\n};\nexport let boolean = {\n isValue: '${path} field must be ${value}'\n};\nexport let object = {\n noUnknown: '${path} field has unspecified keys: ${unknown}'\n};\nexport let array = {\n min: '${path} field must have at least ${min} items',\n max: '${path} field must have less than or equal to ${max} items',\n length: '${path} must have ${length} items'\n};\nexport default Object.assign(Object.create(null), {\n mixed,\n string,\n number,\n date,\n object,\n array,\n boolean\n});","const isSchema = obj => obj && obj.__isYupSchema__;\n\nexport default isSchema;","import has from 'lodash/has';\nimport isSchema from './util/isSchema';\n\nclass Condition {\n constructor(refs, options) {\n this.fn = void 0;\n this.refs = refs;\n this.refs = refs;\n\n if (typeof options === 'function') {\n this.fn = options;\n return;\n }\n\n if (!has(options, 'is')) throw new TypeError('`is:` is required for `when()` conditions');\n if (!options.then && !options.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');\n let {\n is,\n then,\n otherwise\n } = options;\n let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);\n\n this.fn = function (...args) {\n let options = args.pop();\n let schema = args.pop();\n let branch = check(...args) ? then : otherwise;\n if (!branch) return undefined;\n if (typeof branch === 'function') return branch(schema);\n return schema.concat(branch.resolve(options));\n };\n }\n\n resolve(base, options) {\n let values = this.refs.map(ref => ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));\n let schema = this.fn.apply(base, values.concat(base, options));\n if (schema === undefined || schema === base) return base;\n if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');\n return schema.resolve(options);\n }\n\n}\n\nexport default Condition;","export default function toArray(value) {\n return value == null ? [] : [].concat(value);\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport printValue from './util/printValue';\nimport toArray from './util/toArray';\nlet strReg = /\\$\\{\\s*(\\w+)\\s*\\}/g;\nexport default class ValidationError extends Error {\n static formatError(message, params) {\n const path = params.label || params.path || 'this';\n if (path !== params.path) params = _extends({}, params, {\n path\n });\n if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));\n if (typeof message === 'function') return message(params);\n return message;\n }\n\n static isError(err) {\n return err && err.name === 'ValidationError';\n }\n\n constructor(errorOrErrors, value, field, type) {\n super();\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.errors = void 0;\n this.params = void 0;\n this.inner = void 0;\n this.name = 'ValidationError';\n this.value = value;\n this.path = field;\n this.type = type;\n this.errors = [];\n this.inner = [];\n toArray(errorOrErrors).forEach(err => {\n if (ValidationError.isError(err)) {\n this.errors.push(...err.errors);\n this.inner = this.inner.concat(err.inner.length ? err.inner : err);\n } else {\n this.errors.push(err);\n }\n });\n this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];\n if (Error.captureStackTrace) Error.captureStackTrace(this, ValidationError);\n }\n\n}","import ValidationError from '../ValidationError';\n\nconst once = cb => {\n let fired = false;\n return (...args) => {\n if (fired) return;\n fired = true;\n cb(...args);\n };\n};\n\nexport default function runTests(options, cb) {\n let {\n endEarly,\n tests,\n args,\n value,\n errors,\n sort,\n path\n } = options;\n let callback = once(cb);\n let count = tests.length;\n const nestedErrors = [];\n errors = errors ? errors : [];\n if (!count) return errors.length ? callback(new ValidationError(errors, value, path)) : callback(null, value);\n\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n test(args, function finishTestRun(err) {\n if (err) {\n // always return early for non validation errors\n if (!ValidationError.isError(err)) {\n return callback(err, value);\n }\n\n if (endEarly) {\n err.value = value;\n return callback(err, value);\n }\n\n nestedErrors.push(err);\n }\n\n if (--count <= 0) {\n if (nestedErrors.length) {\n if (sort) nestedErrors.sort(sort); //show parent errors after the nested ones: name.first, name\n\n if (errors.length) nestedErrors.push(...errors);\n errors = nestedErrors;\n }\n\n if (errors.length) {\n callback(new ValidationError(errors, value, path), value);\n return;\n }\n\n callback(null, value);\n }\n });\n }\n}","import { getter } from 'property-expr';\nconst prefixes = {\n context: '$',\n value: '.'\n};\nexport function create(key, options) {\n return new Reference(key, options);\n}\nexport default class Reference {\n constructor(key, options = {}) {\n this.key = void 0;\n this.isContext = void 0;\n this.isValue = void 0;\n this.isSibling = void 0;\n this.path = void 0;\n this.getter = void 0;\n this.map = void 0;\n if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);\n this.key = key.trim();\n if (key === '') throw new TypeError('ref must be a non-empty string');\n this.isContext = this.key[0] === prefixes.context;\n this.isValue = this.key[0] === prefixes.value;\n this.isSibling = !this.isContext && !this.isValue;\n let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';\n this.path = this.key.slice(prefix.length);\n this.getter = this.path && getter(this.path, true);\n this.map = options.map;\n }\n\n getValue(value, parent, context) {\n let result = this.isContext ? context : this.isValue ? value : parent;\n if (this.getter) result = this.getter(result || {});\n if (this.map) result = this.map(result);\n return result;\n }\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {Object=} options.context\n * @param {Object=} options.parent\n */\n\n\n cast(value, options) {\n return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);\n }\n\n resolve() {\n return this;\n }\n\n describe() {\n return {\n type: 'ref',\n key: this.key\n };\n }\n\n toString() {\n return `Ref(${this.key})`;\n }\n\n static isRef(value) {\n return value && value.__isYupRef;\n }\n\n} // @ts-ignore\n\nReference.prototype.__isYupRef = true;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport mapValues from 'lodash/mapValues';\nimport ValidationError from '../ValidationError';\nimport Ref from '../Reference';\nexport default function createValidation(config) {\n function validate(_ref, cb) {\n let {\n value,\n path = '',\n label,\n options,\n originalValue,\n sync\n } = _ref,\n rest = _objectWithoutPropertiesLoose(_ref, [\"value\", \"path\", \"label\", \"options\", \"originalValue\", \"sync\"]);\n\n const {\n name,\n test,\n params,\n message\n } = config;\n let {\n parent,\n context\n } = options;\n\n function resolve(item) {\n return Ref.isRef(item) ? item.getValue(value, parent, context) : item;\n }\n\n function createError(overrides = {}) {\n const nextParams = mapValues(_extends({\n value,\n originalValue,\n label,\n path: overrides.path || path\n }, params, overrides.params), resolve);\n const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name);\n error.params = nextParams;\n return error;\n }\n\n let ctx = _extends({\n path,\n parent,\n type: name,\n createError,\n resolve,\n options,\n originalValue\n }, rest);\n\n if (!sync) {\n try {\n Promise.resolve(test.call(ctx, value, ctx)).then(validOrError => {\n if (ValidationError.isError(validOrError)) cb(validOrError);else if (!validOrError) cb(createError());else cb(null, validOrError);\n }).catch(cb);\n } catch (err) {\n cb(err);\n }\n\n return;\n }\n\n let result;\n\n try {\n var _ref2;\n\n result = test.call(ctx, value, ctx);\n\n if (typeof ((_ref2 = result) == null ? void 0 : _ref2.then) === 'function') {\n throw new Error(`Validation test of type: \"${ctx.type}\" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);\n }\n } catch (err) {\n cb(err);\n return;\n }\n\n if (ValidationError.isError(result)) cb(result);else if (!result) cb(createError());else cb(null, result);\n }\n\n validate.OPTIONS = config;\n return validate;\n}","import { forEach } from 'property-expr';\n\nlet trim = part => part.substr(0, part.length - 1).substr(1);\n\nexport function getIn(schema, path, value, context = value) {\n let parent, lastPart, lastPartDebug; // root path: ''\n\n if (!path) return {\n parent,\n parentPath: path,\n schema\n };\n forEach(path, (_part, isBracket, isArray) => {\n let part = isBracket ? trim(_part) : _part;\n schema = schema.resolve({\n context,\n parent,\n value\n });\n\n if (schema.innerType) {\n let idx = isArray ? parseInt(part, 10) : 0;\n\n if (value && idx >= value.length) {\n throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);\n }\n\n parent = value;\n value = value && value[idx];\n schema = schema.innerType;\n } // sometimes the array index part of a path doesn't exist: \"nested.arr.child\"\n // in these cases the current part is the next schema and should be processed\n // in this iteration. For cases where the index signature is included this\n // check will fail and we'll handle the `child` part on the next iteration like normal\n\n\n if (!isArray) {\n if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: \"${schema._type}\")`);\n parent = value;\n value = value && value[part];\n schema = schema.fields[part];\n }\n\n lastPart = part;\n lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;\n });\n return {\n schema,\n parent,\n parentPath: lastPart\n };\n}\n\nconst reach = (obj, path, value, context) => getIn(obj, path, value, context).schema;\n\nexport default reach;","import Reference from '../Reference';\nexport default class ReferenceSet {\n constructor() {\n this.list = void 0;\n this.refs = void 0;\n this.list = new Set();\n this.refs = new Map();\n }\n\n get size() {\n return this.list.size + this.refs.size;\n }\n\n describe() {\n const description = [];\n\n for (const item of this.list) description.push(item);\n\n for (const [, ref] of this.refs) description.push(ref.describe());\n\n return description;\n }\n\n toArray() {\n return Array.from(this.list).concat(Array.from(this.refs.values()));\n }\n\n resolveAll(resolve) {\n return this.toArray().reduce((acc, e) => acc.concat(Reference.isRef(e) ? resolve(e) : e), []);\n }\n\n add(value) {\n Reference.isRef(value) ? this.refs.set(value.key, value) : this.list.add(value);\n }\n\n delete(value) {\n Reference.isRef(value) ? this.refs.delete(value.key) : this.list.delete(value);\n }\n\n clone() {\n const next = new ReferenceSet();\n next.list = new Set(this.list);\n next.refs = new Map(this.refs);\n return next;\n }\n\n merge(newItems, removeItems) {\n const next = this.clone();\n newItems.list.forEach(value => next.add(value));\n newItems.refs.forEach(value => next.add(value));\n removeItems.list.forEach(value => next.delete(value));\n removeItems.refs.forEach(value => next.delete(value));\n return next;\n }\n\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n// @ts-ignore\nimport cloneDeep from 'nanoclone';\nimport { mixed as locale } from './locale';\nimport Condition from './Condition';\nimport runTests from './util/runTests';\nimport createValidation from './util/createValidation';\nimport printValue from './util/printValue';\nimport Ref from './Reference';\nimport { getIn } from './util/reach';\nimport ValidationError from './ValidationError';\nimport ReferenceSet from './util/ReferenceSet';\nimport toArray from './util/toArray'; // const UNSET = 'unset' as const;\n\nexport default class BaseSchema {\n constructor(options) {\n this.deps = [];\n this.tests = void 0;\n this.transforms = void 0;\n this.conditions = [];\n this._mutate = void 0;\n this._typeError = void 0;\n this._whitelist = new ReferenceSet();\n this._blacklist = new ReferenceSet();\n this.exclusiveTests = Object.create(null);\n this.spec = void 0;\n this.tests = [];\n this.transforms = [];\n this.withMutation(() => {\n this.typeError(locale.notType);\n });\n this.type = (options == null ? void 0 : options.type) || 'mixed';\n this.spec = _extends({\n strip: false,\n strict: false,\n abortEarly: true,\n recursive: true,\n nullable: false,\n presence: 'optional'\n }, options == null ? void 0 : options.spec);\n } // TODO: remove\n\n\n get _type() {\n return this.type;\n }\n\n _typeCheck(_value) {\n return true;\n }\n\n clone(spec) {\n if (this._mutate) {\n if (spec) Object.assign(this.spec, spec);\n return this;\n } // if the nested value is a schema we can skip cloning, since\n // they are already immutable\n\n\n const next = Object.create(Object.getPrototypeOf(this)); // @ts-expect-error this is readonly\n\n next.type = this.type;\n next._typeError = this._typeError;\n next._whitelistError = this._whitelistError;\n next._blacklistError = this._blacklistError;\n next._whitelist = this._whitelist.clone();\n next._blacklist = this._blacklist.clone();\n next.exclusiveTests = _extends({}, this.exclusiveTests); // @ts-expect-error this is readonly\n\n next.deps = [...this.deps];\n next.conditions = [...this.conditions];\n next.tests = [...this.tests];\n next.transforms = [...this.transforms];\n next.spec = cloneDeep(_extends({}, this.spec, spec));\n return next;\n }\n\n label(label) {\n let next = this.clone();\n next.spec.label = label;\n return next;\n }\n\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n } // withContext(): BaseSchema<\n // TCast,\n // TContext,\n // TOutput\n // > {\n // return this as any;\n // }\n\n\n withMutation(fn) {\n let before = this._mutate;\n this._mutate = true;\n let result = fn(this);\n this._mutate = before;\n return result;\n }\n\n concat(schema) {\n if (!schema || schema === this) return this;\n if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${schema.type}`);\n let base = this;\n let combined = schema.clone();\n\n const mergedSpec = _extends({}, base.spec, combined.spec); // if (combined.spec.nullable === UNSET)\n // mergedSpec.nullable = base.spec.nullable;\n // if (combined.spec.presence === UNSET)\n // mergedSpec.presence = base.spec.presence;\n\n\n combined.spec = mergedSpec;\n combined._typeError || (combined._typeError = base._typeError);\n combined._whitelistError || (combined._whitelistError = base._whitelistError);\n combined._blacklistError || (combined._blacklistError = base._blacklistError); // manually merge the blacklist/whitelist (the other `schema` takes\n // precedence in case of conflicts)\n\n combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);\n combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist); // start with the current tests\n\n combined.tests = base.tests;\n combined.exclusiveTests = base.exclusiveTests; // manually add the new tests to ensure\n // the deduping logic is consistent\n\n combined.withMutation(next => {\n schema.tests.forEach(fn => {\n next.test(fn.OPTIONS);\n });\n });\n combined.transforms = [...base.transforms, ...combined.transforms];\n return combined;\n }\n\n isType(v) {\n if (this.spec.nullable && v === null) return true;\n return this._typeCheck(v);\n }\n\n resolve(options) {\n let schema = this;\n\n if (schema.conditions.length) {\n let conditions = schema.conditions;\n schema = schema.clone();\n schema.conditions = [];\n schema = conditions.reduce((schema, condition) => condition.resolve(schema, options), schema);\n schema = schema.resolve(options);\n }\n\n return schema;\n }\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {*=} options.parent\n * @param {*=} options.context\n */\n\n\n cast(value, options = {}) {\n let resolvedSchema = this.resolve(_extends({\n value\n }, options));\n\n let result = resolvedSchema._cast(value, options);\n\n if (value !== undefined && options.assert !== false && resolvedSchema.isType(result) !== true) {\n let formattedValue = printValue(value);\n let formattedResult = printValue(result);\n throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: \"${resolvedSchema._type}\". \\n\\n` + `attempted value: ${formattedValue} \\n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));\n }\n\n return result;\n }\n\n _cast(rawValue, _options) {\n let value = rawValue === undefined ? rawValue : this.transforms.reduce((value, fn) => fn.call(this, value, rawValue, this), rawValue);\n\n if (value === undefined) {\n value = this.getDefault();\n }\n\n return value;\n }\n\n _validate(_value, options = {}, cb) {\n let {\n sync,\n path,\n from = [],\n originalValue = _value,\n strict = this.spec.strict,\n abortEarly = this.spec.abortEarly\n } = options;\n let value = _value;\n\n if (!strict) {\n // this._validating = true;\n value = this._cast(value, _extends({\n assert: false\n }, options)); // this._validating = false;\n } // value is cast, we can check if it meets type requirements\n\n\n let args = {\n value,\n path,\n options,\n originalValue,\n schema: this,\n label: this.spec.label,\n sync,\n from\n };\n let initialTests = [];\n if (this._typeError) initialTests.push(this._typeError);\n let finalTests = [];\n if (this._whitelistError) finalTests.push(this._whitelistError);\n if (this._blacklistError) finalTests.push(this._blacklistError);\n runTests({\n args,\n value,\n path,\n sync,\n tests: initialTests,\n endEarly: abortEarly\n }, err => {\n if (err) return void cb(err, value);\n runTests({\n tests: this.tests.concat(finalTests),\n args,\n path,\n sync,\n value,\n endEarly: abortEarly\n }, cb);\n });\n }\n\n validate(value, options, maybeCb) {\n let schema = this.resolve(_extends({}, options, {\n value\n })); // callback case is for nested validations\n\n return typeof maybeCb === 'function' ? schema._validate(value, options, maybeCb) : new Promise((resolve, reject) => schema._validate(value, options, (err, value) => {\n if (err) reject(err);else resolve(value);\n }));\n }\n\n validateSync(value, options) {\n let schema = this.resolve(_extends({}, options, {\n value\n }));\n let result;\n\n schema._validate(value, _extends({}, options, {\n sync: true\n }), (err, value) => {\n if (err) throw err;\n result = value;\n });\n\n return result;\n }\n\n isValid(value, options) {\n return this.validate(value, options).then(() => true, err => {\n if (ValidationError.isError(err)) return false;\n throw err;\n });\n }\n\n isValidSync(value, options) {\n try {\n this.validateSync(value, options);\n return true;\n } catch (err) {\n if (ValidationError.isError(err)) return false;\n throw err;\n }\n }\n\n _getDefault() {\n let defaultValue = this.spec.default;\n\n if (defaultValue == null) {\n return defaultValue;\n }\n\n return typeof defaultValue === 'function' ? defaultValue.call(this) : cloneDeep(defaultValue);\n }\n\n getDefault(options) {\n let schema = this.resolve(options || {});\n return schema._getDefault();\n }\n\n default(def) {\n if (arguments.length === 0) {\n return this._getDefault();\n }\n\n let next = this.clone({\n default: def\n });\n return next;\n }\n\n strict(isStrict = true) {\n let next = this.clone();\n next.spec.strict = isStrict;\n return next;\n }\n\n _isPresent(value) {\n return value != null;\n }\n\n defined(message = locale.defined) {\n return this.test({\n message,\n name: 'defined',\n exclusive: true,\n\n test(value) {\n return value !== undefined;\n }\n\n });\n }\n\n required(message = locale.required) {\n return this.clone({\n presence: 'required'\n }).withMutation(s => s.test({\n message,\n name: 'required',\n exclusive: true,\n\n test(value) {\n return this.schema._isPresent(value);\n }\n\n }));\n }\n\n notRequired() {\n let next = this.clone({\n presence: 'optional'\n });\n next.tests = next.tests.filter(test => test.OPTIONS.name !== 'required');\n return next;\n }\n\n nullable(isNullable = true) {\n let next = this.clone({\n nullable: isNullable !== false\n });\n return next;\n }\n\n transform(fn) {\n let next = this.clone();\n next.transforms.push(fn);\n return next;\n }\n /**\n * Adds a test function to the schema's queue of tests.\n * tests can be exclusive or non-exclusive.\n *\n * - exclusive tests, will replace any existing tests of the same name.\n * - non-exclusive: can be stacked\n *\n * If a non-exclusive test is added to a schema with an exclusive test of the same name\n * the exclusive test is removed and further tests of the same name will be stacked.\n *\n * If an exclusive test is added to a schema with non-exclusive tests of the same name\n * the previous tests are removed and further tests of the same name will replace each other.\n */\n\n\n test(...args) {\n let opts;\n\n if (args.length === 1) {\n if (typeof args[0] === 'function') {\n opts = {\n test: args[0]\n };\n } else {\n opts = args[0];\n }\n } else if (args.length === 2) {\n opts = {\n name: args[0],\n test: args[1]\n };\n } else {\n opts = {\n name: args[0],\n message: args[1],\n test: args[2]\n };\n }\n\n if (opts.message === undefined) opts.message = locale.default;\n if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');\n let next = this.clone();\n let validate = createValidation(opts);\n let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;\n\n if (opts.exclusive) {\n if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');\n }\n\n if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;\n next.tests = next.tests.filter(fn => {\n if (fn.OPTIONS.name === opts.name) {\n if (isExclusive) return false;\n if (fn.OPTIONS.test === validate.OPTIONS.test) return false;\n }\n\n return true;\n });\n next.tests.push(validate);\n return next;\n }\n\n when(keys, options) {\n if (!Array.isArray(keys) && typeof keys !== 'string') {\n options = keys;\n keys = '.';\n }\n\n let next = this.clone();\n let deps = toArray(keys).map(key => new Ref(key));\n deps.forEach(dep => {\n // @ts-ignore\n if (dep.isSibling) next.deps.push(dep.key);\n });\n next.conditions.push(new Condition(deps, options));\n return next;\n }\n\n typeError(message) {\n let next = this.clone();\n next._typeError = createValidation({\n message,\n name: 'typeError',\n\n test(value) {\n if (value !== undefined && !this.schema.isType(value)) return this.createError({\n params: {\n type: this.schema._type\n }\n });\n return true;\n }\n\n });\n return next;\n }\n\n oneOf(enums, message = locale.oneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._whitelist.add(val);\n\n next._blacklist.delete(val);\n });\n next._whitelistError = createValidation({\n message,\n name: 'oneOf',\n\n test(value) {\n if (value === undefined) return true;\n let valids = this.schema._whitelist;\n let resolved = valids.resolveAll(this.resolve);\n return resolved.includes(value) ? true : this.createError({\n params: {\n values: valids.toArray().join(', '),\n resolved\n }\n });\n }\n\n });\n return next;\n }\n\n notOneOf(enums, message = locale.notOneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._blacklist.add(val);\n\n next._whitelist.delete(val);\n });\n next._blacklistError = createValidation({\n message,\n name: 'notOneOf',\n\n test(value) {\n let invalids = this.schema._blacklist;\n let resolved = invalids.resolveAll(this.resolve);\n if (resolved.includes(value)) return this.createError({\n params: {\n values: invalids.toArray().join(', '),\n resolved\n }\n });\n return true;\n }\n\n });\n return next;\n }\n\n strip(strip = true) {\n let next = this.clone();\n next.spec.strip = strip;\n return next;\n }\n\n describe() {\n const next = this.clone();\n const {\n label,\n meta\n } = next.spec;\n const description = {\n meta,\n label,\n type: next.type,\n oneOf: next._whitelist.describe(),\n notOneOf: next._blacklist.describe(),\n tests: next.tests.map(fn => ({\n name: fn.OPTIONS.name,\n params: fn.OPTIONS.params\n })).filter((n, idx, list) => list.findIndex(c => c.name === n.name) === idx)\n };\n return description;\n }\n\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n// @ts-expect-error\nBaseSchema.prototype.__isYupSchema__ = true;\n\nfor (const method of ['validate', 'validateSync']) BaseSchema.prototype[`${method}At`] = function (path, value, options = {}) {\n const {\n parent,\n parentPath,\n schema\n } = getIn(this, path, value, options.context);\n return schema[method](parent && parent[parentPath], _extends({}, options, {\n parent,\n path\n }));\n};\n\nfor (const alias of ['equals', 'is']) BaseSchema.prototype[alias] = BaseSchema.prototype.oneOf;\n\nfor (const alias of ['not', 'nope']) BaseSchema.prototype[alias] = BaseSchema.prototype.notOneOf;\n\nBaseSchema.prototype.optional = BaseSchema.prototype.notRequired;","import BaseSchema from './schema';\nconst Mixed = BaseSchema;\nexport default Mixed;\nexport function create() {\n return new Mixed();\n} // XXX: this is using the Base schema so that `addMethod(mixed)` works as a base class\n\ncreate.prototype = Mixed.prototype;","const isAbsent = value => value == null;\n\nexport default isAbsent;","import BaseSchema from './schema';\nimport { boolean as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nexport function create() {\n return new BooleanSchema();\n}\nexport default class BooleanSchema extends BaseSchema {\n constructor() {\n super({\n type: 'boolean'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (!this.isType(value)) {\n if (/^(true|1)$/i.test(String(value))) return true;\n if (/^(false|0)$/i.test(String(value))) return false;\n }\n\n return value;\n });\n });\n }\n\n _typeCheck(v) {\n if (v instanceof Boolean) v = v.valueOf();\n return typeof v === 'boolean';\n }\n\n isTrue(message = locale.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'true'\n },\n\n test(value) {\n return isAbsent(value) || value === true;\n }\n\n });\n }\n\n isFalse(message = locale.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'false'\n },\n\n test(value) {\n return isAbsent(value) || value === false;\n }\n\n });\n }\n\n}\ncreate.prototype = BooleanSchema.prototype;","import { string as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport BaseSchema from './schema'; // eslint-disable-next-line\n\nlet rEmail = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i; // eslint-disable-next-line\n\nlet rUrl = /^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i; // eslint-disable-next-line\n\nlet rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\n\nlet isTrimmed = value => isAbsent(value) || value === value.trim();\n\nlet objStringTag = {}.toString();\nexport function create() {\n return new StringSchema();\n}\nexport default class StringSchema extends BaseSchema {\n constructor() {\n super({\n type: 'string'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (this.isType(value)) return value;\n if (Array.isArray(value)) return value;\n const strValue = value != null && value.toString ? value.toString() : value;\n if (strValue === objStringTag) return value;\n return strValue;\n });\n });\n }\n\n _typeCheck(value) {\n if (value instanceof String) value = value.valueOf();\n return typeof value === 'string';\n }\n\n _isPresent(value) {\n return super._isPresent(value) && !!value.length;\n }\n\n length(length, message = locale.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n\n test(value) {\n return isAbsent(value) || value.length === this.resolve(length);\n }\n\n });\n }\n\n min(min, message = locale.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value.length >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n return this.test({\n name: 'max',\n exclusive: true,\n message,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value.length <= this.resolve(max);\n }\n\n });\n }\n\n matches(regex, options) {\n let excludeEmptyString = false;\n let message;\n let name;\n\n if (options) {\n if (typeof options === 'object') {\n ({\n excludeEmptyString = false,\n message,\n name\n } = options);\n } else {\n message = options;\n }\n }\n\n return this.test({\n name: name || 'matches',\n message: message || locale.matches,\n params: {\n regex\n },\n test: value => isAbsent(value) || value === '' && excludeEmptyString || value.search(regex) !== -1\n });\n }\n\n email(message = locale.email) {\n return this.matches(rEmail, {\n name: 'email',\n message,\n excludeEmptyString: true\n });\n }\n\n url(message = locale.url) {\n return this.matches(rUrl, {\n name: 'url',\n message,\n excludeEmptyString: true\n });\n }\n\n uuid(message = locale.uuid) {\n return this.matches(rUUID, {\n name: 'uuid',\n message,\n excludeEmptyString: false\n });\n } //-- transforms --\n\n\n ensure() {\n return this.default('').transform(val => val === null ? '' : val);\n }\n\n trim(message = locale.trim) {\n return this.transform(val => val != null ? val.trim() : val).test({\n message,\n name: 'trim',\n test: isTrimmed\n });\n }\n\n lowercase(message = locale.lowercase) {\n return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n test: value => isAbsent(value) || value === value.toLowerCase()\n });\n }\n\n uppercase(message = locale.uppercase) {\n return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n test: value => isAbsent(value) || value === value.toUpperCase()\n });\n }\n\n}\ncreate.prototype = StringSchema.prototype; //\n// String Interfaces\n//","import { number as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport BaseSchema from './schema';\n\nlet isNaN = value => value != +value;\n\nexport function create() {\n return new NumberSchema();\n}\nexport default class NumberSchema extends BaseSchema {\n constructor() {\n super({\n type: 'number'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n let parsed = value;\n\n if (typeof parsed === 'string') {\n parsed = parsed.replace(/\\s/g, '');\n if (parsed === '') return NaN; // don't use parseFloat to avoid positives on alpha-numeric strings\n\n parsed = +parsed;\n }\n\n if (this.isType(parsed)) return parsed;\n return parseFloat(parsed);\n });\n });\n }\n\n _typeCheck(value) {\n if (value instanceof Number) value = value.valueOf();\n return typeof value === 'number' && !isNaN(value);\n }\n\n min(min, message = locale.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value <= this.resolve(max);\n }\n\n });\n }\n\n lessThan(less, message = locale.lessThan) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n less\n },\n\n test(value) {\n return isAbsent(value) || value < this.resolve(less);\n }\n\n });\n }\n\n moreThan(more, message = locale.moreThan) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n more\n },\n\n test(value) {\n return isAbsent(value) || value > this.resolve(more);\n }\n\n });\n }\n\n positive(msg = locale.positive) {\n return this.moreThan(0, msg);\n }\n\n negative(msg = locale.negative) {\n return this.lessThan(0, msg);\n }\n\n integer(message = locale.integer) {\n return this.test({\n name: 'integer',\n message,\n test: val => isAbsent(val) || Number.isInteger(val)\n });\n }\n\n truncate() {\n return this.transform(value => !isAbsent(value) ? value | 0 : value);\n }\n\n round(method) {\n var _method;\n\n let avail = ['ceil', 'floor', 'round', 'trunc'];\n method = ((_method = method) == null ? void 0 : _method.toLowerCase()) || 'round'; // this exists for symemtry with the new Math.trunc\n\n if (method === 'trunc') return this.truncate();\n if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', '));\n return this.transform(value => !isAbsent(value) ? Math[method](value) : value);\n }\n\n}\ncreate.prototype = NumberSchema.prototype; //\n// Number Interfaces\n//","/* eslint-disable */\n\n/**\n *\n * Date.parse with progressive enhancement for ISO 8601 \n * NON-CONFORMANT EDITION.\n * © 2011 Colin Snover \n * Released under MIT license.\n */\n// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 ± 10 tzHH 11 tzmm\nvar isoReg = /^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nexport default function parseIsoDate(date) {\n var numericKeys = [1, 4, 5, 6, 7, 10, 11],\n minutesOffset = 0,\n timestamp,\n struct;\n\n if (struct = isoReg.exec(date)) {\n // avoid NaN timestamps caused by “undefined” values being passed to Date.UTC\n for (var i = 0, k; k = numericKeys[i]; ++i) struct[k] = +struct[k] || 0; // allow undefined days and months\n\n\n struct[2] = (+struct[2] || 1) - 1;\n struct[3] = +struct[3] || 1; // allow arbitrary sub-second precision beyond milliseconds\n\n struct[7] = struct[7] ? String(struct[7]).substr(0, 3) : 0; // timestamps without timezone identifiers should be considered local time\n\n if ((struct[8] === undefined || struct[8] === '') && (struct[9] === undefined || struct[9] === '')) timestamp = +new Date(struct[1], struct[2], struct[3], struct[4], struct[5], struct[6], struct[7]);else {\n if (struct[8] !== 'Z' && struct[9] !== undefined) {\n minutesOffset = struct[10] * 60 + struct[11];\n if (struct[9] === '+') minutesOffset = 0 - minutesOffset;\n }\n\n timestamp = Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]);\n }\n } else timestamp = Date.parse ? Date.parse(date) : NaN;\n\n return timestamp;\n}","// @ts-ignore\nimport isoParse from './util/isodate';\nimport { date as locale } from './locale';\nimport isAbsent from './util/isAbsent';\nimport Ref from './Reference';\nimport BaseSchema from './schema';\nlet invalidDate = new Date('');\n\nlet isDate = obj => Object.prototype.toString.call(obj) === '[object Date]';\n\nexport function create() {\n return new DateSchema();\n}\nexport default class DateSchema extends BaseSchema {\n constructor() {\n super({\n type: 'date'\n });\n this.withMutation(() => {\n this.transform(function (value) {\n if (this.isType(value)) return value;\n value = isoParse(value); // 0 is a valid timestamp equivalent to 1970-01-01T00:00:00Z(unix epoch) or before.\n\n return !isNaN(value) ? new Date(value) : invalidDate;\n });\n });\n }\n\n _typeCheck(v) {\n return isDate(v) && !isNaN(v.getTime());\n }\n\n prepareParam(ref, name) {\n let param;\n\n if (!Ref.isRef(ref)) {\n let cast = this.cast(ref);\n if (!this._typeCheck(cast)) throw new TypeError(`\\`${name}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n param = cast;\n } else {\n param = ref;\n }\n\n return param;\n }\n\n min(min, message = locale.min) {\n let limit = this.prepareParam(min, 'min');\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n test(value) {\n return isAbsent(value) || value >= this.resolve(limit);\n }\n\n });\n }\n\n max(max, message = locale.max) {\n let limit = this.prepareParam(max, 'max');\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value <= this.resolve(limit);\n }\n\n });\n }\n\n}\nDateSchema.INVALID_DATE = invalidDate;\ncreate.prototype = DateSchema.prototype;\ncreate.INVALID_DATE = invalidDate;","function findIndex(arr, err) {\n let idx = Infinity;\n arr.some((key, ii) => {\n var _err$path;\n\n if (((_err$path = err.path) == null ? void 0 : _err$path.indexOf(key)) !== -1) {\n idx = ii;\n return true;\n }\n });\n return idx;\n}\n\nexport default function sortByKeyOrder(keys) {\n return (a, b) => {\n return findIndex(keys, a) - findIndex(keys, b);\n };\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport has from 'lodash/has';\nimport snakeCase from 'lodash/snakeCase';\nimport camelCase from 'lodash/camelCase';\nimport mapKeys from 'lodash/mapKeys';\nimport mapValues from 'lodash/mapValues';\nimport { getter } from 'property-expr';\nimport { object as locale } from './locale';\nimport sortFields from './util/sortFields';\nimport sortByKeyOrder from './util/sortByKeyOrder';\nimport runTests from './util/runTests';\nimport ValidationError from './ValidationError';\nimport BaseSchema from './schema';\n\nlet isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\n\nfunction unknown(ctx, value) {\n let known = Object.keys(ctx.fields);\n return Object.keys(value).filter(key => known.indexOf(key) === -1);\n}\n\nconst defaultSort = sortByKeyOrder([]);\nexport default class ObjectSchema extends BaseSchema {\n constructor(spec) {\n super({\n type: 'object'\n });\n this.fields = Object.create(null);\n this._sortErrors = defaultSort;\n this._nodes = [];\n this._excludedEdges = [];\n this.withMutation(() => {\n this.transform(function coerce(value) {\n if (typeof value === 'string') {\n try {\n value = JSON.parse(value);\n } catch (err) {\n value = null;\n }\n }\n\n if (this.isType(value)) return value;\n return null;\n });\n\n if (spec) {\n this.shape(spec);\n }\n });\n }\n\n _typeCheck(value) {\n return isObject(value) || typeof value === 'function';\n }\n\n _cast(_value, options = {}) {\n var _options$stripUnknown;\n\n let value = super._cast(_value, options); //should ignore nulls here\n\n\n if (value === undefined) return this.getDefault();\n if (!this._typeCheck(value)) return value;\n let fields = this.fields;\n let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;\n\n let props = this._nodes.concat(Object.keys(value).filter(v => this._nodes.indexOf(v) === -1));\n\n let intermediateValue = {}; // is filled during the transform below\n\n let innerOptions = _extends({}, options, {\n parent: intermediateValue,\n __validating: options.__validating || false\n });\n\n let isChanged = false;\n\n for (const prop of props) {\n let field = fields[prop];\n let exists = has(value, prop);\n\n if (field) {\n let fieldValue;\n let inputValue = value[prop]; // safe to mutate since this is fired in sequence\n\n innerOptions.path = (options.path ? `${options.path}.` : '') + prop; // innerOptions.value = value[prop];\n\n field = field.resolve({\n value: inputValue,\n context: options.context,\n parent: intermediateValue\n });\n let fieldSpec = 'spec' in field ? field.spec : undefined;\n let strict = fieldSpec == null ? void 0 : fieldSpec.strict;\n\n if (fieldSpec == null ? void 0 : fieldSpec.strip) {\n isChanged = isChanged || prop in value;\n continue;\n }\n\n fieldValue = !options.__validating || !strict ? // TODO: use _cast, this is double resolving\n field.cast(value[prop], innerOptions) : value[prop];\n\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = value[prop];\n }\n\n if (intermediateValue[prop] !== value[prop]) {\n isChanged = true;\n }\n }\n\n return isChanged ? intermediateValue : value;\n }\n\n _validate(_value, opts = {}, callback) {\n let errors = [];\n let {\n sync,\n from = [],\n originalValue = _value,\n abortEarly = this.spec.abortEarly,\n recursive = this.spec.recursive\n } = opts;\n from = [{\n schema: this,\n value: originalValue\n }, ...from]; // this flag is needed for handling `strict` correctly in the context of\n // validation vs just casting. e.g strict() on a field is only used when validating\n\n opts.__validating = true;\n opts.originalValue = originalValue;\n opts.from = from;\n\n super._validate(_value, opts, (err, value) => {\n if (err) {\n if (!ValidationError.isError(err) || abortEarly) {\n return void callback(err, value);\n }\n\n errors.push(err);\n }\n\n if (!recursive || !isObject(value)) {\n callback(errors[0] || null, value);\n return;\n }\n\n originalValue = originalValue || value;\n\n let tests = this._nodes.map(key => (_, cb) => {\n let path = key.indexOf('.') === -1 ? (opts.path ? `${opts.path}.` : '') + key : `${opts.path || ''}[\"${key}\"]`;\n let field = this.fields[key];\n\n if (field && 'validate' in field) {\n field.validate(value[key], _extends({}, opts, {\n // @ts-ignore\n path,\n from,\n // inner fields are always strict:\n // 1. this isn't strict so the casting will also have cast inner values\n // 2. this is strict in which case the nested values weren't cast either\n strict: true,\n parent: value,\n originalValue: originalValue[key]\n }), cb);\n return;\n }\n\n cb(null);\n });\n\n runTests({\n sync,\n tests,\n value,\n errors,\n endEarly: abortEarly,\n sort: this._sortErrors,\n path: opts.path\n }, callback);\n });\n }\n\n clone(spec) {\n const next = super.clone(spec);\n next.fields = _extends({}, this.fields);\n next._nodes = this._nodes;\n next._excludedEdges = this._excludedEdges;\n next._sortErrors = this._sortErrors;\n return next;\n }\n\n concat(schema) {\n let next = super.concat(schema);\n let nextFields = next.fields;\n\n for (let [field, schemaOrRef] of Object.entries(this.fields)) {\n const target = nextFields[field];\n\n if (target === undefined) {\n nextFields[field] = schemaOrRef;\n } else if (target instanceof BaseSchema && schemaOrRef instanceof BaseSchema) {\n nextFields[field] = schemaOrRef.concat(target);\n }\n }\n\n return next.withMutation(() => next.shape(nextFields, this._excludedEdges));\n }\n\n getDefaultFromShape() {\n let dft = {};\n\n this._nodes.forEach(key => {\n const field = this.fields[key];\n dft[key] = 'default' in field ? field.getDefault() : undefined;\n });\n\n return dft;\n }\n\n _getDefault() {\n if ('default' in this.spec) {\n return super._getDefault();\n } // if there is no default set invent one\n\n\n if (!this._nodes.length) {\n return undefined;\n }\n\n return this.getDefaultFromShape();\n }\n\n shape(additions, excludes = []) {\n let next = this.clone();\n let fields = Object.assign(next.fields, additions);\n next.fields = fields;\n next._sortErrors = sortByKeyOrder(Object.keys(fields));\n\n if (excludes.length) {\n // this is a convenience for when users only supply a single pair\n if (!Array.isArray(excludes[0])) excludes = [excludes];\n next._excludedEdges = [...next._excludedEdges, ...excludes];\n }\n\n next._nodes = sortFields(fields, next._excludedEdges);\n return next;\n }\n\n pick(keys) {\n const picked = {};\n\n for (const key of keys) {\n if (this.fields[key]) picked[key] = this.fields[key];\n }\n\n return this.clone().withMutation(next => {\n next.fields = {};\n return next.shape(picked);\n });\n }\n\n omit(keys) {\n const next = this.clone();\n const fields = next.fields;\n next.fields = {};\n\n for (const key of keys) {\n delete fields[key];\n }\n\n return next.withMutation(() => next.shape(fields));\n }\n\n from(from, to, alias) {\n let fromGetter = getter(from, true);\n return this.transform(obj => {\n if (obj == null) return obj;\n let newObj = obj;\n\n if (has(obj, from)) {\n newObj = _extends({}, obj);\n if (!alias) delete newObj[from];\n newObj[to] = fromGetter(obj);\n }\n\n return newObj;\n });\n }\n\n noUnknown(noAllow = true, message = locale.noUnknown) {\n if (typeof noAllow === 'string') {\n message = noAllow;\n noAllow = true;\n }\n\n let next = this.test({\n name: 'noUnknown',\n exclusive: true,\n message: message,\n\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return !noAllow || unknownKeys.length === 0 || this.createError({\n params: {\n unknown: unknownKeys.join(', ')\n }\n });\n }\n\n });\n next.spec.noUnknown = noAllow;\n return next;\n }\n\n unknown(allow = true, message = locale.noUnknown) {\n return this.noUnknown(!allow, message);\n }\n\n transformKeys(fn) {\n return this.transform(obj => obj && mapKeys(obj, (_, key) => fn(key)));\n }\n\n camelCase() {\n return this.transformKeys(camelCase);\n }\n\n snakeCase() {\n return this.transformKeys(snakeCase);\n }\n\n constantCase() {\n return this.transformKeys(key => snakeCase(key).toUpperCase());\n }\n\n describe() {\n let base = super.describe();\n base.fields = mapValues(this.fields, value => value.describe());\n return base;\n }\n\n}\nexport function create(spec) {\n return new ObjectSchema(spec);\n}\ncreate.prototype = ObjectSchema.prototype;","import has from 'lodash/has'; // @ts-expect-error\n\nimport toposort from 'toposort';\nimport { split } from 'property-expr';\nimport Ref from '../Reference';\nimport isSchema from './isSchema';\nexport default function sortFields(fields, excludedEdges = []) {\n let edges = [];\n let nodes = new Set();\n let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));\n\n function addNode(depPath, key) {\n let node = split(depPath)[0];\n nodes.add(node);\n if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);\n }\n\n for (const key in fields) if (has(fields, key)) {\n let value = fields[key];\n nodes.add(key);\n if (Ref.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));\n }\n\n return toposort.array(Array.from(nodes), edges).reverse();\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport isAbsent from './util/isAbsent';\nimport isSchema from './util/isSchema';\nimport printValue from './util/printValue';\nimport { array as locale } from './locale';\nimport runTests from './util/runTests';\nimport ValidationError from './ValidationError';\nimport BaseSchema from './schema';\nexport function create(type) {\n return new ArraySchema(type);\n}\nexport default class ArraySchema extends BaseSchema {\n constructor(type) {\n super({\n type: 'array'\n }); // `undefined` specifically means uninitialized, as opposed to\n // \"no subtype\"\n\n this.innerType = void 0;\n this.innerType = type;\n this.withMutation(() => {\n this.transform(function (values) {\n if (typeof values === 'string') try {\n values = JSON.parse(values);\n } catch (err) {\n values = null;\n }\n return this.isType(values) ? values : null;\n });\n });\n }\n\n _typeCheck(v) {\n return Array.isArray(v);\n }\n\n get _subType() {\n return this.innerType;\n }\n\n _cast(_value, _opts) {\n const value = super._cast(_value, _opts); //should ignore nulls here\n\n\n if (!this._typeCheck(value) || !this.innerType) return value;\n let isChanged = false;\n const castArray = value.map((v, idx) => {\n const castElement = this.innerType.cast(v, _extends({}, _opts, {\n path: `${_opts.path || ''}[${idx}]`\n }));\n\n if (castElement !== v) {\n isChanged = true;\n }\n\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n\n _validate(_value, options = {}, callback) {\n var _options$abortEarly, _options$recursive;\n\n let errors = [];\n let sync = options.sync;\n let path = options.path;\n let innerType = this.innerType;\n let endEarly = (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly;\n let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive;\n let originalValue = options.originalValue != null ? options.originalValue : _value;\n\n super._validate(_value, options, (err, value) => {\n if (err) {\n if (!ValidationError.isError(err) || endEarly) {\n return void callback(err, value);\n }\n\n errors.push(err);\n }\n\n if (!recursive || !innerType || !this._typeCheck(value)) {\n callback(errors[0] || null, value);\n return;\n }\n\n originalValue = originalValue || value; // #950 Ensure that sparse array empty slots are validated\n\n let tests = new Array(value.length);\n\n for (let idx = 0; idx < value.length; idx++) {\n let item = value[idx];\n let path = `${options.path || ''}[${idx}]`; // object._validate note for isStrict explanation\n\n let innerOptions = _extends({}, options, {\n path,\n strict: true,\n parent: value,\n index: idx,\n originalValue: originalValue[idx]\n });\n\n tests[idx] = (_, cb) => innerType.validate(item, innerOptions, cb);\n }\n\n runTests({\n sync,\n path,\n value,\n errors,\n endEarly,\n tests\n }, callback);\n });\n }\n\n clone(spec) {\n const next = super.clone(spec);\n next.innerType = this.innerType;\n return next;\n }\n\n concat(schema) {\n let next = super.concat(schema);\n next.innerType = this.innerType;\n if (schema.innerType) next.innerType = next.innerType ? // @ts-expect-error Lazy doesn't have concat()\n next.innerType.concat(schema.innerType) : schema.innerType;\n return next;\n }\n\n of(schema) {\n // FIXME: this should return a new instance of array without the default to be\n let next = this.clone();\n if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema)); // FIXME(ts):\n\n next.innerType = schema;\n return next;\n }\n\n length(length, message = locale.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n\n test(value) {\n return isAbsent(value) || value.length === this.resolve(length);\n }\n\n });\n }\n\n min(min, message) {\n message = message || locale.min;\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n\n // FIXME(ts): Array\n test(value) {\n return isAbsent(value) || value.length >= this.resolve(min);\n }\n\n });\n }\n\n max(max, message) {\n message = message || locale.max;\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n\n test(value) {\n return isAbsent(value) || value.length <= this.resolve(max);\n }\n\n });\n }\n\n ensure() {\n return this.default(() => []).transform((val, original) => {\n // We don't want to return `null` for nullable schema\n if (this._typeCheck(val)) return val;\n return original == null ? [] : [].concat(original);\n });\n }\n\n compact(rejector) {\n let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a);\n return this.transform(values => values != null ? values.filter(reject) : values);\n }\n\n describe() {\n let base = super.describe();\n if (this.innerType) base.innerType = this.innerType.describe();\n return base;\n }\n\n nullable(isNullable = true) {\n return super.nullable(isNullable);\n }\n\n defined() {\n return super.defined();\n }\n\n required(msg) {\n return super.required(msg);\n }\n\n}\ncreate.prototype = ArraySchema.prototype; //\n// Interfaces\n//","import isSchema from './util/isSchema';\nexport function create(builder) {\n return new Lazy(builder);\n}\n\nclass Lazy {\n constructor(builder) {\n this.type = 'lazy';\n this.__isYupSchema__ = true;\n this.__inputType = void 0;\n this.__outputType = void 0;\n\n this._resolve = (value, options = {}) => {\n let schema = this.builder(value, options);\n if (!isSchema(schema)) throw new TypeError('lazy() functions must return a valid schema');\n return schema.resolve(options);\n };\n\n this.builder = builder;\n }\n\n resolve(options) {\n return this._resolve(options.value, options);\n }\n\n cast(value, options) {\n return this._resolve(value, options).cast(value, options);\n }\n\n validate(value, options, maybeCb) {\n // @ts-expect-error missing public callback on type\n return this._resolve(value, options).validate(value, options, maybeCb);\n }\n\n validateSync(value, options) {\n return this._resolve(value, options).validateSync(value, options);\n }\n\n validateAt(path, value, options) {\n return this._resolve(value, options).validateAt(path, value, options);\n }\n\n validateSyncAt(path, value, options) {\n return this._resolve(value, options).validateSyncAt(path, value, options);\n }\n\n describe() {\n return null;\n }\n\n isValid(value, options) {\n return this._resolve(value, options).isValid(value, options);\n }\n\n isValidSync(value, options) {\n return this._resolve(value, options).isValidSync(value, options);\n }\n\n}\n\nexport default Lazy;","import locale from './locale';\nexport default function setLocale(custom) {\n Object.keys(custom).forEach(type => {\n // @ts-ignore\n Object.keys(custom[type]).forEach(method => {\n // @ts-ignore\n locale[type][method] = custom[type][method];\n });\n });\n}","import MixedSchema, { create as mixedCreate } from './mixed';\nimport BooleanSchema, { create as boolCreate } from './boolean';\nimport StringSchema, { create as stringCreate } from './string';\nimport NumberSchema, { create as numberCreate } from './number';\nimport DateSchema, { create as dateCreate } from './date';\nimport ObjectSchema, { create as objectCreate } from './object';\nimport ArraySchema, { create as arrayCreate } from './array';\nimport { create as refCreate } from './Reference';\nimport { create as lazyCreate } from './Lazy';\nimport ValidationError from './ValidationError';\nimport reach from './util/reach';\nimport isSchema from './util/isSchema';\nimport setLocale from './setLocale';\nimport BaseSchema from './schema';\n\nfunction addMethod(schemaType, name, fn) {\n if (!schemaType || !isSchema(schemaType.prototype)) throw new TypeError('You must provide a yup schema constructor function');\n if (typeof name !== 'string') throw new TypeError('A Method name must be provided');\n if (typeof fn !== 'function') throw new TypeError('Method function must be provided');\n schemaType.prototype[name] = fn;\n}\n\nexport { mixedCreate as mixed, boolCreate as bool, boolCreate as boolean, stringCreate as string, numberCreate as number, dateCreate as date, objectCreate as object, arrayCreate as array, refCreate as ref, lazyCreate as lazy, reach, isSchema, addMethod, setLocale, ValidationError };\nexport { BaseSchema, MixedSchema, BooleanSchema, StringSchema, NumberSchema, DateSchema, ObjectSchema, ArraySchema };","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import { useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport ReactDOM from 'react-dom';\nimport canUseDom from './Dom/canUseDom';\nvar Portal = forwardRef(function (props, ref) {\n var didUpdate = props.didUpdate,\n getContainer = props.getContainer,\n children = props.children;\n var containerRef = useRef(); // Ref return nothing, only for wrapper check exist\n\n useImperativeHandle(ref, function () {\n return {};\n }); // Create container in client side with sync to avoid useEffect not get ref\n\n var initRef = useRef(false);\n\n if (!initRef.current && canUseDom()) {\n containerRef.current = getContainer();\n initRef.current = true;\n } // [Legacy] Used by `rc-trigger`\n\n\n useEffect(function () {\n didUpdate === null || didUpdate === void 0 ? void 0 : didUpdate(props);\n });\n useEffect(function () {\n return function () {\n var _containerRef$current, _containerRef$current2;\n\n // [Legacy] This should not be handle by Portal but parent PortalWrapper instead.\n // Since some component use `Portal` directly, we have to keep the logic here.\n (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : (_containerRef$current2 = _containerRef$current.parentNode) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.removeChild(containerRef.current);\n };\n }, []);\n return containerRef.current ? ReactDOM.createPortal(children, containerRef.current) : null;\n});\nexport default Portal;","export default (function () {\n if (typeof navigator === 'undefined' || typeof window === 'undefined') {\n return false;\n }\n\n var agent = navigator.userAgent || navigator.vendor || window.opera;\n\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(agent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(agent === null || agent === void 0 ? void 0 : agent.substr(0, 4))) {\n return true;\n }\n\n return false;\n});","export default (function (element) {\n if (!element) {\n return false;\n }\n\n if (element.offsetParent) {\n return true;\n }\n\n if (element.getBBox) {\n var box = element.getBBox();\n\n if (box.width || box.height) {\n return true;\n }\n }\n\n if (element.getBoundingClientRect) {\n var _box = element.getBoundingClientRect();\n\n if (_box.width || _box.height) {\n return true;\n }\n }\n\n return false;\n});","var autoAdjustOverflow = {\n adjustX: 1,\n adjustY: 1\n};\nvar targetOffset = [0, 0];\nexport var placements = {\n left: {\n points: ['cr', 'cl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n },\n right: {\n points: ['cl', 'cr'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n top: {\n points: ['bc', 'tc'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n bottom: {\n points: ['tc', 'bc'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n topLeft: {\n points: ['bl', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n leftTop: {\n points: ['tr', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n },\n topRight: {\n points: ['br', 'tr'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n rightTop: {\n points: ['tl', 'tr'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n bottomRight: {\n points: ['tr', 'br'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n rightBottom: {\n points: ['bl', 'br'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n bottomLeft: {\n points: ['tl', 'bl'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n leftBottom: {\n points: ['br', 'bl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n }\n};\nexport default placements;","import { tuple } from './type';\nexport var PresetStatusColorTypes = tuple('success', 'processing', 'error', 'default', 'warning'); // eslint-disable-next-line import/prefer-default-export\n\nexport var PresetColorTypes = tuple('pink', 'red', 'yellow', 'orange', 'cyan', 'green', 'blue', 'purple', 'geekblue', 'magenta', 'volcano', 'gold', 'lime');","import canUseDom from './canUseDom';\nvar MARK_KEY = \"rc-util-key\";\n\nfunction getContainer(option) {\n if (option.attachTo) {\n return option.attachTo;\n }\n\n var head = document.querySelector('head');\n return head || document.body;\n}\n\nexport function injectCSS(css) {\n var _option$csp;\n\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!canUseDom()) {\n return null;\n }\n\n var styleNode = document.createElement('style');\n\n if ((_option$csp = option.csp) === null || _option$csp === void 0 ? void 0 : _option$csp.nonce) {\n var _option$csp2;\n\n styleNode.nonce = (_option$csp2 = option.csp) === null || _option$csp2 === void 0 ? void 0 : _option$csp2.nonce;\n }\n\n styleNode.innerHTML = css;\n var container = getContainer(option);\n var firstChild = container.firstChild;\n\n if (option.prepend && container.prepend) {\n // Use `prepend` first\n container.prepend(styleNode);\n } else if (option.prepend && firstChild) {\n // Fallback to `insertBefore` like IE not support `prepend`\n container.insertBefore(styleNode, firstChild);\n } else {\n container.appendChild(styleNode);\n }\n\n return styleNode;\n}\nvar containerCache = new Map();\nexport function updateCSS(css, key) {\n var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var container = getContainer(option); // Get real parent\n\n if (!containerCache.has(container)) {\n var placeholderStyle = injectCSS('', option);\n var parentNode = placeholderStyle.parentNode;\n containerCache.set(container, parentNode);\n parentNode.removeChild(placeholderStyle);\n }\n\n var existNode = Array.from(containerCache.get(container).children).find(function (node) {\n return node.tagName === 'STYLE' && node[MARK_KEY] === key;\n });\n\n if (existNode) {\n var _option$csp3, _option$csp4;\n\n if (((_option$csp3 = option.csp) === null || _option$csp3 === void 0 ? void 0 : _option$csp3.nonce) && existNode.nonce !== ((_option$csp4 = option.csp) === null || _option$csp4 === void 0 ? void 0 : _option$csp4.nonce)) {\n var _option$csp5;\n\n existNode.nonce = (_option$csp5 = option.csp) === null || _option$csp5 === void 0 ? void 0 : _option$csp5.nonce;\n }\n\n if (existNode.innerHTML !== css) {\n existNode.innerHTML = css;\n }\n\n return existNode;\n }\n\n var newNode = injectCSS(css, option);\n newNode[MARK_KEY] = key;\n return newNode;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n\nimport * as React from 'react';\nimport RcTextArea from 'rc-textarea';\nimport omit from \"rc-util/es/omit\";\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport ClearableLabeledInput from './ClearableLabeledInput';\nimport { ConfigContext } from '../config-provider';\nimport { fixControlledValue, resolveOnChange, triggerFocus } from './Input';\nimport SizeContext from '../config-provider/SizeContext';\n\nfunction fixEmojiLength(value, maxLength) {\n return _toConsumableArray(value || '').slice(0, maxLength).join('');\n}\n\nvar TextArea = /*#__PURE__*/React.forwardRef(function (_a, ref) {\n var _classNames;\n\n var customizePrefixCls = _a.prefixCls,\n _a$bordered = _a.bordered,\n bordered = _a$bordered === void 0 ? true : _a$bordered,\n _a$showCount = _a.showCount,\n showCount = _a$showCount === void 0 ? false : _a$showCount,\n maxLength = _a.maxLength,\n className = _a.className,\n style = _a.style,\n customizeSize = _a.size,\n onCompositionStart = _a.onCompositionStart,\n onCompositionEnd = _a.onCompositionEnd,\n onChange = _a.onChange,\n props = __rest(_a, [\"prefixCls\", \"bordered\", \"showCount\", \"maxLength\", \"className\", \"style\", \"size\", \"onCompositionStart\", \"onCompositionEnd\", \"onChange\"]);\n\n var _React$useContext = React.useContext(ConfigContext),\n getPrefixCls = _React$useContext.getPrefixCls,\n direction = _React$useContext.direction;\n\n var size = React.useContext(SizeContext);\n var innerRef = React.useRef(null);\n var clearableInputRef = React.useRef(null);\n\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n compositing = _React$useState2[0],\n setCompositing = _React$useState2[1];\n\n var _useMergedState = useMergedState(props.defaultValue, {\n value: props.value\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n value = _useMergedState2[0],\n setValue = _useMergedState2[1];\n\n var handleSetValue = function handleSetValue(val, callback) {\n if (props.value === undefined) {\n setValue(val);\n callback === null || callback === void 0 ? void 0 : callback();\n }\n }; // =========================== Value Update ===========================\n // Max length value\n\n\n var hasMaxLength = Number(maxLength) > 0;\n\n var onInternalCompositionStart = function onInternalCompositionStart(e) {\n setCompositing(true);\n onCompositionStart === null || onCompositionStart === void 0 ? void 0 : onCompositionStart(e);\n };\n\n var onInternalCompositionEnd = function onInternalCompositionEnd(e) {\n setCompositing(false);\n var triggerValue = e.currentTarget.value;\n\n if (hasMaxLength) {\n triggerValue = fixEmojiLength(triggerValue, maxLength);\n } // Patch composition onChange when value changed\n\n\n if (triggerValue !== value) {\n handleSetValue(triggerValue);\n resolveOnChange(e.currentTarget, e, onChange, triggerValue);\n }\n\n onCompositionEnd === null || onCompositionEnd === void 0 ? void 0 : onCompositionEnd(e);\n };\n\n var handleChange = function handleChange(e) {\n var triggerValue = e.target.value;\n\n if (!compositing && hasMaxLength) {\n triggerValue = fixEmojiLength(triggerValue, maxLength);\n }\n\n handleSetValue(triggerValue);\n resolveOnChange(e.currentTarget, e, onChange, triggerValue);\n }; // ============================== Reset ===============================\n\n\n var handleReset = function handleReset(e) {\n var _a, _b;\n\n handleSetValue('', function () {\n var _a;\n\n (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n });\n resolveOnChange((_b = (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.resizableTextArea) === null || _b === void 0 ? void 0 : _b.textArea, e, onChange);\n };\n\n var prefixCls = getPrefixCls('input', customizePrefixCls);\n React.useImperativeHandle(ref, function () {\n var _a;\n\n return {\n resizableTextArea: (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.resizableTextArea,\n focus: function focus(option) {\n var _a, _b;\n\n triggerFocus((_b = (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.resizableTextArea) === null || _b === void 0 ? void 0 : _b.textArea, option);\n },\n blur: function blur() {\n var _a;\n\n return (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.blur();\n }\n };\n });\n var textArea = /*#__PURE__*/React.createElement(RcTextArea, _extends({}, omit(props, ['allowClear']), {\n className: classNames((_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-borderless\"), !bordered), _defineProperty(_classNames, className, className && !showCount), _defineProperty(_classNames, \"\".concat(prefixCls, \"-sm\"), size === 'small' || customizeSize === 'small'), _defineProperty(_classNames, \"\".concat(prefixCls, \"-lg\"), size === 'large' || customizeSize === 'large'), _classNames)),\n style: showCount ? undefined : style,\n prefixCls: prefixCls,\n onCompositionStart: onInternalCompositionStart,\n onChange: handleChange,\n onCompositionEnd: onInternalCompositionEnd,\n ref: innerRef\n }));\n var val = fixControlledValue(value);\n\n if (!compositing && hasMaxLength && (props.value === null || props.value === undefined)) {\n // fix #27612 将value转为数组进行截取,解决 '😂'.length === 2 等emoji表情导致的截取乱码的问题\n val = fixEmojiLength(val, maxLength);\n } // TextArea\n\n\n var textareaNode = /*#__PURE__*/React.createElement(ClearableLabeledInput, _extends({}, props, {\n prefixCls: prefixCls,\n direction: direction,\n inputType: \"text\",\n value: val,\n element: textArea,\n handleReset: handleReset,\n ref: clearableInputRef,\n bordered: bordered\n })); // Only show text area wrapper when needed\n\n if (showCount) {\n var valueLength = _toConsumableArray(val).length;\n\n var dataCount = '';\n\n if (_typeof(showCount) === 'object') {\n dataCount = showCount.formatter({\n count: valueLength,\n maxLength: maxLength\n });\n } else {\n dataCount = \"\".concat(valueLength).concat(hasMaxLength ? \" / \".concat(maxLength) : '');\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-textarea\"), _defineProperty({}, \"\".concat(prefixCls, \"-textarea-rtl\"), direction === 'rtl'), \"\".concat(prefixCls, \"-textarea-show-count\"), className),\n style: style,\n \"data-count\": dataCount\n }, textareaNode);\n }\n\n return textareaNode;\n});\nexport default TextArea;","import * as React from 'react';\nexport default function useMemo(getValue, condition, shouldUpdate) {\n var cacheRef = React.useRef({});\n\n if (!('value' in cacheRef.current) || shouldUpdate(cacheRef.current.condition, condition)) {\n cacheRef.current.value = getValue();\n cacheRef.current.condition = condition;\n }\n\n return cacheRef.current.value;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\n\nvar Notice = /*#__PURE__*/function (_Component) {\n _inherits(Notice, _Component);\n\n var _super = _createSuper(Notice);\n\n function Notice() {\n var _this;\n\n _classCallCheck(this, Notice);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this.closeTimer = null;\n\n _this.close = function (e) {\n if (e) {\n e.stopPropagation();\n }\n\n _this.clearCloseTimer();\n\n var _this$props = _this.props,\n onClose = _this$props.onClose,\n noticeKey = _this$props.noticeKey;\n\n if (onClose) {\n onClose(noticeKey);\n }\n };\n\n _this.startCloseTimer = function () {\n if (_this.props.duration) {\n _this.closeTimer = window.setTimeout(function () {\n _this.close();\n }, _this.props.duration * 1000);\n }\n };\n\n _this.clearCloseTimer = function () {\n if (_this.closeTimer) {\n clearTimeout(_this.closeTimer);\n _this.closeTimer = null;\n }\n };\n\n return _this;\n }\n\n _createClass(Notice, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.startCloseTimer();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n if (this.props.duration !== prevProps.duration || this.props.updateMark !== prevProps.updateMark || // Visible again need reset timer\n this.props.visible !== prevProps.visible && this.props.visible) {\n this.restartCloseTimer();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearCloseTimer();\n }\n }, {\n key: \"restartCloseTimer\",\n value: function restartCloseTimer() {\n this.clearCloseTimer();\n this.startCloseTimer();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n prefixCls = _this$props2.prefixCls,\n className = _this$props2.className,\n closable = _this$props2.closable,\n closeIcon = _this$props2.closeIcon,\n style = _this$props2.style,\n onClick = _this$props2.onClick,\n children = _this$props2.children,\n holder = _this$props2.holder;\n var componentClass = \"\".concat(prefixCls, \"-notice\");\n var dataOrAriaAttributeProps = Object.keys(this.props).reduce(function (acc, key) {\n if (key.substr(0, 5) === 'data-' || key.substr(0, 5) === 'aria-' || key === 'role') {\n acc[key] = _this2.props[key];\n }\n\n return acc;\n }, {});\n var node = /*#__PURE__*/React.createElement(\"div\", _extends({\n className: classNames(componentClass, className, _defineProperty({}, \"\".concat(componentClass, \"-closable\"), closable)),\n style: style,\n onMouseEnter: this.clearCloseTimer,\n onMouseLeave: this.startCloseTimer,\n onClick: onClick\n }, dataOrAriaAttributeProps), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(componentClass, \"-content\")\n }, children), closable ? /*#__PURE__*/React.createElement(\"a\", {\n tabIndex: 0,\n onClick: this.close,\n className: \"\".concat(componentClass, \"-close\")\n }, closeIcon || /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(componentClass, \"-close-x\")\n })) : null);\n\n if (holder) {\n return /*#__PURE__*/ReactDOM.createPortal(node, holder);\n }\n\n return node;\n }\n }]);\n\n return Notice;\n}(Component);\n\nNotice.defaultProps = {\n onClose: function onClose() {},\n duration: 1.5\n};\nexport { Notice as default };","/* eslint-disable no-param-reassign */\nvar cached;\nexport default function getScrollBarSize(fresh) {\n if (typeof document === 'undefined') {\n return 0;\n }\n\n if (fresh || cached === undefined) {\n var inner = document.createElement('div');\n inner.style.width = '100%';\n inner.style.height = '200px';\n var outer = document.createElement('div');\n var outerStyle = outer.style;\n outerStyle.position = 'absolute';\n outerStyle.top = '0';\n outerStyle.left = '0';\n outerStyle.pointerEvents = 'none';\n outerStyle.visibility = 'hidden';\n outerStyle.width = '200px';\n outerStyle.height = '150px';\n outerStyle.overflow = 'hidden';\n outer.appendChild(inner);\n document.body.appendChild(outer);\n var widthContained = inner.offsetWidth;\n outer.style.overflow = 'scroll';\n var widthScroll = inner.offsetWidth;\n\n if (widthContained === widthScroll) {\n widthScroll = outer.clientWidth;\n }\n\n document.body.removeChild(outer);\n cached = widthContained - widthScroll;\n }\n\n return cached;\n}\n\nfunction ensureSize(str) {\n var match = str.match(/^(.*)px$/);\n var value = Number(match === null || match === void 0 ? void 0 : match[1]);\n return Number.isNaN(value) ? getScrollBarSize() : value;\n}\n\nexport function getTargetScrollBarSize(target) {\n if (typeof document === 'undefined' || !target || !(target instanceof Element)) {\n return {\n width: 0,\n height: 0\n };\n }\n\n var _getComputedStyle = getComputedStyle(target, '::-webkit-scrollbar'),\n width = _getComputedStyle.width,\n height = _getComputedStyle.height;\n\n return {\n width: ensureSize(width),\n height: ensureSize(height)\n };\n}","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n , length = 64\n , map = {}\n , seed = 0\n , i = 0\n , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n var encoded = '';\n\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n\n return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n var decoded = 0;\n\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n\n return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n var now = encode(+new Date());\n\n if (now !== prev) return seed = 0, prev = now;\n return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (ret !== void 0) {\n return !!ret;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n // Test for A's keys different from B.\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (ret === false || (ret === void 0 && valueA !== valueB)) {\n return false;\n }\n }\n\n return true;\n};\n","import { createContext } from 'react';\nvar RowContext = /*#__PURE__*/createContext({});\nexport default RowContext;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n\nfunction isPointsEq(a1, a2, isAlignPoint) {\n if (isAlignPoint) {\n return a1[0] === a2[0];\n }\n\n return a1[0] === a2[0] && a1[1] === a2[1];\n}\n\nexport function getAlignFromPlacement(builtinPlacements, placementStr, align) {\n var baseAlign = builtinPlacements[placementStr] || {};\n return _objectSpread(_objectSpread({}, baseAlign), align);\n}\nexport function getAlignPopupClassName(builtinPlacements, prefixCls, align, isAlignPoint) {\n var points = align.points;\n var placements = Object.keys(builtinPlacements);\n\n for (var i = 0; i < placements.length; i += 1) {\n var placement = placements[i];\n\n if (isPointsEq(builtinPlacements[placement].points, points, isAlignPoint)) {\n return \"\".concat(prefixCls, \"-placement-\").concat(placement);\n }\n }\n\n return '';\n}","export function getMotion(_ref) {\n var prefixCls = _ref.prefixCls,\n motion = _ref.motion,\n animation = _ref.animation,\n transitionName = _ref.transitionName;\n\n if (motion) {\n return motion;\n }\n\n if (animation) {\n return {\n motionName: \"\".concat(prefixCls, \"-\").concat(animation)\n };\n }\n\n if (transitionName) {\n return {\n motionName: transitionName\n };\n }\n\n return null;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport { getMotion } from '../utils/legacyUtil';\nexport default function Mask(props) {\n var prefixCls = props.prefixCls,\n visible = props.visible,\n zIndex = props.zIndex,\n mask = props.mask,\n maskMotion = props.maskMotion,\n maskAnimation = props.maskAnimation,\n maskTransitionName = props.maskTransitionName;\n\n if (!mask) {\n return null;\n }\n\n var motion = {};\n\n if (maskMotion || maskTransitionName || maskAnimation) {\n motion = _objectSpread({\n motionAppear: true\n }, getMotion({\n motion: maskMotion,\n prefixCls: prefixCls,\n transitionName: maskTransitionName,\n animation: maskAnimation\n }));\n }\n\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motion, {\n visible: visible,\n removeOnLeave: true\n }), function (_ref) {\n var className = _ref.className;\n return /*#__PURE__*/React.createElement(\"div\", {\n style: {\n zIndex: zIndex\n },\n className: classNames(\"\".concat(prefixCls, \"-mask\"), className)\n });\n });\n}","let vendorPrefix;\n\nconst jsCssMap = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n // IE did it wrong again ...\n ms: '-ms-',\n O: '-o-',\n};\n\nfunction getVendorPrefix() {\n if (vendorPrefix !== undefined) {\n return vendorPrefix;\n }\n vendorPrefix = '';\n const style = document.createElement('p').style;\n const testProp = 'Transform';\n for (const key in jsCssMap) {\n if (key + testProp in style) {\n vendorPrefix = key;\n }\n }\n return vendorPrefix;\n}\n\nfunction getTransitionName() {\n return getVendorPrefix()\n ? `${getVendorPrefix()}TransitionProperty`\n : 'transitionProperty';\n}\n\nexport function getTransformName() {\n return getVendorPrefix() ? `${getVendorPrefix()}Transform` : 'transform';\n}\n\nexport function setTransitionProperty(node, value) {\n const name = getTransitionName();\n if (name) {\n node.style[name] = value;\n if (name !== 'transitionProperty') {\n node.style.transitionProperty = value;\n }\n }\n}\n\nfunction setTransform(node, value) {\n const name = getTransformName();\n if (name) {\n node.style[name] = value;\n if (name !== 'transform') {\n node.style.transform = value;\n }\n }\n}\n\nexport function getTransitionProperty(node) {\n return node.style.transitionProperty || node.style[getTransitionName()];\n}\n\nexport function getTransformXY(node) {\n const style = window.getComputedStyle(node, null);\n const transform =\n style.getPropertyValue('transform') ||\n style.getPropertyValue(getTransformName());\n if (transform && transform !== 'none') {\n const matrix = transform.replace(/[^0-9\\-.,]/g, '').split(',');\n return {\n x: parseFloat(matrix[12] || matrix[4], 0),\n y: parseFloat(matrix[13] || matrix[5], 0),\n };\n }\n return {\n x: 0,\n y: 0,\n };\n}\n\nconst matrix2d = /matrix\\((.*)\\)/;\nconst matrix3d = /matrix3d\\((.*)\\)/;\n\nexport function setTransformXY(node, xy) {\n const style = window.getComputedStyle(node, null);\n const transform =\n style.getPropertyValue('transform') ||\n style.getPropertyValue(getTransformName());\n if (transform && transform !== 'none') {\n let arr;\n let match2d = transform.match(matrix2d);\n if (match2d) {\n match2d = match2d[1];\n arr = match2d.split(',').map(item => {\n return parseFloat(item, 10);\n });\n arr[4] = xy.x;\n arr[5] = xy.y;\n setTransform(node, `matrix(${arr.join(',')})`);\n } else {\n const match3d = transform.match(matrix3d)[1];\n arr = match3d.split(',').map(item => {\n return parseFloat(item, 10);\n });\n arr[12] = xy.x;\n arr[13] = xy.y;\n setTransform(node, `matrix3d(${arr.join(',')})`);\n }\n } else {\n setTransform(\n node,\n `translateX(${xy.x}px) translateY(${xy.y}px) translateZ(0)`,\n );\n }\n}\n","import {\n setTransitionProperty,\n getTransitionProperty,\n getTransformXY,\n setTransformXY,\n getTransformName,\n} from './propertyUtils';\n\nconst RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nlet getComputedStyleX;\n\n// https://stackoverflow.com/a/3485654/3040605\nfunction forceRelayout(elem) {\n const originalStyle = elem.style.display;\n elem.style.display = 'none';\n elem.offsetHeight; // eslint-disable-line\n elem.style.display = originalStyle;\n}\n\nfunction css(el, name, v) {\n let value = v;\n if (typeof name === 'object') {\n for (const i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n return undefined;\n }\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value = `${value}px`;\n }\n el.style[name] = value;\n return undefined;\n }\n return getComputedStyleX(el, name);\n}\n\nfunction getClientPosition(elem) {\n let box;\n let x;\n let y;\n const doc = elem.ownerDocument;\n const body = doc.body;\n const docElem = doc && doc.documentElement;\n // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n box = elem.getBoundingClientRect();\n\n // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = box.left;\n y = box.top;\n\n // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n\n return {\n left: x,\n top: y,\n };\n}\n\nfunction getScroll(w, top) {\n let ret = w[`page${top ? 'Y' : 'X'}Offset`];\n const method = `scroll${top ? 'Top' : 'Left'}`;\n if (typeof ret !== 'number') {\n const d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n const pos = getClientPosition(el);\n const doc = el.ownerDocument;\n const w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n // must use == for ie8\n /* eslint eqeqeq:0 */\n return obj !== null && obj !== undefined && obj == obj.window;\n}\n\nfunction getDocument(node) {\n if (isWindow(node)) {\n return node.document;\n }\n if (node.nodeType === 9) {\n return node;\n }\n return node.ownerDocument;\n}\n\nfunction _getComputedStyle(elem, name, cs) {\n let computedStyle = cs;\n let val = '';\n const d = getDocument(elem);\n computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null);\n\n // https://github.com/kissyteam/kissy/issues/61\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nconst _RE_NUM_NO_PX = new RegExp(`^(${RE_NUM})(?!px)[a-z%]+$`, 'i');\nconst RE_POS = /^(top|right|bottom|left)$/;\nconst CURRENT_STYLE = 'currentStyle';\nconst RUNTIME_STYLE = 'runtimeStyle';\nconst LEFT = 'left';\nconst PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n let ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n const style = elem.style;\n const left = style[LEFT];\n const rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n // prevent flashing of content\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n // Put in the new values to get a computed value out\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX;\n\n // Revert the changed values\n style[LEFT] = left;\n\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n return ret === '' ? 'auto' : ret;\n}\n\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle\n ? _getComputedStyle\n : _getComputedStyleIE;\n}\n\nfunction getOffsetDirection(dir, option) {\n if (dir === 'left') {\n return option.useCssRight ? 'right' : dir;\n }\n return option.useCssBottom ? 'bottom' : dir;\n}\n\nfunction oppositeOffsetDirection(dir) {\n if (dir === 'left') {\n return 'right';\n } else if (dir === 'right') {\n return 'left';\n } else if (dir === 'top') {\n return 'bottom';\n } else if (dir === 'bottom') {\n return 'top';\n }\n}\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setLeftTop(elem, offset, option) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n let presetH = -999;\n let presetV = -999;\n const horizontalProperty = getOffsetDirection('left', option);\n const verticalProperty = getOffsetDirection('top', option);\n const oppositeHorizontalProperty = oppositeOffsetDirection(\n horizontalProperty,\n );\n const oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty);\n\n if (horizontalProperty !== 'left') {\n presetH = 999;\n }\n\n if (verticalProperty !== 'top') {\n presetV = 999;\n }\n let originalTransition = '';\n const originalOffset = getOffset(elem);\n if ('left' in offset || 'top' in offset) {\n originalTransition = getTransitionProperty(elem) || '';\n setTransitionProperty(elem, 'none');\n }\n if ('left' in offset) {\n elem.style[oppositeHorizontalProperty] = '';\n elem.style[horizontalProperty] = `${presetH}px`;\n }\n if ('top' in offset) {\n elem.style[oppositeVerticalProperty] = '';\n elem.style[verticalProperty] = `${presetV}px`;\n }\n // force relayout\n forceRelayout(elem);\n const old = getOffset(elem);\n const originalStyle = {};\n for (const key in offset) {\n if (offset.hasOwnProperty(key)) {\n const dir = getOffsetDirection(key, option);\n const preset = key === 'left' ? presetH : presetV;\n const off = originalOffset[key] - old[key];\n if (dir === key) {\n originalStyle[dir] = preset + off;\n } else {\n originalStyle[dir] = preset - off;\n }\n }\n }\n css(elem, originalStyle);\n // force relayout\n forceRelayout(elem);\n if ('left' in offset || 'top' in offset) {\n setTransitionProperty(elem, originalTransition);\n }\n const ret = {};\n for (const key in offset) {\n if (offset.hasOwnProperty(key)) {\n const dir = getOffsetDirection(key, option);\n const off = offset[key] - originalOffset[key];\n if (key === dir) {\n ret[dir] = originalStyle[dir] + off;\n } else {\n ret[dir] = originalStyle[dir] - off;\n }\n }\n }\n css(elem, ret);\n}\n\nfunction setTransform(elem, offset) {\n const originalOffset = getOffset(elem);\n const originalXY = getTransformXY(elem);\n const resultXY = { x: originalXY.x, y: originalXY.y };\n if ('left' in offset) {\n resultXY.x = originalXY.x + offset.left - originalOffset.left;\n }\n if ('top' in offset) {\n resultXY.y = originalXY.y + offset.top - originalOffset.top;\n }\n setTransformXY(elem, resultXY);\n}\n\nfunction setOffset(elem, offset, option) {\n if (option.ignoreShake) {\n const oriOffset = getOffset(elem);\n\n const oLeft = oriOffset.left.toFixed(0);\n const oTop = oriOffset.top.toFixed(0);\n const tLeft = offset.left.toFixed(0);\n const tTop = offset.top.toFixed(0);\n\n if (oLeft === tLeft && oTop === tTop) {\n return;\n }\n }\n\n if (option.useCssRight || option.useCssBottom) {\n setLeftTop(elem, offset, option);\n } else if (\n option.useCssTransform &&\n getTransformName() in document.body.style\n ) {\n setTransform(elem, offset, option);\n } else {\n setLeftTop(elem, offset, option);\n }\n}\n\nfunction each(arr, fn) {\n for (let i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nconst BOX_MODELS = ['margin', 'border', 'padding'];\nconst CONTENT_INDEX = -1;\nconst PADDING_INDEX = 2;\nconst BORDER_INDEX = 1;\nconst MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n const old = {};\n const style = elem.style;\n let name;\n\n // Remember the old values, and insert the new ones\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem);\n\n // Revert the old values\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n let value = 0;\n let prop;\n let j;\n let i;\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n if (prop) {\n for (i = 0; i < which.length; i++) {\n let cssProp;\n if (prop === 'border') {\n cssProp = `${prop}${which[i]}Width`;\n } else {\n cssProp = prop + which[i];\n }\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n return value;\n}\n\nconst domUtils = {\n getParent(element) {\n let parent = element;\n do {\n if (parent.nodeType === 11 && parent.host) {\n parent = parent.host;\n } else {\n parent = parent.parentNode;\n }\n } while (parent && parent.nodeType !== 1 && parent.nodeType !== 9);\n return parent;\n },\n};\n\neach(['Width', 'Height'], name => {\n domUtils[`doc${name}`] = refWin => {\n const d = refWin.document;\n return Math.max(\n // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement[`scroll${name}`],\n // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body[`scroll${name}`],\n domUtils[`viewport${name}`](d),\n );\n };\n\n domUtils[`viewport${name}`] = win => {\n // pc browser includes scrollbar in window.innerWidth\n const prop = `client${name}`;\n const doc = win.document;\n const body = doc.body;\n const documentElement = doc.documentElement;\n const documentElementProp = documentElement[prop];\n // 标准模式取 documentElement\n // backcompat 取 body\n return (\n (doc.compatMode === 'CSS1Compat' && documentElementProp) ||\n (body && body[prop]) ||\n documentElementProp\n );\n };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, ex) {\n let extra = ex;\n if (isWindow(elem)) {\n return name === 'width'\n ? domUtils.viewportWidth(elem)\n : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width'\n ? domUtils.docWidth(elem)\n : domUtils.docHeight(elem);\n }\n const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n let borderBoxValue =\n name === 'width'\n ? elem.getBoundingClientRect().width\n : elem.getBoundingClientRect().height;\n const isBorderBox = isBorderBoxFn(elem);\n let cssBoxValue = 0;\n if (\n borderBoxValue === null ||\n borderBoxValue === undefined ||\n borderBoxValue <= 0\n ) {\n borderBoxValue = undefined;\n // Fall back to computed then un computed css if necessary\n cssBoxValue = getComputedStyleX(elem, name);\n if (\n cssBoxValue === null ||\n cssBoxValue === undefined ||\n Number(cssBoxValue) < 0\n ) {\n cssBoxValue = elem.style[name] || 0;\n }\n // Normalize '', auto, and prepare for extra\n cssBoxValue = parseFloat(cssBoxValue) || 0;\n }\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n const borderBoxValueOrIsBorderBox =\n borderBoxValue !== undefined || isBorderBox;\n const val = borderBoxValue || cssBoxValue;\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return (\n val - getPBMWidth(elem, ['border', 'padding'], which)\n );\n }\n return cssBoxValue;\n } else if (borderBoxValueOrIsBorderBox) {\n if (extra === BORDER_INDEX) {\n return val;\n }\n return (\n val +\n (extra === PADDING_INDEX\n ? -getPBMWidth(elem, ['border'], which)\n : getPBMWidth(elem, ['margin'], which))\n );\n }\n return (\n cssBoxValue +\n getPBMWidth(elem, BOX_MODELS.slice(extra), which)\n );\n}\n\nconst cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block',\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay(...args) {\n let val;\n const elem = args[0];\n // in case elem is window\n // elem.offsetWidth === undefined\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, () => {\n val = getWH.apply(undefined, args);\n });\n }\n return val;\n}\n\neach(['width', 'height'], name => {\n const first = name.charAt(0).toUpperCase() + name.slice(1);\n domUtils[`outer${first}`] = (el, includeMargin) => {\n return (\n el &&\n getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX)\n );\n };\n const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = (elem, v) => {\n let val = v;\n if (val !== undefined) {\n if (elem) {\n const isBorderBox = isBorderBoxFn(elem);\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which);\n }\n return css(elem, name, val);\n }\n return undefined;\n }\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n});\n\nfunction mix(to, from) {\n for (const i in from) {\n if (from.hasOwnProperty(i)) {\n to[i] = from[i];\n }\n }\n return to;\n}\n\nconst utils = {\n getWindow(node) {\n if (node && node.document && node.setTimeout) {\n return node;\n }\n const doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n getDocument,\n offset(el, value, option) {\n if (typeof value !== 'undefined') {\n setOffset(el, value, option || {});\n } else {\n return getOffset(el);\n }\n },\n isWindow,\n each,\n css,\n clone(obj) {\n let i;\n const ret = {};\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n const overflow = obj.overflow;\n if (overflow) {\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret.overflow[i] = obj.overflow[i];\n }\n }\n }\n return ret;\n },\n mix,\n getWindowScrollLeft(w) {\n return getScrollLeft(w);\n },\n getWindowScrollTop(w) {\n return getScrollTop(w);\n },\n merge(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n utils.mix(ret, args[i]);\n }\n return ret;\n },\n viewportWidth: 0,\n viewportHeight: 0,\n};\n\nmix(utils, domUtils);\n\nexport default utils;\n","import utils from './utils';\n\n/**\n * 得到会导致元素显示不全的祖先元素\n */\nconst { getParent } = utils;\n\nfunction getOffsetParent(element) {\n if (utils.isWindow(element) || element.nodeType === 9) {\n return null;\n }\n // ie 这个也不是完全可行\n /*\n
\n
\n 元素 6 高 100px 宽 50px
\n
\n
\n */\n // element.offsetParent does the right thing in ie7 and below. Return parent with layout!\n // In other browsers it only includes elements with position absolute, relative or\n // fixed, not elements with overflow set to auto or scroll.\n // if (UA.ie && ieMode < 8) {\n // return element.offsetParent;\n // }\n // 统一的 offsetParent 方法\n const doc = utils.getDocument(element);\n const body = doc.body;\n let parent;\n let positionStyle = utils.css(element, 'position');\n const skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute';\n\n if (!skipStatic) {\n return element.nodeName.toLowerCase() === 'html'\n ? null\n : getParent(element);\n }\n\n for (\n parent = getParent(element);\n parent && parent !== body && parent.nodeType !== 9;\n parent = getParent(parent)\n ) {\n positionStyle = utils.css(parent, 'position');\n if (positionStyle !== 'static') {\n return parent;\n }\n }\n return null;\n}\n\nexport default getOffsetParent;\n","import utils from './utils';\n\nconst { getParent } = utils;\n\nexport default function isAncestorFixed(element) {\n if (utils.isWindow(element) || element.nodeType === 9) {\n return false;\n }\n\n const doc = utils.getDocument(element);\n const body = doc.body;\n let parent = null;\n for (\n parent = getParent(element);\n // 修复元素位于 document.documentElement 下导致崩溃问题\n parent && parent !== body && parent !== doc;\n parent = getParent(parent)\n ) {\n const positionStyle = utils.css(parent, 'position');\n if (positionStyle === 'fixed') {\n return true;\n }\n }\n return false;\n}\n","import utils from './utils';\nimport getOffsetParent from './getOffsetParent';\nimport isAncestorFixed from './isAncestorFixed';\n\n/**\n * 获得元素的显示部分的区域\n */\nfunction getVisibleRectForElement(element, alwaysByViewport) {\n const visibleRect = {\n left: 0,\n right: Infinity,\n top: 0,\n bottom: Infinity,\n };\n let el = getOffsetParent(element);\n const doc = utils.getDocument(element);\n const win = doc.defaultView || doc.parentWindow;\n const body = doc.body;\n const documentElement = doc.documentElement;\n\n // Determine the size of the visible rect by climbing the dom accounting for\n // all scrollable containers.\n while (el) {\n // clientWidth is zero for inline block elements in ie.\n if (\n (navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) &&\n // body may have overflow set on it, yet we still get the entire\n // viewport. In some browsers, el.offsetParent may be\n // document.documentElement, so check for that too.\n (el !== body &&\n el !== documentElement &&\n utils.css(el, 'overflow') !== 'visible')\n ) {\n const pos = utils.offset(el);\n // add border\n pos.left += el.clientLeft;\n pos.top += el.clientTop;\n visibleRect.top = Math.max(visibleRect.top, pos.top);\n visibleRect.right = Math.min(\n visibleRect.right,\n // consider area without scrollBar\n pos.left + el.clientWidth,\n );\n visibleRect.bottom = Math.min(\n visibleRect.bottom,\n pos.top + el.clientHeight,\n );\n visibleRect.left = Math.max(visibleRect.left, pos.left);\n } else if (el === body || el === documentElement) {\n break;\n }\n el = getOffsetParent(el);\n }\n\n // Set element position to fixed\n // make sure absolute element itself don't affect it's visible area\n // https://github.com/ant-design/ant-design/issues/7601\n let originalPosition = null;\n if (!utils.isWindow(element) && element.nodeType !== 9) {\n originalPosition = element.style.position;\n const position = utils.css(element, 'position');\n if (position === 'absolute') {\n element.style.position = 'fixed';\n }\n }\n\n const scrollX = utils.getWindowScrollLeft(win);\n const scrollY = utils.getWindowScrollTop(win);\n const viewportWidth = utils.viewportWidth(win);\n const viewportHeight = utils.viewportHeight(win);\n let documentWidth = documentElement.scrollWidth;\n let documentHeight = documentElement.scrollHeight;\n\n // scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX.\n // We should cut this ourself.\n const bodyStyle = window.getComputedStyle(body);\n if (bodyStyle.overflowX === 'hidden') {\n documentWidth = win.innerWidth;\n }\n if (bodyStyle.overflowY === 'hidden') {\n documentHeight = win.innerHeight;\n }\n\n // Reset element position after calculate the visible area\n if (element.style) {\n element.style.position = originalPosition;\n }\n\n if (alwaysByViewport || isAncestorFixed(element)) {\n // Clip by viewport's size.\n visibleRect.left = Math.max(visibleRect.left, scrollX);\n visibleRect.top = Math.max(visibleRect.top, scrollY);\n visibleRect.right = Math.min(visibleRect.right, scrollX + viewportWidth);\n visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + viewportHeight);\n } else {\n // Clip by document's size.\n const maxVisibleWidth = Math.max(documentWidth, scrollX + viewportWidth);\n visibleRect.right = Math.min(visibleRect.right, maxVisibleWidth);\n\n const maxVisibleHeight = Math.max(documentHeight, scrollY + viewportHeight);\n visibleRect.bottom = Math.min(visibleRect.bottom, maxVisibleHeight);\n }\n\n return visibleRect.top >= 0 &&\n visibleRect.left >= 0 &&\n visibleRect.bottom > visibleRect.top &&\n visibleRect.right > visibleRect.left\n ? visibleRect\n : null;\n}\n\nexport default getVisibleRectForElement;\n","import utils from './utils';\n\nfunction getRegion(node) {\n let offset;\n let w;\n let h;\n if (!utils.isWindow(node) && node.nodeType !== 9) {\n offset = utils.offset(node);\n w = utils.outerWidth(node);\n h = utils.outerHeight(node);\n } else {\n const win = utils.getWindow(node);\n offset = {\n left: utils.getWindowScrollLeft(win),\n top: utils.getWindowScrollTop(win),\n };\n w = utils.viewportWidth(win);\n h = utils.viewportHeight(win);\n }\n offset.width = w;\n offset.height = h;\n return offset;\n}\n\nexport default getRegion;\n","/**\n * 获取 node 上的 align 对齐点 相对于页面的坐标\n */\n\nfunction getAlignOffset(region, align) {\n const V = align.charAt(0);\n const H = align.charAt(1);\n const w = region.width;\n const h = region.height;\n\n let x = region.left;\n let y = region.top;\n\n if (V === 'c') {\n y += h / 2;\n } else if (V === 'b') {\n y += h;\n }\n\n if (H === 'c') {\n x += w / 2;\n } else if (H === 'r') {\n x += w;\n }\n\n return {\n left: x,\n top: y,\n };\n}\n\nexport default getAlignOffset;\n","import getAlignOffset from './getAlignOffset';\n\nfunction getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {\n const p1 = getAlignOffset(refNodeRegion, points[1]);\n const p2 = getAlignOffset(elRegion, points[0]);\n const diff = [p2.left - p1.left, p2.top - p1.top];\n\n return {\n left: Math.round(elRegion.left - diff[0] + offset[0] - targetOffset[0]),\n top: Math.round(elRegion.top - diff[1] + offset[1] - targetOffset[1]),\n };\n}\n\nexport default getElFuturePos;\n","/**\n * align dom node flexibly\n * @author yiminghe@gmail.com\n */\n\nimport utils from '../utils';\nimport getVisibleRectForElement from '../getVisibleRectForElement';\nimport adjustForViewport from '../adjustForViewport';\nimport getRegion from '../getRegion';\nimport getElFuturePos from '../getElFuturePos';\n\n// http://yiminghe.iteye.com/blog/1124720\n\nfunction isFailX(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.left < visibleRect.left ||\n elFuturePos.left + elRegion.width > visibleRect.right\n );\n}\n\nfunction isFailY(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.top < visibleRect.top ||\n elFuturePos.top + elRegion.height > visibleRect.bottom\n );\n}\n\nfunction isCompleteFailX(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.left > visibleRect.right ||\n elFuturePos.left + elRegion.width < visibleRect.left\n );\n}\n\nfunction isCompleteFailY(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.top > visibleRect.bottom ||\n elFuturePos.top + elRegion.height < visibleRect.top\n );\n}\n\nfunction flip(points, reg, map) {\n const ret = [];\n utils.each(points, p => {\n ret.push(\n p.replace(reg, m => {\n return map[m];\n }),\n );\n });\n return ret;\n}\n\nfunction flipOffset(offset, index) {\n offset[index] = -offset[index];\n return offset;\n}\n\nfunction convertOffset(str, offsetLen) {\n let n;\n if (/%$/.test(str)) {\n n = (parseInt(str.substring(0, str.length - 1), 10) / 100) * offsetLen;\n } else {\n n = parseInt(str, 10);\n }\n return n || 0;\n}\n\nfunction normalizeOffset(offset, el) {\n offset[0] = convertOffset(offset[0], el.width);\n offset[1] = convertOffset(offset[1], el.height);\n}\n\n/**\n * @param el\n * @param tgtRegion 参照节点所占的区域: { left, top, width, height }\n * @param align\n */\nfunction doAlign(el, tgtRegion, align, isTgtRegionVisible) {\n let points = align.points;\n let offset = align.offset || [0, 0];\n let targetOffset = align.targetOffset || [0, 0];\n let overflow = align.overflow;\n const source = align.source || el;\n offset = [].concat(offset);\n targetOffset = [].concat(targetOffset);\n overflow = overflow || {};\n const newOverflowCfg = {};\n let fail = 0;\n const alwaysByViewport = !!(overflow && overflow.alwaysByViewport);\n // 当前节点可以被放置的显示区域\n const visibleRect = getVisibleRectForElement(source, alwaysByViewport);\n // 当前节点所占的区域, left/top/width/height\n const elRegion = getRegion(source);\n // 将 offset 转换成数值,支持百分比\n normalizeOffset(offset, elRegion);\n normalizeOffset(targetOffset, tgtRegion);\n // 当前节点将要被放置的位置\n let elFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n points,\n offset,\n targetOffset,\n );\n // 当前节点将要所处的区域\n let newElRegion = utils.merge(elRegion, elFuturePos);\n\n // 如果可视区域不能完全放置当前节点时允许调整\n if (\n visibleRect &&\n (overflow.adjustX || overflow.adjustY) &&\n isTgtRegionVisible\n ) {\n if (overflow.adjustX) {\n // 如果横向不能放下\n if (isFailX(elFuturePos, elRegion, visibleRect)) {\n // 对齐位置反下\n const newPoints = flip(points, /[lr]/gi, {\n l: 'r',\n r: 'l',\n });\n // 偏移量也反下\n const newOffset = flipOffset(offset, 0);\n const newTargetOffset = flipOffset(targetOffset, 0);\n const newElFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n newPoints,\n newOffset,\n newTargetOffset,\n );\n\n if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) {\n fail = 1;\n points = newPoints;\n offset = newOffset;\n targetOffset = newTargetOffset;\n }\n }\n }\n\n if (overflow.adjustY) {\n // 如果纵向不能放下\n if (isFailY(elFuturePos, elRegion, visibleRect)) {\n // 对齐位置反下\n const newPoints = flip(points, /[tb]/gi, {\n t: 'b',\n b: 't',\n });\n // 偏移量也反下\n const newOffset = flipOffset(offset, 1);\n const newTargetOffset = flipOffset(targetOffset, 1);\n const newElFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n newPoints,\n newOffset,\n newTargetOffset,\n );\n\n if (!isCompleteFailY(newElFuturePos, elRegion, visibleRect)) {\n fail = 1;\n points = newPoints;\n offset = newOffset;\n targetOffset = newTargetOffset;\n }\n }\n }\n\n // 如果失败,重新计算当前节点将要被放置的位置\n if (fail) {\n elFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n points,\n offset,\n targetOffset,\n );\n utils.mix(newElRegion, elFuturePos);\n }\n const isStillFailX = isFailX(elFuturePos, elRegion, visibleRect);\n const isStillFailY = isFailY(elFuturePos, elRegion, visibleRect);\n // 检查反下后的位置是否可以放下了,如果仍然放不下:\n // 1. 复原修改过的定位参数\n if (isStillFailX || isStillFailY) {\n let newPoints = points;\n\n // 重置对应部分的翻转逻辑\n if (isStillFailX) {\n newPoints = flip(points, /[lr]/gi, {\n l: 'r',\n r: 'l',\n });\n }\n if (isStillFailY) {\n newPoints = flip(points, /[tb]/gi, {\n t: 'b',\n b: 't',\n });\n }\n\n points = newPoints;\n\n offset = align.offset || [0, 0];\n targetOffset = align.targetOffset || [0, 0];\n }\n // 2. 只有指定了可以调整当前方向才调整\n newOverflowCfg.adjustX = overflow.adjustX && isStillFailX;\n newOverflowCfg.adjustY = overflow.adjustY && isStillFailY;\n\n // 确实要调整,甚至可能会调整高度宽度\n if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {\n newElRegion = adjustForViewport(\n elFuturePos,\n elRegion,\n visibleRect,\n newOverflowCfg,\n );\n }\n }\n\n // need judge to in case set fixed with in css on height auto element\n if (newElRegion.width !== elRegion.width) {\n utils.css(\n source,\n 'width',\n utils.width(source) + newElRegion.width - elRegion.width,\n );\n }\n\n if (newElRegion.height !== elRegion.height) {\n utils.css(\n source,\n 'height',\n utils.height(source) + newElRegion.height - elRegion.height,\n );\n }\n\n // https://github.com/kissyteam/kissy/issues/190\n // 相对于屏幕位置没变,而 left/top 变了\n // 例如
\n utils.offset(\n source,\n {\n left: newElRegion.left,\n top: newElRegion.top,\n },\n {\n useCssRight: align.useCssRight,\n useCssBottom: align.useCssBottom,\n useCssTransform: align.useCssTransform,\n ignoreShake: align.ignoreShake,\n },\n );\n\n return {\n points,\n offset,\n targetOffset,\n overflow: newOverflowCfg,\n };\n}\n\nexport default doAlign;\n/**\n * 2012-04-26 yiminghe@gmail.com\n * - 优化智能对齐算法\n * - 慎用 resizeXX\n *\n * 2011-07-13 yiminghe@gmail.com note:\n * - 增加智能对齐,以及大小调整选项\n **/\n","import utils from './utils';\n\nfunction adjustForViewport(elFuturePos, elRegion, visibleRect, overflow) {\n const pos = utils.clone(elFuturePos);\n const size = {\n width: elRegion.width,\n height: elRegion.height,\n };\n\n if (overflow.adjustX && pos.left < visibleRect.left) {\n pos.left = visibleRect.left;\n }\n\n // Left edge inside and right edge outside viewport, try to resize it.\n if (\n overflow.resizeWidth &&\n pos.left >= visibleRect.left &&\n pos.left + size.width > visibleRect.right\n ) {\n size.width -= pos.left + size.width - visibleRect.right;\n }\n\n // Right edge outside viewport, try to move it.\n if (overflow.adjustX && pos.left + size.width > visibleRect.right) {\n // 保证左边界和可视区域左边界对齐\n pos.left = Math.max(visibleRect.right - size.width, visibleRect.left);\n }\n\n // Top edge outside viewport, try to move it.\n if (overflow.adjustY && pos.top < visibleRect.top) {\n pos.top = visibleRect.top;\n }\n\n // Top edge inside and bottom edge outside viewport, try to resize it.\n if (\n overflow.resizeHeight &&\n pos.top >= visibleRect.top &&\n pos.top + size.height > visibleRect.bottom\n ) {\n size.height -= pos.top + size.height - visibleRect.bottom;\n }\n\n // Bottom edge outside viewport, try to move it.\n if (overflow.adjustY && pos.top + size.height > visibleRect.bottom) {\n // 保证上边界和可视区域上边界对齐\n pos.top = Math.max(visibleRect.bottom - size.height, visibleRect.top);\n }\n\n return utils.mix(pos, size);\n}\n\nexport default adjustForViewport;\n","import doAlign from './align';\nimport getOffsetParent from '../getOffsetParent';\nimport getVisibleRectForElement from '../getVisibleRectForElement';\nimport getRegion from '../getRegion';\n\nfunction isOutOfVisibleRect(target, alwaysByViewport) {\n const visibleRect = getVisibleRectForElement(target, alwaysByViewport);\n const targetRegion = getRegion(target);\n\n return (\n !visibleRect ||\n targetRegion.left + targetRegion.width <= visibleRect.left ||\n targetRegion.top + targetRegion.height <= visibleRect.top ||\n targetRegion.left >= visibleRect.right ||\n targetRegion.top >= visibleRect.bottom\n );\n}\n\nfunction alignElement(el, refNode, align) {\n const target = align.target || refNode;\n const refNodeRegion = getRegion(target);\n\n const isTargetNotOutOfVisible = !isOutOfVisibleRect(\n target,\n align.overflow && align.overflow.alwaysByViewport,\n );\n\n return doAlign(el, refNodeRegion, align, isTargetNotOutOfVisible);\n}\n\nalignElement.__getOffsetParent = getOffsetParent;\n\nalignElement.__getVisibleRectForElement = getVisibleRectForElement;\n\nexport default alignElement;\n","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport ResizeObserver from 'resize-observer-polyfill';\nimport contains from \"rc-util/es/Dom/contains\";\nexport function isSamePoint(prev, next) {\n if (prev === next) return true;\n if (!prev || !next) return false;\n\n if ('pageX' in next && 'pageY' in next) {\n return prev.pageX === next.pageX && prev.pageY === next.pageY;\n }\n\n if ('clientX' in next && 'clientY' in next) {\n return prev.clientX === next.clientX && prev.clientY === next.clientY;\n }\n\n return false;\n}\nexport function restoreFocus(activeElement, container) {\n // Focus back if is in the container\n if (activeElement !== document.activeElement && contains(container, activeElement) && typeof activeElement.focus === 'function') {\n activeElement.focus();\n }\n}\nexport function monitorResize(element, callback) {\n var prevWidth = null;\n var prevHeight = null;\n\n function onResize(_ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n target = _ref2[0].target;\n\n if (!document.documentElement.contains(target)) return;\n\n var _target$getBoundingCl = target.getBoundingClientRect(),\n width = _target$getBoundingCl.width,\n height = _target$getBoundingCl.height;\n\n var fixedWidth = Math.floor(width);\n var fixedHeight = Math.floor(height);\n\n if (prevWidth !== fixedWidth || prevHeight !== fixedHeight) {\n // https://webkit.org/blog/9997/resizeobserver-in-webkit/\n Promise.resolve().then(function () {\n callback({\n width: fixedWidth,\n height: fixedHeight\n });\n });\n }\n\n prevWidth = fixedWidth;\n prevHeight = fixedHeight;\n }\n\n var resizeObserver = new ResizeObserver(onResize);\n\n if (element) {\n resizeObserver.observe(element);\n }\n\n return function () {\n resizeObserver.disconnect();\n };\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\n/**\n * Removed props:\n * - childrenProps\n */\nimport React from 'react';\nimport { composeRef } from \"rc-util/es/ref\";\nimport isVisible from \"rc-util/es/Dom/isVisible\";\nimport { alignElement, alignPoint } from 'dom-align';\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport { isSamePoint, restoreFocus, monitorResize } from './util';\nimport useBuffer from './hooks/useBuffer';\n\nfunction getElement(func) {\n if (typeof func !== 'function') return null;\n return func();\n}\n\nfunction getPoint(point) {\n if (_typeof(point) !== 'object' || !point) return null;\n return point;\n}\n\nvar Align = function Align(_ref, ref) {\n var children = _ref.children,\n disabled = _ref.disabled,\n target = _ref.target,\n align = _ref.align,\n onAlign = _ref.onAlign,\n monitorWindowResize = _ref.monitorWindowResize,\n _ref$monitorBufferTim = _ref.monitorBufferTime,\n monitorBufferTime = _ref$monitorBufferTim === void 0 ? 0 : _ref$monitorBufferTim;\n var cacheRef = React.useRef({});\n var nodeRef = React.useRef();\n var childNode = React.Children.only(children); // ===================== Align ======================\n // We save the props here to avoid closure makes props ood\n\n var forceAlignPropsRef = React.useRef({});\n forceAlignPropsRef.current.disabled = disabled;\n forceAlignPropsRef.current.target = target;\n forceAlignPropsRef.current.onAlign = onAlign;\n\n var _useBuffer = useBuffer(function () {\n var _forceAlignPropsRef$c = forceAlignPropsRef.current,\n latestDisabled = _forceAlignPropsRef$c.disabled,\n latestTarget = _forceAlignPropsRef$c.target,\n latestOnAlign = _forceAlignPropsRef$c.onAlign;\n\n if (!latestDisabled && latestTarget) {\n var source = nodeRef.current;\n var result;\n var element = getElement(latestTarget);\n var point = getPoint(latestTarget);\n cacheRef.current.element = element;\n cacheRef.current.point = point; // IE lose focus after element realign\n // We should record activeElement and restore later\n\n var _document = document,\n activeElement = _document.activeElement; // We only align when element is visible\n\n if (element && isVisible(element)) {\n result = alignElement(source, element, align);\n } else if (point) {\n result = alignPoint(source, point, align);\n }\n\n restoreFocus(activeElement, source);\n\n if (latestOnAlign && result) {\n latestOnAlign(source, result);\n }\n\n return true;\n }\n\n return false;\n }, monitorBufferTime),\n _useBuffer2 = _slicedToArray(_useBuffer, 2),\n _forceAlign = _useBuffer2[0],\n cancelForceAlign = _useBuffer2[1]; // ===================== Effect =====================\n // Listen for target updated\n\n\n var resizeMonitor = React.useRef({\n cancel: function cancel() {}\n }); // Listen for source updated\n\n var sourceResizeMonitor = React.useRef({\n cancel: function cancel() {}\n });\n React.useEffect(function () {\n var element = getElement(target);\n var point = getPoint(target);\n\n if (nodeRef.current !== sourceResizeMonitor.current.element) {\n sourceResizeMonitor.current.cancel();\n sourceResizeMonitor.current.element = nodeRef.current;\n sourceResizeMonitor.current.cancel = monitorResize(nodeRef.current, _forceAlign);\n }\n\n if (cacheRef.current.element !== element || !isSamePoint(cacheRef.current.point, point)) {\n _forceAlign(); // Add resize observer\n\n\n if (resizeMonitor.current.element !== element) {\n resizeMonitor.current.cancel();\n resizeMonitor.current.element = element;\n resizeMonitor.current.cancel = monitorResize(element, _forceAlign);\n }\n }\n }); // Listen for disabled change\n\n React.useEffect(function () {\n if (!disabled) {\n _forceAlign();\n } else {\n cancelForceAlign();\n }\n }, [disabled]); // Listen for window resize\n\n var winResizeRef = React.useRef(null);\n React.useEffect(function () {\n if (monitorWindowResize) {\n if (!winResizeRef.current) {\n winResizeRef.current = addEventListener(window, 'resize', _forceAlign);\n }\n } else if (winResizeRef.current) {\n winResizeRef.current.remove();\n winResizeRef.current = null;\n }\n }, [monitorWindowResize]); // Clear all if unmount\n\n React.useEffect(function () {\n return function () {\n resizeMonitor.current.cancel();\n sourceResizeMonitor.current.cancel();\n if (winResizeRef.current) winResizeRef.current.remove();\n cancelForceAlign();\n };\n }, []); // ====================== Ref =======================\n\n React.useImperativeHandle(ref, function () {\n return {\n forceAlign: function forceAlign() {\n return _forceAlign(true);\n }\n };\n }); // ===================== Render =====================\n\n if (React.isValidElement(childNode)) {\n childNode = React.cloneElement(childNode, {\n ref: composeRef(childNode.ref, nodeRef)\n });\n }\n\n return childNode;\n};\n\nvar RefAlign = React.forwardRef(Align);\nRefAlign.displayName = 'Align';\nexport default RefAlign;","import React from 'react';\nexport default (function (callback, buffer) {\n var calledRef = React.useRef(false);\n var timeoutRef = React.useRef(null);\n\n function cancelTrigger() {\n window.clearTimeout(timeoutRef.current);\n }\n\n function trigger(force) {\n if (!calledRef.current || force === true) {\n if (callback() === false) {\n // Not delay since callback cancelled self\n return;\n }\n\n calledRef.current = true;\n cancelTrigger();\n timeoutRef.current = window.setTimeout(function () {\n calledRef.current = false;\n }, buffer);\n } else {\n cancelTrigger();\n timeoutRef.current = window.setTimeout(function () {\n calledRef.current = false;\n trigger();\n }, buffer);\n }\n }\n\n return [trigger, function () {\n calledRef.current = false;\n cancelTrigger();\n }];\n});","import utils from '../utils';\nimport doAlign from './align';\n\n/**\n * `tgtPoint`: { pageX, pageY } or { clientX, clientY }.\n * If client position provided, will internal convert to page position.\n */\n\nfunction alignPoint(el, tgtPoint, align) {\n let pageX;\n let pageY;\n\n const doc = utils.getDocument(el);\n const win = doc.defaultView || doc.parentWindow;\n\n const scrollX = utils.getWindowScrollLeft(win);\n const scrollY = utils.getWindowScrollTop(win);\n const viewportWidth = utils.viewportWidth(win);\n const viewportHeight = utils.viewportHeight(win);\n\n if ('pageX' in tgtPoint) {\n pageX = tgtPoint.pageX;\n } else {\n pageX = scrollX + tgtPoint.clientX;\n }\n\n if ('pageY' in tgtPoint) {\n pageY = tgtPoint.pageY;\n } else {\n pageY = scrollY + tgtPoint.clientY;\n }\n\n const tgtRegion = {\n left: pageX,\n top: pageY,\n width: 0,\n height: 0,\n };\n\n const pointInView =\n pageX >= 0 &&\n pageX <= scrollX + viewportWidth &&\n (pageY >= 0 && pageY <= scrollY + viewportHeight);\n\n // Provide default target point\n const points = [align.points[0], 'cc'];\n\n return doAlign(el, tgtRegion, { ...align, points }, pointInView);\n}\n\nexport default alignPoint;\n","// export this package's api\nimport Align from './Align';\nexport default Align;","import _regeneratorRuntime from \"@babel/runtime/regenerator\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useState, useEffect, useRef } from 'react';\nimport raf from \"rc-util/es/raf\";\nvar StatusQueue = ['measure', 'align', null, 'motion'];\nexport default (function (visible, doMeasure) {\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n status = _useState2[0],\n setInternalStatus = _useState2[1];\n\n var rafRef = useRef();\n var destroyRef = useRef(false);\n\n function setStatus(nextStatus) {\n if (!destroyRef.current) {\n setInternalStatus(nextStatus);\n }\n }\n\n function cancelRaf() {\n raf.cancel(rafRef.current);\n }\n\n function goNextStatus(callback) {\n cancelRaf();\n rafRef.current = raf(function () {\n // Only align should be manually trigger\n setStatus(function (prev) {\n switch (status) {\n case 'align':\n return 'motion';\n\n case 'motion':\n return 'stable';\n\n default:\n }\n\n return prev;\n });\n callback === null || callback === void 0 ? void 0 : callback();\n });\n } // Init status\n\n\n useEffect(function () {\n setStatus('measure');\n }, [visible]); // Go next status\n\n useEffect(function () {\n switch (status) {\n case 'measure':\n doMeasure();\n break;\n\n default:\n }\n\n if (status) {\n rafRef.current = raf( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n var index, nextStatus;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n index = StatusQueue.indexOf(status);\n nextStatus = StatusQueue[index + 1];\n\n if (nextStatus && index !== -1) {\n setStatus(nextStatus);\n }\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n })));\n }\n }, [status]);\n useEffect(function () {\n return function () {\n destroyRef.current = true;\n cancelRaf();\n };\n }, []);\n return [status, goNextStatus];\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef, useState } from 'react';\nimport Align from 'rc-align';\nimport CSSMotion from 'rc-motion';\nimport classNames from 'classnames';\nimport useVisibleStatus from './useVisibleStatus';\nimport { getMotion } from '../utils/legacyUtil';\nimport useStretchStyle from './useStretchStyle';\nvar PopupInner = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var visible = props.visible,\n prefixCls = props.prefixCls,\n className = props.className,\n style = props.style,\n children = props.children,\n zIndex = props.zIndex,\n stretch = props.stretch,\n destroyPopupOnHide = props.destroyPopupOnHide,\n forceRender = props.forceRender,\n align = props.align,\n point = props.point,\n getRootDomNode = props.getRootDomNode,\n getClassNameFromAlign = props.getClassNameFromAlign,\n onAlign = props.onAlign,\n onMouseEnter = props.onMouseEnter,\n onMouseLeave = props.onMouseLeave,\n onMouseDown = props.onMouseDown,\n onTouchStart = props.onTouchStart;\n var alignRef = useRef();\n var elementRef = useRef();\n\n var _useState = useState(),\n _useState2 = _slicedToArray(_useState, 2),\n alignedClassName = _useState2[0],\n setAlignedClassName = _useState2[1]; // ======================= Measure ========================\n\n\n var _useStretchStyle = useStretchStyle(stretch),\n _useStretchStyle2 = _slicedToArray(_useStretchStyle, 2),\n stretchStyle = _useStretchStyle2[0],\n measureStretchStyle = _useStretchStyle2[1];\n\n function doMeasure() {\n if (stretch) {\n measureStretchStyle(getRootDomNode());\n }\n } // ======================== Status ========================\n\n\n var _useVisibleStatus = useVisibleStatus(visible, doMeasure),\n _useVisibleStatus2 = _slicedToArray(_useVisibleStatus, 2),\n status = _useVisibleStatus2[0],\n goNextStatus = _useVisibleStatus2[1]; // ======================== Aligns ========================\n\n\n var prepareResolveRef = useRef(); // `target` on `rc-align` can accept as a function to get the bind element or a point.\n // ref: https://www.npmjs.com/package/rc-align\n\n function getAlignTarget() {\n if (point) {\n return point;\n }\n\n return getRootDomNode;\n }\n\n function forceAlign() {\n var _alignRef$current;\n\n (_alignRef$current = alignRef.current) === null || _alignRef$current === void 0 ? void 0 : _alignRef$current.forceAlign();\n }\n\n function onInternalAlign(popupDomNode, matchAlign) {\n if (status === 'align') {\n var nextAlignedClassName = getClassNameFromAlign(matchAlign);\n setAlignedClassName(nextAlignedClassName); // Repeat until not more align needed\n\n if (alignedClassName !== nextAlignedClassName) {\n Promise.resolve().then(function () {\n forceAlign();\n });\n } else {\n goNextStatus(function () {\n var _prepareResolveRef$cu;\n\n (_prepareResolveRef$cu = prepareResolveRef.current) === null || _prepareResolveRef$cu === void 0 ? void 0 : _prepareResolveRef$cu.call(prepareResolveRef);\n });\n }\n\n onAlign === null || onAlign === void 0 ? void 0 : onAlign(popupDomNode, matchAlign);\n }\n } // ======================== Motion ========================\n\n\n var motion = _objectSpread({}, getMotion(props));\n\n ['onAppearEnd', 'onEnterEnd', 'onLeaveEnd'].forEach(function (eventName) {\n var originHandler = motion[eventName];\n\n motion[eventName] = function (element, event) {\n goNextStatus();\n return originHandler === null || originHandler === void 0 ? void 0 : originHandler(element, event);\n };\n });\n\n function onShowPrepare() {\n return new Promise(function (resolve) {\n prepareResolveRef.current = resolve;\n });\n } // Go to stable directly when motion not provided\n\n\n React.useEffect(function () {\n if (!motion.motionName && status === 'motion') {\n goNextStatus();\n }\n }, [motion.motionName, status]); // ========================= Refs =========================\n\n React.useImperativeHandle(ref, function () {\n return {\n forceAlign: forceAlign,\n getElement: function getElement() {\n return elementRef.current;\n }\n };\n }); // ======================== Render ========================\n\n var mergedStyle = _objectSpread(_objectSpread({}, stretchStyle), {}, {\n zIndex: zIndex,\n opacity: status === 'motion' || status === 'stable' || !visible ? undefined : 0,\n pointerEvents: status === 'stable' ? undefined : 'none'\n }, style); // Align status\n\n\n var alignDisabled = true;\n\n if ((align === null || align === void 0 ? void 0 : align.points) && (status === 'align' || status === 'stable')) {\n alignDisabled = false;\n }\n\n var childNode = children; // Wrapper when multiple children\n\n if (React.Children.count(children) > 1) {\n childNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-content\")\n }, children);\n }\n\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n visible: visible,\n ref: elementRef,\n leavedClassName: \"\".concat(prefixCls, \"-hidden\")\n }, motion, {\n onAppearPrepare: onShowPrepare,\n onEnterPrepare: onShowPrepare,\n removeOnLeave: destroyPopupOnHide,\n forceRender: forceRender\n }), function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n var mergedClassName = classNames(prefixCls, className, alignedClassName, motionClassName);\n return /*#__PURE__*/React.createElement(Align, {\n target: getAlignTarget(),\n key: \"popup\",\n ref: alignRef,\n monitorWindowResize: true,\n disabled: alignDisabled,\n align: align,\n onAlign: onInternalAlign\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: motionRef,\n className: mergedClassName,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onMouseDownCapture: onMouseDown,\n onTouchStartCapture: onTouchStart,\n style: _objectSpread(_objectSpread({}, motionStyle), mergedStyle)\n }, childNode));\n });\n});\nPopupInner.displayName = 'PopupInner';\nexport default PopupInner;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nexport default (function (stretch) {\n var _React$useState = React.useState({\n width: 0,\n height: 0\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n targetSize = _React$useState2[0],\n setTargetSize = _React$useState2[1];\n\n function measureStretch(element) {\n setTargetSize({\n width: element.offsetWidth,\n height: element.offsetHeight\n });\n } // Merge stretch style\n\n\n var style = React.useMemo(function () {\n var sizeStyle = {};\n\n if (stretch) {\n var width = targetSize.width,\n height = targetSize.height; // Stretch with target\n\n if (stretch.indexOf('height') !== -1 && height) {\n sizeStyle.height = height;\n } else if (stretch.indexOf('minHeight') !== -1 && height) {\n sizeStyle.minHeight = height;\n }\n\n if (stretch.indexOf('width') !== -1 && width) {\n sizeStyle.width = width;\n } else if (stretch.indexOf('minWidth') !== -1 && width) {\n sizeStyle.minWidth = width;\n }\n }\n\n return sizeStyle;\n }, [stretch, targetSize]);\n return [style, measureStretch];\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport CSSMotion from 'rc-motion';\nimport classNames from 'classnames';\nvar MobilePopupInner = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n visible = props.visible,\n zIndex = props.zIndex,\n children = props.children,\n _props$mobile = props.mobile;\n _props$mobile = _props$mobile === void 0 ? {} : _props$mobile;\n var popupClassName = _props$mobile.popupClassName,\n popupStyle = _props$mobile.popupStyle,\n _props$mobile$popupMo = _props$mobile.popupMotion,\n popupMotion = _props$mobile$popupMo === void 0 ? {} : _props$mobile$popupMo,\n popupRender = _props$mobile.popupRender;\n var elementRef = React.useRef(); // ========================= Refs =========================\n\n React.useImperativeHandle(ref, function () {\n return {\n forceAlign: function forceAlign() {},\n getElement: function getElement() {\n return elementRef.current;\n }\n };\n }); // ======================== Render ========================\n\n var mergedStyle = _objectSpread({\n zIndex: zIndex\n }, popupStyle);\n\n var childNode = children; // Wrapper when multiple children\n\n if (React.Children.count(children) > 1) {\n childNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-content\")\n }, children);\n } // Mobile support additional render\n\n\n if (popupRender) {\n childNode = popupRender(childNode);\n }\n\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n visible: visible,\n ref: elementRef,\n removeOnLeave: true\n }, popupMotion), function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n var mergedClassName = classNames(prefixCls, popupClassName, motionClassName);\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: motionRef,\n className: mergedClassName,\n style: _objectSpread(_objectSpread({}, motionStyle), mergedStyle)\n }, childNode);\n });\n});\nMobilePopupInner.displayName = 'MobilePopupInner';\nexport default MobilePopupInner;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport isMobile from \"rc-util/es/isMobile\";\nimport Mask from './Mask';\nimport PopupInner from './PopupInner';\nimport MobilePopupInner from './MobilePopupInner';\nvar Popup = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var visible = _ref.visible,\n mobile = _ref.mobile,\n props = _objectWithoutProperties(_ref, [\"visible\", \"mobile\"]);\n\n var _useState = useState(visible),\n _useState2 = _slicedToArray(_useState, 2),\n innerVisible = _useState2[0],\n serInnerVisible = _useState2[1];\n\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n inMobile = _useState4[0],\n setInMobile = _useState4[1];\n\n var cloneProps = _objectSpread(_objectSpread({}, props), {}, {\n visible: innerVisible\n }); // We check mobile in visible changed here.\n // And this also delay set `innerVisible` to avoid popup component render flash\n\n\n useEffect(function () {\n serInnerVisible(visible);\n\n if (visible && mobile) {\n setInMobile(isMobile());\n }\n }, [visible, mobile]);\n var popupNode = inMobile ? /*#__PURE__*/React.createElement(MobilePopupInner, _extends({}, cloneProps, {\n mobile: mobile,\n ref: ref\n })) : /*#__PURE__*/React.createElement(PopupInner, _extends({}, cloneProps, {\n ref: ref\n })); // We can use fragment directly but this may failed some selector usage. Keep as origin logic\n\n return /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(Mask, cloneProps), popupNode);\n});\nPopup.displayName = 'Popup';\nexport default Popup;","import * as React from 'react';\nvar TriggerContext = /*#__PURE__*/React.createContext(null);\nexport default TriggerContext;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport raf from \"rc-util/es/raf\";\nimport contains from \"rc-util/es/Dom/contains\";\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { composeRef, supportRef } from \"rc-util/es/ref\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport Portal from \"rc-util/es/Portal\";\nimport classNames from 'classnames';\nimport { getAlignFromPlacement, getAlignPopupClassName } from './utils/alignUtil';\nimport Popup from './Popup';\nimport TriggerContext from './context';\n\nfunction noop() {}\n\nfunction returnEmptyString() {\n return '';\n}\n\nfunction returnDocument(element) {\n if (element) {\n return element.ownerDocument;\n }\n\n return window.document;\n}\n\nvar ALL_HANDLERS = ['onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur', 'onContextMenu'];\n/**\n * Internal usage. Do not use in your code since this will be removed.\n */\n\nexport function generateTrigger(PortalComponent) {\n var Trigger = /*#__PURE__*/function (_React$Component) {\n _inherits(Trigger, _React$Component);\n\n var _super = _createSuper(Trigger);\n\n function Trigger(props) {\n var _this;\n\n _classCallCheck(this, Trigger);\n\n _this = _super.call(this, props);\n _this.popupRef = /*#__PURE__*/React.createRef();\n _this.triggerRef = /*#__PURE__*/React.createRef();\n\n _this.onMouseEnter = function (e) {\n var mouseEnterDelay = _this.props.mouseEnterDelay;\n\n _this.fireEvents('onMouseEnter', e);\n\n _this.delaySetPopupVisible(true, mouseEnterDelay, mouseEnterDelay ? null : e);\n };\n\n _this.onMouseMove = function (e) {\n _this.fireEvents('onMouseMove', e);\n\n _this.setPoint(e);\n };\n\n _this.onMouseLeave = function (e) {\n _this.fireEvents('onMouseLeave', e);\n\n _this.delaySetPopupVisible(false, _this.props.mouseLeaveDelay);\n };\n\n _this.onPopupMouseEnter = function () {\n _this.clearDelayTimer();\n };\n\n _this.onPopupMouseLeave = function (e) {\n var _this$popupRef$curren;\n\n // https://github.com/react-component/trigger/pull/13\n // react bug?\n if (e.relatedTarget && !e.relatedTarget.setTimeout && contains((_this$popupRef$curren = _this.popupRef.current) === null || _this$popupRef$curren === void 0 ? void 0 : _this$popupRef$curren.getElement(), e.relatedTarget)) {\n return;\n }\n\n _this.delaySetPopupVisible(false, _this.props.mouseLeaveDelay);\n };\n\n _this.onFocus = function (e) {\n _this.fireEvents('onFocus', e); // incase focusin and focusout\n\n\n _this.clearDelayTimer();\n\n if (_this.isFocusToShow()) {\n _this.focusTime = Date.now();\n\n _this.delaySetPopupVisible(true, _this.props.focusDelay);\n }\n };\n\n _this.onMouseDown = function (e) {\n _this.fireEvents('onMouseDown', e);\n\n _this.preClickTime = Date.now();\n };\n\n _this.onTouchStart = function (e) {\n _this.fireEvents('onTouchStart', e);\n\n _this.preTouchTime = Date.now();\n };\n\n _this.onBlur = function (e) {\n _this.fireEvents('onBlur', e);\n\n _this.clearDelayTimer();\n\n if (_this.isBlurToHide()) {\n _this.delaySetPopupVisible(false, _this.props.blurDelay);\n }\n };\n\n _this.onContextMenu = function (e) {\n e.preventDefault();\n\n _this.fireEvents('onContextMenu', e);\n\n _this.setPopupVisible(true, e);\n };\n\n _this.onContextMenuClose = function () {\n if (_this.isContextMenuToShow()) {\n _this.close();\n }\n };\n\n _this.onClick = function (event) {\n _this.fireEvents('onClick', event); // focus will trigger click\n\n\n if (_this.focusTime) {\n var preTime;\n\n if (_this.preClickTime && _this.preTouchTime) {\n preTime = Math.min(_this.preClickTime, _this.preTouchTime);\n } else if (_this.preClickTime) {\n preTime = _this.preClickTime;\n } else if (_this.preTouchTime) {\n preTime = _this.preTouchTime;\n }\n\n if (Math.abs(preTime - _this.focusTime) < 20) {\n return;\n }\n\n _this.focusTime = 0;\n }\n\n _this.preClickTime = 0;\n _this.preTouchTime = 0; // Only prevent default when all the action is click.\n // https://github.com/ant-design/ant-design/issues/17043\n // https://github.com/ant-design/ant-design/issues/17291\n\n if (_this.isClickToShow() && (_this.isClickToHide() || _this.isBlurToHide()) && event && event.preventDefault) {\n event.preventDefault();\n }\n\n var nextVisible = !_this.state.popupVisible;\n\n if (_this.isClickToHide() && !nextVisible || nextVisible && _this.isClickToShow()) {\n _this.setPopupVisible(!_this.state.popupVisible, event);\n }\n };\n\n _this.onPopupMouseDown = function () {\n _this.hasPopupMouseDown = true;\n clearTimeout(_this.mouseDownTimeout);\n _this.mouseDownTimeout = window.setTimeout(function () {\n _this.hasPopupMouseDown = false;\n }, 0);\n\n if (_this.context) {\n var _this$context;\n\n (_this$context = _this.context).onPopupMouseDown.apply(_this$context, arguments);\n }\n };\n\n _this.onDocumentClick = function (event) {\n if (_this.props.mask && !_this.props.maskClosable) {\n return;\n }\n\n var target = event.target;\n\n var root = _this.getRootDomNode();\n\n var popupNode = _this.getPopupDomNode();\n\n if ( // mousedown on the target should also close popup when action is contextMenu.\n // https://github.com/ant-design/ant-design/issues/29853\n (!contains(root, target) || _this.isContextMenuOnly()) && !contains(popupNode, target) && !_this.hasPopupMouseDown) {\n _this.close();\n }\n };\n\n _this.getRootDomNode = function () {\n var getTriggerDOMNode = _this.props.getTriggerDOMNode;\n\n if (getTriggerDOMNode) {\n return getTriggerDOMNode(_this.triggerRef.current);\n }\n\n try {\n var domNode = findDOMNode(_this.triggerRef.current);\n\n if (domNode) {\n return domNode;\n }\n } catch (err) {// Do nothing\n }\n\n return ReactDOM.findDOMNode(_assertThisInitialized(_this));\n };\n\n _this.getPopupClassNameFromAlign = function (align) {\n var className = [];\n var _this$props = _this.props,\n popupPlacement = _this$props.popupPlacement,\n builtinPlacements = _this$props.builtinPlacements,\n prefixCls = _this$props.prefixCls,\n alignPoint = _this$props.alignPoint,\n getPopupClassNameFromAlign = _this$props.getPopupClassNameFromAlign;\n\n if (popupPlacement && builtinPlacements) {\n className.push(getAlignPopupClassName(builtinPlacements, prefixCls, align, alignPoint));\n }\n\n if (getPopupClassNameFromAlign) {\n className.push(getPopupClassNameFromAlign(align));\n }\n\n return className.join(' ');\n };\n\n _this.getComponent = function () {\n var _this$props2 = _this.props,\n prefixCls = _this$props2.prefixCls,\n destroyPopupOnHide = _this$props2.destroyPopupOnHide,\n popupClassName = _this$props2.popupClassName,\n onPopupAlign = _this$props2.onPopupAlign,\n popupMotion = _this$props2.popupMotion,\n popupAnimation = _this$props2.popupAnimation,\n popupTransitionName = _this$props2.popupTransitionName,\n popupStyle = _this$props2.popupStyle,\n mask = _this$props2.mask,\n maskAnimation = _this$props2.maskAnimation,\n maskTransitionName = _this$props2.maskTransitionName,\n maskMotion = _this$props2.maskMotion,\n zIndex = _this$props2.zIndex,\n popup = _this$props2.popup,\n stretch = _this$props2.stretch,\n alignPoint = _this$props2.alignPoint,\n mobile = _this$props2.mobile,\n forceRender = _this$props2.forceRender;\n var _this$state = _this.state,\n popupVisible = _this$state.popupVisible,\n point = _this$state.point;\n\n var align = _this.getPopupAlign();\n\n var mouseProps = {};\n\n if (_this.isMouseEnterToShow()) {\n mouseProps.onMouseEnter = _this.onPopupMouseEnter;\n }\n\n if (_this.isMouseLeaveToHide()) {\n mouseProps.onMouseLeave = _this.onPopupMouseLeave;\n }\n\n mouseProps.onMouseDown = _this.onPopupMouseDown;\n mouseProps.onTouchStart = _this.onPopupMouseDown;\n return /*#__PURE__*/React.createElement(Popup, _extends({\n prefixCls: prefixCls,\n destroyPopupOnHide: destroyPopupOnHide,\n visible: popupVisible,\n point: alignPoint && point,\n className: popupClassName,\n align: align,\n onAlign: onPopupAlign,\n animation: popupAnimation,\n getClassNameFromAlign: _this.getPopupClassNameFromAlign\n }, mouseProps, {\n stretch: stretch,\n getRootDomNode: _this.getRootDomNode,\n style: popupStyle,\n mask: mask,\n zIndex: zIndex,\n transitionName: popupTransitionName,\n maskAnimation: maskAnimation,\n maskTransitionName: maskTransitionName,\n maskMotion: maskMotion,\n ref: _this.popupRef,\n motion: popupMotion,\n mobile: mobile,\n forceRender: forceRender\n }), typeof popup === 'function' ? popup() : popup);\n };\n\n _this.attachParent = function (popupContainer) {\n raf.cancel(_this.attachId);\n var _this$props3 = _this.props,\n getPopupContainer = _this$props3.getPopupContainer,\n getDocument = _this$props3.getDocument;\n\n var domNode = _this.getRootDomNode();\n\n var mountNode;\n\n if (!getPopupContainer) {\n mountNode = getDocument(_this.getRootDomNode()).body;\n } else if (domNode || getPopupContainer.length === 0) {\n // Compatible for legacy getPopupContainer with domNode argument.\n // If no need `domNode` argument, will call directly.\n // https://codesandbox.io/s/eloquent-mclean-ss93m?file=/src/App.js\n mountNode = getPopupContainer(domNode);\n }\n\n if (mountNode) {\n mountNode.appendChild(popupContainer);\n } else {\n // Retry after frame render in case parent not ready\n _this.attachId = raf(function () {\n _this.attachParent(popupContainer);\n });\n }\n };\n\n _this.getContainer = function () {\n var getDocument = _this.props.getDocument;\n var popupContainer = getDocument(_this.getRootDomNode()).createElement('div'); // Make sure default popup container will never cause scrollbar appearing\n // https://github.com/react-component/trigger/issues/41\n\n popupContainer.style.position = 'absolute';\n popupContainer.style.top = '0';\n popupContainer.style.left = '0';\n popupContainer.style.width = '100%';\n\n _this.attachParent(popupContainer);\n\n return popupContainer;\n };\n\n _this.setPoint = function (point) {\n var alignPoint = _this.props.alignPoint;\n if (!alignPoint || !point) return;\n\n _this.setState({\n point: {\n pageX: point.pageX,\n pageY: point.pageY\n }\n });\n };\n\n _this.handlePortalUpdate = function () {\n if (_this.state.prevPopupVisible !== _this.state.popupVisible) {\n _this.props.afterPopupVisibleChange(_this.state.popupVisible);\n }\n };\n\n _this.triggerContextValue = {\n onPopupMouseDown: _this.onPopupMouseDown\n };\n var popupVisible;\n\n if ('popupVisible' in props) {\n popupVisible = !!props.popupVisible;\n } else {\n popupVisible = !!props.defaultPopupVisible;\n }\n\n _this.state = {\n prevPopupVisible: popupVisible,\n popupVisible: popupVisible\n };\n ALL_HANDLERS.forEach(function (h) {\n _this[\"fire\".concat(h)] = function (e) {\n _this.fireEvents(h, e);\n };\n });\n return _this;\n }\n\n _createClass(Trigger, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.componentDidUpdate();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n var props = this.props;\n var state = this.state; // We must listen to `mousedown` or `touchstart`, edge case:\n // https://github.com/ant-design/ant-design/issues/5804\n // https://github.com/react-component/calendar/issues/250\n // https://github.com/react-component/trigger/issues/50\n\n if (state.popupVisible) {\n var currentDocument;\n\n if (!this.clickOutsideHandler && (this.isClickToHide() || this.isContextMenuToShow())) {\n currentDocument = props.getDocument(this.getRootDomNode());\n this.clickOutsideHandler = addEventListener(currentDocument, 'mousedown', this.onDocumentClick);\n } // always hide on mobile\n\n\n if (!this.touchOutsideHandler) {\n currentDocument = currentDocument || props.getDocument(this.getRootDomNode());\n this.touchOutsideHandler = addEventListener(currentDocument, 'touchstart', this.onDocumentClick);\n } // close popup when trigger type contains 'onContextMenu' and document is scrolling.\n\n\n if (!this.contextMenuOutsideHandler1 && this.isContextMenuToShow()) {\n currentDocument = currentDocument || props.getDocument(this.getRootDomNode());\n this.contextMenuOutsideHandler1 = addEventListener(currentDocument, 'scroll', this.onContextMenuClose);\n } // close popup when trigger type contains 'onContextMenu' and window is blur.\n\n\n if (!this.contextMenuOutsideHandler2 && this.isContextMenuToShow()) {\n this.contextMenuOutsideHandler2 = addEventListener(window, 'blur', this.onContextMenuClose);\n }\n\n return;\n }\n\n this.clearOutsideHandler();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearDelayTimer();\n this.clearOutsideHandler();\n clearTimeout(this.mouseDownTimeout);\n raf.cancel(this.attachId);\n }\n }, {\n key: \"getPopupDomNode\",\n value: function getPopupDomNode() {\n var _this$popupRef$curren2;\n\n // for test\n return ((_this$popupRef$curren2 = this.popupRef.current) === null || _this$popupRef$curren2 === void 0 ? void 0 : _this$popupRef$curren2.getElement()) || null;\n }\n }, {\n key: \"getPopupAlign\",\n value: function getPopupAlign() {\n var props = this.props;\n var popupPlacement = props.popupPlacement,\n popupAlign = props.popupAlign,\n builtinPlacements = props.builtinPlacements;\n\n if (popupPlacement && builtinPlacements) {\n return getAlignFromPlacement(builtinPlacements, popupPlacement, popupAlign);\n }\n\n return popupAlign;\n }\n /**\n * @param popupVisible Show or not the popup element\n * @param event SyntheticEvent, used for `pointAlign`\n */\n\n }, {\n key: \"setPopupVisible\",\n value: function setPopupVisible(popupVisible, event) {\n var alignPoint = this.props.alignPoint;\n var prevPopupVisible = this.state.popupVisible;\n this.clearDelayTimer();\n\n if (prevPopupVisible !== popupVisible) {\n if (!('popupVisible' in this.props)) {\n this.setState({\n popupVisible: popupVisible,\n prevPopupVisible: prevPopupVisible\n });\n }\n\n this.props.onPopupVisibleChange(popupVisible);\n } // Always record the point position since mouseEnterDelay will delay the show\n\n\n if (alignPoint && event && popupVisible) {\n this.setPoint(event);\n }\n }\n }, {\n key: \"delaySetPopupVisible\",\n value: function delaySetPopupVisible(visible, delayS, event) {\n var _this2 = this;\n\n var delay = delayS * 1000;\n this.clearDelayTimer();\n\n if (delay) {\n var point = event ? {\n pageX: event.pageX,\n pageY: event.pageY\n } : null;\n this.delayTimer = window.setTimeout(function () {\n _this2.setPopupVisible(visible, point);\n\n _this2.clearDelayTimer();\n }, delay);\n } else {\n this.setPopupVisible(visible, event);\n }\n }\n }, {\n key: \"clearDelayTimer\",\n value: function clearDelayTimer() {\n if (this.delayTimer) {\n clearTimeout(this.delayTimer);\n this.delayTimer = null;\n }\n }\n }, {\n key: \"clearOutsideHandler\",\n value: function clearOutsideHandler() {\n if (this.clickOutsideHandler) {\n this.clickOutsideHandler.remove();\n this.clickOutsideHandler = null;\n }\n\n if (this.contextMenuOutsideHandler1) {\n this.contextMenuOutsideHandler1.remove();\n this.contextMenuOutsideHandler1 = null;\n }\n\n if (this.contextMenuOutsideHandler2) {\n this.contextMenuOutsideHandler2.remove();\n this.contextMenuOutsideHandler2 = null;\n }\n\n if (this.touchOutsideHandler) {\n this.touchOutsideHandler.remove();\n this.touchOutsideHandler = null;\n }\n }\n }, {\n key: \"createTwoChains\",\n value: function createTwoChains(event) {\n var childPros = this.props.children.props;\n var props = this.props;\n\n if (childPros[event] && props[event]) {\n return this[\"fire\".concat(event)];\n }\n\n return childPros[event] || props[event];\n }\n }, {\n key: \"isClickToShow\",\n value: function isClickToShow() {\n var _this$props4 = this.props,\n action = _this$props4.action,\n showAction = _this$props4.showAction;\n return action.indexOf('click') !== -1 || showAction.indexOf('click') !== -1;\n }\n }, {\n key: \"isContextMenuOnly\",\n value: function isContextMenuOnly() {\n var action = this.props.action;\n return action === 'contextMenu' || action.length === 1 && action[0] === 'contextMenu';\n }\n }, {\n key: \"isContextMenuToShow\",\n value: function isContextMenuToShow() {\n var _this$props5 = this.props,\n action = _this$props5.action,\n showAction = _this$props5.showAction;\n return action.indexOf('contextMenu') !== -1 || showAction.indexOf('contextMenu') !== -1;\n }\n }, {\n key: \"isClickToHide\",\n value: function isClickToHide() {\n var _this$props6 = this.props,\n action = _this$props6.action,\n hideAction = _this$props6.hideAction;\n return action.indexOf('click') !== -1 || hideAction.indexOf('click') !== -1;\n }\n }, {\n key: \"isMouseEnterToShow\",\n value: function isMouseEnterToShow() {\n var _this$props7 = this.props,\n action = _this$props7.action,\n showAction = _this$props7.showAction;\n return action.indexOf('hover') !== -1 || showAction.indexOf('mouseEnter') !== -1;\n }\n }, {\n key: \"isMouseLeaveToHide\",\n value: function isMouseLeaveToHide() {\n var _this$props8 = this.props,\n action = _this$props8.action,\n hideAction = _this$props8.hideAction;\n return action.indexOf('hover') !== -1 || hideAction.indexOf('mouseLeave') !== -1;\n }\n }, {\n key: \"isFocusToShow\",\n value: function isFocusToShow() {\n var _this$props9 = this.props,\n action = _this$props9.action,\n showAction = _this$props9.showAction;\n return action.indexOf('focus') !== -1 || showAction.indexOf('focus') !== -1;\n }\n }, {\n key: \"isBlurToHide\",\n value: function isBlurToHide() {\n var _this$props10 = this.props,\n action = _this$props10.action,\n hideAction = _this$props10.hideAction;\n return action.indexOf('focus') !== -1 || hideAction.indexOf('blur') !== -1;\n }\n }, {\n key: \"forcePopupAlign\",\n value: function forcePopupAlign() {\n if (this.state.popupVisible) {\n var _this$popupRef$curren3;\n\n (_this$popupRef$curren3 = this.popupRef.current) === null || _this$popupRef$curren3 === void 0 ? void 0 : _this$popupRef$curren3.forceAlign();\n }\n }\n }, {\n key: \"fireEvents\",\n value: function fireEvents(type, e) {\n var childCallback = this.props.children.props[type];\n\n if (childCallback) {\n childCallback(e);\n }\n\n var callback = this.props[type];\n\n if (callback) {\n callback(e);\n }\n }\n }, {\n key: \"close\",\n value: function close() {\n this.setPopupVisible(false);\n }\n }, {\n key: \"render\",\n value: function render() {\n var popupVisible = this.state.popupVisible;\n var _this$props11 = this.props,\n children = _this$props11.children,\n forceRender = _this$props11.forceRender,\n alignPoint = _this$props11.alignPoint,\n className = _this$props11.className,\n autoDestroy = _this$props11.autoDestroy;\n var child = React.Children.only(children);\n var newChildProps = {\n key: 'trigger'\n }; // ============================== Visible Handlers ==============================\n // >>> ContextMenu\n\n if (this.isContextMenuToShow()) {\n newChildProps.onContextMenu = this.onContextMenu;\n } else {\n newChildProps.onContextMenu = this.createTwoChains('onContextMenu');\n } // >>> Click\n\n\n if (this.isClickToHide() || this.isClickToShow()) {\n newChildProps.onClick = this.onClick;\n newChildProps.onMouseDown = this.onMouseDown;\n newChildProps.onTouchStart = this.onTouchStart;\n } else {\n newChildProps.onClick = this.createTwoChains('onClick');\n newChildProps.onMouseDown = this.createTwoChains('onMouseDown');\n newChildProps.onTouchStart = this.createTwoChains('onTouchStart');\n } // >>> Hover(enter)\n\n\n if (this.isMouseEnterToShow()) {\n newChildProps.onMouseEnter = this.onMouseEnter; // Point align\n\n if (alignPoint) {\n newChildProps.onMouseMove = this.onMouseMove;\n }\n } else {\n newChildProps.onMouseEnter = this.createTwoChains('onMouseEnter');\n } // >>> Hover(leave)\n\n\n if (this.isMouseLeaveToHide()) {\n newChildProps.onMouseLeave = this.onMouseLeave;\n } else {\n newChildProps.onMouseLeave = this.createTwoChains('onMouseLeave');\n } // >>> Focus\n\n\n if (this.isFocusToShow() || this.isBlurToHide()) {\n newChildProps.onFocus = this.onFocus;\n newChildProps.onBlur = this.onBlur;\n } else {\n newChildProps.onFocus = this.createTwoChains('onFocus');\n newChildProps.onBlur = this.createTwoChains('onBlur');\n } // =================================== Render ===================================\n\n\n var childrenClassName = classNames(child && child.props && child.props.className, className);\n\n if (childrenClassName) {\n newChildProps.className = childrenClassName;\n }\n\n var cloneProps = _objectSpread({}, newChildProps);\n\n if (supportRef(child)) {\n cloneProps.ref = composeRef(this.triggerRef, child.ref);\n }\n\n var trigger = /*#__PURE__*/React.cloneElement(child, cloneProps);\n var portal; // prevent unmounting after it's rendered\n\n if (popupVisible || this.popupRef.current || forceRender) {\n portal = /*#__PURE__*/React.createElement(PortalComponent, {\n key: \"portal\",\n getContainer: this.getContainer,\n didUpdate: this.handlePortalUpdate\n }, this.getComponent());\n }\n\n if (!popupVisible && autoDestroy) {\n portal = null;\n }\n\n return /*#__PURE__*/React.createElement(TriggerContext.Provider, {\n value: this.triggerContextValue\n }, trigger, portal);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(_ref, prevState) {\n var popupVisible = _ref.popupVisible;\n var newState = {};\n\n if (popupVisible !== undefined && prevState.popupVisible !== popupVisible) {\n newState.popupVisible = popupVisible;\n newState.prevPopupVisible = prevState.popupVisible;\n }\n\n return newState;\n }\n }]);\n\n return Trigger;\n }(React.Component);\n\n Trigger.contextType = TriggerContext;\n Trigger.defaultProps = {\n prefixCls: 'rc-trigger-popup',\n getPopupClassNameFromAlign: returnEmptyString,\n getDocument: returnDocument,\n onPopupVisibleChange: noop,\n afterPopupVisibleChange: noop,\n onPopupAlign: noop,\n popupClassName: '',\n mouseEnterDelay: 0,\n mouseLeaveDelay: 0.1,\n focusDelay: 0,\n blurDelay: 0.15,\n popupStyle: {},\n destroyPopupOnHide: false,\n popupAlign: {},\n defaultPopupVisible: false,\n mask: false,\n maskClosable: true,\n action: [],\n showAction: [],\n hideAction: [],\n autoDestroy: false\n };\n return Trigger;\n}\nexport default generateTrigger(Portal);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSMotionList } from 'rc-motion';\nimport Notice from './Notice';\nimport _useNotification from './useNotification';\nvar seed = 0;\nvar now = Date.now();\n\nfunction getUuid() {\n var id = seed;\n seed += 1;\n return \"rcNotification_\".concat(now, \"_\").concat(id);\n}\n\nvar Notification = /*#__PURE__*/function (_Component) {\n _inherits(Notification, _Component);\n\n var _super = _createSuper(Notification);\n\n function Notification() {\n var _this;\n\n _classCallCheck(this, Notification);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this.state = {\n notices: []\n };\n _this.hookRefs = new Map();\n\n _this.add = function (originNotice, holderCallback) {\n var key = originNotice.key || getUuid();\n\n var notice = _objectSpread(_objectSpread({}, originNotice), {}, {\n key: key\n });\n\n var maxCount = _this.props.maxCount;\n\n _this.setState(function (previousState) {\n var notices = previousState.notices;\n var noticeIndex = notices.map(function (v) {\n return v.notice.key;\n }).indexOf(key);\n var updatedNotices = notices.concat();\n\n if (noticeIndex !== -1) {\n updatedNotices.splice(noticeIndex, 1, {\n notice: notice,\n holderCallback: holderCallback\n });\n } else {\n if (maxCount && notices.length >= maxCount) {\n // XXX, use key of first item to update new added (let React to move exsiting\n // instead of remove and mount). Same key was used before for both a) external\n // manual control and b) internal react 'key' prop , which is not that good.\n // eslint-disable-next-line no-param-reassign\n // zombieJ: Not know why use `updateKey`. This makes Notice infinite loop in jest.\n // Change to `updateMark` for compare instead.\n // https://github.com/react-component/notification/commit/32299e6be396f94040bfa82517eea940db947ece\n notice.key = updatedNotices[0].notice.key;\n notice.updateMark = getUuid(); // zombieJ: That's why. User may close by key directly.\n // We need record this but not re-render to avoid upper issue\n // https://github.com/react-component/notification/issues/129\n\n notice.userPassKey = key;\n updatedNotices.shift();\n }\n\n updatedNotices.push({\n notice: notice,\n holderCallback: holderCallback\n });\n }\n\n return {\n notices: updatedNotices\n };\n });\n };\n\n _this.remove = function (removeKey) {\n _this.setState(function (_ref) {\n var notices = _ref.notices;\n return {\n notices: notices.filter(function (_ref2) {\n var _ref2$notice = _ref2.notice,\n key = _ref2$notice.key,\n userPassKey = _ref2$notice.userPassKey;\n var mergedKey = userPassKey || key;\n return mergedKey !== removeKey;\n })\n };\n });\n };\n\n _this.noticePropsMap = {};\n return _this;\n }\n\n _createClass(Notification, [{\n key: \"getTransitionName\",\n value: function getTransitionName() {\n var _this$props = this.props,\n prefixCls = _this$props.prefixCls,\n animation = _this$props.animation;\n var transitionName = this.props.transitionName;\n\n if (!transitionName && animation) {\n transitionName = \"\".concat(prefixCls, \"-\").concat(animation);\n }\n\n return transitionName;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var notices = this.state.notices;\n var _this$props2 = this.props,\n prefixCls = _this$props2.prefixCls,\n className = _this$props2.className,\n closeIcon = _this$props2.closeIcon,\n style = _this$props2.style;\n var noticeKeys = [];\n notices.forEach(function (_ref3, index) {\n var notice = _ref3.notice,\n holderCallback = _ref3.holderCallback;\n var updateMark = index === notices.length - 1 ? notice.updateMark : undefined;\n var key = notice.key,\n userPassKey = notice.userPassKey;\n\n var noticeProps = _objectSpread(_objectSpread(_objectSpread({\n prefixCls: prefixCls,\n closeIcon: closeIcon\n }, notice), notice.props), {}, {\n key: key,\n noticeKey: userPassKey || key,\n updateMark: updateMark,\n onClose: function onClose(noticeKey) {\n var _notice$onClose;\n\n _this2.remove(noticeKey);\n\n (_notice$onClose = notice.onClose) === null || _notice$onClose === void 0 ? void 0 : _notice$onClose.call(notice);\n },\n onClick: notice.onClick,\n children: notice.content\n }); // Give to motion\n\n\n noticeKeys.push(key);\n _this2.noticePropsMap[key] = {\n props: noticeProps,\n holderCallback: holderCallback\n };\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(prefixCls, className),\n style: style\n }, /*#__PURE__*/React.createElement(CSSMotionList, {\n keys: noticeKeys,\n motionName: this.getTransitionName(),\n onVisibleChanged: function onVisibleChanged(changedVisible, _ref4) {\n var key = _ref4.key;\n\n if (!changedVisible) {\n delete _this2.noticePropsMap[key];\n }\n }\n }, function (_ref5) {\n var key = _ref5.key,\n motionClassName = _ref5.className,\n motionStyle = _ref5.style,\n visible = _ref5.visible;\n var _this2$noticePropsMap = _this2.noticePropsMap[key],\n noticeProps = _this2$noticePropsMap.props,\n holderCallback = _this2$noticePropsMap.holderCallback;\n\n if (holderCallback) {\n return /*#__PURE__*/React.createElement(\"div\", {\n key: key,\n className: classNames(motionClassName, \"\".concat(prefixCls, \"-hook-holder\")),\n style: _objectSpread({}, motionStyle),\n ref: function ref(div) {\n if (typeof key === 'undefined') {\n return;\n }\n\n if (div) {\n _this2.hookRefs.set(key, div);\n\n holderCallback(div, noticeProps);\n } else {\n _this2.hookRefs.delete(key);\n }\n }\n });\n }\n\n return /*#__PURE__*/React.createElement(Notice, _extends({}, noticeProps, {\n className: classNames(motionClassName, noticeProps === null || noticeProps === void 0 ? void 0 : noticeProps.className),\n style: _objectSpread(_objectSpread({}, motionStyle), noticeProps === null || noticeProps === void 0 ? void 0 : noticeProps.style),\n visible: visible\n }));\n }));\n }\n }]);\n\n return Notification;\n}(Component);\n\nNotification.newInstance = void 0;\nNotification.defaultProps = {\n prefixCls: 'rc-notification',\n animation: 'fade',\n style: {\n top: 65,\n left: '50%'\n }\n};\n\nNotification.newInstance = function newNotificationInstance(properties, callback) {\n var _ref6 = properties || {},\n getContainer = _ref6.getContainer,\n props = _objectWithoutProperties(_ref6, [\"getContainer\"]);\n\n var div = document.createElement('div');\n\n if (getContainer) {\n var root = getContainer();\n root.appendChild(div);\n } else {\n document.body.appendChild(div);\n }\n\n var called = false;\n\n function ref(notification) {\n if (called) {\n return;\n }\n\n called = true;\n callback({\n notice: function notice(noticeProps) {\n notification.add(noticeProps);\n },\n removeNotice: function removeNotice(key) {\n notification.remove(key);\n },\n component: notification,\n destroy: function destroy() {\n ReactDOM.unmountComponentAtNode(div);\n\n if (div.parentNode) {\n div.parentNode.removeChild(div);\n }\n },\n // Hooks\n useNotification: function useNotification() {\n return _useNotification(notification);\n }\n });\n } // Only used for test case usage\n\n\n if (process.env.NODE_ENV === 'test' && properties.TEST_RENDER) {\n properties.TEST_RENDER( /*#__PURE__*/React.createElement(Notification, _extends({}, props, {\n ref: ref\n })));\n return;\n }\n\n ReactDOM.render( /*#__PURE__*/React.createElement(Notification, _extends({}, props, {\n ref: ref\n })), div);\n};\n\nexport default Notification;","import Notification from './Notification';\nexport default Notification;","// This icon file is generated automatically.\nvar InfoCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z\" } }] }, \"name\": \"info-circle\", \"theme\": \"filled\" };\nexport default InfoCircleFilled;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport InfoCircleFilledSvg from \"@ant-design/icons-svg/es/asn/InfoCircleFilled\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar InfoCircleFilled = function InfoCircleFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: InfoCircleFilledSvg\n }));\n};\n\nInfoCircleFilled.displayName = 'InfoCircleFilled';\nexport default /*#__PURE__*/React.forwardRef(InfoCircleFilled);","// This icon file is generated automatically.\nvar CheckCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z\" } }] }, \"name\": \"check-circle\", \"theme\": \"filled\" };\nexport default CheckCircleFilled;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CheckCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CheckCircleFilled\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar CheckCircleFilled = function CheckCircleFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: CheckCircleFilledSvg\n }));\n};\n\nCheckCircleFilled.displayName = 'CheckCircleFilled';\nexport default /*#__PURE__*/React.forwardRef(CheckCircleFilled);","// This icon file is generated automatically.\nvar ExclamationCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z\" } }] }, \"name\": \"exclamation-circle\", \"theme\": \"filled\" };\nexport default ExclamationCircleFilled;\n","// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport ExclamationCircleFilledSvg from \"@ant-design/icons-svg/es/asn/ExclamationCircleFilled\";\nimport AntdIcon from '../components/AntdIcon';\n\nvar ExclamationCircleFilled = function ExclamationCircleFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, Object.assign({}, props, {\n ref: ref,\n icon: ExclamationCircleFilledSvg\n }));\n};\n\nExclamationCircleFilled.displayName = 'ExclamationCircleFilled';\nexport default /*#__PURE__*/React.forwardRef(ExclamationCircleFilled);","\"use strict\";\n\n(function(root) {\n const MAX_VALUE = 0x7fffffff;\n\n // The SHA256 and PBKDF2 implementation are from scrypt-async-js:\n // See: https://github.com/dchest/scrypt-async-js\n function SHA256(m) {\n const K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ]);\n\n let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;\n let h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;\n const w = new Uint32Array(64);\n\n function blocks(p) {\n let off = 0, len = p.length;\n while (len >= 64) {\n let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2;\n\n for (i = 0; i < 16; i++) {\n j = off + i*4;\n w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) |\n ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff);\n }\n\n for (i = 16; i < 64; i++) {\n u = w[i-2];\n t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10);\n\n u = w[i-15];\n t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3);\n\n w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0;\n }\n\n for (i = 0; i < 64; i++) {\n t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^\n ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n\n t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^\n ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n h0 = (h0 + a) | 0;\n h1 = (h1 + b) | 0;\n h2 = (h2 + c) | 0;\n h3 = (h3 + d) | 0;\n h4 = (h4 + e) | 0;\n h5 = (h5 + f) | 0;\n h6 = (h6 + g) | 0;\n h7 = (h7 + h) | 0;\n\n off += 64;\n len -= 64;\n }\n }\n\n blocks(m);\n\n let i, bytesLeft = m.length % 64,\n bitLenHi = (m.length / 0x20000000) | 0,\n bitLenLo = m.length << 3,\n numZeros = (bytesLeft < 56) ? 56 : 120,\n p = m.slice(m.length - bytesLeft, m.length);\n\n p.push(0x80);\n for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); }\n p.push((bitLenHi >>> 24) & 0xff);\n p.push((bitLenHi >>> 16) & 0xff);\n p.push((bitLenHi >>> 8) & 0xff);\n p.push((bitLenHi >>> 0) & 0xff);\n p.push((bitLenLo >>> 24) & 0xff);\n p.push((bitLenLo >>> 16) & 0xff);\n p.push((bitLenLo >>> 8) & 0xff);\n p.push((bitLenLo >>> 0) & 0xff);\n\n blocks(p);\n\n return [\n (h0 >>> 24) & 0xff, (h0 >>> 16) & 0xff, (h0 >>> 8) & 0xff, (h0 >>> 0) & 0xff,\n (h1 >>> 24) & 0xff, (h1 >>> 16) & 0xff, (h1 >>> 8) & 0xff, (h1 >>> 0) & 0xff,\n (h2 >>> 24) & 0xff, (h2 >>> 16) & 0xff, (h2 >>> 8) & 0xff, (h2 >>> 0) & 0xff,\n (h3 >>> 24) & 0xff, (h3 >>> 16) & 0xff, (h3 >>> 8) & 0xff, (h3 >>> 0) & 0xff,\n (h4 >>> 24) & 0xff, (h4 >>> 16) & 0xff, (h4 >>> 8) & 0xff, (h4 >>> 0) & 0xff,\n (h5 >>> 24) & 0xff, (h5 >>> 16) & 0xff, (h5 >>> 8) & 0xff, (h5 >>> 0) & 0xff,\n (h6 >>> 24) & 0xff, (h6 >>> 16) & 0xff, (h6 >>> 8) & 0xff, (h6 >>> 0) & 0xff,\n (h7 >>> 24) & 0xff, (h7 >>> 16) & 0xff, (h7 >>> 8) & 0xff, (h7 >>> 0) & 0xff\n ];\n }\n\n function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {\n // compress password if it's longer than hash block length\n password = (password.length <= 64) ? password : SHA256(password);\n\n const innerLen = 64 + salt.length + 4;\n const inner = new Array(innerLen);\n const outerKey = new Array(64);\n\n let i;\n let dk = [];\n\n // inner = (password ^ ipad) || salt || counter\n for (i = 0; i < 64; i++) { inner[i] = 0x36; }\n for (i = 0; i < password.length; i++) { inner[i] ^= password[i]; }\n for (i = 0; i < salt.length; i++) { inner[64 + i] = salt[i]; }\n for (i = innerLen - 4; i < innerLen; i++) { inner[i] = 0; }\n\n // outerKey = password ^ opad\n for (i = 0; i < 64; i++) outerKey[i] = 0x5c;\n for (i = 0; i < password.length; i++) outerKey[i] ^= password[i];\n\n // increments counter inside inner\n function incrementCounter() {\n for (let i = innerLen - 1; i >= innerLen - 4; i--) {\n inner[i]++;\n if (inner[i] <= 0xff) return;\n inner[i] = 0;\n }\n }\n\n // output blocks = SHA256(outerKey || SHA256(inner)) ...\n while (dkLen >= 32) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));\n dkLen -= 32;\n }\n if (dkLen > 0) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));\n }\n\n return dk;\n }\n\n // The following is an adaptation of scryptsy\n // See: https://www.npmjs.com/package/scryptsy\n function blockmix_salsa8(BY, Yi, r, x, _X) {\n let i;\n\n arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16);\n for (i = 0; i < 2 * r; i++) {\n blockxor(BY, i * 16, _X, 16);\n salsa20_8(_X, x);\n arraycopy(_X, 0, BY, Yi + (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16);\n }\n }\n\n function R(a, b) {\n return (a << b) | (a >>> (32 - b));\n }\n\n function salsa20_8(B, x) {\n arraycopy(B, 0, x, 0, 16);\n\n for (let i = 8; i > 0; i -= 2) {\n x[ 4] ^= R(x[ 0] + x[12], 7);\n x[ 8] ^= R(x[ 4] + x[ 0], 9);\n x[12] ^= R(x[ 8] + x[ 4], 13);\n x[ 0] ^= R(x[12] + x[ 8], 18);\n x[ 9] ^= R(x[ 5] + x[ 1], 7);\n x[13] ^= R(x[ 9] + x[ 5], 9);\n x[ 1] ^= R(x[13] + x[ 9], 13);\n x[ 5] ^= R(x[ 1] + x[13], 18);\n x[14] ^= R(x[10] + x[ 6], 7);\n x[ 2] ^= R(x[14] + x[10], 9);\n x[ 6] ^= R(x[ 2] + x[14], 13);\n x[10] ^= R(x[ 6] + x[ 2], 18);\n x[ 3] ^= R(x[15] + x[11], 7);\n x[ 7] ^= R(x[ 3] + x[15], 9);\n x[11] ^= R(x[ 7] + x[ 3], 13);\n x[15] ^= R(x[11] + x[ 7], 18);\n x[ 1] ^= R(x[ 0] + x[ 3], 7);\n x[ 2] ^= R(x[ 1] + x[ 0], 9);\n x[ 3] ^= R(x[ 2] + x[ 1], 13);\n x[ 0] ^= R(x[ 3] + x[ 2], 18);\n x[ 6] ^= R(x[ 5] + x[ 4], 7);\n x[ 7] ^= R(x[ 6] + x[ 5], 9);\n x[ 4] ^= R(x[ 7] + x[ 6], 13);\n x[ 5] ^= R(x[ 4] + x[ 7], 18);\n x[11] ^= R(x[10] + x[ 9], 7);\n x[ 8] ^= R(x[11] + x[10], 9);\n x[ 9] ^= R(x[ 8] + x[11], 13);\n x[10] ^= R(x[ 9] + x[ 8], 18);\n x[12] ^= R(x[15] + x[14], 7);\n x[13] ^= R(x[12] + x[15], 9);\n x[14] ^= R(x[13] + x[12], 13);\n x[15] ^= R(x[14] + x[13], 18);\n }\n\n for (let i = 0; i < 16; ++i) {\n B[i] += x[i];\n }\n }\n\n // naive approach... going back to loop unrolling may yield additional performance\n function blockxor(S, Si, D, len) {\n for (let i = 0; i < len; i++) {\n D[i] ^= S[Si + i]\n }\n }\n\n function arraycopy(src, srcPos, dest, destPos, length) {\n while (length--) {\n dest[destPos++] = src[srcPos++];\n }\n }\n\n function checkBufferish(o) {\n if (!o || typeof(o.length) !== 'number') { return false; }\n\n for (let i = 0; i < o.length; i++) {\n const v = o[i];\n if (typeof(v) !== 'number' || v % 1 || v < 0 || v >= 256) {\n return false;\n }\n }\n\n return true;\n }\n\n function ensureInteger(value, name) {\n if (typeof(value) !== \"number\" || (value % 1)) { throw new Error('invalid ' + name); }\n return value;\n }\n\n // N = Cpu cost, r = Memory cost, p = parallelization cost\n // callback(error, progress, key)\n function _scrypt(password, salt, N, r, p, dkLen, callback) {\n\n N = ensureInteger(N, 'N');\n r = ensureInteger(r, 'r');\n p = ensureInteger(p, 'p');\n\n dkLen = ensureInteger(dkLen, 'dkLen');\n\n if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); }\n\n if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); }\n if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); }\n\n if (!checkBufferish(password)) {\n throw new Error('password must be an array or buffer');\n }\n password = Array.prototype.slice.call(password);\n\n if (!checkBufferish(salt)) {\n throw new Error('salt must be an array or buffer');\n }\n salt = Array.prototype.slice.call(salt);\n\n let b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);\n const B = new Uint32Array(p * 32 * r)\n for (let i = 0; i < B.length; i++) {\n const j = i * 4;\n B[i] = ((b[j + 3] & 0xff) << 24) |\n ((b[j + 2] & 0xff) << 16) |\n ((b[j + 1] & 0xff) << 8) |\n ((b[j + 0] & 0xff) << 0);\n }\n\n const XY = new Uint32Array(64 * r);\n const V = new Uint32Array(32 * r * N);\n\n const Yi = 32 * r;\n\n // scratch space\n const x = new Uint32Array(16); // salsa20_8\n const _X = new Uint32Array(16); // blockmix_salsa8\n\n const totalOps = p * N * 2;\n let currentOp = 0;\n let lastPercent10 = null;\n\n // Set this to true to abandon the scrypt on the next step\n let stop = false;\n\n // State information\n let state = 0;\n let i0 = 0, i1;\n let Bi;\n\n // How many blockmix_salsa8 can we do per step?\n const limit = callback ? parseInt(1000 / r): 0xffffffff;\n\n // Trick from scrypt-async; if there is a setImmediate shim in place, use it\n const nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout;\n\n // This is really all I changed; making scryptsy a state machine so we occasionally\n // stop and give other evnts on the evnt loop a chance to run. ~RicMoo\n const incrementalSMix = function() {\n if (stop) {\n return callback(new Error('cancelled'), currentOp / totalOps);\n }\n\n let steps;\n\n switch (state) {\n case 0:\n // for (var i = 0; i < p; i++)...\n Bi = i0 * 32 * r;\n\n arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1\n\n state = 1; // Move to ROMix 2\n i1 = 0;\n\n // Fall through\n\n case 1:\n\n // Run up to 1000 steps of the first inner smix loop\n steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (let i = 0; i < steps; i++) { // ROMix - 2\n arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4\n }\n\n // for (var i = 0; i < N; i++)\n i1 += steps;\n currentOp += steps;\n\n if (callback) {\n // Call the callback with the progress (optionally stopping us)\n const percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n }\n\n if (i1 < N) { break; }\n\n i1 = 0; // Move to ROMix 6\n state = 2;\n\n // Fall through\n\n case 2:\n\n // Run up to 1000 steps of the second inner smix loop\n steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (let i = 0; i < steps; i++) { // ROMix - 6\n const offset = (2 * r - 1) * 16; // ROMix - 7\n const j = XY[offset] & (N - 1);\n blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner)\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer)\n }\n\n // for (var i = 0; i < N; i++)...\n i1 += steps;\n currentOp += steps;\n\n // Call the callback with the progress (optionally stopping us)\n if (callback) {\n const percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n }\n\n if (i1 < N) { break; }\n\n arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10\n\n // for (var i = 0; i < p; i++)...\n i0++;\n if (i0 < p) {\n state = 0;\n break;\n }\n\n b = [];\n for (let i = 0; i < B.length; i++) {\n b.push((B[i] >> 0) & 0xff);\n b.push((B[i] >> 8) & 0xff);\n b.push((B[i] >> 16) & 0xff);\n b.push((B[i] >> 24) & 0xff);\n }\n\n const derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen);\n\n // Send the result to the callback\n if (callback) { callback(null, 1.0, derivedKey); }\n\n // Done; don't break (which would reschedule)\n return derivedKey;\n }\n\n // Schedule the next steps\n if (callback) { nextTick(incrementalSMix); }\n }\n\n // Run the smix state machine until completion\n if (!callback) {\n while (true) {\n const derivedKey = incrementalSMix();\n if (derivedKey != undefined) { return derivedKey; }\n }\n }\n\n // Bootstrap the async incremental smix\n incrementalSMix();\n }\n\n const lib = {\n scrypt: function(password, salt, N, r, p, dkLen, progressCallback) {\n return new Promise(function(resolve, reject) {\n let lastProgress = 0;\n if (progressCallback) { progressCallback(0); }\n _scrypt(password, salt, N, r, p, dkLen, function(error, progress, key) {\n if (error) {\n reject(error);\n } else if (key) {\n if (progressCallback && lastProgress !== 1) {\n progressCallback(1);\n }\n resolve(new Uint8Array(key));\n } else if (progressCallback && progress !== lastProgress) {\n lastProgress = progress;\n return progressCallback(progress);\n }\n });\n });\n },\n syncScrypt: function(password, salt, N, r, p, dkLen) {\n return new Uint8Array(_scrypt(password, salt, N, r, p, dkLen));\n }\n };\n\n // node.js\n if (typeof(exports) !== 'undefined') {\n module.exports = lib;\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(lib);\n\n // Web Browsers\n } else if (root) {\n\n // If there was an existing library \"scrypt\", make sure it is still available\n if (root.scrypt) {\n root._scrypt = root.scrypt;\n }\n\n root.scrypt = lib;\n }\n\n})(this);\n","import { concat, hexlify } from \"@ethersproject/bytes\";\nimport { nameprep, toUtf8Bytes } from \"@ethersproject/strings\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\nconst Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nexport function isValidName(name) {\n try {\n const comps = name.split(\".\");\n for (let i = 0; i < comps.length; i++) {\n if (nameprep(comps[i]).length === 0) {\n throw new Error(\"empty\");\n }\n }\n return true;\n }\n catch (error) { }\n return false;\n}\nexport function namehash(name) {\n /* istanbul ignore if */\n if (typeof (name) !== \"string\") {\n logger.throwArgumentError(\"invalid ENS name; not a string\", \"name\", name);\n }\n let current = name;\n let result = Zeros;\n while (current.length) {\n const partition = current.match(Partition);\n if (partition == null || partition[2] === \"\") {\n logger.throwArgumentError(\"invalid ENS address; missing component\", \"name\", name);\n }\n const label = toUtf8Bytes(nameprep(partition[3]));\n result = keccak256(concat([result, keccak256(label)]));\n current = partition[2] || \"\";\n }\n return hexlify(result);\n}\n//# sourceMappingURL=namehash.js.map","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stateMethods = exports.signingMethods = exports.reservedEvents = void 0;\nexports.reservedEvents = [\n \"session_request\",\n \"session_update\",\n \"exchange_key\",\n \"connect\",\n \"disconnect\",\n \"display_uri\",\n \"modal_closed\",\n \"transport_open\",\n \"transport_close\",\n \"transport_error\",\n];\nexports.signingMethods = [\n \"eth_sendTransaction\",\n \"eth_signTransaction\",\n \"eth_sign\",\n \"eth_signTypedData\",\n \"eth_signTypedData_v1\",\n \"eth_signTypedData_v2\",\n \"eth_signTypedData_v3\",\n \"eth_signTypedData_v4\",\n \"personal_sign\",\n];\nexports.stateMethods = [\"eth_accounts\", \"eth_chainId\", \"net_version\"];\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.logDeprecationWarning = exports.uuid = exports.payloadId = exports.removeHexLeadingZeros = exports.removeHexPrefix = exports.addHexPrefix = exports.sanitizeHex = void 0;\nconst tslib_1 = require(\"tslib\");\nconst encUtils = tslib_1.__importStar(require(\"enc-utils\"));\nconst jsonRpcUtils = tslib_1.__importStar(require(\"@json-rpc-tools/utils\"));\nfunction sanitizeHex(hex) {\n return encUtils.sanitizeHex(hex);\n}\nexports.sanitizeHex = sanitizeHex;\nfunction addHexPrefix(hex) {\n return encUtils.addHexPrefix(hex);\n}\nexports.addHexPrefix = addHexPrefix;\nfunction removeHexPrefix(hex) {\n return encUtils.removeHexPrefix(hex);\n}\nexports.removeHexPrefix = removeHexPrefix;\nfunction removeHexLeadingZeros(hex) {\n return encUtils.removeHexLeadingZeros(encUtils.addHexPrefix(hex));\n}\nexports.removeHexLeadingZeros = removeHexLeadingZeros;\nexports.payloadId = jsonRpcUtils.payloadId;\nfunction uuid() {\n const result = ((a, b) => {\n for (b = a = \"\"; a++ < 36; b += (a * 51) & 52 ? (a ^ 15 ? 8 ^ (Math.random() * (a ^ 20 ? 16 : 4)) : 4).toString(16) : \"-\") {\n }\n return b;\n })();\n return result;\n}\nexports.uuid = uuid;\nfunction logDeprecationWarning() {\n console.warn(\"DEPRECATION WARNING: This WalletConnect client library will be deprecated in favor of @walletconnect/client. Please check docs.walletconnect.org to learn more about this migration!\");\n}\nexports.logDeprecationWarning = logDeprecationWarning;\n//# sourceMappingURL=misc.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IJsonRpcProvider = exports.IBaseJsonRpcProvider = exports.IJsonRpcConnection = void 0;\nconst misc_1 = require(\"./misc\");\nclass IJsonRpcConnection extends misc_1.IEvents {\n constructor(opts) {\n super();\n }\n}\nexports.IJsonRpcConnection = IJsonRpcConnection;\nclass IBaseJsonRpcProvider extends misc_1.IEvents {\n constructor() {\n super();\n }\n}\nexports.IBaseJsonRpcProvider = IBaseJsonRpcProvider;\nclass IJsonRpcProvider extends IBaseJsonRpcProvider {\n constructor(connection) {\n super();\n }\n}\nexports.IJsonRpcProvider = IJsonRpcProvider;\n//# sourceMappingURL=provider.js.map","/*! MIT License. Copyright 2015-2018 Richard Moore . See LICENSE.txt. */\n(function(root) {\n \"use strict\";\n\n function checkInt(value) {\n return (parseInt(value) === value);\n }\n\n function checkInts(arrayish) {\n if (!checkInt(arrayish.length)) { return false; }\n\n for (var i = 0; i < arrayish.length; i++) {\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\n return false;\n }\n }\n\n return true;\n }\n\n function coerceArray(arg, copy) {\n\n // ArrayBuffer view\n if (arg.buffer && arg.name === 'Uint8Array') {\n\n if (copy) {\n if (arg.slice) {\n arg = arg.slice();\n } else {\n arg = Array.prototype.slice.call(arg);\n }\n }\n\n return arg;\n }\n\n // It's an array; check it is a valid representation of a byte\n if (Array.isArray(arg)) {\n if (!checkInts(arg)) {\n throw new Error('Array contains invalid value: ' + arg);\n }\n\n return new Uint8Array(arg);\n }\n\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\n if (checkInt(arg.length) && checkInts(arg)) {\n return new Uint8Array(arg);\n }\n\n throw new Error('unsupported array-like object');\n }\n\n function createArray(length) {\n return new Uint8Array(length);\n }\n\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\n if (sourceStart != null || sourceEnd != null) {\n if (sourceArray.slice) {\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\n } else {\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\n }\n }\n targetArray.set(sourceArray, targetStart);\n }\n\n\n\n var convertUtf8 = (function() {\n function toBytes(text) {\n var result = [], i = 0;\n text = encodeURI(text);\n while (i < text.length) {\n var c = text.charCodeAt(i++);\n\n // if it is a % sign, encode the following 2 bytes as a hex value\n if (c === 37) {\n result.push(parseInt(text.substr(i, 2), 16))\n i += 2;\n\n // otherwise, just the actual byte\n } else {\n result.push(c)\n }\n }\n\n return coerceArray(result);\n }\n\n function fromBytes(bytes) {\n var result = [], i = 0;\n\n while (i < bytes.length) {\n var c = bytes[i];\n\n if (c < 128) {\n result.push(String.fromCharCode(c));\n i++;\n } else if (c > 191 && c < 224) {\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\n i += 2;\n } else {\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\n i += 3;\n }\n }\n\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n var convertHex = (function() {\n function toBytes(text) {\n var result = [];\n for (var i = 0; i < text.length; i += 2) {\n result.push(parseInt(text.substr(i, 2), 16));\n }\n\n return result;\n }\n\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\n var Hex = '0123456789abcdef';\n\n function fromBytes(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i++) {\n var v = bytes[i];\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\n }\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n\n // Number of rounds by keysize\n var numberOfRounds = {16: 10, 24: 12, 32: 14}\n\n // Round constant words\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n\n // S-box and Inverse S-box (S is for Substitution)\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\n var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n\n // Transformations for encryption\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n\n // Transformations for decryption\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n\n // Transformations for decryption key expansion\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\n\n function convertToInt32(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i += 4) {\n result.push(\n (bytes[i ] << 24) |\n (bytes[i + 1] << 16) |\n (bytes[i + 2] << 8) |\n bytes[i + 3]\n );\n }\n return result;\n }\n\n var AES = function(key) {\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n Object.defineProperty(this, 'key', {\n value: coerceArray(key, true)\n });\n\n this._prepare();\n }\n\n\n AES.prototype._prepare = function() {\n\n var rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\n }\n\n // encryption round keys\n this._Ke = [];\n\n // decryption round keys\n this._Kd = [];\n\n for (var i = 0; i <= rounds; i++) {\n this._Ke.push([0, 0, 0, 0]);\n this._Kd.push([0, 0, 0, 0]);\n }\n\n var roundKeyCount = (rounds + 1) * 4;\n var KC = this.key.length / 4;\n\n // convert the key into ints\n var tk = convertToInt32(this.key);\n\n // copy values into round key arrays\n var index;\n for (var i = 0; i < KC; i++) {\n index = i >> 2;\n this._Ke[index][i % 4] = tk[i];\n this._Kd[rounds - index][i % 4] = tk[i];\n }\n\n // key expansion (fips-197 section 5.2)\n var rconpointer = 0;\n var t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[ tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (var i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n } else {\n for (var i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n\n tk[KC / 2] ^= (S[ tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n\n for (var i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n\n // copy values into round key arrays\n var i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n this._Ke[r][c] = tk[i];\n this._Kd[rounds - r][c] = tk[i++];\n t++;\n }\n }\n\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (var r = 1; r < rounds; r++) {\n for (var c = 0; c < 4; c++) {\n tt = this._Kd[r][c];\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[ tt & 0xFF]);\n }\n }\n }\n\n AES.prototype.encrypt = function(plaintext) {\n if (plaintext.length != 16) {\n throw new Error('invalid plaintext size (must be 16 bytes)');\n }\n\n var rounds = this._Ke.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(plaintext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Ke[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T1[(t[ i ] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[ t[(i + 3) % 4] & 0xff] ^\n this._Ke[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Ke[rounds][i];\n result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n AES.prototype.decrypt = function(ciphertext) {\n if (ciphertext.length != 16) {\n throw new Error('invalid ciphertext size (must be 16 bytes)');\n }\n\n var rounds = this._Kd.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(ciphertext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Kd[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T5[(t[ i ] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[ t[(i + 1) % 4] & 0xff] ^\n this._Kd[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Kd[rounds][i];\n result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n\n /**\n * Mode Of Operation - Electonic Codebook (ECB)\n */\n var ModeOfOperationECB = function(key) {\n if (!(this instanceof ModeOfOperationECB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Electronic Code Block\";\n this.name = \"ecb\";\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationECB.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n block = this._aes.encrypt(block);\n copyArray(block, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationECB.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n copyArray(block, plaintext, i);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Block Chaining (CBC)\n */\n var ModeOfOperationCBC = function(key, iv) {\n if (!(this instanceof ModeOfOperationCBC)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Block Chaining\";\n this.name = \"cbc\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastCipherblock = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCBC.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n\n for (var j = 0; j < 16; j++) {\n block[j] ^= this._lastCipherblock[j];\n }\n\n this._lastCipherblock = this._aes.encrypt(block);\n copyArray(this._lastCipherblock, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n\n for (var j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\n }\n\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Feedback (CFB)\n */\n var ModeOfOperationCFB = function(key, iv, segmentSize) {\n if (!(this instanceof ModeOfOperationCFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Feedback\";\n this.name = \"cfb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 size)');\n }\n\n if (!segmentSize) { segmentSize = 1; }\n\n this.segmentSize = segmentSize;\n\n this._shiftRegister = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCFB.prototype.encrypt = function(plaintext) {\n if ((plaintext.length % this.segmentSize) != 0) {\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\n }\n\n var encrypted = coerceArray(plaintext, true);\n\n var xorSegment;\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n for (var j = 0; j < this.segmentSize; j++) {\n encrypted[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return encrypted;\n }\n\n ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {\n if ((ciphertext.length % this.segmentSize) != 0) {\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\n }\n\n var plaintext = coerceArray(ciphertext, true);\n\n var xorSegment;\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n\n for (var j = 0; j < this.segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return plaintext;\n }\n\n /**\n * Mode Of Operation - Output Feedback (OFB)\n */\n var ModeOfOperationOFB = function(key, iv) {\n if (!(this instanceof ModeOfOperationOFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Output Feedback\";\n this.name = \"ofb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastPrecipher = coerceArray(iv, true);\n this._lastPrecipherIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationOFB.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._lastPrecipherIndex === 16) {\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\n this._lastPrecipherIndex = 0;\n }\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\n\n\n /**\n * Counter object for CTR common mode of operation\n */\n var Counter = function(initialValue) {\n if (!(this instanceof Counter)) {\n throw Error('Counter must be instanitated with `new`');\n }\n\n // We allow 0, but anything false-ish uses the default 1\n if (initialValue !== 0 && !initialValue) { initialValue = 1; }\n\n if (typeof(initialValue) === 'number') {\n this._counter = createArray(16);\n this.setValue(initialValue);\n\n } else {\n this.setBytes(initialValue);\n }\n }\n\n Counter.prototype.setValue = function(value) {\n if (typeof(value) !== 'number' || parseInt(value) != value) {\n throw new Error('invalid counter value (must be an integer)');\n }\n\n // We cannot safely handle numbers beyond the safe range for integers\n if (value > Number.MAX_SAFE_INTEGER) {\n throw new Error('integer value out of safe range');\n }\n\n for (var index = 15; index >= 0; --index) {\n this._counter[index] = value % 256;\n value = parseInt(value / 256);\n }\n }\n\n Counter.prototype.setBytes = function(bytes) {\n bytes = coerceArray(bytes, true);\n\n if (bytes.length != 16) {\n throw new Error('invalid counter bytes size (must be 16 bytes)');\n }\n\n this._counter = bytes;\n };\n\n Counter.prototype.increment = function() {\n for (var i = 15; i >= 0; i--) {\n if (this._counter[i] === 255) {\n this._counter[i] = 0;\n } else {\n this._counter[i]++;\n break;\n }\n }\n }\n\n\n /**\n * Mode Of Operation - Counter (CTR)\n */\n var ModeOfOperationCTR = function(key, counter) {\n if (!(this instanceof ModeOfOperationCTR)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Counter\";\n this.name = \"ctr\";\n\n if (!(counter instanceof Counter)) {\n counter = new Counter(counter)\n }\n\n this._counter = counter;\n\n this._remainingCounter = null;\n this._remainingCounterIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCTR.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._remainingCounterIndex === 16) {\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\n this._remainingCounterIndex = 0;\n this._counter.increment();\n }\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\n\n\n ///////////////////////\n // Padding\n\n // See:https://tools.ietf.org/html/rfc2315\n function pkcs7pad(data) {\n data = coerceArray(data, true);\n var padder = 16 - (data.length % 16);\n var result = createArray(data.length + padder);\n copyArray(data, result);\n for (var i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n }\n\n function pkcs7strip(data) {\n data = coerceArray(data, true);\n if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }\n\n var padder = data[data.length - 1];\n if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }\n\n var length = data.length - padder;\n for (var i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new Error('PKCS#7 invalid padding byte');\n }\n }\n\n var result = createArray(length);\n copyArray(data, result, 0, 0, length);\n return result;\n }\n\n ///////////////////////\n // Exporting\n\n\n // The block cipher\n var aesjs = {\n AES: AES,\n Counter: Counter,\n\n ModeOfOperation: {\n ecb: ModeOfOperationECB,\n cbc: ModeOfOperationCBC,\n cfb: ModeOfOperationCFB,\n ofb: ModeOfOperationOFB,\n ctr: ModeOfOperationCTR\n },\n\n utils: {\n hex: convertHex,\n utf8: convertUtf8\n },\n\n padding: {\n pkcs7: {\n pad: pkcs7pad,\n strip: pkcs7strip\n }\n },\n\n _arrayTest: {\n coerceArray: coerceArray,\n createArray: createArray,\n copyArray: copyArray,\n }\n };\n\n\n // node.js\n if (typeof exports !== 'undefined') {\n module.exports = aesjs\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define([], function() { return aesjs; });\n\n // Web Browsers\n } else {\n\n // If there was an existing library at \"aesjs\" make sure it's still available\n if (root.aesjs) {\n aesjs._aesjs = root.aesjs;\n }\n\n root.aesjs = aesjs;\n }\n\n\n})(this);\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n var lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar XMLHttpRequestEventTarget = /** @class */ (function () {\n function XMLHttpRequestEventTarget() {\n this.listeners = {};\n }\n XMLHttpRequestEventTarget.prototype.addEventListener = function (eventType, listener) {\n eventType = eventType.toLowerCase();\n this.listeners[eventType] = this.listeners[eventType] || [];\n this.listeners[eventType].push(listener.handleEvent || listener);\n };\n XMLHttpRequestEventTarget.prototype.removeEventListener = function (eventType, listener) {\n eventType = eventType.toLowerCase();\n if (!this.listeners[eventType]) {\n return;\n }\n var index = this.listeners[eventType].indexOf(listener.handleEvent || listener);\n if (index < 0) {\n return;\n }\n this.listeners[eventType].splice(index, 1);\n };\n XMLHttpRequestEventTarget.prototype.dispatchEvent = function (event) {\n var eventType = event.type.toLowerCase();\n event.target = this; // TODO: set event.currentTarget?\n if (this.listeners[eventType]) {\n for (var _i = 0, _a = this.listeners[eventType]; _i < _a.length; _i++) {\n var listener_1 = _a[_i];\n listener_1.call(this, event);\n }\n }\n var listener = this[\"on\" + eventType];\n if (listener) {\n listener.call(this, event);\n }\n return true;\n };\n return XMLHttpRequestEventTarget;\n}());\nexports.XMLHttpRequestEventTarget = XMLHttpRequestEventTarget;\n//# sourceMappingURL=xml-http-request-event-target.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction createHashFunction(hashConstructor) {\n return function (msg) {\n var hash = hashConstructor();\n hash.update(msg);\n return Buffer.from(hash.digest());\n };\n}\nexports.createHashFunction = createHashFunction;\n//# sourceMappingURL=hash-utils.js.map","module.exports = require('./lib')(require('./lib/elliptic'))\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = once;\nfunction once(fn) {\n return function () {\n if (fn === null) return;\n var callFn = fn;\n fn = null;\n callFn.apply(this, arguments);\n };\n}\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = onlyOnce;\nfunction onlyOnce(fn) {\n return function () {\n if (fn === null) throw new Error(\"Callback was already called.\");\n var callFn = fn;\n fn = null;\n callFn.apply(this, arguments);\n };\n}\nmodule.exports = exports[\"default\"];","var json = typeof JSON !== 'undefined' ? JSON : require('jsonify');\n\nmodule.exports = function (obj, opts) {\n if (!opts) opts = {};\n if (typeof opts === 'function') opts = { cmp: opts };\n var space = opts.space || '';\n if (typeof space === 'number') space = Array(space+1).join(' ');\n var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n var replacer = opts.replacer || function(key, value) { return value; };\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (parent, key, node, level) {\n var indent = space ? ('\\n' + new Array(level + 1).join(space)) : '';\n var colonSeparator = space ? ': ' : ':';\n\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n node = replacer.call(parent, key, node);\n\n if (node === undefined) {\n return;\n }\n if (typeof node !== 'object' || node === null) {\n return json.stringify(node);\n }\n if (isArray(node)) {\n var out = [];\n for (var i = 0; i < node.length; i++) {\n var item = stringify(node, i, node[i], level+1) || json.stringify(null);\n out.push(indent + space + item);\n }\n return '[' + out.join(',') + indent + ']';\n }\n else {\n if (seen.indexOf(node) !== -1) {\n if (cycles) return json.stringify('__cycle__');\n throw new TypeError('Converting circular structure to JSON');\n }\n else seen.push(node);\n\n var keys = objectKeys(node).sort(cmp && cmp(node));\n var out = [];\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node, key, node[key], level+1);\n\n if(!value) continue;\n\n var keyValue = json.stringify(key)\n + colonSeparator\n + value;\n ;\n out.push(indent + space + keyValue);\n }\n seen.splice(seen.indexOf(node), 1);\n return '{' + out.join(',') + indent + '}';\n }\n })({ '': obj }, '', obj, 0);\n};\n\nvar isArray = Array.isArray || function (x) {\n return {}.toString.call(x) === '[object Array]';\n};\n\nvar objectKeys = Object.keys || function (obj) {\n var has = Object.prototype.hasOwnProperty || function () { return true };\n var keys = [];\n for (var key in obj) {\n if (has.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","const getRandomId = require('./random-id.js')\nconst extend = require('xtend')\n\nmodule.exports = createPayload\n\n\nfunction createPayload(data){\n return extend({\n // defaults\n id: getRandomId(),\n jsonrpc: '2.0',\n params: [],\n // user-specified\n }, data)\n}\n","const Subprovider = require('./subprovider.js')\n\n// wraps a json-rpc-engine middleware in a subprovider interface\n\nclass JsonRpcEngineMiddlewareSubprovider extends Subprovider {\n\n // take a constructorFn to call once we have a reference to the engine\n constructor (constructorFn) {\n super()\n if (!constructorFn) throw new Error('JsonRpcEngineMiddlewareSubprovider - no constructorFn specified')\n this._constructorFn = constructorFn\n }\n\n // this is called once the subprovider has been added to the provider engine\n setEngine (engine) {\n if (this.middleware) throw new Error('JsonRpcEngineMiddlewareSubprovider - subprovider added to engine twice')\n const blockTracker = engine._blockTracker\n const middleware = this._constructorFn({ engine, provider: engine, blockTracker })\n if (!middleware) throw new Error('JsonRpcEngineMiddlewareSubprovider - _constructorFn did not return middleware')\n if (typeof middleware !== 'function') throw new Error('JsonRpcEngineMiddlewareSubprovider - specified middleware is not a function')\n this.middleware = middleware\n }\n\n handleRequest (req, provEngNext, provEngEnd) {\n const res = { id: req.id }\n this.middleware(req, res, middlewareNext, middlewareEnd)\n\n function middlewareNext (handler) {\n provEngNext((err, result, cb) => {\n // update response object with result or error\n if (err) {\n delete res.result\n res.error = { message: err.message || err }\n } else {\n res.result = result\n }\n // call middleware's next handler (even if error)\n if (handler) {\n handler(cb)\n } else {\n cb()\n }\n })\n }\n\n function middlewareEnd (err) {\n if (err) return provEngEnd(err)\n provEngEnd(null, res.result)\n }\n }\n\n}\n\nmodule.exports = JsonRpcEngineMiddlewareSubprovider\n","const Mutex = require('async-mutex').Mutex\nconst { createAsyncMiddleware } = require('json-rpc-engine')\nconst createJsonRpcMiddleware = require('eth-json-rpc-middleware/scaffold')\nconst LogFilter = require('./log-filter.js')\nconst BlockFilter = require('./block-filter.js')\nconst TxFilter = require('./tx-filter.js')\nconst { intToHex, hexToInt } = require('./hexUtils')\n\nmodule.exports = createEthFilterMiddleware\n\nfunction createEthFilterMiddleware({ blockTracker, provider }) {\n\n // create filter collection\n let filterIndex = 0\n let filters = {}\n // create update mutex\n const mutex = new Mutex()\n const waitForFree = mutexMiddlewareWrapper({ mutex })\n\n const middleware = createJsonRpcMiddleware({\n // install filters\n eth_newFilter: waitForFree(toFilterCreationMiddleware(newLogFilter)),\n eth_newBlockFilter: waitForFree(toFilterCreationMiddleware(newBlockFilter)),\n eth_newPendingTransactionFilter: waitForFree(toFilterCreationMiddleware(newPendingTransactionFilter)),\n // uninstall filters\n eth_uninstallFilter: waitForFree(toAsyncRpcMiddleware(uninstallFilterHandler)),\n // checking filter changes\n eth_getFilterChanges: waitForFree(toAsyncRpcMiddleware(getFilterChanges)),\n eth_getFilterLogs: waitForFree(toAsyncRpcMiddleware(getFilterLogs)),\n })\n\n // setup filter updating and destroy handler\n const filterUpdater = async ({ oldBlock, newBlock }) => {\n if (filters.length === 0) return\n // lock update reads\n const releaseLock = await mutex.acquire()\n try {\n // process all filters in parallel\n await Promise.all(objValues(filters).map(async (filter) => {\n try {\n await filter.update({ oldBlock, newBlock })\n } catch (err) {\n // handle each error individually so filter update errors don't affect other filters\n console.error(err)\n }\n }))\n } catch (err) {\n // log error so we don't skip the releaseLock\n console.error(err)\n }\n // unlock update reads\n releaseLock()\n }\n\n // expose filter methods directly\n middleware.newLogFilter = newLogFilter\n middleware.newBlockFilter = newBlockFilter\n middleware.newPendingTransactionFilter = newPendingTransactionFilter\n middleware.uninstallFilter = uninstallFilterHandler\n middleware.getFilterChanges = getFilterChanges\n middleware.getFilterLogs = getFilterLogs\n\n // expose destroy method for cleanup\n middleware.destroy = () => {\n uninstallAllFilters()\n }\n\n return middleware\n\n //\n // new filters\n //\n\n async function newLogFilter(params) {\n const filter = new LogFilter({ provider, params })\n const filterIndex = await installFilter(filter)\n return filter\n }\n\n async function newBlockFilter() {\n const filter = new BlockFilter({ provider })\n const filterIndex = await installFilter(filter)\n return filter\n }\n\n async function newPendingTransactionFilter() {\n const filter = new TxFilter({ provider })\n const filterIndex = await installFilter(filter)\n return filter\n }\n\n //\n // get filter changes\n //\n\n async function getFilterChanges(filterIndexHex) {\n const filterIndex = hexToInt(filterIndexHex)\n const filter = filters[filterIndex]\n if (!filter) {\n throw new Error(`No filter for index \"${filterIndex}\"`)\n }\n const results = filter.getChangesAndClear()\n return results\n }\n\n async function getFilterLogs(filterIndexHex) {\n const filterIndex = hexToInt(filterIndexHex)\n const filter = filters[filterIndex]\n if (!filter) {\n throw new Error(`No filter for index \"${filterIndex}\"`)\n }\n // only return results for log filters\n if (filter.type === 'log') {\n results = filter.getAllResults()\n } else {\n results = []\n }\n return results\n }\n\n\n //\n // remove filters\n //\n\n\n async function uninstallFilterHandler(filterIndexHex) {\n // check filter exists\n const filterIndex = hexToInt(filterIndexHex)\n const filter = filters[filterIndex]\n const result = Boolean(filter)\n // uninstall filter\n if (result) {\n await uninstallFilter(filterIndex)\n }\n return result\n }\n\n //\n // utils\n //\n\n async function installFilter(filter) {\n const prevFilterCount = objValues(filters).length\n // install filter\n const currentBlock = await blockTracker.getLatestBlock()\n await filter.initialize({ currentBlock })\n filterIndex++\n filters[filterIndex] = filter\n filter.id = filterIndex\n filter.idHex = intToHex(filterIndex)\n // update block tracker subs\n const newFilterCount = objValues(filters).length\n updateBlockTrackerSubs({ prevFilterCount, newFilterCount })\n return filterIndex\n }\n\n async function uninstallFilter(filterIndex) {\n const prevFilterCount = objValues(filters).length\n delete filters[filterIndex]\n // update block tracker subs\n const newFilterCount = objValues(filters).length\n updateBlockTrackerSubs({ prevFilterCount, newFilterCount })\n }\n\n async function uninstallAllFilters() {\n const prevFilterCount = objValues(filters).length\n filters = {}\n // update block tracker subs\n updateBlockTrackerSubs({ prevFilterCount, newFilterCount: 0 })\n }\n\n function updateBlockTrackerSubs({ prevFilterCount, newFilterCount }) {\n // subscribe\n if (prevFilterCount === 0 && newFilterCount > 0) {\n blockTracker.on('sync', filterUpdater)\n return\n }\n // unsubscribe\n if (prevFilterCount > 0 && newFilterCount === 0) {\n blockTracker.removeListener('sync', filterUpdater)\n return\n }\n }\n\n}\n\n// helper for turning filter constructors into rpc middleware\nfunction toFilterCreationMiddleware(createFilterFn) {\n return toAsyncRpcMiddleware(async (...args) => {\n const filter = await createFilterFn(...args)\n const result = intToHex(filter.id)\n return result\n })\n}\n\n// helper for pulling out req.params and setting res.result\nfunction toAsyncRpcMiddleware(asyncFn) {\n return createAsyncMiddleware(async (req, res) => {\n const result = await asyncFn.apply(null, req.params)\n res.result = result\n })\n}\n\nfunction mutexMiddlewareWrapper({ mutex }) {\n return (middleware) => {\n return async (req, res, next, end) => {\n // wait for mutex available\n // we can release immediately because\n // we just need to make sure updates aren't active\n const releaseLock = await mutex.acquire()\n releaseLock()\n middleware(req, res, next, end)\n }\n }\n}\n\nfunction objValues(obj, fn){\n const values = []\n for (let key in obj) {\n values.push(obj[key])\n }\n return values\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nfunction safeApply(handler, context, args) {\n try {\n Reflect.apply(handler, context, args);\n }\n catch (err) {\n // Throw error after timeout so as not to interrupt the stack\n setTimeout(() => {\n throw err;\n });\n }\n}\nfunction arrayClone(arr) {\n const n = arr.length;\n const copy = new Array(n);\n for (let i = 0; i < n; i += 1) {\n copy[i] = arr[i];\n }\n return copy;\n}\nclass SafeEventEmitter extends events_1.EventEmitter {\n emit(type, ...args) {\n let doError = type === 'error';\n const events = this._events;\n if (events !== undefined) {\n doError = doError && events.error === undefined;\n }\n else if (!doError) {\n return false;\n }\n // If there is no 'error' event listener then throw.\n if (doError) {\n let er;\n if (args.length > 0) {\n [er] = args;\n }\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n const err = new Error(`Unhandled error.${er ? ` (${er.message})` : ''}`);\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n const handler = events[type];\n if (handler === undefined) {\n return false;\n }\n if (typeof handler === 'function') {\n safeApply(handler, this, args);\n }\n else {\n const len = handler.length;\n const listeners = arrayClone(handler);\n for (let i = 0; i < len; i += 1) {\n safeApply(listeners[i], this, args);\n }\n }\n return true;\n }\n}\nexports.default = SafeEventEmitter;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EthereumProviderError = exports.EthereumRpcError = void 0;\nconst fast_safe_stringify_1 = require(\"fast-safe-stringify\");\n/**\n * Error subclass implementing JSON RPC 2.0 errors and Ethereum RPC errors\n * per EIP-1474.\n * Permits any integer error code.\n */\nclass EthereumRpcError extends Error {\n constructor(code, message, data) {\n if (!Number.isInteger(code)) {\n throw new Error('\"code\" must be an integer.');\n }\n if (!message || typeof message !== 'string') {\n throw new Error('\"message\" must be a nonempty string.');\n }\n super(message);\n this.code = code;\n if (data !== undefined) {\n this.data = data;\n }\n }\n /**\n * Returns a plain object with all public class properties.\n */\n serialize() {\n const serialized = {\n code: this.code,\n message: this.message,\n };\n if (this.data !== undefined) {\n serialized.data = this.data;\n }\n if (this.stack) {\n serialized.stack = this.stack;\n }\n return serialized;\n }\n /**\n * Return a string representation of the serialized error, omitting\n * any circular references.\n */\n toString() {\n return fast_safe_stringify_1.default(this.serialize(), stringifyReplacer, 2);\n }\n}\nexports.EthereumRpcError = EthereumRpcError;\n/**\n * Error subclass implementing Ethereum Provider errors per EIP-1193.\n * Permits integer error codes in the [ 1000 <= 4999 ] range.\n */\nclass EthereumProviderError extends EthereumRpcError {\n /**\n * Create an Ethereum Provider JSON-RPC error.\n * `code` must be an integer in the 1000 <= 4999 range.\n */\n constructor(code, message, data) {\n if (!isValidEthProviderCode(code)) {\n throw new Error('\"code\" must be an integer such that: 1000 <= code <= 4999');\n }\n super(code, message, data);\n }\n}\nexports.EthereumProviderError = EthereumProviderError;\n// Internal\nfunction isValidEthProviderCode(code) {\n return Number.isInteger(code) && code >= 1000 && code <= 4999;\n}\nfunction stringifyReplacer(_, value) {\n if (value === '[Circular]') {\n return undefined;\n }\n return value;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUFnRDtBQVNoRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBb0IsU0FBUSxLQUFLO0lBTTVDLFlBQVksSUFBWSxFQUFFLE9BQWUsRUFBRSxJQUFRO1FBRWpELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEJBQTRCLENBQzdCLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0NBQXNDLENBQ3ZDLENBQUM7U0FDSDtRQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxNQUFNLFVBQVUsR0FBK0I7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzNCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUMvQjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyw2QkFBYSxDQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ2hCLGlCQUFpQixFQUNqQixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRERCw0Q0FzREM7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLHFCQUF5QixTQUFRLGdCQUFtQjtJQUUvRDs7O09BR0c7SUFDSCxZQUFZLElBQVksRUFBRSxPQUFlLEVBQUUsSUFBUTtRQUVqRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsQ0FDNUQsQ0FBQztTQUNIO1FBRUQsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBaEJELHNEQWdCQztBQUVELFdBQVc7QUFFWCxTQUFTLHNCQUFzQixDQUFDLElBQVk7SUFDMUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxDQUFVLEVBQUUsS0FBYztJQUNuRCxJQUFJLEtBQUssS0FBSyxZQUFZLEVBQUU7UUFDMUIsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.errorValues = exports.errorCodes = void 0;\nexports.errorCodes = {\n rpc: {\n invalidInput: -32000,\n resourceNotFound: -32001,\n resourceUnavailable: -32002,\n transactionRejected: -32003,\n methodNotSupported: -32004,\n limitExceeded: -32005,\n parse: -32700,\n invalidRequest: -32600,\n methodNotFound: -32601,\n invalidParams: -32602,\n internal: -32603,\n },\n provider: {\n userRejectedRequest: 4001,\n unauthorized: 4100,\n unsupportedMethod: 4200,\n disconnected: 4900,\n chainDisconnected: 4901,\n },\n};\nexports.errorValues = {\n '-32700': {\n standard: 'JSON RPC 2.0',\n message: 'Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.',\n },\n '-32600': {\n standard: 'JSON RPC 2.0',\n message: 'The JSON sent is not a valid Request object.',\n },\n '-32601': {\n standard: 'JSON RPC 2.0',\n message: 'The method does not exist / is not available.',\n },\n '-32602': {\n standard: 'JSON RPC 2.0',\n message: 'Invalid method parameter(s).',\n },\n '-32603': {\n standard: 'JSON RPC 2.0',\n message: 'Internal JSON-RPC error.',\n },\n '-32000': {\n standard: 'EIP-1474',\n message: 'Invalid input.',\n },\n '-32001': {\n standard: 'EIP-1474',\n message: 'Resource not found.',\n },\n '-32002': {\n standard: 'EIP-1474',\n message: 'Resource unavailable.',\n },\n '-32003': {\n standard: 'EIP-1474',\n message: 'Transaction rejected.',\n },\n '-32004': {\n standard: 'EIP-1474',\n message: 'Method not supported.',\n },\n '-32005': {\n standard: 'EIP-1474',\n message: 'Request limit exceeded.',\n },\n '4001': {\n standard: 'EIP-1193',\n message: 'User rejected the request.',\n },\n '4100': {\n standard: 'EIP-1193',\n message: 'The requested account and/or method has not been authorized by the user.',\n },\n '4200': {\n standard: 'EIP-1193',\n message: 'The requested method is not supported by this Ethereum provider.',\n },\n '4900': {\n standard: 'EIP-1193',\n message: 'The provider is disconnected from all chains.',\n },\n '4901': {\n standard: 'EIP-1193',\n message: 'The provider is disconnected from the specified chain.',\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9yLWNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1QmEsUUFBQSxVQUFVLEdBQWU7SUFDcEMsR0FBRyxFQUFFO1FBQ0gsWUFBWSxFQUFFLENBQUMsS0FBSztRQUNwQixnQkFBZ0IsRUFBRSxDQUFDLEtBQUs7UUFDeEIsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLO1FBQzNCLG1CQUFtQixFQUFFLENBQUMsS0FBSztRQUMzQixrQkFBa0IsRUFBRSxDQUFDLEtBQUs7UUFDMUIsYUFBYSxFQUFFLENBQUMsS0FBSztRQUNyQixLQUFLLEVBQUUsQ0FBQyxLQUFLO1FBQ2IsY0FBYyxFQUFFLENBQUMsS0FBSztRQUN0QixjQUFjLEVBQUUsQ0FBQyxLQUFLO1FBQ3RCLGFBQWEsRUFBRSxDQUFDLEtBQUs7UUFDckIsUUFBUSxFQUFFLENBQUMsS0FBSztLQUNqQjtJQUNELFFBQVEsRUFBRTtRQUNSLG1CQUFtQixFQUFFLElBQUk7UUFDekIsWUFBWSxFQUFFLElBQUk7UUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtRQUN2QixZQUFZLEVBQUUsSUFBSTtRQUNsQixpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCO0NBQ0YsQ0FBQztBQUVXLFFBQUEsV0FBVyxHQUFHO0lBQ3pCLFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLE9BQU8sRUFBRSx1R0FBdUc7S0FDakg7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsY0FBYztRQUN4QixPQUFPLEVBQUUsOENBQThDO0tBQ3hEO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLGNBQWM7UUFDeEIsT0FBTyxFQUFFLCtDQUErQztLQUN6RDtJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLE9BQU8sRUFBRSw4QkFBOEI7S0FDeEM7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsY0FBYztRQUN4QixPQUFPLEVBQUUsMEJBQTBCO0tBQ3BDO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLFVBQVU7UUFDcEIsT0FBTyxFQUFFLGdCQUFnQjtLQUMxQjtJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSxxQkFBcUI7S0FDL0I7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsVUFBVTtRQUNwQixPQUFPLEVBQUUsdUJBQXVCO0tBQ2pDO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLFVBQVU7UUFDcEIsT0FBTyxFQUFFLHVCQUF1QjtLQUNqQztJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSx1QkFBdUI7S0FDakM7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsVUFBVTtRQUNwQixPQUFPLEVBQUUseUJBQXlCO0tBQ25DO0lBQ0QsTUFBTSxFQUFFO1FBQ04sUUFBUSxFQUFFLFVBQVU7UUFDcEIsT0FBTyxFQUFFLDRCQUE0QjtLQUN0QztJQUNELE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSwwRUFBMEU7S0FDcEY7SUFDRCxNQUFNLEVBQUU7UUFDTixRQUFRLEVBQUUsVUFBVTtRQUNwQixPQUFPLEVBQUUsa0VBQWtFO0tBQzVFO0lBQ0QsTUFBTSxFQUFFO1FBQ04sUUFBUSxFQUFFLFVBQVU7UUFDcEIsT0FBTyxFQUFFLCtDQUErQztLQUN6RDtJQUNELE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSx3REFBd0Q7S0FDbEU7Q0FDRixDQUFDIn0=","const SafeEventEmitter = require('@metamask/safe-event-emitter').default\n\nclass BaseFilter extends SafeEventEmitter {\n\n constructor () {\n super()\n this.updates = []\n }\n\n async initialize () {}\n\n async update () {\n throw new Error('BaseFilter - no update method specified')\n }\n\n addResults (newResults) {\n this.updates = this.updates.concat(newResults)\n newResults.forEach(result => this.emit('update', result))\n }\n\n addInitialResults (newResults) {}\n\n getChangesAndClear () {\n const updates = this.updates\n this.updates = []\n return updates\n }\n \n}\n\nmodule.exports = BaseFilter\n","module.exports = getBlocksForRange\n\nasync function getBlocksForRange({ provider, fromBlock, toBlock }) {\n if (!fromBlock) fromBlock = toBlock\n\n const fromBlockNumber = hexToInt(fromBlock)\n const toBlockNumber = hexToInt(toBlock)\n const blockCountToQuery = toBlockNumber - fromBlockNumber + 1\n // load all blocks from old to new (inclusive)\n const missingBlockNumbers = Array(blockCountToQuery).fill()\n .map((_,index) => fromBlockNumber + index)\n .map(intToHex)\n const blockBodies = await Promise.all(\n missingBlockNumbers.map(blockNum => query(provider, 'eth_getBlockByNumber', [blockNum, false]))\n )\n return blockBodies\n}\n\nfunction hexToInt(hexString) {\n if (hexString === undefined || hexString === null) return hexString\n return Number.parseInt(hexString, 16)\n}\n\nfunction incrementHexInt(hexString){\n if (hexString === undefined || hexString === null) return hexString\n const value = hexToInt(hexString)\n return intToHex(value + 1)\n}\n\nfunction intToHex(int) {\n if (int === undefined || int === null) return int\n const hexString = int.toString(16)\n return '0x' + hexString\n}\n\nfunction query(provider, method, params) {\n return new Promise((resolve, reject) => {\n provider.sendAsync({ id: 1, jsonrpc: '2.0', method, params }, (err, res) => {\n if (err) return reject(err)\n resolve(res.result)\n })\n })\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ecdhUnsafe = exports.ecdh = exports.recover = exports.verify = exports.sign = exports.signatureImportLax = exports.signatureImport = exports.signatureExport = exports.signatureNormalize = exports.publicKeyCombine = exports.publicKeyTweakMul = exports.publicKeyTweakAdd = exports.publicKeyVerify = exports.publicKeyConvert = exports.publicKeyCreate = exports.privateKeyTweakMul = exports.privateKeyTweakAdd = exports.privateKeyModInverse = exports.privateKeyNegate = exports.privateKeyImport = exports.privateKeyExport = exports.privateKeyVerify = void 0;\nvar secp256k1 = require('ethereum-cryptography/secp256k1');\nvar secp256k1v3 = require('./secp256k1v3-lib/index');\nvar der = require('./secp256k1v3-lib/der');\n/**\n * Verify an ECDSA privateKey\n * @method privateKeyVerify\n * @param {Buffer} privateKey\n * @return {boolean}\n */\nexports.privateKeyVerify = function (privateKey) {\n // secp256k1 v4 version throws when privateKey length is not 32\n if (privateKey.length !== 32) {\n return false;\n }\n return secp256k1.privateKeyVerify(Uint8Array.from(privateKey));\n};\n/**\n * Export a privateKey in DER format\n * @method privateKeyExport\n * @param {Buffer} privateKey\n * @param {boolean} compressed\n * @return {boolean}\n */\nexports.privateKeyExport = function (privateKey, compressed) {\n // secp256k1 v4 version throws when privateKey length is not 32\n if (privateKey.length !== 32) {\n throw new RangeError('private key length is invalid');\n }\n var publicKey = secp256k1v3.privateKeyExport(privateKey, compressed);\n return der.privateKeyExport(privateKey, publicKey, compressed);\n};\n/**\n * Import a privateKey in DER format\n * @method privateKeyImport\n * @param {Buffer} privateKey\n * @return {Buffer}\n */\nexports.privateKeyImport = function (privateKey) {\n // privateKeyImport method is not part of secp256k1 v4 package\n // this implementation is based on v3\n privateKey = der.privateKeyImport(privateKey);\n if (privateKey !== null && privateKey.length === 32 && exports.privateKeyVerify(privateKey)) {\n return privateKey;\n }\n throw new Error(\"couldn't import from DER format\");\n};\n/**\n * Negate a privateKey by subtracting it from the order of the curve's base point\n * @method privateKeyNegate\n * @param {Buffer} privateKey\n * @return {Buffer}\n */\nexports.privateKeyNegate = function (privateKey) {\n return Buffer.from(secp256k1.privateKeyNegate(Uint8Array.from(privateKey)));\n};\n/**\n * Compute the inverse of a privateKey (modulo the order of the curve's base point).\n * @method privateKeyModInverse\n * @param {Buffer} privateKey\n * @return {Buffer}\n */\nexports.privateKeyModInverse = function (privateKey) {\n if (privateKey.length !== 32) {\n throw new Error('private key length is invalid');\n }\n return Buffer.from(secp256k1v3.privateKeyModInverse(Uint8Array.from(privateKey)));\n};\n/**\n * Tweak a privateKey by adding tweak to it.\n * @method privateKeyTweakAdd\n * @param {Buffer} privateKey\n * @param {Buffer} tweak\n * @return {Buffer}\n */\nexports.privateKeyTweakAdd = function (privateKey, tweak) {\n return Buffer.from(secp256k1.privateKeyTweakAdd(Uint8Array.from(privateKey), tweak));\n};\n/**\n * Tweak a privateKey by multiplying it by a tweak.\n * @method privateKeyTweakMul\n * @param {Buffer} privateKey\n * @param {Buffer} tweak\n * @return {Buffer}\n */\nexports.privateKeyTweakMul = function (privateKey, tweak) {\n return Buffer.from(secp256k1.privateKeyTweakMul(Uint8Array.from(privateKey), Uint8Array.from(tweak)));\n};\n/**\n * Compute the public key for a privateKey.\n * @method publicKeyCreate\n * @param {Buffer} privateKey\n * @param {boolean} compressed\n * @return {Buffer}\n */\nexports.publicKeyCreate = function (privateKey, compressed) {\n return Buffer.from(secp256k1.publicKeyCreate(Uint8Array.from(privateKey), compressed));\n};\n/**\n * Convert a publicKey to compressed or uncompressed form.\n * @method publicKeyConvert\n * @param {Buffer} publicKey\n * @param {boolean} compressed\n * @return {Buffer}\n */\nexports.publicKeyConvert = function (publicKey, compressed) {\n return Buffer.from(secp256k1.publicKeyConvert(Uint8Array.from(publicKey), compressed));\n};\n/**\n * Verify an ECDSA publicKey.\n * @method publicKeyVerify\n * @param {Buffer} publicKey\n * @return {boolean}\n */\nexports.publicKeyVerify = function (publicKey) {\n // secp256k1 v4 version throws when publicKey length is not 33 or 65\n if (publicKey.length !== 33 && publicKey.length !== 65) {\n return false;\n }\n return secp256k1.publicKeyVerify(Uint8Array.from(publicKey));\n};\n/**\n * Tweak a publicKey by adding tweak times the generator to it.\n * @method publicKeyTweakAdd\n * @param {Buffer} publicKey\n * @param {Buffer} tweak\n * @param {boolean} compressed\n * @return {Buffer}\n */\nexports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {\n return Buffer.from(secp256k1.publicKeyTweakAdd(Uint8Array.from(publicKey), Uint8Array.from(tweak), compressed));\n};\n/**\n * Tweak a publicKey by multiplying it by a tweak value\n * @method publicKeyTweakMul\n * @param {Buffer} publicKey\n * @param {Buffer} tweak\n * @param {boolean} compressed\n * @return {Buffer}\n */\nexports.publicKeyTweakMul = function (publicKey, tweak, compressed) {\n return Buffer.from(secp256k1.publicKeyTweakMul(Uint8Array.from(publicKey), Uint8Array.from(tweak), compressed));\n};\n/**\n * Add a given publicKeys together.\n * @method publicKeyCombine\n * @param {Array} publicKeys\n * @param {boolean} compressed\n * @return {Buffer}\n */\nexports.publicKeyCombine = function (publicKeys, compressed) {\n var keys = [];\n publicKeys.forEach(function (publicKey) {\n keys.push(Uint8Array.from(publicKey));\n });\n return Buffer.from(secp256k1.publicKeyCombine(keys, compressed));\n};\n/**\n * Convert a signature to a normalized lower-S form.\n * @method signatureNormalize\n * @param {Buffer} signature\n * @return {Buffer}\n */\nexports.signatureNormalize = function (signature) {\n return Buffer.from(secp256k1.signatureNormalize(Uint8Array.from(signature)));\n};\n/**\n * Serialize an ECDSA signature in DER format.\n * @method signatureExport\n * @param {Buffer} signature\n * @return {Buffer}\n */\nexports.signatureExport = function (signature) {\n return Buffer.from(secp256k1.signatureExport(Uint8Array.from(signature)));\n};\n/**\n * Parse a DER ECDSA signature (follow by [BIP66](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki)).\n * @method signatureImport\n * @param {Buffer} signature\n * @return {Buffer}\n */\nexports.signatureImport = function (signature) {\n return Buffer.from(secp256k1.signatureImport(Uint8Array.from(signature)));\n};\n/**\n * Parse a DER ECDSA signature (not follow by [BIP66](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki)).\n * @method signatureImportLax\n * @param {Buffer} signature\n * @return {Buffer}\n */\nexports.signatureImportLax = function (signature) {\n // signatureImportLax method is not part of secp256k1 v4 package\n // this implementation is based on v3\n // ensure that signature is greater than 0\n if (signature.length === 0) {\n throw new RangeError('signature length is invalid');\n }\n var sigObj = der.signatureImportLax(signature);\n if (sigObj === null) {\n throw new Error(\"couldn't parse DER signature\");\n }\n return secp256k1v3.signatureImport(sigObj);\n};\n/**\n * Create an ECDSA signature. Always return low-S signature.\n * @method sign\n * @param {Buffer} message\n * @param {Buffer} privateKey\n * @param {Object} options\n * @return {Buffer}\n */\nexports.sign = function (message, privateKey, options) {\n if (options === null) {\n throw new TypeError('options should be an Object');\n }\n var signOptions = undefined;\n if (options) {\n signOptions = {};\n if (options.data === null) {\n // validate option.data length\n throw new TypeError('options.data should be a Buffer');\n }\n if (options.data) {\n if (options.data.length != 32) {\n throw new RangeError('options.data length is invalid');\n }\n signOptions.data = new Uint8Array(options.data);\n }\n if (options.noncefn === null) {\n throw new TypeError('options.noncefn should be a Function');\n }\n if (options.noncefn) {\n // convert option.noncefn function signature\n signOptions.noncefn = function (message, privateKey, algo, data, attempt) {\n var bufferAlgo = algo != null ? Buffer.from(algo) : null;\n var bufferData = data != null ? Buffer.from(data) : null;\n var buffer = Buffer.from('');\n if (options.noncefn) {\n buffer = options.noncefn(Buffer.from(message), Buffer.from(privateKey), bufferAlgo, bufferData, attempt);\n }\n return new Uint8Array(buffer);\n };\n }\n }\n var sig = secp256k1.ecdsaSign(Uint8Array.from(message), Uint8Array.from(privateKey), signOptions);\n return {\n signature: Buffer.from(sig.signature),\n recovery: sig.recid,\n };\n};\n/**\n * Verify an ECDSA signature.\n * @method verify\n * @param {Buffer} message\n * @param {Buffer} signature\n * @param {Buffer} publicKey\n * @return {boolean}\n */\nexports.verify = function (message, signature, publicKey) {\n return secp256k1.ecdsaVerify(Uint8Array.from(signature), Uint8Array.from(message), publicKey);\n};\n/**\n * Recover an ECDSA public key from a signature.\n * @method recover\n * @param {Buffer} message\n * @param {Buffer} signature\n * @param {Number} recid\n * @param {boolean} compressed\n * @return {Buffer}\n */\nexports.recover = function (message, signature, recid, compressed) {\n return Buffer.from(secp256k1.ecdsaRecover(Uint8Array.from(signature), recid, Uint8Array.from(message), compressed));\n};\n/**\n * Compute an EC Diffie-Hellman secret and applied sha256 to compressed public key.\n * @method ecdh\n * @param {Buffer} publicKey\n * @param {Buffer} privateKey\n * @return {Buffer}\n */\nexports.ecdh = function (publicKey, privateKey) {\n // note: secp256k1 v3 doesn't allow optional parameter\n return Buffer.from(secp256k1.ecdh(Uint8Array.from(publicKey), Uint8Array.from(privateKey), {}));\n};\nexports.ecdhUnsafe = function (publicKey, privateKey, compressed) {\n // ecdhUnsafe method is not part of secp256k1 v4 package\n // this implementation is based on v3\n // ensure valid publicKey length\n if (publicKey.length !== 33 && publicKey.length !== 65) {\n throw new RangeError('public key length is invalid');\n }\n // ensure valid privateKey length\n if (privateKey.length !== 32) {\n throw new RangeError('private key length is invalid');\n }\n return Buffer.from(secp256k1v3.ecdhUnsafe(Uint8Array.from(publicKey), Uint8Array.from(privateKey), compressed));\n};\n//# sourceMappingURL=secp256k1v3-adapter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.rlphash = exports.ripemd160 = exports.sha256 = exports.keccak256 = exports.keccak = void 0;\nvar _a = require('ethereum-cryptography/keccak'), keccak224 = _a.keccak224, keccak384 = _a.keccak384, k256 = _a.keccak256, keccak512 = _a.keccak512;\nvar createHash = require('create-hash');\nvar ethjsUtil = require('ethjs-util');\nvar rlp = require(\"rlp\");\nvar bytes_1 = require(\"./bytes\");\n/**\n * Creates Keccak hash of the input\n * @param a The input data (Buffer|Array|String|Number) If the string is a 0x-prefixed hex value\n * it's interpreted as hexadecimal, otherwise as utf8.\n * @param bits The Keccak width\n */\nexports.keccak = function (a, bits) {\n if (bits === void 0) { bits = 256; }\n if (typeof a === 'string' && !ethjsUtil.isHexString(a)) {\n a = Buffer.from(a, 'utf8');\n }\n else {\n a = bytes_1.toBuffer(a);\n }\n if (!bits)\n bits = 256;\n switch (bits) {\n case 224: {\n return keccak224(a);\n }\n case 256: {\n return k256(a);\n }\n case 384: {\n return keccak384(a);\n }\n case 512: {\n return keccak512(a);\n }\n default: {\n throw new Error(\"Invald algorithm: keccak\" + bits);\n }\n }\n};\n/**\n * Creates Keccak-256 hash of the input, alias for keccak(a, 256).\n * @param a The input data (Buffer|Array|String|Number)\n */\nexports.keccak256 = function (a) {\n return exports.keccak(a);\n};\n/**\n * Creates SHA256 hash of the input.\n * @param a The input data (Buffer|Array|String|Number)\n */\nexports.sha256 = function (a) {\n a = bytes_1.toBuffer(a);\n return createHash('sha256')\n .update(a)\n .digest();\n};\n/**\n * Creates RIPEMD160 hash of the input.\n * @param a The input data (Buffer|Array|String|Number)\n * @param padded Whether it should be padded to 256 bits or not\n */\nexports.ripemd160 = function (a, padded) {\n a = bytes_1.toBuffer(a);\n var hash = createHash('rmd160')\n .update(a)\n .digest();\n if (padded === true) {\n return bytes_1.setLength(hash, 32);\n }\n else {\n return hash;\n }\n};\n/**\n * Creates SHA-3 hash of the RLP encoded version of the input.\n * @param a The input data\n */\nexports.rlphash = function (a) {\n return exports.keccak(rlp.encode(a));\n};\n//# sourceMappingURL=hash.js.map","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ethUtil = require('ethereumjs-util');\nvar fees = require('ethereum-common/params.json');\nvar BN = ethUtil.BN;\n\n// secp256k1n/2\nvar N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16);\n\n/**\n * Creates a new transaction object.\n *\n * @example\n * var rawTx = {\n * nonce: '00',\n * gasPrice: '09184e72a000',\n * gasLimit: '2710',\n * to: '0000000000000000000000000000000000000000',\n * value: '00',\n * data: '7f7465737432000000000000000000000000000000000000000000000000000000600057',\n * v: '1c',\n * r: '5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab',\n * s: '5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13'\n * };\n * var tx = new Transaction(rawTx);\n *\n * @class\n * @param {Buffer | Array | Object} data a transaction can be initiailized with either a buffer containing the RLP serialized transaction or an array of buffers relating to each of the tx Properties, listed in order below in the exmple.\n *\n * Or lastly an Object containing the Properties of the transaction like in the Usage example.\n *\n * For Object and Arrays each of the elements can either be a Buffer, a hex-prefixed (0x) String , Number, or an object with a toBuffer method such as Bignum\n *\n * @property {Buffer} raw The raw rlp encoded transaction\n * @param {Buffer} data.nonce nonce number\n * @param {Buffer} data.gasLimit transaction gas limit\n * @param {Buffer} data.gasPrice transaction gas price\n * @param {Buffer} data.to to the to address\n * @param {Buffer} data.value the amount of ether sent\n * @param {Buffer} data.data this will contain the data of the message or the init of a contract\n * @param {Buffer} data.v EC signature parameter\n * @param {Buffer} data.r EC signature parameter\n * @param {Buffer} data.s EC recovery ID\n * @param {Number} data.chainId EIP 155 chainId - mainnet: 1, ropsten: 3\n * */\n\nvar Transaction = function () {\n function Transaction(data) {\n _classCallCheck(this, Transaction);\n\n data = data || {};\n // Define Properties\n var fields = [{\n name: 'nonce',\n length: 32,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 'gasPrice',\n length: 32,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 'gasLimit',\n alias: 'gas',\n length: 32,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 'to',\n allowZero: true,\n length: 20,\n default: new Buffer([])\n }, {\n name: 'value',\n length: 32,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 'data',\n alias: 'input',\n allowZero: true,\n default: new Buffer([])\n }, {\n name: 'v',\n allowZero: true,\n default: new Buffer([0x1c])\n }, {\n name: 'r',\n length: 32,\n allowZero: true,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 's',\n length: 32,\n allowZero: true,\n allowLess: true,\n default: new Buffer([])\n }];\n\n /**\n * Returns the rlp encoding of the transaction\n * @method serialize\n * @return {Buffer}\n * @memberof Transaction\n * @name serialize\n */\n // attached serialize\n ethUtil.defineProperties(this, fields, data);\n\n /**\n * @property {Buffer} from (read only) sender address of this transaction, mathematically derived from other parameters.\n * @name from\n * @memberof Transaction\n */\n Object.defineProperty(this, 'from', {\n enumerable: true,\n configurable: true,\n get: this.getSenderAddress.bind(this)\n });\n\n // calculate chainId from signature\n var sigV = ethUtil.bufferToInt(this.v);\n var chainId = Math.floor((sigV - 35) / 2);\n if (chainId < 0) chainId = 0;\n\n // set chainId\n this._chainId = chainId || data.chainId || 0;\n this._homestead = true;\n }\n\n /**\n * If the tx's `to` is to the creation address\n * @return {Boolean}\n */\n\n\n Transaction.prototype.toCreationAddress = function toCreationAddress() {\n return this.to.toString('hex') === '';\n };\n\n /**\n * Computes a sha3-256 hash of the serialized tx\n * @param {Boolean} [includeSignature=true] whether or not to inculde the signature\n * @return {Buffer}\n */\n\n\n Transaction.prototype.hash = function hash(includeSignature) {\n if (includeSignature === undefined) includeSignature = true;\n\n // EIP155 spec:\n // when computing the hash of a transaction for purposes of signing or recovering,\n // instead of hashing only the first six elements (ie. nonce, gasprice, startgas, to, value, data),\n // hash nine elements, with v replaced by CHAIN_ID, r = 0 and s = 0\n\n var items = void 0;\n if (includeSignature) {\n items = this.raw;\n } else {\n if (this._chainId > 0) {\n var raw = this.raw.slice();\n this.v = this._chainId;\n this.r = 0;\n this.s = 0;\n items = this.raw;\n this.raw = raw;\n } else {\n items = this.raw.slice(0, 6);\n }\n }\n\n // create hash\n return ethUtil.rlphash(items);\n };\n\n /**\n * returns the public key of the sender\n * @return {Buffer}\n */\n\n\n Transaction.prototype.getChainId = function getChainId() {\n return this._chainId;\n };\n\n /**\n * returns the sender's address\n * @return {Buffer}\n */\n\n\n Transaction.prototype.getSenderAddress = function getSenderAddress() {\n if (this._from) {\n return this._from;\n }\n var pubkey = this.getSenderPublicKey();\n this._from = ethUtil.publicToAddress(pubkey);\n return this._from;\n };\n\n /**\n * returns the public key of the sender\n * @return {Buffer}\n */\n\n\n Transaction.prototype.getSenderPublicKey = function getSenderPublicKey() {\n if (!this._senderPubKey || !this._senderPubKey.length) {\n if (!this.verifySignature()) throw new Error('Invalid Signature');\n }\n return this._senderPubKey;\n };\n\n /**\n * Determines if the signature is valid\n * @return {Boolean}\n */\n\n\n Transaction.prototype.verifySignature = function verifySignature() {\n var msgHash = this.hash(false);\n // All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid.\n if (this._homestead && new BN(this.s).cmp(N_DIV_2) === 1) {\n return false;\n }\n\n try {\n var v = ethUtil.bufferToInt(this.v);\n if (this._chainId > 0) {\n v -= this._chainId * 2 + 8;\n }\n this._senderPubKey = ethUtil.ecrecover(msgHash, v, this.r, this.s);\n } catch (e) {\n return false;\n }\n\n return !!this._senderPubKey;\n };\n\n /**\n * sign a transaction with a given a private key\n * @param {Buffer} privateKey\n */\n\n\n Transaction.prototype.sign = function sign(privateKey) {\n var msgHash = this.hash(false);\n var sig = ethUtil.ecsign(msgHash, privateKey);\n if (this._chainId > 0) {\n sig.v += this._chainId * 2 + 8;\n }\n Object.assign(this, sig);\n };\n\n /**\n * The amount of gas paid for the data in this tx\n * @return {BN}\n */\n\n\n Transaction.prototype.getDataFee = function getDataFee() {\n var data = this.raw[5];\n var cost = new BN(0);\n for (var i = 0; i < data.length; i++) {\n data[i] === 0 ? cost.iaddn(fees.txDataZeroGas.v) : cost.iaddn(fees.txDataNonZeroGas.v);\n }\n return cost;\n };\n\n /**\n * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee)\n * @return {BN}\n */\n\n\n Transaction.prototype.getBaseFee = function getBaseFee() {\n var fee = this.getDataFee().iaddn(fees.txGas.v);\n if (this._homestead && this.toCreationAddress()) {\n fee.iaddn(fees.txCreation.v);\n }\n return fee;\n };\n\n /**\n * the up front amount that an account must have for this transaction to be valid\n * @return {BN}\n */\n\n\n Transaction.prototype.getUpfrontCost = function getUpfrontCost() {\n return new BN(this.gasLimit).imul(new BN(this.gasPrice)).iadd(new BN(this.value));\n };\n\n /**\n * validates the signature and checks to see if it has enough gas\n * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean\n * @return {Boolean|String}\n */\n\n\n Transaction.prototype.validate = function validate(stringError) {\n var errors = [];\n if (!this.verifySignature()) {\n errors.push('Invalid Signature');\n }\n\n if (this.getBaseFee().cmp(new BN(this.gasLimit)) > 0) {\n errors.push(['gas limit is too low. Need at least ' + this.getBaseFee()]);\n }\n\n if (stringError === undefined || stringError === false) {\n return errors.length === 0;\n } else {\n return errors.join(' ');\n }\n };\n\n return Transaction;\n}();\n\nmodule.exports = Transaction;","\nconst safeStringify = require('fast-safe-stringify')\n\n/**\n * @class JsonRpcError\n * Error subclass implementing JSON RPC 2.0 errors and Ethereum RPC errors\n * per EIP 1474.\n * Permits any integer error code.\n */\nclass EthereumRpcError extends Error {\n\n /**\n * Create an Ethereum JSON RPC error.\n * \n * @param {number} code - The integer error code.\n * @param {string} message - The string message.\n * @param {any} [data] - The error data.\n */\n constructor (code, message, data) {\n\n if (!Number.isInteger(code)) throw new Error(\n '\"code\" must be an integer.'\n )\n if (!message || typeof message !== 'string') throw new Error(\n '\"message\" must be a nonempty string.'\n )\n\n super(message)\n this.code = code\n if (data !== undefined) this.data = data\n }\n\n /**\n * Returns a plain object with all public class properties.\n * \n * @returns {object} The serialized error. \n */\n serialize() {\n const serialized = {\n code: this.code,\n message: this.message,\n }\n if (this.data !== undefined) serialized.data = this.data\n if (this.stack) serialized.stack = this.stack\n return serialized\n }\n\n /**\n * Return a string representation of the serialized error, omitting\n * any circular references.\n * \n * @returns {string} The serialized error as a string.\n */\n toString() {\n return safeStringify(\n this.serialize(),\n stringifyReplacer,\n 2\n )\n }\n}\n\n/**\n * @class EthereumRpcError\n * Error subclass implementing Ethereum Provider errors per EIP 1193.\n * Permits integer error codes in the [ 1000 <= 4999 ] range.\n */\nclass EthereumProviderError extends EthereumRpcError {\n\n /**\n * Create an Ethereum JSON RPC error.\n * \n * @param {number} code - The integer error code, in the [ 1000 <= 4999 ] range.\n * @param {string} message - The string message.\n * @param {any} [data] - The error data.\n */\n constructor(code, message, data) {\n\n if (!isValidEthProviderCode(code)) {\n throw new Error(\n '\"code\" must be an integer such that: 1000 <= code <= 4999'\n )\n }\n\n super(code, message, data)\n }\n}\n\n// Internal\n\nfunction isValidEthProviderCode(code) {\n return Number.isInteger(code) && code >= 1000 && code <= 4999\n}\n\nfunction stringifyReplacer(_, value) {\n if (value === '[Circular]') {\n return\n }\n return value\n}\n\n// Exports\n\nmodule.exports = {\n EthereumRpcError,\n EthereumProviderError\n}\n","/*\n * Copyright (c) 2012 Mathieu Turcotte\n * Licensed under the MIT license.\n */\n\nmodule.exports = require('./lib/checks');","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","\"use strict\";\nimport { arrayify } from \"@ethersproject/bytes\";\nexport function decode(textData) {\n textData = atob(textData);\n const data = [];\n for (let i = 0; i < textData.length; i++) {\n data.push(textData.charCodeAt(i));\n }\n return arrayify(data);\n}\nexport function encode(data) {\n data = arrayify(data);\n let textData = \"\";\n for (let i = 0; i < data.length; i++) {\n textData += String.fromCharCode(data[i]);\n }\n return btoa(textData);\n}\n//# sourceMappingURL=base64.js.map","// Copyright 2011 Mark Cavage All rights reserved.\n\n// If you have no idea what ASN.1 or BER is, see this:\n// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nvar Ber = require('./ber/index');\n\n\n\n// --- Exported API\n\nmodule.exports = {\n\n Ber: Ber,\n\n BerReader: Ber.Reader,\n\n BerWriter: Ber.Writer\n\n};\n","// Copyright 2011 Mark Cavage All rights reserved.\n\n\nmodule.exports = {\n\n newInvalidAsn1Error: function (msg) {\n var e = new Error();\n e.name = 'InvalidAsn1Error';\n e.message = msg || '';\n return e;\n }\n\n};\n","// Copyright 2011 Mark Cavage All rights reserved.\n\n\nmodule.exports = {\n EOC: 0,\n Boolean: 1,\n Integer: 2,\n BitString: 3,\n OctetString: 4,\n Null: 5,\n OID: 6,\n ObjectDescriptor: 7,\n External: 8,\n Real: 9, // float\n Enumeration: 10,\n PDV: 11,\n Utf8String: 12,\n RelativeOID: 13,\n Sequence: 16,\n Set: 17,\n NumericString: 18,\n PrintableString: 19,\n T61String: 20,\n VideotexString: 21,\n IA5String: 22,\n UTCTime: 23,\n GeneralizedTime: 24,\n GraphicString: 25,\n VisibleString: 26,\n GeneralString: 28,\n UniversalString: 29,\n CharacterString: 30,\n BMPString: 31,\n Constructor: 32,\n Context: 128\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar identity = require('./bases/identity.js');\nvar base2 = require('./bases/base2.js');\nvar base8 = require('./bases/base8.js');\nvar base10 = require('./bases/base10.js');\nvar base16 = require('./bases/base16.js');\nvar base32 = require('./bases/base32.js');\nvar base36 = require('./bases/base36.js');\nvar base58 = require('./bases/base58.js');\nvar base64 = require('./bases/base64.js');\nvar sha2 = require('./hashes/sha2.js');\nvar identity$1 = require('./hashes/identity.js');\nvar raw = require('./codecs/raw.js');\nvar json = require('./codecs/json.js');\nrequire('./index.js');\nvar cid = require('./cid.js');\nvar hasher = require('./hashes/hasher.js');\nvar digest = require('./hashes/digest.js');\nvar varint = require('./varint.js');\nvar bytes = require('./bytes.js');\n\nconst bases = {\n ...identity,\n ...base2,\n ...base8,\n ...base10,\n ...base16,\n ...base32,\n ...base36,\n ...base58,\n ...base64\n};\nconst hashes = {\n ...sha2,\n ...identity$1\n};\nconst codecs = {\n raw,\n json\n};\n\nexports.CID = cid.CID;\nexports.hasher = hasher;\nexports.digest = digest;\nexports.varint = varint;\nexports.bytes = bytes;\nexports.bases = bases;\nexports.codecs = codecs;\nexports.hashes = hashes;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","\"use strict\";\n\nconst Debug = require('debug');\n\nconst {\n ethersBnToBn,\n checksummedAddress,\n bnifyNestedEthersBn,\n multiaddrHexToHuman,\n getEventFromLogs,\n hexToBuffer,\n NULL_ADDRESS,\n BN\n} = require('../utils/utils');\n\nconst {\n addressSchema,\n uint256Schema,\n categorySchema,\n appSchema,\n datasetSchema,\n workerpoolSchema,\n throwIfMissing,\n ValidationError\n} = require('../utils/validator');\n\nconst {\n ObjectNotFoundError\n} = require('../utils/errors');\n\nconst {\n wrapCall,\n wrapSend\n} = require('../utils/errorWrappers');\n\nconst debug = Debug('iexec:hub');\nconst RESOURCE_NAMES = ['app', 'dataset', 'workerpool'];\n\nconst tokenIdToAddress = tokenId => {\n const hexTokenId = tokenId.toHexString().substring(2);\n const lowerCaseAddress = NULL_ADDRESS.substr(0, 42 - hexTokenId.length).concat(hexTokenId);\n return checksummedAddress(lowerCaseAddress);\n};\n\nconst createObj = function () {\n let objName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n return async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let obj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const txReceipt = await wrapSend(contracts.createObj(objName)(obj));\n const event = getEventFromLogs('Transfer', txReceipt.events, {\n strict: true\n });\n const {\n tokenId\n } = event.args;\n const address = tokenIdToAddress(tokenId);\n const txHash = txReceipt.transactionHash;\n return {\n address,\n txHash\n };\n } catch (error) {\n debug('createObj()', error);\n throw error;\n }\n };\n};\n\nconst deployApp = async (contracts, app) => createObj('app')(contracts, await appSchema({\n ethProvider: contracts.provider\n}).validate(app));\n\nconst deployDataset = async (contracts, dataset) => createObj('dataset')(contracts, await datasetSchema({\n ethProvider: contracts.provider\n}).validate(dataset));\n\nconst deployWorkerpool = async (contracts, workerpool) => createObj('workerpool')(contracts, await workerpoolSchema({\n ethProvider: contracts.provider\n}).validate(workerpool));\n\nconst checkDeployedObj = function () {\n let objName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n return async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const isDeployed = await wrapCall(contracts.checkDeployedObj(objName)(address, {\n strict: false\n }));\n return isDeployed;\n } catch (error) {\n debug('checkDeployedObj()', error);\n throw error;\n }\n };\n};\n\nconst checkDeployedApp = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return checkDeployedObj('app')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(address));\n};\n\nconst checkDeployedDataset = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return checkDeployedObj('dataset')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(address));\n};\n\nconst checkDeployedWorkerpool = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return checkDeployedObj('workerpool')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(address));\n};\n\nconst showObjByAddress = function () {\n let objName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n return async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let objAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(objAddress);\n const isDeployed = await checkDeployedObj(objName)(contracts, objAddress);\n if (!isDeployed) throw new ObjectNotFoundError(objName, objAddress, contracts.chainId);\n const obj = bnifyNestedEthersBn(await wrapCall(contracts.getObjProps(objName)(vAddress)));\n return {\n obj,\n objAddress: vAddress\n };\n } catch (error) {\n debug('showObjByAddress()', error);\n throw error;\n }\n };\n};\n\nconst countObj = function () {\n let objName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n return async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let userAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(userAddress);\n const objCountBN = ethersBnToBn(await wrapCall(contracts.getUserObjCount(objName)(vAddress)));\n return objCountBN;\n } catch (error) {\n debug('countObj()', error);\n throw error;\n }\n };\n};\n\nconst countUserApps = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let userAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return countObj('app')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(userAddress));\n};\n\nconst countUserDatasets = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let userAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return countObj('dataset')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(userAddress));\n};\n\nconst countUserWorkerpools = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let userAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return countObj('workerpool')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(userAddress));\n};\n\nconst showObjByIndex = function () {\n let objName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n return async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let objIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let userAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n\n try {\n const vIndex = await uint256Schema().validate(objIndex);\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(userAddress);\n const totalObj = await countObj(objName)(contracts, userAddress);\n if (new BN(vIndex).gte(totalObj)) throw Error(\"\".concat(objName, \" not deployed\"));\n const tokenId = await wrapCall(contracts.getUserObjIdByIndex(objName)(vAddress, vIndex));\n const objAddress = tokenIdToAddress(tokenId);\n return showObjByAddress(objName)(contracts, objAddress);\n } catch (error) {\n debug('showObjByIndex()', error);\n throw error;\n }\n };\n};\n\nconst cleanObj = obj => {\n const reducer = (acc, curr) => {\n const name = curr[0].substr(0, 2) === 'm_' ? curr[0].split('m_')[1] : curr[0];\n return Object.assign(acc, {\n [name]: curr[1]\n });\n };\n\n return Object.entries(obj).reduce(reducer, {});\n};\n\nconst cleanApp = obj => Object.assign(cleanObj(obj), obj.m_appMultiaddr && {\n appMultiaddr: multiaddrHexToHuman(obj.m_appMultiaddr)\n}, obj.m_appMREnclave && {\n appMREnclave: hexToBuffer(obj.m_appMREnclave).toString()\n});\n\nconst showApp = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let appAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n const {\n obj,\n objAddress\n } = await showObjByAddress('app')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(appAddress));\n return {\n objAddress,\n app: cleanApp(obj)\n };\n};\n\nconst showUserApp = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let userAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n const {\n obj,\n objAddress\n } = await showObjByIndex('app')(contracts, await uint256Schema().validate(index), await addressSchema({\n ethProvider: contracts.provider\n }).validate(userAddress));\n return {\n objAddress,\n app: cleanApp(obj)\n };\n};\n\nconst showDataset = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let datasetAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n const {\n obj,\n objAddress\n } = await showObjByAddress('dataset')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(datasetAddress));\n const clean = Object.assign(cleanObj(obj), obj.m_datasetMultiaddr && {\n datasetMultiaddr: multiaddrHexToHuman(obj.m_datasetMultiaddr)\n });\n return {\n objAddress,\n dataset: clean\n };\n};\n\nconst showUserDataset = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let userAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n const {\n obj,\n objAddress\n } = await showObjByIndex('dataset')(contracts, await uint256Schema().validate(index), await addressSchema({\n ethProvider: contracts.provider\n }).validate(userAddress));\n const clean = Object.assign(cleanObj(obj), obj.m_datasetMultiaddr && {\n datasetMultiaddr: multiaddrHexToHuman(obj.m_datasetMultiaddr)\n });\n return {\n objAddress,\n dataset: clean\n };\n};\n\nconst showWorkerpool = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let workerpoolAddress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n const {\n obj,\n objAddress\n } = await showObjByAddress('workerpool')(contracts, await addressSchema({\n ethProvider: contracts.provider\n }).validate(workerpoolAddress));\n const clean = cleanObj(obj);\n return {\n objAddress,\n workerpool: clean\n };\n};\n\nconst showUserWorkerpool = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let userAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n const {\n obj,\n objAddress\n } = await showObjByIndex('workerpool')(contracts, await uint256Schema().validate(index), await addressSchema({\n ethProvider: contracts.provider\n }).validate(userAddress));\n const clean = cleanObj(obj);\n return {\n objAddress,\n workerpool: clean\n };\n};\n\nconst createCategory = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let obj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const txReceipt = await wrapSend(contracts.createCategory(await categorySchema().validate(obj)));\n const {\n catid\n } = getEventFromLogs('CreateCategory', txReceipt.events, {\n strict: true\n }).args;\n const txHash = txReceipt.transactionHash;\n return {\n catid,\n txHash\n };\n } catch (error) {\n debug('createCategory()', error);\n throw error;\n }\n};\n\nconst showCategory = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const category = bnifyNestedEthersBn(await wrapCall(contracts.getCategoryByIndex(await uint256Schema().validate(index))));\n return category;\n } catch (error) {\n debug('showCategory()', error);\n throw error;\n }\n};\n\nconst countCategory = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n\n try {\n const countBN = ethersBnToBn(await wrapCall(contracts.getIExecContract().countCategory()));\n return countBN;\n } catch (error) {\n debug('countCategory()', error);\n throw error;\n }\n};\n\nconst checkResourceName = type => {\n if (!RESOURCE_NAMES.includes(type)) throw new ValidationError(\"Invalid resource name \".concat(type));\n};\n\nconst getOwner = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let address = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n\n try {\n checkResourceName(name);\n const contract = contracts.getContract(name)({\n at: address\n });\n const owner = checksummedAddress(await wrapCall(contract.owner()));\n return owner;\n } catch (error) {\n debug('getOwner()', error);\n throw error;\n }\n};\n\nconst getAppOwner = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return getOwner(contracts, 'app', await addressSchema({\n ethProvider: contracts.provider\n }).validate(address));\n};\n\nconst getDatasetOwner = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return getOwner(contracts, 'dataset', await addressSchema({\n ethProvider: contracts.provider\n }).validate(address));\n};\n\nconst getWorkerpoolOwner = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n return getOwner(contracts, 'workerpool', await addressSchema({\n ethProvider: contracts.provider\n }).validate(address));\n};\n\nconst getTimeoutRatio = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n\n try {\n const timeoutRatio = ethersBnToBn(await wrapCall(contracts.getIExecContract().final_deadline_ratio()));\n return timeoutRatio;\n } catch (error) {\n debug('getTimeoutRatio()', error);\n throw error;\n }\n};\n\nmodule.exports = {\n deployApp,\n deployDataset,\n deployWorkerpool,\n checkDeployedApp,\n checkDeployedDataset,\n checkDeployedWorkerpool,\n showApp,\n showDataset,\n showWorkerpool,\n showUserApp,\n showUserDataset,\n showUserWorkerpool,\n countUserApps,\n countUserDatasets,\n countUserWorkerpools,\n getAppOwner,\n getDatasetOwner,\n getWorkerpoolOwner,\n createCategory,\n showCategory,\n countCategory,\n getTimeoutRatio\n};","'use strict'\n\nconst textDecoder = new TextDecoder()\n/**\n * @param {ArrayBufferView|ArrayBuffer} bytes\n * @returns {string}\n */\nconst decodeText = (bytes) => textDecoder.decode(bytes)\n\nconst textEncoder = new TextEncoder()\n/**\n * @param {string} text\n * @returns {Uint8Array}\n */\nconst encodeText = (text) => textEncoder.encode(text)\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Arrays\n *\n * @param {Array>} arrs\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction concat (arrs, length) {\n const output = new Uint8Array(length)\n let offset = 0\n\n for (const arr of arrs) {\n output.set(arr, offset)\n offset += arr.length\n }\n\n return output\n}\n\nmodule.exports = { decodeText, encodeText, concat }\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar common = require('./common.js');\nvar _0uint = require('./0uint.js');\nvar byteUtils = require('./byte-utils.js');\n\nfunction toToken(data, pos, prefix, length) {\n common.assertEnoughData(data, pos, prefix + length);\n const buf = byteUtils.slice(data, pos + prefix, pos + prefix + length);\n return new token.Token(token.Type.bytes, buf, prefix + length);\n}\nfunction decodeBytesCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nfunction decodeBytes8(data, pos, _minor, options) {\n return toToken(data, pos, 2, _0uint.readUint8(data, pos + 1, options));\n}\nfunction decodeBytes16(data, pos, _minor, options) {\n return toToken(data, pos, 3, _0uint.readUint16(data, pos + 1, options));\n}\nfunction decodeBytes32(data, pos, _minor, options) {\n return toToken(data, pos, 5, _0uint.readUint32(data, pos + 1, options));\n}\nfunction decodeBytes64(data, pos, _minor, options) {\n const l = _0uint.readUint64(data, pos + 1, options);\n if (typeof l === 'bigint') {\n throw new Error(`${ common.decodeErrPrefix } 64-bit integer bytes lengths not supported`);\n }\n return toToken(data, pos, 9, l);\n}\nfunction tokenBytes(token$1) {\n if (token$1.encodedBytes === undefined) {\n token$1.encodedBytes = token$1.type === token.Type.string ? byteUtils.fromString(token$1.value) : token$1.value;\n }\n return token$1.encodedBytes;\n}\nfunction encodeBytes(buf, token) {\n const bytes = tokenBytes(token);\n _0uint.encodeUintValue(buf, token.type.majorEncoded, bytes.length);\n buf.push(bytes);\n}\nencodeBytes.encodedSize = function encodedSize(token) {\n const bytes = tokenBytes(token);\n return _0uint.encodeUintValue.encodedSize(bytes.length) + bytes.length;\n};\nencodeBytes.compareTokens = function compareTokens(tok1, tok2) {\n return compareBytes(tokenBytes(tok1), tokenBytes(tok2));\n};\nfunction compareBytes(b1, b2) {\n return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : byteUtils.compare(b1, b2);\n}\n\nexports.compareBytes = compareBytes;\nexports.decodeBytes16 = decodeBytes16;\nexports.decodeBytes32 = decodeBytes32;\nexports.decodeBytes64 = decodeBytes64;\nexports.decodeBytes8 = decodeBytes8;\nexports.decodeBytesCompact = decodeBytesCompact;\nexports.encodeBytes = encodeBytes;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar multiformats = require('multiformats');\nvar base64 = require('multiformats/bases/base64');\nvar cborg = require('cborg');\nvar cborgJson = require('cborg/json');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar cborgJson__namespace = /*#__PURE__*/_interopNamespace(cborgJson);\n\nfunction cidEncoder(obj) {\n if (obj.asCID !== obj) {\n return null;\n }\n const cid = multiformats.CID.asCID(obj);\n if (!cid) {\n return null;\n }\n const cidString = cid.toString();\n return [\n new cborg.Token(cborg.Type.map, Infinity, 1),\n new cborg.Token(cborg.Type.string, '/', 1),\n new cborg.Token(cborg.Type.string, cidString, cidString.length),\n new cborg.Token(cborg.Type.break, undefined, 1)\n ];\n}\nfunction bytesEncoder(bytes) {\n const bytesString = base64.base64.encode(bytes).slice(1);\n return [\n new cborg.Token(cborg.Type.map, Infinity, 1),\n new cborg.Token(cborg.Type.string, '/', 1),\n new cborg.Token(cborg.Type.map, Infinity, 1),\n new cborg.Token(cborg.Type.string, 'bytes', 5),\n new cborg.Token(cborg.Type.string, bytesString, bytesString.length),\n new cborg.Token(cborg.Type.break, undefined, 1),\n new cborg.Token(cborg.Type.break, undefined, 1)\n ];\n}\nfunction undefinedEncoder() {\n throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded');\n}\nfunction numberEncoder(num) {\n if (Number.isNaN(num)) {\n throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded');\n }\n if (num === Infinity || num === -Infinity) {\n throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded');\n }\n return null;\n}\nconst encodeOptions = {\n typeEncoders: {\n Object: cidEncoder,\n Uint8Array: bytesEncoder,\n Buffer: bytesEncoder,\n undefined: undefinedEncoder,\n number: numberEncoder\n }\n};\nclass DagJsonTokenizer extends cborgJson__namespace.Tokenizer {\n constructor(data, options) {\n super(data, options);\n this.tokenBuffer = [];\n }\n done() {\n return this.tokenBuffer.length === 0 && super.done();\n }\n _next() {\n if (this.tokenBuffer.length > 0) {\n return this.tokenBuffer.pop();\n }\n return super.next();\n }\n next() {\n const token = this._next();\n if (token.type === cborg.Type.map) {\n const keyToken = this._next();\n if (keyToken.type === cborg.Type.string && keyToken.value === '/') {\n const valueToken = this._next();\n if (valueToken.type === cborg.Type.string) {\n const breakToken = this._next();\n if (breakToken.type !== cborg.Type.break) {\n throw new Error('Invalid encoded CID form');\n }\n this.tokenBuffer.push(valueToken);\n return new cborg.Token(cborg.Type.tag, 42, 0);\n }\n if (valueToken.type === cborg.Type.map) {\n const innerKeyToken = this._next();\n if (innerKeyToken.type === cborg.Type.string && innerKeyToken.value === 'bytes') {\n const innerValueToken = this._next();\n if (innerValueToken.type === cborg.Type.string) {\n for (let i = 0; i < 2; i++) {\n const breakToken = this._next();\n if (breakToken.type !== cborg.Type.break) {\n throw new Error('Invalid encoded Bytes form');\n }\n }\n const bytes = base64.base64.decode(`m${ innerValueToken.value }`);\n return new cborg.Token(cborg.Type.bytes, bytes, innerValueToken.value.length);\n }\n this.tokenBuffer.push(innerValueToken);\n }\n this.tokenBuffer.push(innerKeyToken);\n }\n this.tokenBuffer.push(valueToken);\n }\n this.tokenBuffer.push(keyToken);\n }\n return token;\n }\n}\nconst decodeOptions = {\n allowIndefinite: false,\n allowUndefined: false,\n allowNaN: false,\n allowInfinity: false,\n allowBigInt: true,\n strict: true,\n useMaps: false,\n tags: []\n};\ndecodeOptions.tags[42] = multiformats.CID.parse;\nconst name = 'dag-json';\nconst code = 297;\nconst encode = node => cborgJson__namespace.encode(node, encodeOptions);\nconst decode = data => {\n const options = Object.assign(decodeOptions, { tokenizer: new DagJsonTokenizer(data, decodeOptions) });\n return cborgJson__namespace.decode(data, options);\n};\n\nexports.code = code;\nexports.decode = decode;\nexports.encode = encode;\nexports.name = name;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errors = require('../errors.js');\nvar utils = require('../utils.js');\n\nclass Service {\n static create({start, stop}) {\n return new Service(start, stop);\n }\n static async start(service, options) {\n const {state, activate} = service;\n switch (state.status) {\n case 'stopped': {\n try {\n const promise = activate(options);\n service.state = {\n status: 'starting',\n ready: promise\n };\n const result = await promise;\n service.state = {\n status: 'started',\n value: result\n };\n return result;\n } catch (error) {\n service.state = { status: 'stopped' };\n throw error;\n }\n }\n case 'starting': {\n throw new errors.AlreadyStartingError();\n }\n case 'started': {\n throw new errors.AlreadyStartedError();\n }\n case 'stopping': {\n await state.ready;\n return await Service.start(service, options);\n }\n default: {\n return Service.panic(service);\n }\n }\n }\n static async stop(service) {\n const {state, deactivate} = service;\n switch (state.status) {\n case 'stopped': {\n break;\n }\n case 'starting': {\n try {\n await state.ready;\n } catch (_) {\n }\n return await Service.stop(service);\n }\n case 'stopping': {\n return await state.ready;\n }\n case 'started': {\n if (deactivate) {\n await deactivate(state.value);\n }\n service.state = { status: 'stopped' };\n break;\n }\n default: {\n Service.panic(state);\n }\n }\n }\n static try({state}) {\n switch (state.status) {\n case 'started':\n return state.value;\n default:\n return null;\n }\n }\n static async use({state}, options) {\n switch (state.status) {\n case 'started':\n return state.value;\n case 'starting':\n return await utils.withTimeout(state.ready, options);\n default:\n throw new errors.NotStartedError();\n }\n }\n static panic({state}) {\n const status = JSON.stringify({ status: state.status });\n throw RangeError(`Service in invalid state ${ status }, should never happen if you see this please report a bug`);\n }\n constructor(activate, deactivate) {\n this.activate = activate;\n this.deactivate = deactivate;\n this.state = { status: 'stopped' };\n }\n async use(options) {\n return await Service.use(this, options);\n }\n try() {\n return Service.try(this);\n }\n}\n\nexports.Service = Service;\n","'use strict'\n\nconst {\n URLWithLegacySupport,\n format,\n URLSearchParams,\n defaultBase\n} = require('./src/url')\nconst relative = require('./src/relative')\n\nmodule.exports = {\n URL: URLWithLegacySupport,\n URLSearchParams,\n format,\n relative,\n defaultBase\n}\n","/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n","'use strict'\n\nconst keysPBM = require('./keys')\nrequire('node-forge/lib/asn1')\nrequire('node-forge/lib/pbe')\nconst forge = require('node-forge/lib/forge')\nconst errcode = require('err-code')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\n\nconst importer = require('./importer')\n\nconst supportedKeys = {\n rsa: require('./rsa-class'),\n ed25519: require('./ed25519-class'),\n secp256k1: require('./secp256k1-class')(keysPBM, require('../random-bytes'))\n}\n\nconst ErrMissingSecp256K1 = {\n message: 'secp256k1 support requires libp2p-crypto-secp256k1 package',\n code: 'ERR_MISSING_PACKAGE'\n}\n\nfunction typeToKey (type) {\n const key = supportedKeys[type.toLowerCase()]\n if (!key) {\n const supported = Object.keys(supportedKeys).join(' / ')\n throw errcode(new Error(`invalid or unsupported key type ${type}. Must be ${supported}`), 'ERR_UNSUPPORTED_KEY_TYPE')\n }\n return key\n}\n\n// Generates a keypair of the given type and bitsize\nconst generateKeyPair = async (type, bits) => { // eslint-disable-line require-await\n return typeToKey(type).generateKeyPair(bits)\n}\n\n// Generates a keypair of the given type and bitsize\n// seed is a 32 byte uint8array\nconst generateKeyPairFromSeed = async (type, seed, bits) => { // eslint-disable-line require-await\n const key = typeToKey(type)\n if (type.toLowerCase() !== 'ed25519') {\n throw errcode(new Error('Seed key derivation is unimplemented for RSA or secp256k1'), 'ERR_UNSUPPORTED_KEY_DERIVATION_TYPE')\n }\n return key.generateKeyPairFromSeed(seed, bits)\n}\n\n// Converts a protobuf serialized public key into its\n// representative object\nconst unmarshalPublicKey = (buf) => {\n const decoded = keysPBM.PublicKey.decode(buf)\n const data = decoded.Data\n\n switch (decoded.Type) {\n case keysPBM.KeyType.RSA:\n return supportedKeys.rsa.unmarshalRsaPublicKey(data)\n case keysPBM.KeyType.Ed25519:\n return supportedKeys.ed25519.unmarshalEd25519PublicKey(data)\n case keysPBM.KeyType.Secp256k1:\n if (supportedKeys.secp256k1) {\n return supportedKeys.secp256k1.unmarshalSecp256k1PublicKey(data)\n } else {\n throw errcode(new Error(ErrMissingSecp256K1.message), ErrMissingSecp256K1.code)\n }\n default:\n typeToKey(decoded.Type) // throws because type is not supported\n }\n}\n\n// Converts a public key object into a protobuf serialized public key\nconst marshalPublicKey = (key, type) => {\n type = (type || 'rsa').toLowerCase()\n typeToKey(type) // check type\n return key.bytes\n}\n\n// Converts a protobuf serialized private key into its\n// representative object\nconst unmarshalPrivateKey = async (buf) => { // eslint-disable-line require-await\n const decoded = keysPBM.PrivateKey.decode(buf)\n const data = decoded.Data\n\n switch (decoded.Type) {\n case keysPBM.KeyType.RSA:\n return supportedKeys.rsa.unmarshalRsaPrivateKey(data)\n case keysPBM.KeyType.Ed25519:\n return supportedKeys.ed25519.unmarshalEd25519PrivateKey(data)\n case keysPBM.KeyType.Secp256k1:\n if (supportedKeys.secp256k1) {\n return supportedKeys.secp256k1.unmarshalSecp256k1PrivateKey(data)\n } else {\n throw errcode(new Error(ErrMissingSecp256K1.message), ErrMissingSecp256K1.code)\n }\n default:\n typeToKey(decoded.Type) // throws because type is not supported\n }\n}\n\n// Converts a private key object into a protobuf serialized private key\nconst marshalPrivateKey = (key, type) => {\n type = (type || 'rsa').toLowerCase()\n typeToKey(type) // check type\n return key.bytes\n}\n\n/**\n *\n * @param {string} encryptedKey\n * @param {string} password\n */\nconst importKey = async (encryptedKey, password) => { // eslint-disable-line require-await\n try {\n const key = await importer.import(encryptedKey, password)\n return unmarshalPrivateKey(key)\n } catch (_) {\n // Ignore and try the old pem decrypt\n }\n\n // Only rsa supports pem right now\n const key = forge.pki.decryptRsaPrivateKey(encryptedKey, password)\n if (key === null) {\n throw errcode(new Error('Cannot read the key, most likely the password is wrong or not a RSA key'), 'ERR_CANNOT_DECRYPT_PEM')\n }\n let der = forge.asn1.toDer(forge.pki.privateKeyToAsn1(key))\n der = uint8ArrayFromString(der.getBytes(), 'ascii')\n return supportedKeys.rsa.unmarshalRsaPrivateKey(der)\n}\n\nmodule.exports = {\n supportedKeys,\n keysPBM,\n keyStretcher: require('./key-stretcher'),\n generateEphemeralKeyPair: require('./ephemeral-keys'),\n generateKeyPair,\n generateKeyPairFromSeed,\n unmarshalPublicKey,\n marshalPublicKey,\n unmarshalPrivateKey,\n marshalPrivateKey,\n import: importKey\n}\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-crypto-keys\"] || ($protobuf.roots[\"libp2p-crypto-keys\"] = {});\n\n/**\n * KeyType enum.\n * @exports KeyType\n * @enum {number}\n * @property {number} RSA=0 RSA value\n * @property {number} Ed25519=1 Ed25519 value\n * @property {number} Secp256k1=2 Secp256k1 value\n */\n$root.KeyType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"RSA\"] = 0;\n values[valuesById[1] = \"Ed25519\"] = 1;\n values[valuesById[2] = \"Secp256k1\"] = 2;\n return values;\n})();\n\n$root.PublicKey = (function() {\n\n /**\n * Properties of a PublicKey.\n * @exports IPublicKey\n * @interface IPublicKey\n * @property {KeyType} Type PublicKey Type\n * @property {Uint8Array} Data PublicKey Data\n */\n\n /**\n * Constructs a new PublicKey.\n * @exports PublicKey\n * @classdesc Represents a PublicKey.\n * @implements IPublicKey\n * @constructor\n * @param {IPublicKey=} [p] Properties to set\n */\n function PublicKey(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * PublicKey Type.\n * @member {KeyType} Type\n * @memberof PublicKey\n * @instance\n */\n PublicKey.prototype.Type = 0;\n\n /**\n * PublicKey Data.\n * @member {Uint8Array} Data\n * @memberof PublicKey\n * @instance\n */\n PublicKey.prototype.Data = $util.newBuffer([]);\n\n /**\n * Encodes the specified PublicKey message. Does not implicitly {@link PublicKey.verify|verify} messages.\n * @function encode\n * @memberof PublicKey\n * @static\n * @param {IPublicKey} m PublicKey message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n PublicKey.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(8).int32(m.Type);\n w.uint32(18).bytes(m.Data);\n return w;\n };\n\n /**\n * Decodes a PublicKey message from the specified reader or buffer.\n * @function decode\n * @memberof PublicKey\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {PublicKey} PublicKey\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n PublicKey.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.PublicKey();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.Type = r.int32();\n break;\n case 2:\n m.Data = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"Type\"))\n throw $util.ProtocolError(\"missing required 'Type'\", { instance: m });\n if (!m.hasOwnProperty(\"Data\"))\n throw $util.ProtocolError(\"missing required 'Data'\", { instance: m });\n return m;\n };\n\n /**\n * Creates a PublicKey message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof PublicKey\n * @static\n * @param {Object.} d Plain object\n * @returns {PublicKey} PublicKey\n */\n PublicKey.fromObject = function fromObject(d) {\n if (d instanceof $root.PublicKey)\n return d;\n var m = new $root.PublicKey();\n switch (d.Type) {\n case \"RSA\":\n case 0:\n m.Type = 0;\n break;\n case \"Ed25519\":\n case 1:\n m.Type = 1;\n break;\n case \"Secp256k1\":\n case 2:\n m.Type = 2;\n break;\n }\n if (d.Data != null) {\n if (typeof d.Data === \"string\")\n $util.base64.decode(d.Data, m.Data = $util.newBuffer($util.base64.length(d.Data)), 0);\n else if (d.Data.length)\n m.Data = d.Data;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a PublicKey message. Also converts values to other types if specified.\n * @function toObject\n * @memberof PublicKey\n * @static\n * @param {PublicKey} m PublicKey\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n PublicKey.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.Type = o.enums === String ? \"RSA\" : 0;\n if (o.bytes === String)\n d.Data = \"\";\n else {\n d.Data = [];\n if (o.bytes !== Array)\n d.Data = $util.newBuffer(d.Data);\n }\n }\n if (m.Type != null && m.hasOwnProperty(\"Type\")) {\n d.Type = o.enums === String ? $root.KeyType[m.Type] : m.Type;\n }\n if (m.Data != null && m.hasOwnProperty(\"Data\")) {\n d.Data = o.bytes === String ? $util.base64.encode(m.Data, 0, m.Data.length) : o.bytes === Array ? Array.prototype.slice.call(m.Data) : m.Data;\n }\n return d;\n };\n\n /**\n * Converts this PublicKey to JSON.\n * @function toJSON\n * @memberof PublicKey\n * @instance\n * @returns {Object.} JSON object\n */\n PublicKey.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return PublicKey;\n})();\n\n$root.PrivateKey = (function() {\n\n /**\n * Properties of a PrivateKey.\n * @exports IPrivateKey\n * @interface IPrivateKey\n * @property {KeyType} Type PrivateKey Type\n * @property {Uint8Array} Data PrivateKey Data\n */\n\n /**\n * Constructs a new PrivateKey.\n * @exports PrivateKey\n * @classdesc Represents a PrivateKey.\n * @implements IPrivateKey\n * @constructor\n * @param {IPrivateKey=} [p] Properties to set\n */\n function PrivateKey(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * PrivateKey Type.\n * @member {KeyType} Type\n * @memberof PrivateKey\n * @instance\n */\n PrivateKey.prototype.Type = 0;\n\n /**\n * PrivateKey Data.\n * @member {Uint8Array} Data\n * @memberof PrivateKey\n * @instance\n */\n PrivateKey.prototype.Data = $util.newBuffer([]);\n\n /**\n * Encodes the specified PrivateKey message. Does not implicitly {@link PrivateKey.verify|verify} messages.\n * @function encode\n * @memberof PrivateKey\n * @static\n * @param {IPrivateKey} m PrivateKey message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n PrivateKey.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(8).int32(m.Type);\n w.uint32(18).bytes(m.Data);\n return w;\n };\n\n /**\n * Decodes a PrivateKey message from the specified reader or buffer.\n * @function decode\n * @memberof PrivateKey\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {PrivateKey} PrivateKey\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n PrivateKey.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.PrivateKey();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.Type = r.int32();\n break;\n case 2:\n m.Data = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"Type\"))\n throw $util.ProtocolError(\"missing required 'Type'\", { instance: m });\n if (!m.hasOwnProperty(\"Data\"))\n throw $util.ProtocolError(\"missing required 'Data'\", { instance: m });\n return m;\n };\n\n /**\n * Creates a PrivateKey message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof PrivateKey\n * @static\n * @param {Object.} d Plain object\n * @returns {PrivateKey} PrivateKey\n */\n PrivateKey.fromObject = function fromObject(d) {\n if (d instanceof $root.PrivateKey)\n return d;\n var m = new $root.PrivateKey();\n switch (d.Type) {\n case \"RSA\":\n case 0:\n m.Type = 0;\n break;\n case \"Ed25519\":\n case 1:\n m.Type = 1;\n break;\n case \"Secp256k1\":\n case 2:\n m.Type = 2;\n break;\n }\n if (d.Data != null) {\n if (typeof d.Data === \"string\")\n $util.base64.decode(d.Data, m.Data = $util.newBuffer($util.base64.length(d.Data)), 0);\n else if (d.Data.length)\n m.Data = d.Data;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a PrivateKey message. Also converts values to other types if specified.\n * @function toObject\n * @memberof PrivateKey\n * @static\n * @param {PrivateKey} m PrivateKey\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n PrivateKey.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.Type = o.enums === String ? \"RSA\" : 0;\n if (o.bytes === String)\n d.Data = \"\";\n else {\n d.Data = [];\n if (o.bytes !== Array)\n d.Data = $util.newBuffer(d.Data);\n }\n }\n if (m.Type != null && m.hasOwnProperty(\"Type\")) {\n d.Type = o.enums === String ? $root.KeyType[m.Type] : m.Type;\n }\n if (m.Data != null && m.hasOwnProperty(\"Data\")) {\n d.Data = o.bytes === String ? $util.base64.encode(m.Data, 0, m.Data.length) : o.bytes === Array ? Array.prototype.slice.call(m.Data) : m.Data;\n }\n return d;\n };\n\n /**\n * Converts this PrivateKey to JSON.\n * @function toJSON\n * @memberof PrivateKey\n * @instance\n * @returns {Object.} JSON object\n */\n PrivateKey.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return PrivateKey;\n})();\n\nmodule.exports = $root;\n","/**\n * DES (Data Encryption Standard) implementation.\n *\n * This implementation supports DES as well as 3DES-EDE in ECB and CBC mode.\n * It is based on the BSD-licensed implementation by Paul Tero:\n *\n * Paul Tero, July 2001\n * http://www.tero.co.uk/des/\n *\n * Optimised for performance with large blocks by\n * Michael Hayworth, November 2001\n * http://www.netdealing.com\n *\n * THIS SOFTWARE IS PROVIDED \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl \n * Copyright (c) 2012-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./cipher');\nrequire('./cipherModes');\nrequire('./util');\n\n/* DES API */\nmodule.exports = forge.des = forge.des || {};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('DES-', key);\n * cipher.start({iv: iv});\n *\n * Creates an DES cipher object to encrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as binary-encoded strings of bytes or\n * byte buffers.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC' if IV is\n * given, 'ECB' if null).\n *\n * @return the cipher.\n */\nforge.des.startEncrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: false,\n mode: mode || (iv === null ? 'ECB' : 'CBC')\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('DES-', key);\n *\n * Creates an DES cipher object to encrypt data using the given symmetric key.\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.des.createEncryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: false,\n mode: mode\n });\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('DES-', key);\n * decipher.start({iv: iv});\n *\n * Creates an DES cipher object to decrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as binary-encoded strings of bytes or\n * byte buffers.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC' if IV is\n * given, 'ECB' if null).\n *\n * @return the cipher.\n */\nforge.des.startDecrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: true,\n mode: mode || (iv === null ? 'ECB' : 'CBC')\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('DES-', key);\n *\n * Creates an DES cipher object to decrypt data using the given symmetric key.\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.des.createDecryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: true,\n mode: mode\n });\n};\n\n/**\n * Creates a new DES cipher algorithm object.\n *\n * @param name the name of the algorithm.\n * @param mode the mode factory function.\n *\n * @return the DES algorithm object.\n */\nforge.des.Algorithm = function(name, mode) {\n var self = this;\n self.name = name;\n self.mode = new mode({\n blockSize: 8,\n cipher: {\n encrypt: function(inBlock, outBlock) {\n return _updateBlock(self._keys, inBlock, outBlock, false);\n },\n decrypt: function(inBlock, outBlock) {\n return _updateBlock(self._keys, inBlock, outBlock, true);\n }\n }\n });\n self._init = false;\n};\n\n/**\n * Initializes this DES algorithm by expanding its key.\n *\n * @param options the options to use.\n * key the key to use with this algorithm.\n * decrypt true if the algorithm should be initialized for decryption,\n * false for encryption.\n */\nforge.des.Algorithm.prototype.initialize = function(options) {\n if(this._init) {\n return;\n }\n\n var key = forge.util.createBuffer(options.key);\n if(this.name.indexOf('3DES') === 0) {\n if(key.length() !== 24) {\n throw new Error('Invalid Triple-DES key size: ' + key.length() * 8);\n }\n }\n\n // do key expansion to 16 or 48 subkeys (single or triple DES)\n this._keys = _createKeys(key);\n this._init = true;\n};\n\n/** Register DES algorithms **/\n\nregisterAlgorithm('DES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('DES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('DES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('DES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('DES-CTR', forge.cipher.modes.ctr);\n\nregisterAlgorithm('3DES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('3DES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('3DES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('3DES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('3DES-CTR', forge.cipher.modes.ctr);\n\nfunction registerAlgorithm(name, mode) {\n var factory = function() {\n return new forge.des.Algorithm(name, mode);\n };\n forge.cipher.registerAlgorithm(name, factory);\n}\n\n/** DES implementation **/\n\nvar spfunction1 = [0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004];\nvar spfunction2 = [-0x7fef7fe0,-0x7fff8000,0x8000,0x108020,0x100000,0x20,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,0x100000,0x20,-0x7fefffe0,0x108000,0x100020,-0x7fff7fe0,0,-0x80000000,0x8000,0x108020,-0x7ff00000,0x100020,-0x7fffffe0,0,0x108000,0x8020,-0x7fef8000,-0x7ff00000,0x8020,0,0x108020,-0x7fefffe0,0x100000,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,0x8000,-0x7ff00000,-0x7fff8000,0x20,-0x7fef7fe0,0x108020,0x20,0x8000,-0x80000000,0x8020,-0x7fef8000,0x100000,-0x7fffffe0,0x100020,-0x7fff7fe0,-0x7fffffe0,0x100020,0x108000,0,-0x7fff8000,0x8020,-0x80000000,-0x7fefffe0,-0x7fef7fe0,0x108000];\nvar spfunction3 = [0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200];\nvar spfunction4 = [0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080];\nvar spfunction5 = [0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100];\nvar spfunction6 = [0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010];\nvar spfunction7 = [0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002];\nvar spfunction8 = [0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000];\n\n/**\n * Create necessary sub keys.\n *\n * @param key the 64-bit or 192-bit key.\n *\n * @return the expanded keys.\n */\nfunction _createKeys(key) {\n var pc2bytes0 = [0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204],\n pc2bytes1 = [0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101],\n pc2bytes2 = [0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808],\n pc2bytes3 = [0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000],\n pc2bytes4 = [0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010],\n pc2bytes5 = [0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420],\n pc2bytes6 = [0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002],\n pc2bytes7 = [0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800],\n pc2bytes8 = [0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002],\n pc2bytes9 = [0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408],\n pc2bytes10 = [0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020],\n pc2bytes11 = [0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200],\n pc2bytes12 = [0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010],\n pc2bytes13 = [0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105];\n\n // how many iterations (1 for des, 3 for triple des)\n // changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys\n var iterations = key.length() > 8 ? 3 : 1;\n\n // stores the return keys\n var keys = [];\n\n // now define the left shifts which need to be done\n var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];\n\n var n = 0, tmp;\n for(var j = 0; j < iterations; j++) {\n var left = key.getInt32();\n var right = key.getInt32();\n\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n tmp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= tmp;\n right ^= (tmp << -16);\n\n tmp = ((left >>> 2) ^ right) & 0x33333333;\n right ^= tmp;\n left ^= (tmp << 2);\n\n tmp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= tmp;\n right ^= (tmp << -16);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n // right needs to be shifted and OR'd with last four bits of left\n tmp = (left << 8) | ((right >>> 20) & 0x000000f0);\n\n // left needs to be put upside down\n left = ((right << 24) | ((right << 8) & 0xff0000) |\n ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0));\n right = tmp;\n\n // now go through and perform these shifts on the left and right keys\n for(var i = 0; i < shifts.length; ++i) {\n //shift the keys either one or two bits to the left\n if(shifts[i]) {\n left = (left << 2) | (left >>> 26);\n right = (right << 2) | (right >>> 26);\n } else {\n left = (left << 1) | (left >>> 27);\n right = (right << 1) | (right >>> 27);\n }\n left &= -0xf;\n right &= -0xf;\n\n // now apply PC-2, in such a way that E is easier when encrypting or\n // decrypting this conversion will look like PC-2 except only the last 6\n // bits of each byte are used rather than 48 consecutive bits and the\n // order of lines will be according to how the S selection functions will\n // be applied: S2, S4, S6, S8, S1, S3, S5, S7\n var lefttmp = (\n pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] |\n pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf] |\n pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] |\n pc2bytes6[(left >>> 4) & 0xf]);\n var righttmp = (\n pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] |\n pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf] |\n pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] |\n pc2bytes13[(right >>> 4) & 0xf]);\n tmp = ((righttmp >>> 16) ^ lefttmp) & 0x0000ffff;\n keys[n++] = lefttmp ^ tmp;\n keys[n++] = righttmp ^ (tmp << 16);\n }\n }\n\n return keys;\n}\n\n/**\n * Updates a single block (1 byte) using DES. The update will either\n * encrypt or decrypt the block.\n *\n * @param keys the expanded keys.\n * @param input the input block (an array of 32-bit words).\n * @param output the updated output block.\n * @param decrypt true to decrypt the block, false to encrypt it.\n */\nfunction _updateBlock(keys, input, output, decrypt) {\n // set up loops for single or triple DES\n var iterations = keys.length === 32 ? 3 : 9;\n var looping;\n if(iterations === 3) {\n looping = decrypt ? [30, -2, -2] : [0, 32, 2];\n } else {\n looping = (decrypt ?\n [94, 62, -2, 32, 64, 2, 30, -2, -2] :\n [0, 32, 2, 62, 30, -2, 64, 96, 2]);\n }\n\n var tmp;\n\n var left = input[0];\n var right = input[1];\n\n // first each 64 bit chunk of the message must be permuted according to IP\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n tmp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= tmp;\n left ^= (tmp << 16);\n\n tmp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= tmp;\n right ^= (tmp << 2);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n // rotate left 1 bit\n left = ((left << 1) | (left >>> 31));\n right = ((right << 1) | (right >>> 31));\n\n for(var j = 0; j < iterations; j += 3) {\n var endloop = looping[j + 1];\n var loopinc = looping[j + 2];\n\n // now go through and perform the encryption or decryption\n for(var i = looping[j]; i != endloop; i += loopinc) {\n var right1 = right ^ keys[i];\n var right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];\n\n // passing these bytes through the S selection functions\n tmp = left;\n left = right;\n right = tmp ^ (\n spfunction2[(right1 >>> 24) & 0x3f] |\n spfunction4[(right1 >>> 16) & 0x3f] |\n spfunction6[(right1 >>> 8) & 0x3f] |\n spfunction8[right1 & 0x3f] |\n spfunction1[(right2 >>> 24) & 0x3f] |\n spfunction3[(right2 >>> 16) & 0x3f] |\n spfunction5[(right2 >>> 8) & 0x3f] |\n spfunction7[right2 & 0x3f]);\n }\n // unreverse left and right\n tmp = left;\n left = right;\n right = tmp;\n }\n\n // rotate right 1 bit\n left = ((left >>> 1) | (left << 31));\n right = ((right >>> 1) | (right << 31));\n\n // now perform IP-1, which is IP in the opposite direction\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= tmp;\n right ^= (tmp << 2);\n\n tmp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= tmp;\n left ^= (tmp << 16);\n\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n output[0] = left;\n output[1] = right;\n}\n\n/**\n * Deprecated. Instead, use:\n *\n * forge.cipher.createCipher('DES-', key);\n * forge.cipher.createDecipher('DES-', key);\n *\n * Creates a deprecated DES cipher object. This object's mode will default to\n * CBC (cipher-block-chaining).\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param options the options to use.\n * key the symmetric key to use (64 or 192 bits).\n * output the buffer to write to.\n * decrypt true for decryption, false for encryption.\n * mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nfunction _createCipher(options) {\n options = options || {};\n var mode = (options.mode || 'CBC').toUpperCase();\n var algorithm = 'DES-' + mode;\n\n var cipher;\n if(options.decrypt) {\n cipher = forge.cipher.createDecipher(algorithm, options.key);\n } else {\n cipher = forge.cipher.createCipher(algorithm, options.key);\n }\n\n // backwards compatible start API\n var start = cipher.start;\n cipher.start = function(iv, options) {\n // backwards compatibility: support second arg as output buffer\n var output = null;\n if(options instanceof forge.util.ByteBuffer) {\n output = options;\n options = {};\n }\n options = options || {};\n options.output = output;\n options.iv = iv;\n start.call(cipher, options);\n };\n\n return cipher;\n}\n","/**\n * Javascript implementation of basic PEM (Privacy Enhanced Mail) algorithms.\n *\n * See: RFC 1421.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2013-2014 Digital Bazaar, Inc.\n *\n * A Forge PEM object has the following fields:\n *\n * type: identifies the type of message (eg: \"RSA PRIVATE KEY\").\n *\n * procType: identifies the type of processing performed on the message,\n * it has two subfields: version and type, eg: 4,ENCRYPTED.\n *\n * contentDomain: identifies the type of content in the message, typically\n * only uses the value: \"RFC822\".\n *\n * dekInfo: identifies the message encryption algorithm and mode and includes\n * any parameters for the algorithm, it has two subfields: algorithm and\n * parameters, eg: DES-CBC,F8143EDE5960C597.\n *\n * headers: contains all other PEM encapsulated headers -- where order is\n * significant (for pairing data like recipient ID + key info).\n *\n * body: the binary-encoded body.\n */\nvar forge = require('./forge');\nrequire('./util');\n\n// shortcut for pem API\nvar pem = module.exports = forge.pem = forge.pem || {};\n\n/**\n * Encodes (serializes) the given PEM object.\n *\n * @param msg the PEM message object to encode.\n * @param options the options to use:\n * maxline the maximum characters per line for the body, (default: 64).\n *\n * @return the PEM-formatted string.\n */\npem.encode = function(msg, options) {\n options = options || {};\n var rval = '-----BEGIN ' + msg.type + '-----\\r\\n';\n\n // encode special headers\n var header;\n if(msg.procType) {\n header = {\n name: 'Proc-Type',\n values: [String(msg.procType.version), msg.procType.type]\n };\n rval += foldHeader(header);\n }\n if(msg.contentDomain) {\n header = {name: 'Content-Domain', values: [msg.contentDomain]};\n rval += foldHeader(header);\n }\n if(msg.dekInfo) {\n header = {name: 'DEK-Info', values: [msg.dekInfo.algorithm]};\n if(msg.dekInfo.parameters) {\n header.values.push(msg.dekInfo.parameters);\n }\n rval += foldHeader(header);\n }\n\n if(msg.headers) {\n // encode all other headers\n for(var i = 0; i < msg.headers.length; ++i) {\n rval += foldHeader(msg.headers[i]);\n }\n }\n\n // terminate header\n if(msg.procType) {\n rval += '\\r\\n';\n }\n\n // add body\n rval += forge.util.encode64(msg.body, options.maxline || 64) + '\\r\\n';\n\n rval += '-----END ' + msg.type + '-----\\r\\n';\n return rval;\n};\n\n/**\n * Decodes (deserializes) all PEM messages found in the given string.\n *\n * @param str the PEM-formatted string to decode.\n *\n * @return the PEM message objects in an array.\n */\npem.decode = function(str) {\n var rval = [];\n\n // split string into PEM messages (be lenient w/EOF on BEGIN line)\n var rMessage = /\\s*-----BEGIN ([A-Z0-9- ]+)-----\\r?\\n?([\\x21-\\x7e\\s]+?(?:\\r?\\n\\r?\\n))?([:A-Za-z0-9+\\/=\\s]+?)-----END \\1-----/g;\n var rHeader = /([\\x21-\\x7e]+):\\s*([\\x21-\\x7e\\s^:]+)/;\n var rCRLF = /\\r?\\n/;\n var match;\n while(true) {\n match = rMessage.exec(str);\n if(!match) {\n break;\n }\n\n var msg = {\n type: match[1],\n procType: null,\n contentDomain: null,\n dekInfo: null,\n headers: [],\n body: forge.util.decode64(match[3])\n };\n rval.push(msg);\n\n // no headers\n if(!match[2]) {\n continue;\n }\n\n // parse headers\n var lines = match[2].split(rCRLF);\n var li = 0;\n while(match && li < lines.length) {\n // get line, trim any rhs whitespace\n var line = lines[li].replace(/\\s+$/, '');\n\n // RFC2822 unfold any following folded lines\n for(var nl = li + 1; nl < lines.length; ++nl) {\n var next = lines[nl];\n if(!/\\s/.test(next[0])) {\n break;\n }\n line += next;\n li = nl;\n }\n\n // parse header\n match = line.match(rHeader);\n if(match) {\n var header = {name: match[1], values: []};\n var values = match[2].split(',');\n for(var vi = 0; vi < values.length; ++vi) {\n header.values.push(ltrim(values[vi]));\n }\n\n // Proc-Type must be the first header\n if(!msg.procType) {\n if(header.name !== 'Proc-Type') {\n throw new Error('Invalid PEM formatted message. The first ' +\n 'encapsulated header must be \"Proc-Type\".');\n } else if(header.values.length !== 2) {\n throw new Error('Invalid PEM formatted message. The \"Proc-Type\" ' +\n 'header must have two subfields.');\n }\n msg.procType = {version: values[0], type: values[1]};\n } else if(!msg.contentDomain && header.name === 'Content-Domain') {\n // special-case Content-Domain\n msg.contentDomain = values[0] || '';\n } else if(!msg.dekInfo && header.name === 'DEK-Info') {\n // special-case DEK-Info\n if(header.values.length === 0) {\n throw new Error('Invalid PEM formatted message. The \"DEK-Info\" ' +\n 'header must have at least one subfield.');\n }\n msg.dekInfo = {algorithm: values[0], parameters: values[1] || null};\n } else {\n msg.headers.push(header);\n }\n }\n\n ++li;\n }\n\n if(msg.procType === 'ENCRYPTED' && !msg.dekInfo) {\n throw new Error('Invalid PEM formatted message. The \"DEK-Info\" ' +\n 'header must be present if \"Proc-Type\" is \"ENCRYPTED\".');\n }\n }\n\n if(rval.length === 0) {\n throw new Error('Invalid PEM formatted message.');\n }\n\n return rval;\n};\n\nfunction foldHeader(header) {\n var rval = header.name + ': ';\n\n // ensure values with CRLF are folded\n var values = [];\n var insertSpace = function(match, $1) {\n return ' ' + $1;\n };\n for(var i = 0; i < header.values.length; ++i) {\n values.push(header.values[i].replace(/^(\\S+\\r\\n)/, insertSpace));\n }\n rval += values.join(',') + '\\r\\n';\n\n // do folding\n var length = 0;\n var candidate = -1;\n for(var i = 0; i < rval.length; ++i, ++length) {\n if(length > 65 && candidate !== -1) {\n var insert = rval[candidate];\n if(insert === ',') {\n ++candidate;\n rval = rval.substr(0, candidate) + '\\r\\n ' + rval.substr(candidate);\n } else {\n rval = rval.substr(0, candidate) +\n '\\r\\n' + insert + rval.substr(candidate + 1);\n }\n length = (i - candidate - 1);\n candidate = -1;\n ++i;\n } else if(rval[i] === ' ' || rval[i] === '\\t' || rval[i] === ',') {\n candidate = i;\n }\n }\n\n return rval;\n}\n\nfunction ltrim(str) {\n return str.replace(/^\\s+/, '');\n}\n","// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n/*\nLicensing (LICENSE)\n-------------------\n\nThis software is covered under the following copyright:\n*/\n/*\n * Copyright (c) 2003-2005 Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n/*\nAddress all questions regarding this license to:\n\n Tom Wu\n tjw@cs.Stanford.EDU\n*/\nvar forge = require('./forge');\n\nmodule.exports = forge.jsbn = forge.jsbn || {};\n\n// Bits per digit\nvar dbits;\n\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary&0xffffff)==0xefcafe);\n\n// (public) Constructor\nfunction BigInteger(a,b,c) {\n this.data = [];\n if(a != null)\n if(\"number\" == typeof a) this.fromNumber(a,b,c);\n else if(b == null && \"string\" != typeof a) this.fromString(a,256);\n else this.fromString(a,b);\n}\nforge.jsbn.BigInteger = BigInteger;\n\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\n\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\nfunction am1(i,x,w,j,c,n) {\n while(--n >= 0) {\n var v = x*this.data[i++]+w.data[j]+c;\n c = Math.floor(v/0x4000000);\n w.data[j++] = v&0x3ffffff;\n }\n return c;\n}\n// am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\nfunction am2(i,x,w,j,c,n) {\n var xl = x&0x7fff, xh = x>>15;\n while(--n >= 0) {\n var l = this.data[i]&0x7fff;\n var h = this.data[i++]>>15;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x7fff)<<15)+w.data[j]+(c&0x3fffffff);\n c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n w.data[j++] = l&0x3fffffff;\n }\n return c;\n}\n// Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\nfunction am3(i,x,w,j,c,n) {\n var xl = x&0x3fff, xh = x>>14;\n while(--n >= 0) {\n var l = this.data[i]&0x3fff;\n var h = this.data[i++]>>14;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x3fff)<<14)+w.data[j]+c;\n c = (l>>28)+(m>>14)+xh*h;\n w.data[j++] = l&0xfffffff;\n }\n return c;\n}\n\n// node.js (no browser)\nif(typeof(navigator) === 'undefined')\n{\n BigInteger.prototype.am = am3;\n dbits = 28;\n} else if(j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else if(j_lm && (navigator.appName != \"Netscape\")) {\n BigInteger.prototype.am = am1;\n dbits = 26;\n} else { // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1<= 0; --i) r.data[i] = this.data[i];\n r.t = this.t;\n r.s = this.s;\n}\n\n// (protected) set from integer value x, -DV <= x < DV\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = (x<0)?-1:0;\n if(x > 0) this.data[0] = x;\n else if(x < -1) this.data[0] = x+this.DV;\n else this.t = 0;\n}\n\n// return bigint initialized to value\nfunction nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n// (protected) set from string and radix\nfunction bnpFromString(s,b) {\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 256) k = 8; // byte array\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else { this.fromRadix(s,b); return; }\n this.t = 0;\n this.s = 0;\n var i = s.length, mi = false, sh = 0;\n while(--i >= 0) {\n var x = (k==8)?s[i]&0xff:intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\") mi = true;\n continue;\n }\n mi = false;\n if(sh == 0)\n this.data[this.t++] = x;\n else if(sh+k > this.DB) {\n this.data[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh));\n } else\n this.data[this.t-1] |= x<= this.DB) sh -= this.DB;\n }\n if(k == 8 && (s[0]&0x80) != 0) {\n this.s = -1;\n if(sh > 0) this.data[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this.data[this.t-1] == c) --this.t;\n}\n\n// (public) return string representation in given radix\nfunction bnToString(b) {\n if(this.s < 0) return \"-\"+this.negate().toString(b);\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else return this.toRadix(b);\n var km = (1< 0) {\n if(p < this.DB && (d = this.data[i]>>p) > 0) { m = true; r = int2char(d); }\n while(i >= 0) {\n if(p < k) {\n d = (this.data[i]&((1<>(p+=this.DB-k);\n } else {\n d = (this.data[i]>>(p-=k))&km;\n if(p <= 0) { p += this.DB; --i; }\n }\n if(d > 0) m = true;\n if(m) r += int2char(d);\n }\n }\n return m?r:\"0\";\n}\n\n// (public) -this\nfunction bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n// (public) |this|\nfunction bnAbs() { return (this.s<0)?this.negate():this; }\n\n// (public) return + if this > a, - if this < a, 0 if equal\nfunction bnCompareTo(a) {\n var r = this.s-a.s;\n if(r != 0) return r;\n var i = this.t;\n r = i-a.t;\n if(r != 0) return (this.s<0)?-r:r;\n while(--i >= 0) if((r=this.data[i]-a.data[i]) != 0) return r;\n return 0;\n}\n\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1, t;\n if((t=x>>>16) != 0) { x = t; r += 16; }\n if((t=x>>8) != 0) { x = t; r += 8; }\n if((t=x>>4) != 0) { x = t; r += 4; }\n if((t=x>>2) != 0) { x = t; r += 2; }\n if((t=x>>1) != 0) { x = t; r += 1; }\n return r;\n}\n\n// (public) return the number of bits in \"this\"\nfunction bnBitLength() {\n if(this.t <= 0) return 0;\n return this.DB*(this.t-1)+nbits(this.data[this.t-1]^(this.s&this.DM));\n}\n\n// (protected) r = this << n*DB\nfunction bnpDLShiftTo(n,r) {\n var i;\n for(i = this.t-1; i >= 0; --i) r.data[i+n] = this.data[i];\n for(i = n-1; i >= 0; --i) r.data[i] = 0;\n r.t = this.t+n;\n r.s = this.s;\n}\n\n// (protected) r = this >> n*DB\nfunction bnpDRShiftTo(n,r) {\n for(var i = n; i < this.t; ++i) r.data[i-n] = this.data[i];\n r.t = Math.max(this.t-n,0);\n r.s = this.s;\n}\n\n// (protected) r = this << n\nfunction bnpLShiftTo(n,r) {\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<= 0; --i) {\n r.data[i+ds+1] = (this.data[i]>>cbs)|c;\n c = (this.data[i]&bm)<= 0; --i) r.data[i] = 0;\n r.data[ds] = c;\n r.t = this.t+ds+1;\n r.s = this.s;\n r.clamp();\n}\n\n// (protected) r = this >> n\nfunction bnpRShiftTo(n,r) {\n r.s = this.s;\n var ds = Math.floor(n/this.DB);\n if(ds >= this.t) { r.t = 0; return; }\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r.data[i-ds-1] |= (this.data[i]&bm)<>bs;\n }\n if(bs > 0) r.data[this.t-ds-1] |= (this.s&bm)<>= this.DB;\n }\n if(a.t < this.t) {\n c -= a.s;\n while(i < this.t) {\n c += this.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n } else {\n c += this.s;\n while(i < a.t) {\n c -= a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c<0)?-1:0;\n if(c < -1) r.data[i++] = this.DV+c;\n else if(c > 0) r.data[i++] = c;\n r.t = i;\n r.clamp();\n}\n\n// (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyTo(a,r) {\n var x = this.abs(), y = a.abs();\n var i = x.t;\n r.t = i+y.t;\n while(--i >= 0) r.data[i] = 0;\n for(i = 0; i < y.t; ++i) r.data[i+x.t] = x.am(0,y.data[i],r,i,0,x.t);\n r.s = 0;\n r.clamp();\n if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n}\n\n// (protected) r = this^2, r != this (HAC 14.16)\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2*x.t;\n while(--i >= 0) r.data[i] = 0;\n for(i = 0; i < x.t-1; ++i) {\n var c = x.am(i,x.data[i],r,2*i,0,1);\n if((r.data[i+x.t]+=x.am(i+1,2*x.data[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n r.data[i+x.t] -= x.DV;\n r.data[i+x.t+1] = 1;\n }\n }\n if(r.t > 0) r.data[r.t-1] += x.am(i,x.data[i],r,2*i,0,1);\n r.s = 0;\n r.clamp();\n}\n\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\nfunction bnpDivRemTo(m,q,r) {\n var pm = m.abs();\n if(pm.t <= 0) return;\n var pt = this.abs();\n if(pt.t < pm.t) {\n if(q != null) q.fromInt(0);\n if(r != null) this.copyTo(r);\n return;\n }\n if(r == null) r = nbi();\n var y = nbi(), ts = this.s, ms = m.s;\n var nsh = this.DB-nbits(pm.data[pm.t-1]);\t// normalize modulus\n if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } else { pm.copyTo(y); pt.copyTo(r); }\n var ys = y.t;\n var y0 = y.data[ys-1];\n if(y0 == 0) return;\n var yt = y0*(1<1)?y.data[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<= 0) {\n r.data[r.t++] = 1;\n r.subTo(t,r);\n }\n BigInteger.ONE.dlShiftTo(ys,t);\n t.subTo(y,y);\t// \"negative\" y so we can replace sub with am later\n while(y.t < ys) y.data[y.t++] = 0;\n while(--j >= 0) {\n // Estimate quotient digit\n var qd = (r.data[--i]==y0)?this.DM:Math.floor(r.data[i]*d1+(r.data[i-1]+e)*d2);\n if((r.data[i]+=y.am(0,qd,r,j,0,ys)) < qd) {\t// Try it out\n y.dlShiftTo(j,t);\n r.subTo(t,r);\n while(r.data[i] < --qd) r.subTo(t,r);\n }\n }\n if(q != null) {\n r.drShiftTo(ys,q);\n if(ts != ms) BigInteger.ZERO.subTo(q,q);\n }\n r.t = ys;\n r.clamp();\n if(nsh > 0) r.rShiftTo(nsh,r);\t// Denormalize remainder\n if(ts < 0) BigInteger.ZERO.subTo(r,r);\n}\n\n// (public) this mod a\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a,null,r);\n if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n return r;\n}\n\n// Modular reduction using \"classic\" algorithm\nfunction Classic(m) { this.m = m; }\nfunction cConvert(x) {\n if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n}\nfunction cRevert(x) { return x; }\nfunction cReduce(x) { x.divRemTo(this.m,null,x); }\nfunction cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\nfunction cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\nClassic.prototype.convert = cConvert;\nClassic.prototype.revert = cRevert;\nClassic.prototype.reduce = cReduce;\nClassic.prototype.mulTo = cMulTo;\nClassic.prototype.sqrTo = cSqrTo;\n\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\nfunction bnpInvDigit() {\n if(this.t < 1) return 0;\n var x = this.data[0];\n if((x&1) == 0) return 0;\n var y = x&3;\t\t// y == 1/x mod 2^2\n y = (y*(2-(x&0xf)*y))&0xf;\t// y == 1/x mod 2^4\n y = (y*(2-(x&0xff)*y))&0xff;\t// y == 1/x mod 2^8\n y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;\t// y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y*(2-x*y%this.DV))%this.DV;\t\t// y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y>0)?this.DV-y:-y;\n}\n\n// Montgomery reduction\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp&0x7fff;\n this.mph = this.mp>>15;\n this.um = (1<<(m.DB-15))-1;\n this.mt2 = 2*m.t;\n}\n\n// xR mod m\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t,r);\n r.divRemTo(this.m,null,r);\n if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n return r;\n}\n\n// x/R mod m\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n}\n\n// x = x/R mod m (HAC 14.32)\nfunction montReduce(x) {\n while(x.t <= this.mt2)\t// pad x so am has enough room later\n x.data[x.t++] = 0;\n for(var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x.data[i]*mp mod DV\n var j = x.data[i]&0x7fff;\n var u0 = (j*this.mpl+(((j*this.mph+(x.data[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i+this.m.t;\n x.data[j] += this.m.am(0,u0,x,i,0,this.m.t);\n // propagate carry\n while(x.data[j] >= x.DV) { x.data[j] -= x.DV; x.data[++j]++; }\n }\n x.clamp();\n x.drShiftTo(this.m.t,x);\n if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n// r = \"x^2/R mod m\"; x != r\nfunction montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n// r = \"xy/R mod m\"; x,y != r\nfunction montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\n\n// (protected) true iff this is even\nfunction bnpIsEven() { return ((this.t>0)?(this.data[0]&1):this.s) == 0; }\n\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\nfunction bnpExp(e,z) {\n if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n g.copyTo(r);\n while(--i >= 0) {\n z.sqrTo(r,r2);\n if((e&(1< 0) z.mulTo(r2,g,r);\n else { var t = r; r = r2; r2 = t; }\n }\n return z.revert(r);\n}\n\n// (public) this^e % m, 0 <= e < 2^32\nfunction bnModPowInt(e,m) {\n var z;\n if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n return this.exp(e,z);\n}\n\n// protected\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.isEven = bnpIsEven;\nBigInteger.prototype.exp = bnpExp;\n\n// public\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.modPowInt = bnModPowInt;\n\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n// jsbn2 lib\n\n//Copyright (c) 2005-2009 Tom Wu\n//All Rights Reserved.\n//See \"LICENSE\" for details (See jsbn.js for LICENSE).\n\n//Extended JavaScript BN functions, required for RSA private ops.\n\n//Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n\n//(public)\nfunction bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n//(public) return value as integer\nfunction bnIntValue() {\nif(this.s < 0) {\n if(this.t == 1) return this.data[0]-this.DV;\n else if(this.t == 0) return -1;\n} else if(this.t == 1) return this.data[0];\nelse if(this.t == 0) return 0;\n// assumes 16 < DB < 32\nreturn ((this.data[1]&((1<<(32-this.DB))-1))<>24; }\n\n//(public) return value as short (assumes DB>=16)\nfunction bnShortValue() { return (this.t==0)?this.s:(this.data[0]<<16)>>16; }\n\n//(protected) return x s.t. r^x < DV\nfunction bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n//(public) 0 if this == 0, 1 if this > 0\nfunction bnSigNum() {\nif(this.s < 0) return -1;\nelse if(this.t <= 0 || (this.t == 1 && this.data[0] <= 0)) return 0;\nelse return 1;\n}\n\n//(protected) convert to radix string\nfunction bnpToRadix(b) {\nif(b == null) b = 10;\nif(this.signum() == 0 || b < 2 || b > 36) return \"0\";\nvar cs = this.chunkSize(b);\nvar a = Math.pow(b,cs);\nvar d = nbv(a), y = nbi(), z = nbi(), r = \"\";\nthis.divRemTo(d,y,z);\nwhile(y.signum() > 0) {\n r = (a+z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d,y,z);\n}\nreturn z.intValue().toString(b) + r;\n}\n\n//(protected) convert from radix string\nfunction bnpFromRadix(s,b) {\nthis.fromInt(0);\nif(b == null) b = 10;\nvar cs = this.chunkSize(b);\nvar d = Math.pow(b,cs), mi = false, j = 0, w = 0;\nfor(var i = 0; i < s.length; ++i) {\n var x = intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n continue;\n }\n w = b*w+x;\n if(++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w,0);\n j = 0;\n w = 0;\n }\n}\nif(j > 0) {\n this.dMultiply(Math.pow(b,j));\n this.dAddOffset(w,0);\n}\nif(mi) BigInteger.ZERO.subTo(this,this);\n}\n\n//(protected) alternate constructor\nfunction bnpFromNumber(a,b,c) {\nif(\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if(a < 2) this.fromInt(1);\n else {\n this.fromNumber(a,c);\n if(!this.testBit(a-1)) // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n if(this.isEven()) this.dAddOffset(1,0); // force odd\n while(!this.isProbablePrime(b)) {\n this.dAddOffset(2,0);\n if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n }\n }\n} else {\n // new BigInteger(int,RNG)\n var x = new Array(), t = a&7;\n x.length = (a>>3)+1;\n b.nextBytes(x);\n if(t > 0) x[0] &= ((1< 0) {\n if(p < this.DB && (d = this.data[i]>>p) != (this.s&this.DM)>>p)\n r[k++] = d|(this.s<<(this.DB-p));\n while(i >= 0) {\n if(p < 8) {\n d = (this.data[i]&((1<>(p+=this.DB-8);\n } else {\n d = (this.data[i]>>(p-=8))&0xff;\n if(p <= 0) { p += this.DB; --i; }\n }\n if((d&0x80) != 0) d |= -256;\n if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n if(k > 0 || d != this.s) r[k++] = d;\n }\n}\nreturn r;\n}\n\nfunction bnEquals(a) { return(this.compareTo(a)==0); }\nfunction bnMin(a) { return(this.compareTo(a)<0)?this:a; }\nfunction bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n//(protected) r = this op a (bitwise)\nfunction bnpBitwiseTo(a,op,r) {\nvar i, f, m = Math.min(a.t,this.t);\nfor(i = 0; i < m; ++i) r.data[i] = op(this.data[i],a.data[i]);\nif(a.t < this.t) {\n f = a.s&this.DM;\n for(i = m; i < this.t; ++i) r.data[i] = op(this.data[i],f);\n r.t = this.t;\n} else {\n f = this.s&this.DM;\n for(i = m; i < a.t; ++i) r.data[i] = op(f,a.data[i]);\n r.t = a.t;\n}\nr.s = op(this.s,a.s);\nr.clamp();\n}\n\n//(public) this & a\nfunction op_and(x,y) { return x&y; }\nfunction bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n//(public) this | a\nfunction op_or(x,y) { return x|y; }\nfunction bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n//(public) this ^ a\nfunction op_xor(x,y) { return x^y; }\nfunction bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n//(public) this & ~a\nfunction op_andnot(x,y) { return x&~y; }\nfunction bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n//(public) ~this\nfunction bnNot() {\nvar r = nbi();\nfor(var i = 0; i < this.t; ++i) r.data[i] = this.DM&~this.data[i];\nr.t = this.t;\nr.s = ~this.s;\nreturn r;\n}\n\n//(public) this << n\nfunction bnShiftLeft(n) {\nvar r = nbi();\nif(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\nreturn r;\n}\n\n//(public) this >> n\nfunction bnShiftRight(n) {\nvar r = nbi();\nif(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\nreturn r;\n}\n\n//return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\nif(x == 0) return -1;\nvar r = 0;\nif((x&0xffff) == 0) { x >>= 16; r += 16; }\nif((x&0xff) == 0) { x >>= 8; r += 8; }\nif((x&0xf) == 0) { x >>= 4; r += 4; }\nif((x&3) == 0) { x >>= 2; r += 2; }\nif((x&1) == 0) ++r;\nreturn r;\n}\n\n//(public) returns index of lowest 1-bit (or -1 if none)\nfunction bnGetLowestSetBit() {\nfor(var i = 0; i < this.t; ++i)\n if(this.data[i] != 0) return i*this.DB+lbit(this.data[i]);\nif(this.s < 0) return this.t*this.DB;\nreturn -1;\n}\n\n//return number of 1 bits in x\nfunction cbit(x) {\nvar r = 0;\nwhile(x != 0) { x &= x-1; ++r; }\nreturn r;\n}\n\n//(public) return number of set bits\nfunction bnBitCount() {\nvar r = 0, x = this.s&this.DM;\nfor(var i = 0; i < this.t; ++i) r += cbit(this.data[i]^x);\nreturn r;\n}\n\n//(public) true iff nth bit is set\nfunction bnTestBit(n) {\nvar j = Math.floor(n/this.DB);\nif(j >= this.t) return(this.s!=0);\nreturn((this.data[j]&(1<<(n%this.DB)))!=0);\n}\n\n//(protected) this op (1<>= this.DB;\n}\nif(a.t < this.t) {\n c += a.s;\n while(i < this.t) {\n c += this.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n} else {\n c += this.s;\n while(i < a.t) {\n c += a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += a.s;\n}\nr.s = (c<0)?-1:0;\nif(c > 0) r.data[i++] = c;\nelse if(c < -1) r.data[i++] = this.DV+c;\nr.t = i;\nr.clamp();\n}\n\n//(public) this + a\nfunction bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n//(public) this - a\nfunction bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n//(public) this * a\nfunction bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n//(public) this / a\nfunction bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n//(public) this % a\nfunction bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n//(public) [this/a,this%a]\nfunction bnDivideAndRemainder(a) {\nvar q = nbi(), r = nbi();\nthis.divRemTo(a,q,r);\nreturn new Array(q,r);\n}\n\n//(protected) this *= n, this >= 0, 1 < n < DV\nfunction bnpDMultiply(n) {\nthis.data[this.t] = this.am(0,n-1,this,0,0,this.t);\n++this.t;\nthis.clamp();\n}\n\n//(protected) this += n << w words, this >= 0\nfunction bnpDAddOffset(n,w) {\nif(n == 0) return;\nwhile(this.t <= w) this.data[this.t++] = 0;\nthis.data[w] += n;\nwhile(this.data[w] >= this.DV) {\n this.data[w] -= this.DV;\n if(++w >= this.t) this.data[this.t++] = 0;\n ++this.data[w];\n}\n}\n\n//A \"null\" reducer\nfunction NullExp() {}\nfunction nNop(x) { return x; }\nfunction nMulTo(x,y,r) { x.multiplyTo(y,r); }\nfunction nSqrTo(x,r) { x.squareTo(r); }\n\nNullExp.prototype.convert = nNop;\nNullExp.prototype.revert = nNop;\nNullExp.prototype.mulTo = nMulTo;\nNullExp.prototype.sqrTo = nSqrTo;\n\n//(public) this^e\nfunction bnPow(e) { return this.exp(e,new NullExp()); }\n\n//(protected) r = lower n words of \"this * a\", a.t <= n\n//\"this\" should be the larger one if appropriate.\nfunction bnpMultiplyLowerTo(a,n,r) {\nvar i = Math.min(this.t+a.t,n);\nr.s = 0; // assumes a,this >= 0\nr.t = i;\nwhile(i > 0) r.data[--i] = 0;\nvar j;\nfor(j = r.t-this.t; i < j; ++i) r.data[i+this.t] = this.am(0,a.data[i],r,i,0,this.t);\nfor(j = Math.min(a.t,n); i < j; ++i) this.am(0,a.data[i],r,i,0,n-i);\nr.clamp();\n}\n\n//(protected) r = \"this * a\" without lower n words, n > 0\n//\"this\" should be the larger one if appropriate.\nfunction bnpMultiplyUpperTo(a,n,r) {\n--n;\nvar i = r.t = this.t+a.t-n;\nr.s = 0; // assumes a,this >= 0\nwhile(--i >= 0) r.data[i] = 0;\nfor(i = Math.max(n-this.t,0); i < a.t; ++i)\n r.data[this.t+i-n] = this.am(n-i,a.data[i],r,0,0,this.t+i-n);\nr.clamp();\nr.drShiftTo(1,r);\n}\n\n//Barrett modular reduction\nfunction Barrett(m) {\n// setup Barrett\nthis.r2 = nbi();\nthis.q3 = nbi();\nBigInteger.ONE.dlShiftTo(2*m.t,this.r2);\nthis.mu = this.r2.divide(m);\nthis.m = m;\n}\n\nfunction barrettConvert(x) {\nif(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\nelse if(x.compareTo(this.m) < 0) return x;\nelse { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n}\n\nfunction barrettRevert(x) { return x; }\n\n//x = x mod m (HAC 14.42)\nfunction barrettReduce(x) {\nx.drShiftTo(this.m.t-1,this.r2);\nif(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\nthis.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\nthis.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\nwhile(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\nx.subTo(this.r2,x);\nwhile(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n//r = x^2 mod m; x != r\nfunction barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n//r = x*y mod m; x,y != r\nfunction barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\n\n//(public) this^e % m (HAC 14.85)\nfunction bnModPow(e,m) {\nvar i = e.bitLength(), k, r = nbv(1), z;\nif(i <= 0) return r;\nelse if(i < 18) k = 1;\nelse if(i < 48) k = 3;\nelse if(i < 144) k = 4;\nelse if(i < 768) k = 5;\nelse k = 6;\nif(i < 8)\n z = new Classic(m);\nelse if(m.isEven())\n z = new Barrett(m);\nelse\n z = new Montgomery(m);\n\n// precomputation\nvar g = new Array(), n = 3, k1 = k-1, km = (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1],g2);\n while(n <= km) {\n g[n] = nbi();\n z.mulTo(g2,g[n-2],g[n]);\n n += 2;\n }\n}\n\nvar j = e.t-1, w, is1 = true, r2 = nbi(), t;\ni = nbits(e.data[j])-1;\nwhile(j >= 0) {\n if(i >= k1) w = (e.data[j]>>(i-k1))&km;\n else {\n w = (e.data[j]&((1<<(i+1))-1))<<(k1-i);\n if(j > 0) w |= e.data[j-1]>>(this.DB+i-k1);\n }\n\n n = k;\n while((w&1) == 0) { w >>= 1; --n; }\n if((i -= n) < 0) { i += this.DB; --j; }\n if(is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n } else {\n while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n z.mulTo(r2,g[w],r);\n }\n\n while(j >= 0 && (e.data[j]&(1< 0) {\n x.rShiftTo(g,x);\n y.rShiftTo(g,y);\n}\nwhile(x.signum() > 0) {\n if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n if(x.compareTo(y) >= 0) {\n x.subTo(y,x);\n x.rShiftTo(1,x);\n } else {\n y.subTo(x,y);\n y.rShiftTo(1,y);\n }\n}\nif(g > 0) y.lShiftTo(g,y);\nreturn y;\n}\n\n//(protected) this % n, n < 2^26\nfunction bnpModInt(n) {\nif(n <= 0) return 0;\nvar d = this.DV%n, r = (this.s<0)?n-1:0;\nif(this.t > 0)\n if(d == 0) r = this.data[0]%n;\n else for(var i = this.t-1; i >= 0; --i) r = (d*r+this.data[i])%n;\nreturn r;\n}\n\n//(public) 1/this % m (HAC 14.61)\nfunction bnModInverse(m) {\nvar ac = m.isEven();\nif((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\nvar u = m.clone(), v = this.clone();\nvar a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\nwhile(u.signum() != 0) {\n while(u.isEven()) {\n u.rShiftTo(1,u);\n if(ac) {\n if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n a.rShiftTo(1,a);\n } else if(!b.isEven()) b.subTo(m,b);\n b.rShiftTo(1,b);\n }\n while(v.isEven()) {\n v.rShiftTo(1,v);\n if(ac) {\n if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n c.rShiftTo(1,c);\n } else if(!d.isEven()) d.subTo(m,d);\n d.rShiftTo(1,d);\n }\n if(u.compareTo(v) >= 0) {\n u.subTo(v,u);\n if(ac) a.subTo(c,a);\n b.subTo(d,b);\n } else {\n v.subTo(u,v);\n if(ac) c.subTo(a,c);\n d.subTo(b,d);\n }\n}\nif(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\nif(d.compareTo(m) >= 0) return d.subtract(m);\nif(d.signum() < 0) d.addTo(m,d); else return d;\nif(d.signum() < 0) return d.add(m); else return d;\n}\n\nvar lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];\nvar lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n//(public) test primality with certainty >= 1-.5^t\nfunction bnIsProbablePrime(t) {\nvar i, x = this.abs();\nif(x.t == 1 && x.data[0] <= lowprimes[lowprimes.length-1]) {\n for(i = 0; i < lowprimes.length; ++i)\n if(x.data[0] == lowprimes[i]) return true;\n return false;\n}\nif(x.isEven()) return false;\ni = 1;\nwhile(i < lowprimes.length) {\n var m = lowprimes[i], j = i+1;\n while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n m = x.modInt(m);\n while(i < j) if(m%lowprimes[i++] == 0) return false;\n}\nreturn x.millerRabin(t);\n}\n\n//(protected) true if probably prime (HAC 4.24, Miller-Rabin)\nfunction bnpMillerRabin(t) {\nvar n1 = this.subtract(BigInteger.ONE);\nvar k = n1.getLowestSetBit();\nif(k <= 0) return false;\nvar r = n1.shiftRight(k);\nvar prng = bnGetPrng();\nvar a;\nfor(var i = 0; i < t; ++i) {\n // select witness 'a' at random from between 1 and n1\n do {\n a = new BigInteger(this.bitLength(), prng);\n }\n while(a.compareTo(BigInteger.ONE) <= 0 || a.compareTo(n1) >= 0);\n var y = a.modPow(r,this);\n if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while(j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2,this);\n if(y.compareTo(BigInteger.ONE) == 0) return false;\n }\n if(y.compareTo(n1) != 0) return false;\n }\n}\nreturn true;\n}\n\n// get pseudo random number generator\nfunction bnGetPrng() {\n // create prng with api that matches BigInteger secure random\n return {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n for(var i = 0; i < x.length; ++i) {\n x[i] = Math.floor(Math.random() * 0x0100);\n }\n }\n };\n}\n\n//protected\nBigInteger.prototype.chunkSize = bnpChunkSize;\nBigInteger.prototype.toRadix = bnpToRadix;\nBigInteger.prototype.fromRadix = bnpFromRadix;\nBigInteger.prototype.fromNumber = bnpFromNumber;\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\nBigInteger.prototype.changeBit = bnpChangeBit;\nBigInteger.prototype.addTo = bnpAddTo;\nBigInteger.prototype.dMultiply = bnpDMultiply;\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\nBigInteger.prototype.modInt = bnpModInt;\nBigInteger.prototype.millerRabin = bnpMillerRabin;\n\n//public\nBigInteger.prototype.clone = bnClone;\nBigInteger.prototype.intValue = bnIntValue;\nBigInteger.prototype.byteValue = bnByteValue;\nBigInteger.prototype.shortValue = bnShortValue;\nBigInteger.prototype.signum = bnSigNum;\nBigInteger.prototype.toByteArray = bnToByteArray;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.min = bnMin;\nBigInteger.prototype.max = bnMax;\nBigInteger.prototype.and = bnAnd;\nBigInteger.prototype.or = bnOr;\nBigInteger.prototype.xor = bnXor;\nBigInteger.prototype.andNot = bnAndNot;\nBigInteger.prototype.not = bnNot;\nBigInteger.prototype.shiftLeft = bnShiftLeft;\nBigInteger.prototype.shiftRight = bnShiftRight;\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\nBigInteger.prototype.bitCount = bnBitCount;\nBigInteger.prototype.testBit = bnTestBit;\nBigInteger.prototype.setBit = bnSetBit;\nBigInteger.prototype.clearBit = bnClearBit;\nBigInteger.prototype.flipBit = bnFlipBit;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.remainder = bnRemainder;\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\nBigInteger.prototype.modPow = bnModPow;\nBigInteger.prototype.modInverse = bnModInverse;\nBigInteger.prototype.pow = bnPow;\nBigInteger.prototype.gcd = bnGCD;\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n//BigInteger interfaces not implemented in jsbn:\n\n//BigInteger(int signum, byte[] magnitude)\n//double doubleValue()\n//float floatValue()\n//int hashCode()\n//long longValue()\n//static BigInteger valueOf(long val)\n","'use strict'\n\nrequire('node-forge/lib/util')\nrequire('node-forge/lib/jsbn')\nconst forge = require('node-forge/lib/forge')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\n\nexports.bigIntegerToUintBase64url = (num, len) => {\n // Call `.abs()` to convert to unsigned\n let buf = Uint8Array.from(num.abs().toByteArray()) // toByteArray converts to big endian\n\n // toByteArray() gives us back a signed array, which will include a leading 0\n // byte if the most significant bit of the number is 1:\n // https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-integer\n // Our number will always be positive so we should remove the leading padding.\n buf = buf[0] === 0 ? buf.slice(1) : buf\n\n if (len != null) {\n if (buf.length > len) throw new Error('byte array longer than desired length')\n buf = uint8ArrayConcat([new Uint8Array(len - buf.length), buf])\n }\n\n return uint8ArrayToString(buf, 'base64url')\n}\n\n// Convert a base64url encoded string to a BigInteger\nexports.base64urlToBigInteger = str => {\n const buf = exports.base64urlToBuffer(str)\n return new forge.jsbn.BigInteger(uint8ArrayToString(buf, 'base16'), 16)\n}\n\nexports.base64urlToBuffer = (str, len) => {\n let buf = uint8ArrayFromString(str, 'base64urlpad')\n\n if (len != null) {\n if (buf.length > len) throw new Error('byte array longer than desired length')\n buf = uint8ArrayConcat([new Uint8Array(len - buf.length), buf])\n }\n\n return buf\n}\n","'use strict'\n\nconst { base64 } = require('multiformats/bases/base64')\nconst ciphers = require('../ciphers/aes-gcm')\n\nmodule.exports = {\n /**\n * Exports the given PrivateKey as a base64 encoded string.\n * The PrivateKey is encrypted via a password derived PBKDF2 key\n * leveraging the aes-gcm cipher algorithm.\n *\n * @param {Uint8Array} privateKey - The PrivateKey protobuf\n * @param {string} password\n * @returns {Promise} A base64 encoded string\n */\n export: async function (privateKey, password) {\n const cipher = ciphers.create()\n const encryptedKey = await cipher.encrypt(privateKey, password)\n return base64.encode(encryptedKey)\n }\n}\n","'use strict';\n\nfunction withIs(Class, { className, symbolName }) {\n const symbol = Symbol.for(symbolName);\n\n const ClassIsWrapper = {\n // The code below assigns the class wrapper to an object to trick\n // JavaScript engines to show the name of the extended class when\n // logging an instances.\n // We are assigning an anonymous class (class wrapper) to the object\n // with key `className` to keep the correct name.\n // If this is not supported it falls back to logging `ClassIsWrapper`.\n [className]: class extends Class {\n constructor(...args) {\n super(...args);\n Object.defineProperty(this, symbol, { value: true });\n }\n\n get [Symbol.toStringTag]() {\n return className;\n }\n },\n }[className];\n\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\n\n return ClassIsWrapper;\n}\n\nfunction withIsProto(Class, { className, symbolName, withoutNew }) {\n const symbol = Symbol.for(symbolName);\n\n /* eslint-disable object-shorthand */\n const ClassIsWrapper = {\n [className]: function (...args) {\n if (withoutNew && !(this instanceof ClassIsWrapper)) {\n return new ClassIsWrapper(...args);\n }\n\n const _this = Class.call(this, ...args) || this;\n\n if (_this && !_this[symbol]) {\n Object.defineProperty(_this, symbol, { value: true });\n }\n\n return _this;\n },\n }[className];\n /* eslint-enable object-shorthand */\n\n ClassIsWrapper.prototype = Object.create(Class.prototype);\n ClassIsWrapper.prototype.constructor = ClassIsWrapper;\n\n Object.defineProperty(ClassIsWrapper.prototype, Symbol.toStringTag, {\n get() {\n return className;\n },\n });\n\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\n\n return ClassIsWrapper;\n}\n\nmodule.exports = withIs;\nmodule.exports.proto = withIsProto;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errors = require('./errors.js');\nvar shard$1 = require('./shard.js');\nvar base = require('./base.js');\nvar memory = require('./memory.js');\nvar keytransform = require('./keytransform.js');\nvar sharding = require('./sharding.js');\nvar mount = require('./mount.js');\nvar tiered = require('./tiered.js');\nvar namespace = require('./namespace.js');\n\nconst Errors = { ...errors };\nconst shard = { ...shard$1 };\n\nexports.BaseDatastore = base.BaseDatastore;\nexports.MemoryDatastore = memory.MemoryDatastore;\nexports.KeyTransformDatastore = keytransform.KeyTransformDatastore;\nexports.ShardingDatastore = sharding.ShardingDatastore;\nexports.MountDatastore = mount.MountDatastore;\nexports.TieredDatastore = tiered.TieredDatastore;\nexports.NamespaceDatastore = namespace.NamespaceDatastore;\nexports.Errors = Errors;\nexports.shard = shard;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar pubsubDatastore = require('../../../ipns/routing/pubsub-datastore.js');\nvar errCode = require('err-code');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nfunction getPubsubRouting(ipns, options) {\n if (!ipns || !(options && options.ipnsPubsub)) {\n throw errCode__default[\"default\"](new Error('IPNS pubsub subsystem is not enabled'), 'ERR_IPNS_PUBSUB_NOT_ENABLED');\n }\n if (ipns.routing instanceof pubsubDatastore.IpnsPubsubDatastore) {\n return ipns.routing;\n }\n const pubsub = (ipns.routing.stores || []).find(s => s instanceof pubsubDatastore.IpnsPubsubDatastore);\n if (!pubsub) {\n throw errCode__default[\"default\"](new Error('IPNS pubsub datastore not found'), 'ERR_PUBSUB_DATASTORE_NOT_FOUND');\n }\n return pubsub;\n}\n\nexports.getPubsubRouting = getPubsubRouting;\n","'use strict';\n\nvar config_browser = () => ({\n Addresses: {\n Swarm: [],\n Announce: [],\n NoAnnounce: [],\n API: '',\n Gateway: '',\n RPC: '',\n Delegates: [\n '/dns4/node0.delegate.ipfs.io/tcp/443/https',\n '/dns4/node1.delegate.ipfs.io/tcp/443/https',\n '/dns4/node2.delegate.ipfs.io/tcp/443/https',\n '/dns4/node3.delegate.ipfs.io/tcp/443/https'\n ]\n },\n Discovery: {\n MDNS: {\n Enabled: false,\n Interval: 10\n },\n webRTCStar: { Enabled: true }\n },\n Bootstrap: [\n '/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN',\n '/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',\n '/dnsaddr/bootstrap.libp2p.io/p2p/QmZa1sAxajnQjVM8WjWXoMbmPd7NsWhfKsPkErzpm9wGkp',\n '/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa',\n '/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',\n '/dns4/node0.preload.ipfs.io/tcp/443/wss/p2p/QmZMxNdpMkewiVZLMRxaNxUeZpDUb34pWjZ1kZvsd16Zic',\n '/dns4/node1.preload.ipfs.io/tcp/443/wss/p2p/Qmbut9Ywz9YEDrz8ySBSgWyJk41Uvm2QJPhwDJzJyGFsD6',\n '/dns4/node2.preload.ipfs.io/tcp/443/wss/p2p/QmV7gnbW5VTcJ3oyM2Xk1rdFBJ3kTkvxc87UFGsun29STS',\n '/dns4/node3.preload.ipfs.io/tcp/443/wss/p2p/QmY7JB6MQXhxHvq7dBDh4HpbH29v4yE9JRadAVpndvzySN'\n ],\n Pubsub: { Enabled: true },\n Swarm: {\n ConnMgr: {\n LowWater: 5,\n HighWater: 20\n },\n DisableNatPortMap: true\n },\n Routing: { Type: 'dhtclient' }\n});\n\nmodule.exports = config_browser;\n","'use strict'\n\nconst defer = require('p-defer')\nconst EventEmitter = require('events').EventEmitter\n\n/**\n * @template T\n * @typedef {object} Operation\n * @property {boolean} done\n * @property {boolean} ok\n * @property {Error} err\n * @property {T} value\n */\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n *\n * @template T\n * @param {Iterable<() => Promise> | AsyncIterable<() => Promise>} source\n * @param {object} [options]\n * @param {number} [options.concurrency=Infinity]\n * @param {boolean} [options.ordered=false]\n * @returns {AsyncIterable}\n */\nasync function * parallel (source, options = {}) {\n let concurrency = options.concurrency || Infinity\n\n if (concurrency < 1) {\n concurrency = Infinity\n }\n\n const ordered = options.ordered == null ? false : options.ordered\n const emitter = new EventEmitter()\n\n /** @type {Operation[]}} */\n const ops = []\n let slotAvailable = defer()\n let resultAvailable = defer()\n let sourceFinished = false\n let sourceErr\n let opErred = false\n\n emitter.on('task-complete', () => {\n resultAvailable.resolve()\n })\n\n Promise.resolve().then(async () => {\n try {\n for await (const task of source) {\n if (ops.length === concurrency) {\n slotAvailable = defer()\n await slotAvailable.promise\n }\n\n if (opErred) {\n break\n }\n\n /**\n * @type {any}\n */\n const op = {\n done: false\n }\n ops.push(op)\n\n task()\n .then(result => {\n op.done = true\n op.ok = true\n op.value = result\n emitter.emit('task-complete')\n }, err => {\n op.done = true\n op.err = err\n emitter.emit('task-complete')\n })\n }\n\n sourceFinished = true\n emitter.emit('task-complete')\n } catch (err) {\n sourceErr = err\n emitter.emit('task-complete')\n }\n })\n\n function valuesAvailable () {\n if (ordered) {\n return Boolean(ops[0] && ops[0].done)\n }\n\n return Boolean(ops.find(op => op.done))\n }\n\n function * yieldOrderedValues () {\n while (ops.length && ops[0].done) {\n const op = ops[0]\n ops.shift()\n\n if (op.ok) {\n yield op.value\n } else {\n // allow the source to exit\n opErred = true\n slotAvailable.resolve()\n\n throw op.err\n }\n\n slotAvailable.resolve()\n }\n }\n\n function * yieldUnOrderedValues () {\n // more values can become available while we wait for `yield`\n // to return control to this function\n while (valuesAvailable()) {\n for (let i = 0; i < ops.length; i++) {\n if (ops[i].done) {\n const op = ops[i]\n ops.splice(i, 1)\n i--\n\n if (op.ok) {\n yield op.value\n } else {\n opErred = true\n slotAvailable.resolve()\n\n throw op.err\n }\n\n slotAvailable.resolve()\n }\n }\n }\n }\n\n while (true) {\n if (!valuesAvailable()) {\n resultAvailable = defer()\n await resultAvailable.promise\n }\n\n if (sourceErr) {\n // the source threw an error, propagate it\n throw sourceErr\n }\n\n if (ordered) {\n yield * yieldOrderedValues()\n } else {\n yield * yieldUnOrderedValues()\n }\n\n if (sourceFinished && ops.length === 0) {\n // not waiting for any results and no more tasks so we are done\n break\n }\n }\n}\n\nmodule.exports = parallel\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar parallelBatch = require('it-parallel-batch');\nvar options = require('./options.js');\nvar index = require('./dag-builder/index.js');\nvar treeBuilder = require('./tree-builder.js');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar parallelBatch__default = /*#__PURE__*/_interopDefaultLegacy(parallelBatch);\n\nasync function* importer(source, blockstore, options$1 = {}) {\n const opts = options(options$1);\n let dagBuilder;\n if (typeof options$1.dagBuilder === 'function') {\n dagBuilder = options$1.dagBuilder;\n } else {\n dagBuilder = index;\n }\n let treeBuilder$1;\n if (typeof options$1.treeBuilder === 'function') {\n treeBuilder$1 = options$1.treeBuilder;\n } else {\n treeBuilder$1 = treeBuilder;\n }\n let candidates;\n if (Symbol.asyncIterator in source || Symbol.iterator in source) {\n candidates = source;\n } else {\n candidates = [source];\n }\n for await (const entry of treeBuilder$1(parallelBatch__default['default'](dagBuilder(candidates, blockstore, opts), opts.fileImportConcurrency), blockstore, opts)) {\n yield {\n cid: entry.cid,\n path: entry.path,\n unixfs: entry.unixfs,\n size: entry.size\n };\n }\n}\n\nexports.importer = importer;\n","'use strict'\n\nconst batch = require('it-batch')\n\n/**\n * @template T\n * @typedef {{ok:true, value:T}} Success\n */\n\n/**\n * @typedef {{ok:false, err:Error}} Failure\n */\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n *\n * @template T\n * @param {AsyncIterable<() => Promise>} source\n * @param {number} [size=1]\n * @returns {AsyncIterable}\n */\nasync function * parallelBatch (source, size = 1) {\n for await (const tasks of batch(source, size)) {\n /** @type {Promise|Failure>[]} */\n const things = tasks.map(\n /**\n * @param {() => Promise} p\n */\n p => {\n return p().then(value => ({ ok: true, value }), err => ({ ok: false, err }))\n })\n\n for (let i = 0; i < things.length; i++) {\n const result = await things[i]\n\n if (result.ok) {\n yield result.value\n } else {\n throw result.err\n }\n }\n }\n}\n\nmodule.exports = parallelBatch\n","'use strict'\n\n/**\n * Takes an (async) iterable that emits things and returns an async iterable that\n * emits those things in fixed-sized batches.\n *\n * @template T\n * @param {AsyncIterable|Iterable} source\n * @param {number} [size=1]\n * @returns {AsyncIterable}\n */\nasync function * batch (source, size = 1) {\n /** @type {T[]} */\n let things = []\n\n if (size < 1) {\n size = 1\n }\n\n for await (const thing of source) {\n things.push(thing)\n\n while (things.length >= size) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n }\n\n while (things.length) {\n yield things.slice(0, size)\n\n things = things.slice(size)\n }\n}\n\nmodule.exports = batch\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar hasher = require('multiformats/hashes/hasher');\nvar multiformats = require('multiformats');\nvar mur = require('murmurhash3js-revisited');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar mur__default = /*#__PURE__*/_interopDefaultLegacy(mur);\n\nfunction fromNumberTo32BitBuf(number) {\n const bytes = new Array(4);\n for (let i = 0; i < 4; i++) {\n bytes[i] = number & 255;\n number = number >> 8;\n }\n return new Uint8Array(bytes);\n}\nconst murmur332 = hasher.from({\n name: 'murmur3-32',\n code: 35,\n encode: input => fromNumberTo32BitBuf(mur__default[\"default\"].x86.hash32(input))\n});\nconst murmur3128 = hasher.from({\n name: 'murmur3-128',\n code: 34,\n encode: input => multiformats.bytes.fromHex(mur__default[\"default\"].x64.hash128(input))\n});\n\nexports.murmur3128 = murmur3128;\nexports.murmur332 = murmur332;\n","'use strict';\n\nclass Dir {\n constructor(props, options) {\n this.options = options || {};\n this.root = props.root;\n this.dir = props.dir;\n this.path = props.path;\n this.dirty = props.dirty;\n this.flat = props.flat;\n this.parent = props.parent;\n this.parentKey = props.parentKey;\n this.unixfs = props.unixfs;\n this.mode = props.mode;\n this.mtime = props.mtime;\n this.cid = undefined;\n this.size = undefined;\n }\n async put(name, value) {\n }\n get(name) {\n return Promise.resolve(this);\n }\n async *eachChildSeries() {\n }\n async *flush(blockstore) {\n }\n}\n\nmodule.exports = Dir;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cborg = require('cborg');\nvar cid = require('multiformats/cid');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar cborg__namespace = /*#__PURE__*/_interopNamespace(cborg);\n\nconst CID_CBOR_TAG = 42;\nfunction cidEncoder(obj) {\n if (obj.asCID !== obj) {\n return null;\n }\n const cid$1 = cid.CID.asCID(obj);\n if (!cid$1) {\n return null;\n }\n const bytes = new Uint8Array(cid$1.bytes.byteLength + 1);\n bytes.set(cid$1.bytes, 1);\n return [\n new cborg__namespace.Token(cborg__namespace.Type.tag, CID_CBOR_TAG),\n new cborg__namespace.Token(cborg__namespace.Type.bytes, bytes)\n ];\n}\nfunction undefinedEncoder() {\n throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded');\n}\nfunction numberEncoder(num) {\n if (Number.isNaN(num)) {\n throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded');\n }\n if (num === Infinity || num === -Infinity) {\n throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded');\n }\n return null;\n}\nconst encodeOptions = {\n float64: true,\n typeEncoders: {\n Object: cidEncoder,\n undefined: undefinedEncoder,\n number: numberEncoder\n }\n};\nfunction cidDecoder(bytes) {\n if (bytes[0] !== 0) {\n throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00');\n }\n return cid.CID.decode(bytes.subarray(1));\n}\nconst decodeOptions = {\n allowIndefinite: false,\n allowUndefined: false,\n allowNaN: false,\n allowInfinity: false,\n allowBigInt: true,\n strict: true,\n useMaps: false,\n tags: []\n};\ndecodeOptions.tags[CID_CBOR_TAG] = cidDecoder;\nconst name = 'dag-cbor';\nconst code = 113;\nconst encode = node => cborg__namespace.encode(node, encodeOptions);\nconst decode = data => cborg__namespace.decode(data, decodeOptions);\n\nexports.code = code;\nexports.decode = decode;\nexports.encode = encode;\nexports.name = name;\n","'use strict';\n\nfunction extractDataFromBlock(block, blockStart, requestedStart, requestedEnd) {\n const blockLength = block.length;\n const blockEnd = blockStart + blockLength;\n if (requestedStart >= blockEnd || requestedEnd < blockStart) {\n return new Uint8Array(0);\n }\n if (requestedEnd >= blockStart && requestedEnd < blockEnd) {\n block = block.slice(0, requestedEnd - blockStart);\n }\n if (requestedStart >= blockStart && requestedStart < blockEnd) {\n block = block.slice(requestedStart - blockStart);\n }\n return block;\n}\n\nmodule.exports = extractDataFromBlock;\n","'use strict';\n\nvar errCode = require('err-code');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nconst validateOffsetAndLength = (size, offset, length) => {\n if (!offset) {\n offset = 0;\n }\n if (offset < 0) {\n throw errCode__default['default'](new Error('Offset must be greater than or equal to 0'), 'ERR_INVALID_PARAMS');\n }\n if (offset > size) {\n throw errCode__default['default'](new Error('Offset must be less than the file size'), 'ERR_INVALID_PARAMS');\n }\n if (!length && length !== 0) {\n length = size - offset;\n }\n if (length < 0) {\n throw errCode__default['default'](new Error('Length must be greater than or equal to 0'), 'ERR_INVALID_PARAMS');\n }\n if (offset + length > size) {\n length = size - offset;\n }\n return {\n offset,\n length\n };\n};\n\nmodule.exports = validateOffsetAndLength;\n","const BufferList = require('bl/BufferList')\n\nmodule.exports = source => {\n const reader = (async function * () {\n let bytes = yield // Allows us to receive 8 when reader.next(8) is called\n let bl = new BufferList()\n\n for await (const chunk of source) {\n if (!bytes) {\n bytes = yield bl.append(chunk)\n bl = new BufferList()\n continue\n }\n\n bl.append(chunk)\n\n while (bl.length >= bytes) {\n const data = bl.shallowSlice(0, bytes)\n bl.consume(bytes)\n bytes = yield data\n\n // If we no longer want a specific byte length, we yield the rest now\n if (!bytes) {\n if (bl.length) {\n bytes = yield bl\n bl = new BufferList()\n }\n break // bytes is null and/or no more buffer to yield\n }\n }\n }\n\n // Consumer wants more bytes but the source has ended and our buffer\n // is not big enough to satisfy.\n if (bytes) {\n throw Object.assign(\n new Error(`stream ended before ${bytes} bytes became available`),\n { code: 'ERR_UNDER_READ', buffer: bl }\n )\n }\n })()\n\n reader.next()\n return reader\n}\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst ipfsCore = '0.13.0';\nconst commit = '7375caa8805298fc671ed4080e1023aafe756151';\nconst interfaceIpfsCore = '^0.153.0';\n\nexports.commit = commit;\nexports.interfaceIpfsCore = interfaceIpfsCore;\nexports.ipfsCore = ipfsCore;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nrequire('./index.js');\nvar cid = require('./cid.js');\nvar bytes = require('./bytes.js');\n\nconst readonly = ({enumerable = true, configurable = false} = {}) => ({\n enumerable,\n configurable,\n writable: false\n});\nconst links = function* (source, base) {\n if (source == null)\n return;\n if (source instanceof Uint8Array)\n return;\n for (const [key, value] of Object.entries(source)) {\n const path = [\n ...base,\n key\n ];\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (const [index, element] of value.entries()) {\n const elementPath = [\n ...path,\n index\n ];\n const cid$1 = cid.CID.asCID(element);\n if (cid$1) {\n yield [\n elementPath.join('/'),\n cid$1\n ];\n } else if (typeof element === 'object') {\n yield* links(element, elementPath);\n }\n }\n } else {\n const cid$1 = cid.CID.asCID(value);\n if (cid$1) {\n yield [\n path.join('/'),\n cid$1\n ];\n } else {\n yield* links(value, path);\n }\n }\n }\n }\n};\nconst tree = function* (source, base) {\n if (source == null)\n return;\n for (const [key, value] of Object.entries(source)) {\n const path = [\n ...base,\n key\n ];\n yield path.join('/');\n if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && !cid.CID.asCID(value)) {\n if (Array.isArray(value)) {\n for (const [index, element] of value.entries()) {\n const elementPath = [\n ...path,\n index\n ];\n yield elementPath.join('/');\n if (typeof element === 'object' && !cid.CID.asCID(element)) {\n yield* tree(element, elementPath);\n }\n }\n } else {\n yield* tree(value, path);\n }\n }\n }\n};\nconst get = (source, path) => {\n let node = source;\n for (const [index, key] of path.entries()) {\n node = node[key];\n if (node == null) {\n throw new Error(`Object has no property at ${ path.slice(0, index + 1).map(part => `[${ JSON.stringify(part) }]`).join('') }`);\n }\n const cid$1 = cid.CID.asCID(node);\n if (cid$1) {\n return {\n value: cid$1,\n remaining: path.slice(index + 1).join('/')\n };\n }\n }\n return { value: node };\n};\nclass Block {\n constructor({cid, bytes, value}) {\n if (!cid || !bytes || typeof value === 'undefined')\n throw new Error('Missing required argument');\n this.cid = cid;\n this.bytes = bytes;\n this.value = value;\n this.asBlock = this;\n Object.defineProperties(this, {\n cid: readonly(),\n bytes: readonly(),\n value: readonly(),\n asBlock: readonly()\n });\n }\n links() {\n return links(this.value, []);\n }\n tree() {\n return tree(this.value, []);\n }\n get(path = '/') {\n return get(this.value, path.split('/').filter(Boolean));\n }\n}\nconst encode = async ({value, codec, hasher}) => {\n if (typeof value === 'undefined')\n throw new Error('Missing required argument \"value\"');\n if (!codec || !hasher)\n throw new Error('Missing required argument: codec or hasher');\n const bytes = codec.encode(value);\n const hash = await hasher.digest(bytes);\n const cid$1 = cid.CID.create(1, codec.code, hash);\n return new Block({\n value,\n bytes,\n cid: cid$1\n });\n};\nconst decode = async ({bytes, codec, hasher}) => {\n if (!bytes)\n throw new Error('Missing required argument \"bytes\"');\n if (!codec || !hasher)\n throw new Error('Missing required argument: codec or hasher');\n const value = codec.decode(bytes);\n const hash = await hasher.digest(bytes);\n const cid$1 = cid.CID.create(1, codec.code, hash);\n return new Block({\n value,\n bytes,\n cid: cid$1\n });\n};\nconst createUnsafe = ({\n bytes,\n cid,\n value: maybeValue,\n codec\n}) => {\n const value = maybeValue !== undefined ? maybeValue : codec && codec.decode(bytes);\n if (value === undefined)\n throw new Error('Missing required argument, must either provide \"value\" or \"codec\"');\n return new Block({\n cid,\n bytes,\n value\n });\n};\nconst create = async ({bytes: bytes$1, cid, hasher, codec}) => {\n if (!bytes$1)\n throw new Error('Missing required argument \"bytes\"');\n if (!hasher)\n throw new Error('Missing required argument \"hasher\"');\n const value = codec.decode(bytes$1);\n const hash = await hasher.digest(bytes$1);\n if (!bytes.equals(cid.multihash.bytes, hash.bytes)) {\n throw new Error('CID hash does not match bytes');\n }\n return createUnsafe({\n bytes: bytes$1,\n cid,\n value,\n codec\n });\n};\n\nexports.Block = Block;\nexports.create = create;\nexports.createUnsafe = createUnsafe;\nexports.decode = decode;\nexports.encode = encode;\n","const { Multiaddr } = require('multiaddr')\n\nconst reduceValue = (_, v) => v\nconst tcpUri = (str, port, parts, opts) => {\n // return tcp when explicitly requested\n if (opts && opts.assumeHttp === false) return `tcp://${str}:${port}`\n // check if tcp is the last protocol in multiaddr\n let protocol = 'tcp'\n let explicitPort = `:${port}`\n const last = parts[parts.length - 1]\n if (last.protocol === 'tcp') {\n // assume http and produce clean urls\n protocol = port === '443' ? 'https' : 'http'\n explicitPort = port === '443' || port === '80' ? '' : explicitPort\n }\n return `${protocol}://${str}${explicitPort}`\n}\n\nconst Reducers = {\n ip4: reduceValue,\n ip6: (str, content, i, parts) => (\n parts.length === 1 && parts[0].protocol === 'ip6'\n ? content\n : `[${content}]`\n ),\n tcp: (str, content, i, parts, opts) => (\n parts.some(p => ['http', 'https', 'ws', 'wss'].includes(p.protocol))\n ? `${str}:${content}`\n : tcpUri(str, content, parts, opts)\n ),\n udp: (str, content) => `udp://${str}:${content}`,\n dnsaddr: reduceValue,\n dns4: reduceValue,\n dns6: reduceValue,\n ipfs: (str, content) => `${str}/ipfs/${content}`,\n p2p: (str, content) => `${str}/p2p/${content}`,\n http: str => `http://${str}`,\n https: str => `https://${str}`,\n ws: str => `ws://${str}`,\n wss: str => `wss://${str}`,\n 'p2p-websocket-star': str => `${str}/p2p-websocket-star`,\n 'p2p-webrtc-star': str => `${str}/p2p-webrtc-star`,\n 'p2p-webrtc-direct': str => `${str}/p2p-webrtc-direct`\n}\n\nmodule.exports = (multiaddr, opts) => {\n const ma = new Multiaddr(multiaddr)\n const parts = multiaddr.toString().split('/').slice(1)\n return ma\n .tuples()\n .map(tuple => ({\n protocol: parts.shift(),\n content: tuple[1] ? parts.shift() : null\n }))\n .reduce((str, part, i, parts) => {\n const reduce = Reducers[part.protocol]\n if (!reduce) throw new Error(`Unsupported protocol ${part.protocol}`)\n return reduce(str, part.content, i, parts, opts)\n }, '')\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar ipfsUnixfs = require('ipfs-unixfs');\nvar dagPB = require('@ipld/dag-pb');\nvar sha2 = require('multiformats/hashes/sha2');\nvar debug = require('debug');\nvar errCode = require('err-code');\nvar utils = require('../../../utils.js');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar dagPB__namespace = /*#__PURE__*/_interopNamespace(dagPB);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nconst log = debug__default[\"default\"]('ipfs:mfs:utils:with-mfs-root');\nasync function loadMfsRoot(context, options) {\n if (options && options.signal && options.signal.aborted) {\n throw errCode__default[\"default\"](new Error('Request aborted'), 'ERR_ABORTED', { name: 'Aborted' });\n }\n await context.repo.datastore.open();\n let cid$1;\n try {\n const buf = await context.repo.datastore.get(utils.MFS_ROOT_KEY);\n cid$1 = cid.CID.decode(buf);\n } catch (err) {\n if (err.code !== 'ERR_NOT_FOUND') {\n throw err;\n }\n log('Creating new MFS root');\n const buf = dagPB__namespace.encode({\n Data: new ipfsUnixfs.UnixFS({ type: 'directory' }).marshal(),\n Links: []\n });\n const hash = await sha2.sha256.digest(buf);\n cid$1 = cid.CID.createV0(hash);\n await context.repo.blocks.put(cid$1, buf);\n if (options && options.signal && options.signal.aborted) {\n throw errCode__default[\"default\"](new Error('Request aborted'), 'ERR_ABORTED', { name: 'Aborted' });\n }\n await context.repo.datastore.put(utils.MFS_ROOT_KEY, cid$1.bytes);\n }\n log(`Loaded MFS root /ipfs/${ cid$1 }`);\n return cid$1;\n}\n\nexports.loadMfsRoot = loadMfsRoot;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction toPathComponents(path = '') {\n return (path.trim().match(/([^\\\\^/]|\\\\\\/)+/g) || []).filter(Boolean);\n}\n\nexports.toPathComponents = toPathComponents;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar mkdir = require('./mkdir.js');\nvar stat = require('./stat.js');\nvar debug = require('debug');\nvar errCode = require('err-code');\nvar updateTree = require('./utils/update-tree.js');\nvar updateMfsRoot = require('./utils/update-mfs-root.js');\nvar addLink = require('./utils/add-link.js');\nvar toMfsPath = require('./utils/to-mfs-path.js');\nvar mergeOpts = require('merge-options');\nvar toTrail = require('./utils/to-trail.js');\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar mergeOpts__default = /*#__PURE__*/_interopDefaultLegacy(mergeOpts);\n\nconst mergeOptions = mergeOpts__default[\"default\"].bind({ ignoreUndefined: true });\nconst log = debug__default[\"default\"]('ipfs:mfs:cp');\nconst defaultOptions = {\n parents: false,\n flush: true,\n hashAlg: 'sha2-256',\n cidVersion: 0,\n shardSplitThreshold: 1000\n};\nfunction createCp(context) {\n async function mfsCp(from, to, opts = {}) {\n const options = mergeOptions(defaultOptions, opts);\n if (!Array.isArray(from)) {\n from = [from];\n }\n const sources = await Promise.all(from.map(path => toMfsPath.toMfsPath(context, path, options)));\n let destination = await toMfsPath.toMfsPath(context, to, options);\n if (!sources.length || !destination) {\n throw errCode__default[\"default\"](new Error('Please supply at least one source'), 'ERR_INVALID_PARAMS');\n }\n const missing = sources.find(source => !source.exists);\n if (missing) {\n throw errCode__default[\"default\"](new Error(`${ missing.path } does not exist`), 'ERR_INVALID_PARAMS');\n }\n const destinationIsDirectory = isDirectory(destination);\n if (destination.exists) {\n log('Destination exists');\n if (sources.length === 1 && !destinationIsDirectory) {\n throw errCode__default[\"default\"](new Error('directory already has entry by that name'), 'ERR_ALREADY_EXISTS');\n }\n } else {\n log('Destination does not exist');\n if (sources.length > 1) {\n if (!options.parents) {\n throw errCode__default[\"default\"](new Error('destination did not exist, pass -p to create intermediate directories'), 'ERR_INVALID_PARAMS');\n }\n await mkdir.createMkdir(context)(destination.path, options);\n destination = await toMfsPath.toMfsPath(context, destination.path, options);\n } else if (destination.parts.length > 1) {\n const parentFolder = `/${ destination.parts.slice(0, -1).join('/') }`;\n try {\n await stat.createStat(context)(parentFolder, options);\n } catch (err) {\n if (err.code !== 'ERR_NOT_FOUND') {\n throw err;\n }\n if (!options.parents) {\n throw errCode__default[\"default\"](new Error('destination did not exist, pass -p to create intermediate directories'), 'ERR_INVALID_PARAMS');\n }\n await mkdir.createMkdir(context)(parentFolder, options);\n destination = await toMfsPath.toMfsPath(context, destination.path, options);\n }\n }\n }\n const destinationPath = isDirectory(destination) ? destination.mfsPath : destination.mfsDirectory;\n const trail = await toTrail.toTrail(context, destinationPath);\n if (sources.length === 1) {\n const source = sources.pop();\n if (!source) {\n throw errCode__default[\"default\"](new Error('could not find source'), 'ERR_INVALID_PARAMS');\n }\n const destinationName = destinationIsDirectory ? source.name : destination.name;\n log(`Only one source, copying to destination ${ destinationIsDirectory ? 'directory' : 'file' } ${ destinationName }`);\n return copyToFile(context, source, destinationName, trail, options);\n }\n log('Multiple sources, wrapping in a directory');\n return copyToDirectory(context, sources, destination, trail, options);\n }\n return withTimeoutOption.withTimeoutOption(mfsCp);\n}\nconst isDirectory = destination => {\n return destination.unixfs && destination.unixfs.type && destination.unixfs.type.includes('directory');\n};\nconst copyToFile = async (context, source, destination, destinationTrail, options) => {\n let parent = destinationTrail.pop();\n if (!parent) {\n throw errCode__default[\"default\"](new Error('destination had no parent'), 'ERR_INVALID_PARAMS');\n }\n parent = await addSourceToParent(context, source, destination, parent, options);\n destinationTrail.push(parent);\n const newRootCid = await updateTree.updateTree(context, destinationTrail, options);\n await updateMfsRoot.updateMfsRoot(context, newRootCid, options);\n};\nconst copyToDirectory = async (context, sources, destination, destinationTrail, options) => {\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i];\n destination = await addSourceToParent(context, source, source.name, destination, options);\n }\n destinationTrail[destinationTrail.length - 1] = destination;\n const newRootCid = await updateTree.updateTree(context, destinationTrail, options);\n await updateMfsRoot.updateMfsRoot(context, newRootCid, options);\n};\nconst addSourceToParent = async (context, source, childName, parent, options) => {\n const sourceBlock = await context.repo.blocks.get(source.cid);\n const {node, cid, size} = await addLink.addLink(context, {\n parentCid: parent.cid,\n size: sourceBlock.length,\n cid: source.cid,\n name: childName,\n hashAlg: options.hashAlg,\n cidVersion: options.cidVersion,\n flush: options.flush,\n shardSplitThreshold: options.shardSplitThreshold\n });\n parent.node = node;\n parent.cid = cid;\n parent.size = size;\n return parent;\n};\n\nexports.createCp = createCp;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\nvar debug = require('debug');\nvar ipfsUnixfsExporter = require('ipfs-unixfs-exporter');\nvar createNode = require('./utils/create-node.js');\nvar toPathComponents = require('./utils/to-path-components.js');\nvar updateMfsRoot = require('./utils/update-mfs-root.js');\nvar updateTree = require('./utils/update-tree.js');\nvar addLink = require('./utils/add-link.js');\nvar withMfsRoot = require('./utils/with-mfs-root.js');\nvar mergeOpts = require('merge-options');\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar mergeOpts__default = /*#__PURE__*/_interopDefaultLegacy(mergeOpts);\n\nconst mergeOptions = mergeOpts__default[\"default\"].bind({ ignoreUndefined: true });\nconst log = debug__default[\"default\"]('ipfs:mfs:mkdir');\nconst defaultOptions = {\n parents: false,\n hashAlg: 'sha2-256',\n cidVersion: 0,\n shardSplitThreshold: 1000,\n flush: true\n};\nfunction createMkdir(context) {\n async function mfsMkdir(path, options = {}) {\n const opts = mergeOptions(defaultOptions, options);\n if (!path) {\n throw new Error('no path given to Mkdir');\n }\n path = path.trim();\n if (path === '/') {\n if (opts.parents) {\n return;\n }\n throw errCode__default[\"default\"](new Error('cannot create directory \\'/\\': Already exists'), 'ERR_INVALID_PATH');\n }\n if (path.substring(0, 1) !== '/') {\n throw errCode__default[\"default\"](new Error('paths must start with a leading slash'), 'ERR_INVALID_PATH');\n }\n log(`Creating ${ path }`);\n const pathComponents = toPathComponents.toPathComponents(path);\n if (pathComponents[0] === 'ipfs') {\n throw errCode__default[\"default\"](new Error('path cannot have the prefix \\'ipfs\\''), 'ERR_INVALID_PATH');\n }\n const root = await withMfsRoot.loadMfsRoot(context, opts);\n let parent;\n const trail = [];\n const emptyDir = await createNode.createNode(context, 'directory', opts);\n for (let i = 0; i <= pathComponents.length; i++) {\n const subPathComponents = pathComponents.slice(0, i);\n const subPath = `/ipfs/${ root }/${ subPathComponents.join('/') }`;\n try {\n parent = await ipfsUnixfsExporter.exporter(subPath, context.repo.blocks);\n if (parent.type !== 'file' && parent.type !== 'directory') {\n throw errCode__default[\"default\"](new Error(`${ path } was not a UnixFS node`), 'ERR_NOT_UNIXFS');\n }\n if (i === pathComponents.length) {\n if (opts.parents) {\n return;\n }\n throw errCode__default[\"default\"](new Error('file already exists'), 'ERR_ALREADY_EXISTS');\n }\n trail.push({\n name: parent.name,\n cid: parent.cid\n });\n } catch (err) {\n if (err.code === 'ERR_NOT_FOUND') {\n if (i < pathComponents.length && !opts.parents) {\n throw errCode__default[\"default\"](new Error(`Intermediate directory path ${ subPath } does not exist, use the -p flag to create it`), 'ERR_NOT_FOUND');\n }\n await addEmptyDir(context, subPathComponents[subPathComponents.length - 1], emptyDir, trail[trail.length - 1], trail, opts);\n } else {\n throw err;\n }\n }\n }\n const newRootCid = await updateTree.updateTree(context, trail, opts);\n await updateMfsRoot.updateMfsRoot(context, newRootCid, opts);\n }\n return withTimeoutOption.withTimeoutOption(mfsMkdir);\n}\nconst addEmptyDir = async (context, childName, emptyDir, parent, trail, options) => {\n log(`Adding empty dir called ${ childName } to ${ parent.cid }`);\n const result = await addLink.addLink(context, {\n parent: parent.node,\n parentCid: parent.cid,\n size: 0,\n cid: emptyDir.cid,\n name: childName,\n hashAlg: options.hashAlg,\n cidVersion: options.cidVersion,\n flush: options.flush,\n shardSplitThreshold: options.shardSplitThreshold\n });\n trail[trail.length - 1].cid = result.cid;\n trail.push({\n name: childName,\n cid: emptyDir.cid\n });\n};\n\nexports.createMkdir = createMkdir;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\nvar updateTree = require('./utils/update-tree.js');\nvar updateMfsRoot = require('./utils/update-mfs-root.js');\nvar removeLink = require('./utils/remove-link.js');\nvar toMfsPath = require('./utils/to-mfs-path.js');\nvar toTrail = require('./utils/to-trail.js');\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\nvar mergeOpts = require('merge-options');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar mergeOpts__default = /*#__PURE__*/_interopDefaultLegacy(mergeOpts);\n\nconst mergeOptions = mergeOpts__default[\"default\"].bind({ ignoreUndefined: true });\nconst defaultOptions = {\n recursive: false,\n cidVersion: 0,\n hashAlg: 'sha2-256',\n flush: true,\n shardSplitThreshold: 1000\n};\nfunction createRm(context) {\n async function mfsRm(paths, opts = {}) {\n const options = mergeOptions(defaultOptions, opts);\n if (!Array.isArray(paths)) {\n paths = [paths];\n }\n const sources = await Promise.all(paths.map(path => toMfsPath.toMfsPath(context, path, options)));\n if (!sources.length) {\n throw errCode__default[\"default\"](new Error('Please supply at least one path to remove'), 'ERR_INVALID_PARAMS');\n }\n sources.forEach(source => {\n if (source.path === '/') {\n throw errCode__default[\"default\"](new Error('Cannot delete root'), 'ERR_INVALID_PARAMS');\n }\n });\n for (const source of sources) {\n await removePath(context, source.path, options);\n }\n }\n return withTimeoutOption.withTimeoutOption(mfsRm);\n}\nconst removePath = async (context, path, options) => {\n const mfsPath = await toMfsPath.toMfsPath(context, path, options);\n const trail = await toTrail.toTrail(context, mfsPath.mfsPath);\n const child = trail[trail.length - 1];\n trail.pop();\n const parent = trail[trail.length - 1];\n if (!parent) {\n throw errCode__default[\"default\"](new Error(`${ path } does not exist`), 'ERR_NOT_FOUND');\n }\n if (child.type === 'directory' && !options.recursive) {\n throw errCode__default[\"default\"](new Error(`${ path } is a directory, use -r to remove directories`), 'ERR_WAS_DIR');\n }\n const {cid} = await removeLink.removeLink(context, {\n parentCid: parent.cid,\n name: child.name,\n hashAlg: options.hashAlg,\n cidVersion: options.cidVersion,\n flush: options.flush,\n shardSplitThreshold: options.shardSplitThreshold\n });\n parent.cid = cid;\n const newRootCid = await updateTree.updateTree(context, trail, options);\n await updateMfsRoot.updateMfsRoot(context, newRootCid, options);\n};\n\nexports.createRm = createRm;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nclass NonReversibleMigrationError extends Error {\n constructor(message) {\n super(message);\n this.name = 'NonReversibleMigrationError';\n this.code = NonReversibleMigrationError.code;\n this.message = message;\n }\n}\nNonReversibleMigrationError.code = 'ERR_NON_REVERSIBLE_MIGRATION';\nclass NotInitializedRepoError extends Error {\n constructor(message) {\n super(message);\n this.name = 'NotInitializedRepoError';\n this.code = NotInitializedRepoError.code;\n this.message = message;\n }\n}\nNotInitializedRepoError.code = 'ERR_NOT_INITIALIZED_REPO';\nclass RequiredParameterError extends Error {\n constructor(message) {\n super(message);\n this.name = 'RequiredParameterError';\n this.code = RequiredParameterError.code;\n this.message = message;\n }\n}\nRequiredParameterError.code = 'ERR_REQUIRED_PARAMETER';\nclass InvalidValueError extends Error {\n constructor(message) {\n super(message);\n this.name = 'InvalidValueError';\n this.code = InvalidValueError.code;\n this.message = message;\n }\n}\nInvalidValueError.code = 'ERR_INVALID_VALUE';\nclass MissingRepoOptionsError extends Error {\n constructor(message) {\n super(message);\n this.name = 'MissingRepoOptionsError';\n this.code = MissingRepoOptionsError.code;\n this.message = message;\n }\n}\nMissingRepoOptionsError.code = 'ERR_MISSING_REPO_OPTIONS';\n\nexports.InvalidValueError = InvalidValueError;\nexports.MissingRepoOptionsError = MissingRepoOptionsError;\nexports.NonReversibleMigrationError = NonReversibleMigrationError;\nexports.NotInitializedRepoError = NotInitializedRepoError;\nexports.RequiredParameterError = RequiredParameterError;\n","'use strict'\n\nexports.AbstractLevelDOWN = require('./abstract-leveldown')\nexports.AbstractIterator = require('./abstract-iterator')\nexports.AbstractChainedBatch = require('./abstract-chained-batch')\n","'use strict'\n\nconst queueMicrotask = require('queue-microtask')\n\nmodule.exports = function (fn, ...args) {\n if (args.length === 0) {\n queueMicrotask(fn)\n } else {\n queueMicrotask(() => fn(...args))\n }\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","'use strict'\n\nexports.AbstractLevelDOWN = require('./abstract-leveldown')\nexports.AbstractIterator = require('./abstract-iterator')\nexports.AbstractChainedBatch = require('./abstract-chained-batch')\n","'use strict'\n\nconst queueMicrotask = require('queue-microtask')\n\nmodule.exports = function (fn, ...args) {\n if (args.length === 0) {\n queueMicrotask(fn)\n } else {\n queueMicrotask(() => fn(...args))\n }\n}\n","'use strict'\n\nconst queueMicrotask = require('queue-microtask')\n\nmodule.exports = function (fn, ...args) {\n if (args.length === 0) {\n queueMicrotask(fn)\n } else {\n queueMicrotask(() => fn(...args))\n }\n}\n","'use strict'\n\nconst Topology = require('./index')\nconst multicodecTopologySymbol = Symbol.for('@libp2p/js-interfaces/topology/multicodec-topology')\n\nclass MulticodecTopology extends Topology {\n /**\n * @param {TopologyOptions & MulticodecOptions} props\n */\n constructor ({\n min,\n max,\n multicodecs,\n handlers\n }) {\n super({ min, max, handlers })\n\n if (!multicodecs) {\n throw new Error('one or more multicodec should be provided')\n }\n\n if (!handlers) {\n throw new Error('the handlers should be provided')\n }\n\n if (typeof handlers.onConnect !== 'function') {\n throw new Error('the \\'onConnect\\' handler must be provided')\n }\n\n if (typeof handlers.onDisconnect !== 'function') {\n throw new Error('the \\'onDisconnect\\' handler must be provided')\n }\n\n this.multicodecs = Array.isArray(multicodecs) ? multicodecs : [multicodecs]\n this._registrar = undefined\n\n this._onProtocolChange = this._onProtocolChange.bind(this)\n this._onPeerConnect = this._onPeerConnect.bind(this)\n }\n\n get [Symbol.toStringTag] () {\n return 'Topology'\n }\n\n get [multicodecTopologySymbol] () {\n return true\n }\n\n /**\n * Checks if the given value is a `MulticodecTopology` instance.\n *\n * @param {any} other\n * @returns {other is MulticodecTopology}\n */\n static isMulticodecTopology (other) {\n return Boolean(other && other[multicodecTopologySymbol])\n }\n\n /**\n * @param {any} registrar\n */\n set registrar (registrar) { // eslint-disable-line\n this._registrar = registrar\n this._registrar.peerStore.on('change:protocols', this._onProtocolChange)\n this._registrar.connectionManager.on('peer:connect', this._onPeerConnect)\n\n // Update topology peers\n this._updatePeers(this._registrar.peerStore.peers.values())\n }\n\n /**\n * Update topology.\n *\n * @param {Array<{id: PeerId, multiaddrs: Array, protocols: Array}>} peerDataIterable\n * @returns {void}\n */\n _updatePeers (peerDataIterable) {\n for (const { id, protocols } of peerDataIterable) {\n if (this.multicodecs.filter(multicodec => protocols.includes(multicodec)).length) {\n // Add the peer regardless of whether or not there is currently a connection\n this.peers.add(id.toB58String())\n // If there is a connection, call _onConnect\n const connection = this._registrar.getConnection(id)\n connection && this._onConnect(id, connection)\n } else {\n // Remove any peers we might be tracking that are no longer of value to us\n this.peers.delete(id.toB58String())\n }\n }\n }\n\n /**\n * Check if a new peer support the multicodecs for this topology.\n *\n * @param {Object} props\n * @param {PeerId} props.peerId\n * @param {Array} props.protocols\n */\n _onProtocolChange ({ peerId, protocols }) {\n const hadPeer = this.peers.has(peerId.toB58String())\n const hasProtocol = protocols.filter(protocol => this.multicodecs.includes(protocol))\n\n // Not supporting the protocol anymore?\n if (hadPeer && hasProtocol.length === 0) {\n this._onDisconnect(peerId)\n }\n\n // New to protocol support\n for (const protocol of protocols) {\n if (this.multicodecs.includes(protocol)) {\n const peerData = this._registrar.peerStore.get(peerId)\n this._updatePeers([peerData])\n return\n }\n }\n }\n\n /**\n * Verify if a new connected peer has a topology multicodec and call _onConnect.\n *\n * @param {Connection} connection\n * @returns {void}\n */\n _onPeerConnect (connection) {\n // @ts-ignore - remotePeer does not existist on Connection\n const peerId = connection.remotePeer\n const protocols = this._registrar.peerStore.protoBook.get(peerId)\n\n if (!protocols) {\n return\n }\n\n if (this.multicodecs.find(multicodec => protocols.includes(multicodec))) {\n this.peers.add(peerId.toB58String())\n this._onConnect(peerId, connection)\n }\n }\n}\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('multiaddr')} Multiaddr\n * @typedef {import('../connection/connection')} Connection\n * @typedef {import('.').Options} TopologyOptions\n * @typedef {Object} MulticodecOptions\n * @property {string[]} multicodecs - protocol multicodecs\n * @property {Required} handlers\n * @typedef {import('.').Handlers} Handlers\n */\nmodule.exports = MulticodecTopology\n","'use strict'\n\nexports.codes = {\n /**\n * Signature policy is invalid\n */\n ERR_INVALID_SIGNATURE_POLICY: 'ERR_INVALID_SIGNATURE_POLICY',\n /**\n * Signature policy is unhandled\n */\n ERR_UNHANDLED_SIGNATURE_POLICY: 'ERR_UNHANDLED_SIGNATURE_POLICY',\n\n // Strict signing codes\n\n /**\n * Message expected to have a `signature`, but doesn't\n */\n ERR_MISSING_SIGNATURE: 'ERR_MISSING_SIGNATURE',\n /**\n * Message expected to have a `seqno`, but doesn't\n */\n ERR_MISSING_SEQNO: 'ERR_MISSING_SEQNO',\n /**\n * Message `signature` is invalid\n */\n ERR_INVALID_SIGNATURE: 'ERR_INVALID_SIGNATURE',\n\n // Strict no-signing codes\n\n /**\n * Message expected to not have a `from`, but does\n */\n ERR_UNEXPECTED_FROM: 'ERR_UNEXPECTED_FROM',\n /**\n * Message expected to not have a `signature`, but does\n */\n ERR_UNEXPECTED_SIGNATURE: 'ERR_UNEXPECTED_SIGNATURE',\n /**\n * Message expected to not have a `key`, but does\n */\n ERR_UNEXPECTED_KEY: 'ERR_UNEXPECTED_KEY',\n /**\n * Message expected to not have a `seqno`, but does\n */\n ERR_UNEXPECTED_SEQNO: 'ERR_UNEXPECTED_SEQNO'\n}\n","// If the passed object is an (async) iterable, then get the iterator\n// If it's probably an iterator already (i.e. has next function) return it\n// else throw\nmodule.exports = function getIterator (obj) {\n if (obj) {\n if (typeof obj[Symbol.iterator] === 'function') {\n return obj[Symbol.iterator]()\n }\n if (typeof obj[Symbol.asyncIterator] === 'function') {\n return obj[Symbol.asyncIterator]()\n }\n if (typeof obj.next === 'function') {\n return obj // probably an iterator\n }\n }\n throw new Error('argument is not an iterator or iterable')\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar multiaddr = require('multiaddr');\nvar env_js = require('ipfs-utils/src/env.js');\nvar parseDuration = require('parse-duration');\nvar debug = require('debug');\nvar HTTP = require('ipfs-utils/src/http.js');\nvar mergeOpts = require('merge-options');\nvar toUrlString = require('ipfs-core-utils/to-url-string');\nvar getAgent = require('ipfs-core-utils/agent');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar parseDuration__default = /*#__PURE__*/_interopDefaultLegacy(parseDuration);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar HTTP__default = /*#__PURE__*/_interopDefaultLegacy(HTTP);\nvar mergeOpts__default = /*#__PURE__*/_interopDefaultLegacy(mergeOpts);\nvar getAgent__default = /*#__PURE__*/_interopDefaultLegacy(getAgent);\n\nconst log = debug__default[\"default\"]('ipfs-http-client:lib:error-handler');\nconst merge = mergeOpts__default[\"default\"].bind({ ignoreUndefined: true });\nconst DEFAULT_PROTOCOL = env_js.isBrowser || env_js.isWebWorker ? location.protocol : 'http';\nconst DEFAULT_HOST = env_js.isBrowser || env_js.isWebWorker ? location.hostname : 'localhost';\nconst DEFAULT_PORT = env_js.isBrowser || env_js.isWebWorker ? location.port : '5001';\nconst normalizeOptions = (options = {}) => {\n let url;\n let opts = {};\n let agent;\n if (typeof options === 'string' || multiaddr.Multiaddr.isMultiaddr(options)) {\n url = new URL(toUrlString.toUrlString(options));\n } else if (options instanceof URL) {\n url = options;\n } else if (typeof options.url === 'string' || multiaddr.Multiaddr.isMultiaddr(options.url)) {\n url = new URL(toUrlString.toUrlString(options.url));\n opts = options;\n } else if (options.url instanceof URL) {\n url = options.url;\n opts = options;\n } else {\n opts = options || {};\n const protocol = (opts.protocol || DEFAULT_PROTOCOL).replace(':', '');\n const host = (opts.host || DEFAULT_HOST).split(':')[0];\n const port = opts.port || DEFAULT_PORT;\n url = new URL(`${ protocol }://${ host }:${ port }`);\n }\n if (opts.apiPath) {\n url.pathname = opts.apiPath;\n } else if (url.pathname === '/' || url.pathname === undefined) {\n url.pathname = 'api/v0';\n }\n if (env_js.isNode) {\n const Agent = getAgent__default[\"default\"](url);\n agent = opts.agent || new Agent({\n keepAlive: true,\n maxSockets: 6\n });\n }\n return {\n ...opts,\n host: url.host,\n protocol: url.protocol.replace(':', ''),\n port: Number(url.port),\n apiPath: url.pathname,\n url,\n agent\n };\n};\nconst errorHandler = async response => {\n let msg;\n try {\n if ((response.headers.get('Content-Type') || '').startsWith('application/json')) {\n const data = await response.json();\n log(data);\n msg = data.Message || data.message;\n } else {\n msg = await response.text();\n }\n } catch (err) {\n log('Failed to parse error response', err);\n msg = err.message;\n }\n let error = new HTTP__default[\"default\"].HTTPError(response);\n if (msg) {\n if (msg.includes('deadline has elapsed')) {\n error = new HTTP__default[\"default\"].TimeoutError();\n }\n if (msg && msg.includes('context deadline exceeded')) {\n error = new HTTP__default[\"default\"].TimeoutError();\n }\n }\n if (msg && msg.includes('request timed out')) {\n error = new HTTP__default[\"default\"].TimeoutError();\n }\n if (msg) {\n error.message = msg;\n }\n throw error;\n};\nconst KEBAB_REGEX = /[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g;\nconst kebabCase = str => {\n return str.replace(KEBAB_REGEX, function (match) {\n return '-' + match.toLowerCase();\n });\n};\nconst parseTimeout = value => {\n return typeof value === 'string' ? parseDuration__default[\"default\"](value) : value;\n};\nclass Client extends HTTP__default[\"default\"] {\n constructor(options = {}) {\n const opts = normalizeOptions(options);\n super({\n timeout: parseTimeout(opts.timeout || 0) || undefined,\n headers: opts.headers,\n base: `${ opts.url }`,\n handleError: errorHandler,\n transformSearchParams: search => {\n const out = new URLSearchParams();\n for (const [key, value] of search) {\n if (value !== 'undefined' && value !== 'null' && key !== 'signal') {\n out.append(kebabCase(key), value);\n }\n if (key === 'timeout' && !isNaN(value)) {\n out.append(kebabCase(key), value);\n }\n }\n return out;\n },\n agent: opts.agent\n });\n delete this.get;\n delete this.put;\n delete this.delete;\n delete this.options;\n const fetch = this.fetch;\n this.fetch = (resource, options = {}) => {\n if (typeof resource === 'string' && !resource.startsWith('/')) {\n resource = `${ opts.url }/${ resource }`;\n }\n return fetch.call(this, resource, merge(options, { method: 'POST' }));\n };\n }\n}\nconst HTTPError = HTTP__default[\"default\"].HTTPError;\n\nexports.Client = Client;\nexports.HTTPError = HTTPError;\nexports.errorHandler = errorHandler;\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","'use strict'\n\n// p2p multi-address code\nexports.CODE_P2P = 421\nexports.CODE_CIRCUIT = 290\n\n// Time to wait for a connection to close gracefully before destroying it manually\nexports.CLOSE_TIMEOUT = 2000\n","\"use strict\";\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Package x25519 implements X25519 key agreement.\n */\nvar random_1 = require(\"@stablelib/random\");\nvar wipe_1 = require(\"@stablelib/wipe\");\nexports.PUBLIC_KEY_LENGTH = 32;\nexports.SECRET_KEY_LENGTH = 32;\nexports.SHARED_KEY_LENGTH = 32;\n// Returns new zero-filled 16-element GF (Float64Array).\n// If passed an array of numbers, prefills the returned\n// array with them.\n//\n// We use Float64Array, because we need 48-bit numbers\n// for this implementation.\nfunction gf(init) {\n var r = new Float64Array(16);\n if (init) {\n for (var i = 0; i < init.length; i++) {\n r[i] = init[i];\n }\n }\n return r;\n}\n// Base point.\nvar _9 = new Uint8Array(32);\n_9[0] = 9;\nvar _121665 = gf([0xdb41, 1]);\nfunction car25519(o) {\n var c = 1;\n for (var i = 0; i < 16; i++) {\n var v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c - 1 + 37 * (c - 1);\n}\nfunction sel25519(p, q, b) {\n var c = ~(b - 1);\n for (var i = 0; i < 16; i++) {\n var t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\nfunction pack25519(o, n) {\n var m = gf();\n var t = gf();\n for (var i = 0; i < 16; i++) {\n t[i] = n[i];\n }\n car25519(t);\n car25519(t);\n car25519(t);\n for (var j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (var i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);\n m[i - 1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);\n var b = (m[15] >> 16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1 - b);\n }\n for (var i = 0; i < 16; i++) {\n o[2 * i] = t[i] & 0xff;\n o[2 * i + 1] = t[i] >> 8;\n }\n}\nfunction unpack25519(o, n) {\n for (var i = 0; i < 16; i++) {\n o[i] = n[2 * i] + (n[2 * i + 1] << 8);\n }\n o[15] &= 0x7fff;\n}\nfunction add(o, a, b) {\n for (var i = 0; i < 16; i++) {\n o[i] = a[i] + b[i];\n }\n}\nfunction sub(o, a, b) {\n for (var i = 0; i < 16; i++) {\n o[i] = a[i] - b[i];\n }\n}\nfunction mul(o, a, b) {\n var v, c, t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7], b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11], b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15];\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n // first car\n c = 1;\n v = t0 + c + 65535;\n c = Math.floor(v / 65536);\n t0 = v - c * 65536;\n v = t1 + c + 65535;\n c = Math.floor(v / 65536);\n t1 = v - c * 65536;\n v = t2 + c + 65535;\n c = Math.floor(v / 65536);\n t2 = v - c * 65536;\n v = t3 + c + 65535;\n c = Math.floor(v / 65536);\n t3 = v - c * 65536;\n v = t4 + c + 65535;\n c = Math.floor(v / 65536);\n t4 = v - c * 65536;\n v = t5 + c + 65535;\n c = Math.floor(v / 65536);\n t5 = v - c * 65536;\n v = t6 + c + 65535;\n c = Math.floor(v / 65536);\n t6 = v - c * 65536;\n v = t7 + c + 65535;\n c = Math.floor(v / 65536);\n t7 = v - c * 65536;\n v = t8 + c + 65535;\n c = Math.floor(v / 65536);\n t8 = v - c * 65536;\n v = t9 + c + 65535;\n c = Math.floor(v / 65536);\n t9 = v - c * 65536;\n v = t10 + c + 65535;\n c = Math.floor(v / 65536);\n t10 = v - c * 65536;\n v = t11 + c + 65535;\n c = Math.floor(v / 65536);\n t11 = v - c * 65536;\n v = t12 + c + 65535;\n c = Math.floor(v / 65536);\n t12 = v - c * 65536;\n v = t13 + c + 65535;\n c = Math.floor(v / 65536);\n t13 = v - c * 65536;\n v = t14 + c + 65535;\n c = Math.floor(v / 65536);\n t14 = v - c * 65536;\n v = t15 + c + 65535;\n c = Math.floor(v / 65536);\n t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n // second car\n c = 1;\n v = t0 + c + 65535;\n c = Math.floor(v / 65536);\n t0 = v - c * 65536;\n v = t1 + c + 65535;\n c = Math.floor(v / 65536);\n t1 = v - c * 65536;\n v = t2 + c + 65535;\n c = Math.floor(v / 65536);\n t2 = v - c * 65536;\n v = t3 + c + 65535;\n c = Math.floor(v / 65536);\n t3 = v - c * 65536;\n v = t4 + c + 65535;\n c = Math.floor(v / 65536);\n t4 = v - c * 65536;\n v = t5 + c + 65535;\n c = Math.floor(v / 65536);\n t5 = v - c * 65536;\n v = t6 + c + 65535;\n c = Math.floor(v / 65536);\n t6 = v - c * 65536;\n v = t7 + c + 65535;\n c = Math.floor(v / 65536);\n t7 = v - c * 65536;\n v = t8 + c + 65535;\n c = Math.floor(v / 65536);\n t8 = v - c * 65536;\n v = t9 + c + 65535;\n c = Math.floor(v / 65536);\n t9 = v - c * 65536;\n v = t10 + c + 65535;\n c = Math.floor(v / 65536);\n t10 = v - c * 65536;\n v = t11 + c + 65535;\n c = Math.floor(v / 65536);\n t11 = v - c * 65536;\n v = t12 + c + 65535;\n c = Math.floor(v / 65536);\n t12 = v - c * 65536;\n v = t13 + c + 65535;\n c = Math.floor(v / 65536);\n t13 = v - c * 65536;\n v = t14 + c + 65535;\n c = Math.floor(v / 65536);\n t14 = v - c * 65536;\n v = t15 + c + 65535;\n c = Math.floor(v / 65536);\n t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n o[0] = t0;\n o[1] = t1;\n o[2] = t2;\n o[3] = t3;\n o[4] = t4;\n o[5] = t5;\n o[6] = t6;\n o[7] = t7;\n o[8] = t8;\n o[9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\nfunction square(o, a) {\n mul(o, a, a);\n}\nfunction inv25519(o, inp) {\n var c = gf();\n for (var i = 0; i < 16; i++) {\n c[i] = inp[i];\n }\n for (var i = 253; i >= 0; i--) {\n square(c, c);\n if (i !== 2 && i !== 4) {\n mul(c, c, inp);\n }\n }\n for (var i = 0; i < 16; i++) {\n o[i] = c[i];\n }\n}\nfunction scalarMult(n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80);\n var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf();\n for (var i = 0; i < 31; i++) {\n z[i] = n[i];\n }\n z[31] = (n[31] & 127) | 64;\n z[0] &= 248;\n unpack25519(x, p);\n for (var i = 0; i < 16; i++) {\n b[i] = x[i];\n }\n a[0] = d[0] = 1;\n for (var i = 254; i >= 0; --i) {\n var r = (z[i >>> 3] >>> (i & 7)) & 1;\n sel25519(a, b, r);\n sel25519(c, d, r);\n add(e, a, c);\n sub(a, a, c);\n add(c, b, d);\n sub(b, b, d);\n square(d, e);\n square(f, a);\n mul(a, c, a);\n mul(c, b, e);\n add(e, a, c);\n sub(a, a, c);\n square(b, a);\n sub(c, d, f);\n mul(a, c, _121665);\n add(a, a, d);\n mul(c, c, a);\n mul(a, d, f);\n mul(d, b, x);\n square(b, e);\n sel25519(a, b, r);\n sel25519(c, d, r);\n }\n for (var i = 0; i < 16; i++) {\n x[i + 16] = a[i];\n x[i + 32] = c[i];\n x[i + 48] = b[i];\n x[i + 64] = d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32, x32);\n mul(x16, x16, x32);\n var q = new Uint8Array(32);\n pack25519(q, x16);\n return q;\n}\nexports.scalarMult = scalarMult;\nfunction scalarMultBase(n) {\n return scalarMult(n, _9);\n}\nexports.scalarMultBase = scalarMultBase;\nfunction generateKeyPairFromSeed(seed) {\n if (seed.length !== exports.SECRET_KEY_LENGTH) {\n throw new Error(\"x25519: seed must be \" + exports.SECRET_KEY_LENGTH + \" bytes\");\n }\n var secretKey = new Uint8Array(seed);\n var publicKey = scalarMultBase(secretKey);\n return {\n publicKey: publicKey,\n secretKey: secretKey\n };\n}\nexports.generateKeyPairFromSeed = generateKeyPairFromSeed;\nfunction generateKeyPair(prng) {\n var seed = random_1.randomBytes(32, prng);\n var result = generateKeyPairFromSeed(seed);\n wipe_1.wipe(seed);\n return result;\n}\nexports.generateKeyPair = generateKeyPair;\n/**\n * Returns a shared key between our secret key and a peer's public key.\n *\n * Throws an error if the given keys are of wrong length.\n *\n * If rejectZero is true throws if the calculated shared key is all-zero.\n * From RFC 7748:\n *\n * > Protocol designers using Diffie-Hellman over the curves defined in\n * > this document must not assume \"contributory behavior\". Specially,\n * > contributory behavior means that both parties' private keys\n * > contribute to the resulting shared key. Since curve25519 and\n * > curve448 have cofactors of 8 and 4 (respectively), an input point of\n * > small order will eliminate any contribution from the other party's\n * > private key. This situation can be detected by checking for the all-\n * > zero output, which implementations MAY do, as specified in Section 6.\n * > However, a large number of existing implementations do not do this.\n *\n * IMPORTANT: the returned key is a raw result of scalar multiplication.\n * To use it as a key material, hash it with a cryptographic hash function.\n */\nfunction sharedKey(mySecretKey, theirPublicKey, rejectZero) {\n if (rejectZero === void 0) { rejectZero = false; }\n if (mySecretKey.length !== exports.PUBLIC_KEY_LENGTH) {\n throw new Error(\"X25519: incorrect secret key length\");\n }\n if (theirPublicKey.length !== exports.PUBLIC_KEY_LENGTH) {\n throw new Error(\"X25519: incorrect public key length\");\n }\n var result = scalarMult(mySecretKey, theirPublicKey);\n if (rejectZero) {\n var zeros = 0;\n for (var i = 0; i < result.length; i++) {\n zeros |= result[i];\n }\n if (zeros === 0) {\n throw new Error(\"X25519: invalid shared key\");\n }\n }\n return result;\n}\nexports.sharedKey = sharedKey;\n//# sourceMappingURL=x25519.js.map","'use strict'\n\nconst { Buffer } = require('buffer')\nconst BufferList = require('bl/BufferList')\n\nmodule.exports = async function * (source) {\n for await (const b of source) {\n if (Buffer.isBuffer(b)) {\n yield b\n } else if (BufferList.isBufferList(b)) {\n yield b.slice()\n } else {\n yield Buffer.from(b)\n }\n }\n}\n\nmodule.exports.toBuffer = module.exports\n\nmodule.exports.toList = async function * (source) {\n for await (const b of source) {\n if (Buffer.isBuffer(b)) {\n yield new BufferList().append(b)\n } else if (BufferList.isBufferList(b)) {\n yield b\n } else {\n yield new BufferList().append(Buffer.from(b))\n }\n }\n}\n","\"use strict\";\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Package constant-time provides functions for performing algorithmically constant-time operations.\n */\n/**\n * NOTE! Due to the inability to guarantee real constant time evaluation of\n * anything in JavaScript VM, this is module is the best effort.\n */\n/**\n * Returns resultIfOne if subject is 1, or resultIfZero if subject is 0.\n *\n * Supports only 32-bit integers, so resultIfOne or resultIfZero are not\n * integers, they'll be converted to them with bitwise operations.\n */\nfunction select(subject, resultIfOne, resultIfZero) {\n return (~(subject - 1) & resultIfOne) | ((subject - 1) & resultIfZero);\n}\nexports.select = select;\n/**\n * Returns 1 if a <= b, or 0 if not.\n * Arguments must be positive 32-bit integers less than or equal to 2^31 - 1.\n */\nfunction lessOrEqual(a, b) {\n return (((a | 0) - (b | 0) - 1) >>> 31) & 1;\n}\nexports.lessOrEqual = lessOrEqual;\n/**\n * Returns 1 if a and b are of equal length and their contents\n * are equal, or 0 otherwise.\n *\n * Note that unlike in equal(), zero-length inputs are considered\n * the same, so this function will return 1.\n */\nfunction compare(a, b) {\n if (a.length !== b.length) {\n return 0;\n }\n var result = 0;\n for (var i = 0; i < a.length; i++) {\n result |= a[i] ^ b[i];\n }\n return (1 & ((result - 1) >>> 8));\n}\nexports.compare = compare;\n/**\n * Returns true if a and b are of equal non-zero length,\n * and their contents are equal, or false otherwise.\n *\n * Note that unlike in compare() zero-length inputs are considered\n * _not_ equal, so this function will return false.\n */\nfunction equal(a, b) {\n if (a.length === 0 || b.length === 0) {\n return false;\n }\n return compare(a, b) !== 0;\n}\nexports.equal = equal;\n//# sourceMappingURL=constant-time.js.map","'use strict'\n\nmodule.exports = require('./lib').default\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction xor(a, b) {\n if (a.length !== b.length) {\n throw new Error('Inputs should have the same length');\n }\n const result = new Uint8Array(a.length);\n for (let i = 0; i < a.length; i++) {\n result[i] = a[i] ^ b[i];\n }\n return result;\n}\n\nexports.xor = xor;\n","'use strict'\n\nmodule.exports = {\n DIAL_TIMEOUT: 30e3, // How long in ms a dial attempt is allowed to take\n MAX_PARALLEL_DIALS: 100, // Maximum allowed concurrent dials\n MAX_PER_PEER_DIALS: 4, // Allowed parallel dials per DialRequest\n MAX_ADDRS_TO_DIAL: 25, // Maximum number of allowed addresses to attempt to dial\n METRICS: {\n computeThrottleMaxQueueSize: 1000,\n computeThrottleTimeout: 2000,\n movingAverageIntervals: [\n 60 * 1000, // 1 minute\n 5 * 60 * 1000, // 5 minutes\n 15 * 60 * 1000 // 15 minutes\n ],\n maxOldPeersRetention: 50\n }\n}\n","'use strict'\n\nconst minute = 60 * 1000\n\nmodule.exports = {\n ADVERTISE_BOOT_DELAY: 15 * minute, // Delay before HOP relay service is advertised on the network\n ADVERTISE_TTL: 30 * minute, // Delay Between HOP relay service advertisements on the network\n CIRCUIT_PROTO_CODE: 290, // Multicodec code\n HOP_METADATA_KEY: 'hop_relay', // PeerStore metadaBook key for HOP relay service\n HOP_METADATA_VALUE: 'true', // PeerStore metadaBook value for HOP relay service\n RELAY_RENDEZVOUS_NS: '/libp2p/relay' // Relay HOP relay service namespace for discovery\n}\n","'use strict'\n\nconst { Multiaddr } = require('multiaddr')\nconst PeerId = require('peer-id')\nconst arrayEquals = require('libp2p-utils/src/array-equals')\n\nconst { PeerRecord: Protobuf } = require('./peer-record')\nconst {\n ENVELOPE_DOMAIN_PEER_RECORD,\n ENVELOPE_PAYLOAD_TYPE_PEER_RECORD\n} = require('./consts')\n\n/**\n * @typedef {import('../../peer-store/address-book.js').Address} Address\n * @typedef {import('libp2p-interfaces/src/record/types').Record} Record\n */\n\n/**\n * @implements {Record}\n */\nclass PeerRecord {\n /**\n * The PeerRecord is used for distributing peer routing records across the network.\n * It contains the peer's reachable listen addresses.\n *\n * @class\n * @param {Object} params\n * @param {PeerId} params.peerId\n * @param {Multiaddr[]} params.multiaddrs - addresses of the associated peer.\n * @param {number} [params.seqNumber] - monotonically-increasing sequence counter that's used to order PeerRecords in time.\n */\n constructor ({ peerId, multiaddrs = [], seqNumber = Date.now() }) {\n this.domain = ENVELOPE_DOMAIN_PEER_RECORD\n this.codec = ENVELOPE_PAYLOAD_TYPE_PEER_RECORD\n\n this.peerId = peerId\n this.multiaddrs = multiaddrs\n this.seqNumber = seqNumber\n\n // Cache\n this._marshal = undefined\n }\n\n /**\n * Marshal a record to be used in an envelope.\n *\n * @returns {Uint8Array}\n */\n marshal () {\n if (this._marshal) {\n return this._marshal\n }\n\n this._marshal = Protobuf.encode({\n peerId: this.peerId.toBytes(),\n seq: this.seqNumber,\n addresses: this.multiaddrs.map((m) => ({\n multiaddr: m.bytes\n }))\n }).finish()\n\n return this._marshal\n }\n\n /**\n * Returns true if `this` record equals the `other`.\n *\n * @param {unknown} other\n * @returns {boolean}\n */\n equals (other) {\n if (!(other instanceof PeerRecord)) {\n return false\n }\n\n // Validate PeerId\n if (!this.peerId.equals(other.peerId)) {\n return false\n }\n\n // Validate seqNumber\n if (this.seqNumber !== other.seqNumber) {\n return false\n }\n\n // Validate multiaddrs\n if (!arrayEquals(this.multiaddrs, other.multiaddrs)) {\n return false\n }\n\n return true\n }\n}\n\n/**\n * Unmarshal Peer Record Protobuf.\n *\n * @param {Uint8Array} buf - marshaled peer record.\n * @returns {PeerRecord}\n */\nPeerRecord.createFromProtobuf = (buf) => {\n const peerRecord = Protobuf.decode(buf)\n\n const peerId = PeerId.createFromBytes(peerRecord.peerId)\n const multiaddrs = (peerRecord.addresses || []).map((a) => new Multiaddr(a.multiaddr))\n const seqNumber = Number(peerRecord.seq)\n\n return new PeerRecord({ peerId, multiaddrs, seqNumber })\n}\n\nPeerRecord.DOMAIN = ENVELOPE_DOMAIN_PEER_RECORD\n\nmodule.exports = PeerRecord\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:circuit:stream-handler'), {\n error: debug('libp2p:circuit:stream-handler:err')\n})\n\nconst lp = require('it-length-prefixed')\n// @ts-ignore it-handshake does not export types\nconst handshake = require('it-handshake')\nconst { CircuitRelay } = require('../protocol')\n\n/**\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay\n */\n\nclass StreamHandler {\n /**\n * Create a stream handler for connection\n *\n * @class\n * @param {object} options\n * @param {MuxedStream} options.stream - A duplex iterable\n * @param {number} [options.maxLength = 4096] - max bytes length of message\n */\n constructor ({ stream, maxLength = 4096 }) {\n this.stream = stream\n\n this.shake = handshake(this.stream)\n // @ts-ignore options are not optional\n this.decoder = lp.decode.fromReader(this.shake.reader, { maxDataLength: maxLength })\n }\n\n /**\n * Read and decode message\n *\n * @async\n */\n async read () {\n const msg = await this.decoder.next()\n if (msg.value) {\n const value = CircuitRelay.decode(msg.value.slice())\n log('read message type', value.type)\n return value\n }\n\n log('read received no value, closing stream')\n // End the stream, we didn't get data\n this.close()\n }\n\n /**\n * Encode and write array of buffers\n *\n * @param {ICircuitRelay} msg - An unencoded CircuitRelay protobuf message\n * @returns {void}\n */\n write (msg) {\n log('write message type %s', msg.type)\n // @ts-ignore lp.encode expects type type 'Buffer | BufferList', not 'Uint8Array'\n this.shake.write(lp.encode.single(CircuitRelay.encode(msg).finish()))\n }\n\n /**\n * Return the handshake rest stream and invalidate handler\n *\n * @returns {*} A duplex iterable\n */\n rest () {\n this.shake.rest()\n return this.shake.stream\n }\n\n /**\n * @param {ICircuitRelay} msg - An unencoded CircuitRelay protobuf message\n */\n end (msg) {\n this.write(msg)\n this.close()\n }\n\n /**\n * Close the stream\n *\n * @returns {void}\n */\n close () {\n log('closing the stream')\n this.rest().sink([])\n }\n}\n\nmodule.exports = StreamHandler\n","async function* _batch(size, iterable) {\n let dataBatch = [];\n for await (const data of iterable) {\n dataBatch.push(data);\n if (dataBatch.length === size) {\n yield dataBatch;\n dataBatch = [];\n }\n }\n if (dataBatch.length > 0) {\n yield dataBatch;\n }\n}\nfunction* _syncBatch(size, iterable) {\n let dataBatch = [];\n for (const data of iterable) {\n dataBatch.push(data);\n if (dataBatch.length === size) {\n yield dataBatch;\n dataBatch = [];\n }\n }\n if (dataBatch.length > 0) {\n yield dataBatch;\n }\n}\nfunction batch(size, iterable) {\n if (iterable === undefined) {\n return curriedIterable => batch(size, curriedIterable);\n }\n if (iterable[Symbol.asyncIterator]) {\n return _batch(size, iterable);\n }\n return _syncBatch(size, iterable);\n}\n\nfunction getIterator(iterable) {\n if (typeof iterable.next === 'function') {\n return iterable;\n }\n if (typeof iterable[Symbol.iterator] === 'function') {\n return iterable[Symbol.iterator]();\n }\n if (typeof iterable[Symbol.asyncIterator] === 'function') {\n return iterable[Symbol.asyncIterator]();\n }\n throw new TypeError('\"values\" does not to conform to any of the iterator or iterable protocols');\n}\n\nfunction defer() {\n let reject;\n let resolve;\n const promise = new Promise((resolveFunc, rejectFunc) => {\n resolve = resolveFunc;\n reject = rejectFunc;\n });\n return {\n promise,\n reject,\n resolve,\n };\n}\n\n/// \nfunction _buffer(size, iterable) {\n const iterator = getIterator(iterable);\n const resultQueue = [];\n const readQueue = [];\n let reading = false;\n let ended = false;\n function fulfillReadQueue() {\n while (readQueue.length > 0 && resultQueue.length > 0) {\n const readDeferred = readQueue.shift();\n const { error, value } = resultQueue.shift();\n if (error) {\n readDeferred.reject(error);\n }\n else {\n readDeferred.resolve({ done: false, value });\n }\n }\n while (readQueue.length > 0 && ended) {\n const { resolve } = readQueue.shift();\n resolve({ done: true, value: undefined });\n }\n }\n async function fillQueue() {\n if (ended) {\n return;\n }\n if (reading) {\n return;\n }\n if (resultQueue.length >= size) {\n return;\n }\n reading = true;\n try {\n const { done, value } = await iterator.next();\n if (done) {\n ended = true;\n }\n else {\n resultQueue.push({ value });\n }\n }\n catch (error) {\n ended = true;\n resultQueue.push({ error });\n }\n fulfillReadQueue();\n reading = false;\n fillQueue();\n }\n async function next() {\n if (resultQueue.length > 0) {\n const { error, value } = resultQueue.shift();\n if (error) {\n throw error;\n }\n fillQueue();\n return { done: false, value };\n }\n if (ended) {\n return { done: true, value: undefined }; // stupid ts\n }\n const deferred = defer();\n readQueue.push(deferred);\n fillQueue();\n return deferred.promise;\n }\n const asyncIterableIterator = {\n next,\n [Symbol.asyncIterator]: () => asyncIterableIterator,\n };\n return asyncIterableIterator;\n}\nfunction* syncBuffer(size, iterable) {\n const valueQueue = [];\n let e;\n try {\n for (const value of iterable) {\n valueQueue.push(value);\n if (valueQueue.length <= size) {\n continue;\n }\n yield valueQueue.shift();\n }\n }\n catch (error) {\n e = error;\n }\n for (const value of valueQueue) {\n yield value;\n }\n if (e) {\n throw e;\n }\n}\nfunction buffer(size, iterable) {\n if (iterable === undefined) {\n return curriedIterable => buffer(size, curriedIterable);\n }\n if (size === 0) {\n return iterable;\n }\n if (iterable[Symbol.asyncIterator]) {\n return _buffer(size, iterable);\n }\n return syncBuffer(size, iterable);\n}\n\nasync function _collect(iterable) {\n const values = [];\n for await (const value of iterable) {\n values.push(value);\n }\n return values;\n}\nfunction collect(iterable) {\n if (iterable[Symbol.asyncIterator]) {\n return _collect(iterable);\n }\n return Array.from(iterable);\n}\n\nasync function* _concat(iterables) {\n for await (const iterable of iterables) {\n yield* iterable;\n }\n}\nfunction* _syncConcat(iterables) {\n for (const iterable of iterables) {\n yield* iterable;\n }\n}\nfunction concat(...iterables) {\n const hasAnyAsync = iterables.find(itr => itr[Symbol.asyncIterator] !== undefined);\n if (hasAnyAsync) {\n return _concat(iterables);\n }\n else {\n return _syncConcat(iterables);\n }\n}\n\nasync function _consume(iterable) {\n for await (const val of iterable) {\n // do nothing\n }\n}\nfunction consume(iterable) {\n if (iterable[Symbol.asyncIterator]) {\n return _consume(iterable);\n }\n for (const val of iterable) {\n // do nothing\n }\n}\n\nasync function* _filter(filterFunc, iterable) {\n for await (const data of iterable) {\n if (await filterFunc(data)) {\n yield data;\n }\n }\n}\nfunction filter(filterFunc, iterable) {\n if (iterable === undefined) {\n return (curriedIterable) => _filter(filterFunc, curriedIterable);\n }\n return _filter(filterFunc, iterable);\n}\n\nasync function* flatten(iterable) {\n for await (const maybeItr of iterable) {\n if (maybeItr && typeof maybeItr !== 'string' && (maybeItr[Symbol.iterator] || maybeItr[Symbol.asyncIterator])) {\n yield* flatten(maybeItr);\n }\n else {\n yield maybeItr;\n }\n }\n}\n\nasync function* _map(func, iterable) {\n for await (const val of iterable) {\n yield await func(val);\n }\n}\nfunction map(func, iterable) {\n if (iterable === undefined) {\n return curriedIterable => _map(func, curriedIterable);\n }\n return _map(func, iterable);\n}\n\nfunction flatMap(func, iterable) {\n if (iterable === undefined) {\n return curriedIterable => flatMap(func, curriedIterable);\n }\n return filter(i => i !== undefined && i !== null, flatten(map(func, iterable)));\n}\n\nfunction _flatTransform(concurrency, func, iterable) {\n const iterator = getIterator(iterable);\n const resultQueue = [];\n const readQueue = [];\n let ended = false;\n let reading = false;\n let inflightCount = 0;\n let lastError = null;\n function fulfillReadQueue() {\n while (readQueue.length > 0 && resultQueue.length > 0) {\n const { resolve } = readQueue.shift();\n const value = resultQueue.shift();\n resolve({ done: false, value });\n }\n while (readQueue.length > 0 && inflightCount === 0 && ended) {\n const { resolve, reject } = readQueue.shift();\n if (lastError) {\n reject(lastError);\n lastError = null;\n }\n else {\n resolve({ done: true, value: undefined });\n }\n }\n }\n async function fillQueue() {\n if (ended) {\n fulfillReadQueue();\n return;\n }\n if (reading) {\n return;\n }\n if (inflightCount + resultQueue.length >= concurrency) {\n return;\n }\n reading = true;\n inflightCount++;\n try {\n const { done, value } = await iterator.next();\n if (done) {\n ended = true;\n inflightCount--;\n fulfillReadQueue();\n }\n else {\n mapAndQueue(value);\n }\n }\n catch (error) {\n ended = true;\n inflightCount--;\n lastError = error;\n fulfillReadQueue();\n }\n reading = false;\n fillQueue();\n }\n async function mapAndQueue(itrValue) {\n try {\n const value = await func(itrValue);\n if (value && value[Symbol.asyncIterator]) {\n for await (const asyncVal of value) {\n resultQueue.push(asyncVal);\n }\n }\n else {\n resultQueue.push(value);\n }\n }\n catch (error) {\n ended = true;\n lastError = error;\n }\n inflightCount--;\n fulfillReadQueue();\n fillQueue();\n }\n async function next() {\n if (resultQueue.length === 0) {\n const deferred = defer();\n readQueue.push(deferred);\n fillQueue();\n return deferred.promise;\n }\n const value = resultQueue.shift();\n fillQueue();\n return { done: false, value };\n }\n const asyncIterableIterator = {\n next,\n [Symbol.asyncIterator]: () => asyncIterableIterator,\n };\n return asyncIterableIterator;\n}\nfunction flatTransform(concurrency, func, iterable) {\n if (func === undefined) {\n return (curriedFunc, curriedIterable) => curriedIterable\n ? flatTransform(concurrency, curriedFunc, curriedIterable)\n : flatTransform(concurrency, curriedFunc);\n }\n if (iterable === undefined) {\n return (curriedIterable) => flatTransform(concurrency, func, curriedIterable);\n }\n return filter(i => i !== undefined && i !== null, flatten(_flatTransform(concurrency, func, iterable)));\n}\n\nasync function onceReadable(stream) {\n return new Promise(resolve => {\n stream.once('readable', () => {\n resolve();\n });\n });\n}\nasync function* _fromStream(stream) {\n while (true) {\n const data = stream.read();\n if (data !== null) {\n yield data;\n continue;\n }\n if (stream._readableState.ended) {\n break;\n }\n await onceReadable(stream);\n }\n}\nfunction fromStream(stream) {\n if (typeof stream[Symbol.asyncIterator] === 'function') {\n return stream;\n }\n return _fromStream(stream);\n}\n\nasync function* merge(...iterables) {\n const sources = new Set(iterables.map(getIterator));\n while (sources.size > 0) {\n for (const iterator of sources) {\n const nextVal = await iterator.next();\n if (nextVal.done) {\n sources.delete(iterator);\n }\n else {\n yield nextVal.value;\n }\n }\n }\n}\n\nfunction pipeline(firstFn, ...fns) {\n let previousFn = firstFn();\n for (const func of fns) {\n previousFn = func(previousFn);\n }\n return previousFn;\n}\n\nasync function* _parallelMap(concurrency, func, iterable) {\n let transformError = null;\n const wrapFunc = value => ({\n value: func(value),\n });\n const stopOnError = async function* (source) {\n for await (const value of source) {\n if (transformError) {\n return;\n }\n yield value;\n }\n };\n const output = pipeline(() => iterable, buffer(1), stopOnError, map(wrapFunc), buffer(concurrency - 1));\n const itr = getIterator(output);\n while (true) {\n const { value, done } = await itr.next();\n if (done) {\n break;\n }\n try {\n const val = await value.value;\n if (!transformError) {\n yield val;\n }\n }\n catch (error) {\n transformError = error;\n }\n }\n if (transformError) {\n throw transformError;\n }\n}\nfunction parallelMap(concurrency, func, iterable) {\n if (func === undefined) {\n return (curriedFunc, curriedIterable) => parallelMap(concurrency, curriedFunc, curriedIterable);\n }\n if (iterable === undefined) {\n return curriedIterable => parallelMap(concurrency, func, curriedIterable);\n }\n if (concurrency === 1) {\n return map(func, iterable);\n }\n return _parallelMap(concurrency, func, iterable);\n}\n\nfunction parallelFlatMap(concurrency, func, iterable) {\n if (func === undefined) {\n return (curriedFunc, curriedIterable) => curriedIterable\n ? parallelFlatMap(concurrency, curriedFunc, curriedIterable)\n : parallelFlatMap(concurrency, curriedFunc);\n }\n if (iterable === undefined) {\n return (curriedIterable) => parallelFlatMap(concurrency, func, curriedIterable);\n }\n return filter(i => i !== undefined && i !== null, flatten(parallelMap(concurrency, func, iterable)));\n}\n\n/// \nasync function* parallelMerge(...iterables) {\n const inputs = iterables.map(getIterator);\n const concurrentWork = new Set();\n const values = new Map();\n let lastError = null;\n let errCb = null;\n let valueCb = null;\n const notifyError = err => {\n lastError = err;\n if (errCb) {\n errCb(err);\n }\n };\n const notifyDone = value => {\n if (valueCb) {\n valueCb(value);\n }\n };\n const waitForQueue = () => new Promise((resolve, reject) => {\n if (lastError) {\n reject(lastError);\n }\n if (values.size > 0) {\n return resolve();\n }\n valueCb = resolve;\n errCb = reject;\n });\n const queueNext = input => {\n const nextVal = Promise.resolve(input.next()).then(async ({ done, value }) => {\n if (!done) {\n values.set(input, value);\n }\n concurrentWork.delete(nextVal);\n });\n concurrentWork.add(nextVal);\n nextVal.then(notifyDone, notifyError);\n };\n for (const input of inputs) {\n queueNext(input);\n }\n while (true) {\n // We technically don't have to check `values.size` as the for loop should have emptied it\n // However I haven't yet found specs verifying that behavior, only tests\n // the guard in waitForQueue() checking for values is in place for the same reason\n if (concurrentWork.size === 0 && values.size === 0) {\n return;\n }\n await waitForQueue();\n for (const [input, value] of values) {\n values.delete(input);\n yield value;\n queueNext(input);\n }\n }\n}\n\nasync function _reduce(func, start, iterable) {\n let value = start;\n for await (const nextItem of iterable) {\n value = await func(value, nextItem);\n }\n return value;\n}\nfunction reduce(func, start, iterable) {\n if (start === undefined) {\n return (curriedStart, curriedIterable) => curriedIterable ? _reduce(func, curriedStart, curriedIterable) : reduce(func, curriedStart);\n }\n if (iterable === undefined) {\n return (curriedIterable) => reduce(func, start, curriedIterable);\n }\n return _reduce(func, start, iterable);\n}\n\nasync function* _take(count, iterable) {\n let taken = 0;\n for await (const val of iterable) {\n yield await val;\n taken++;\n if (taken >= count) {\n break;\n }\n }\n}\nfunction* _syncTake(count, iterable) {\n let taken = 0;\n for (const val of iterable) {\n yield val;\n taken++;\n if (taken >= count) {\n break;\n }\n }\n}\nfunction take(count, iterable) {\n if (iterable === undefined) {\n return curriedIterable => take(count, curriedIterable);\n }\n if (iterable[Symbol.asyncIterator]) {\n return _take(count, iterable);\n }\n return _syncTake(count, iterable);\n}\n\nasync function* _asyncTap(func, iterable) {\n for await (const val of iterable) {\n await func(val);\n yield val;\n }\n}\nfunction tap(func, iterable) {\n if (iterable === undefined) {\n return (curriedIterable) => _asyncTap(func, curriedIterable);\n }\n return _asyncTap(func, iterable);\n}\n\nfunction addTime(a, b) {\n let seconds = a[0] + b[0];\n let nanoseconds = a[1] + b[1];\n if (nanoseconds >= 1000000000) {\n const remainder = nanoseconds % 1000000000;\n seconds += (nanoseconds - remainder) / 1000000000;\n nanoseconds = remainder;\n }\n return [seconds, nanoseconds];\n}\nasync function* _asyncTime(config, iterable) {\n const itr = iterable[Symbol.asyncIterator]();\n let total = [0, 0];\n while (true) {\n const start = process.hrtime();\n const { value, done } = await itr.next();\n const delta = process.hrtime(start);\n total = addTime(total, delta);\n if (config.progress) {\n config.progress(delta, total);\n }\n if (done) {\n if (config.total) {\n config.total(total);\n }\n return value;\n }\n yield value;\n }\n}\nfunction* _syncTime(config, iterable) {\n const itr = iterable[Symbol.iterator]();\n let total = [0, 0];\n while (true) {\n const start = process.hrtime();\n const { value, done } = itr.next();\n const delta = process.hrtime(start);\n total = addTime(total, delta);\n if (config.progress) {\n config.progress(delta, total);\n }\n if (done) {\n if (config.total) {\n config.total(total);\n }\n return value;\n }\n yield value;\n }\n}\nfunction time(config = {}, iterable) {\n if (iterable === undefined) {\n return curriedIterable => time(config, curriedIterable);\n }\n if (iterable[Symbol.asyncIterator] !== undefined) {\n return _asyncTime(config, iterable);\n }\n else {\n return _syncTime(config, iterable);\n }\n}\n\nfunction _transform(concurrency, func, iterable) {\n const iterator = getIterator(iterable);\n const resultQueue = [];\n const readQueue = [];\n let ended = false;\n let reading = false;\n let inflightCount = 0;\n let lastError = null;\n function fulfillReadQueue() {\n while (readQueue.length > 0 && resultQueue.length > 0) {\n const { resolve } = readQueue.shift();\n const value = resultQueue.shift();\n resolve({ done: false, value });\n }\n while (readQueue.length > 0 && inflightCount === 0 && ended) {\n const { resolve, reject } = readQueue.shift();\n if (lastError) {\n reject(lastError);\n lastError = null;\n }\n else {\n resolve({ done: true, value: undefined });\n }\n }\n }\n async function fillQueue() {\n if (ended) {\n fulfillReadQueue();\n return;\n }\n if (reading) {\n return;\n }\n if (inflightCount + resultQueue.length >= concurrency) {\n return;\n }\n reading = true;\n inflightCount++;\n try {\n const { done, value } = await iterator.next();\n if (done) {\n ended = true;\n inflightCount--;\n fulfillReadQueue();\n }\n else {\n mapAndQueue(value);\n }\n }\n catch (error) {\n ended = true;\n inflightCount--;\n lastError = error;\n fulfillReadQueue();\n }\n reading = false;\n fillQueue();\n }\n async function mapAndQueue(itrValue) {\n try {\n const value = await func(itrValue);\n resultQueue.push(value);\n }\n catch (error) {\n ended = true;\n lastError = error;\n }\n inflightCount--;\n fulfillReadQueue();\n fillQueue();\n }\n async function next() {\n if (resultQueue.length === 0) {\n const deferred = defer();\n readQueue.push(deferred);\n fillQueue();\n return deferred.promise;\n }\n const value = resultQueue.shift();\n fillQueue();\n return { done: false, value };\n }\n const asyncIterableIterator = {\n next,\n [Symbol.asyncIterator]: () => asyncIterableIterator,\n };\n return asyncIterableIterator;\n}\nfunction transform(concurrency, func, iterable) {\n if (func === undefined) {\n return (curriedFunc, curriedIterable) => curriedIterable\n ? transform(concurrency, curriedFunc, curriedIterable)\n : transform(concurrency, curriedFunc);\n }\n if (iterable === undefined) {\n return (curriedIterable) => transform(concurrency, func, curriedIterable);\n }\n return _transform(concurrency, func, iterable);\n}\n\nasync function _writeToStream(stream, iterable) {\n let lastError = null;\n let errCb = null;\n let drainCb = null;\n const notifyError = err => {\n lastError = err;\n if (errCb) {\n errCb(err);\n }\n };\n const notifyDrain = () => {\n if (drainCb) {\n drainCb();\n }\n };\n const cleanup = () => {\n stream.removeListener('error', notifyError);\n stream.removeListener('drain', notifyDrain);\n };\n stream.once('error', notifyError);\n const waitForDrain = () => new Promise((resolve, reject) => {\n if (lastError) {\n return reject(lastError);\n }\n stream.once('drain', notifyDrain);\n drainCb = resolve;\n errCb = reject;\n });\n for await (const value of iterable) {\n if (stream.write(value) === false) {\n await waitForDrain();\n }\n if (lastError) {\n break;\n }\n }\n cleanup();\n if (lastError) {\n throw lastError;\n }\n}\nfunction writeToStream(stream, iterable) {\n if (iterable === undefined) {\n return (curriedIterable) => _writeToStream(stream, curriedIterable);\n }\n return _writeToStream(stream, iterable);\n}\n\nexport { batch, buffer, collect, concat, consume, filter, flatMap, flatTransform, flatten, fromStream, getIterator, map, merge, parallelFlatMap, parallelMap, parallelMerge, pipeline, reduce, take, tap, time, transform, writeToStream };\n","'use strict'\n\nconst BufferList = require('bl/BufferList')\nconst lp = require('it-length-prefixed')\nconst pipe = require('it-pipe')\nconst errCode = require('err-code')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst first = require('it-first')\n\nconst NewLine = uint8ArrayFromString('\\n')\n\nexports.encode = buffer => lp.encode.single(new BufferList([buffer, NewLine]))\n\n// `write` encodes and writes a single buffer\nexports.write = (writer, buffer) => writer.push(exports.encode(buffer))\n\n// `writeAll` behaves like `write`, except it encodes an array of items as a single write\nexports.writeAll = (writer, buffers) => {\n writer.push(buffers.reduce((bl, buffer) => bl.append(exports.encode(buffer)), new BufferList()))\n}\n\nexports.read = async reader => {\n let byteLength = 1 // Read single byte chunks until the length is known\n const varByteSource = { // No return impl - we want the reader to remain readable\n [Symbol.asyncIterator] () { return this },\n next: () => reader.next(byteLength)\n }\n\n // Once the length has been parsed, read chunk for that length\n const onLength = l => { byteLength = l }\n const buf = await pipe(varByteSource, lp.decode({ onLength }), first)\n\n if (buf.get(buf.length - 1) !== NewLine[0]) {\n throw errCode(new Error('missing newline'), 'ERR_INVALID_MULTISTREAM_SELECT_MESSAGE')\n }\n\n return buf.shallowSlice(0, -1) // Remove newline\n}\n","// This alphabet uses `A-Za-z0-9_-` symbols. The genetic algorithm helped\n// optimize the gzip compression for this alphabet.\nlet urlAlphabet =\n 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW'\n\nexport { urlAlphabet }\n","// This file replaces `index.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nimport { urlAlphabet } from './url-alphabet/index.js'\n\nif (process.env.NODE_ENV !== 'production') {\n // All bundlers will remove this block in the production bundle.\n if (\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative' &&\n typeof crypto === 'undefined'\n ) {\n throw new Error(\n 'React Native does not have a built-in secure random generator. ' +\n 'If you don’t need unpredictable IDs use `nanoid/non-secure`. ' +\n 'For secure IDs, import `react-native-get-random-values` ' +\n 'before Nano ID.'\n )\n }\n if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {\n throw new Error(\n 'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +\n ' before importing Nano ID to fix IE 11 support'\n )\n }\n if (typeof crypto === 'undefined') {\n throw new Error(\n 'Your browser does not have secure random generator. ' +\n 'If you don’t need unpredictable IDs, you can use nanoid/non-secure.'\n )\n }\n}\n\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\n\nlet customRandom = (alphabet, size, getRandom) => {\n // First, a bitmask is necessary to generate the ID. The bitmask makes bytes\n // values closer to the alphabet size. The bitmask calculates the closest\n // `2^31 - 1` number, which exceeds the alphabet size.\n // For example, the bitmask for the alphabet size 30 is 31 (00011111).\n // `Math.clz32` is not used, because it is not available in browsers.\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n // Though, the bitmask solution is not perfect since the bytes exceeding\n // the alphabet size are refused. Therefore, to reliably generate the ID,\n // the random bytes redundancy has to be satisfied.\n\n // Note: every hardware random generator call is performance expensive,\n // because the system call for entropy collection takes a lot of time.\n // So, to avoid additional system calls, extra bytes are requested in advance.\n\n // Next, a step determines how many random bytes to generate.\n // The number of random bytes gets decided upon the ID size, mask,\n // alphabet size, and magic number 1.6 (using 1.6 peaks at performance\n // according to benchmarks).\n\n // `-~f => Math.ceil(f)` if f is a float\n // `-~i => i + 1` if i is an integer\n let step = -~((1.6 * mask * size) / alphabet.length)\n\n return () => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let j = step\n while (j--) {\n // Adding `|| ''` refuses a random byte that exceeds the alphabet size.\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\n\nlet customAlphabet = (alphabet, size) => customRandom(alphabet, size, random)\n\nlet nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array(size))\n\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n while (size--) {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n let byte = bytes[size] & 63\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36)\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte < 63) {\n id += '_'\n } else {\n id += '-'\n }\n }\n return id\n}\n\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","export const AddressZero = \"0x0000000000000000000000000000000000000000\";\n//# sourceMappingURL=addresses.js.map","\"use strict\";\nimport { deepCopy, defineReadOnly } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { JsonRpcProvider } from \"./json-rpc-provider\";\nlet _nextId = 1;\nfunction buildWeb3LegacyFetcher(provider, sendFunc) {\n const fetcher = \"Web3LegacyFetcher\";\n return function (method, params) {\n const request = {\n method: method,\n params: params,\n id: (_nextId++),\n jsonrpc: \"2.0\"\n };\n return new Promise((resolve, reject) => {\n this.emit(\"debug\", {\n action: \"request\",\n fetcher,\n request: deepCopy(request),\n provider: this\n });\n sendFunc(request, (error, response) => {\n if (error) {\n this.emit(\"debug\", {\n action: \"response\",\n fetcher,\n error,\n request,\n provider: this\n });\n return reject(error);\n }\n this.emit(\"debug\", {\n action: \"response\",\n fetcher,\n request,\n response,\n provider: this\n });\n if (response.error) {\n const error = new Error(response.error.message);\n error.code = response.error.code;\n error.data = response.error.data;\n return reject(error);\n }\n resolve(response.result);\n });\n });\n };\n}\nfunction buildEip1193Fetcher(provider) {\n return function (method, params) {\n if (params == null) {\n params = [];\n }\n const request = { method, params };\n this.emit(\"debug\", {\n action: \"request\",\n fetcher: \"Eip1193Fetcher\",\n request: deepCopy(request),\n provider: this\n });\n return provider.request(request).then((response) => {\n this.emit(\"debug\", {\n action: \"response\",\n fetcher: \"Eip1193Fetcher\",\n request,\n response,\n provider: this\n });\n return response;\n }, (error) => {\n this.emit(\"debug\", {\n action: \"response\",\n fetcher: \"Eip1193Fetcher\",\n request,\n error,\n provider: this\n });\n throw error;\n });\n };\n}\nexport class Web3Provider extends JsonRpcProvider {\n constructor(provider, network) {\n logger.checkNew(new.target, Web3Provider);\n if (provider == null) {\n logger.throwArgumentError(\"missing provider\", \"provider\", provider);\n }\n let path = null;\n let jsonRpcFetchFunc = null;\n let subprovider = null;\n if (typeof (provider) === \"function\") {\n path = \"unknown:\";\n jsonRpcFetchFunc = provider;\n }\n else {\n path = provider.host || provider.path || \"\";\n if (!path && provider.isMetaMask) {\n path = \"metamask\";\n }\n subprovider = provider;\n if (provider.request) {\n if (path === \"\") {\n path = \"eip-1193:\";\n }\n jsonRpcFetchFunc = buildEip1193Fetcher(provider);\n }\n else if (provider.sendAsync) {\n jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.sendAsync.bind(provider));\n }\n else if (provider.send) {\n jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.send.bind(provider));\n }\n else {\n logger.throwArgumentError(\"unsupported provider\", \"provider\", provider);\n }\n if (!path) {\n path = \"unknown:\";\n }\n }\n super(path, network);\n defineReadOnly(this, \"jsonRpcFetchFunc\", jsonRpcFetchFunc);\n defineReadOnly(this, \"provider\", subprovider);\n }\n send(method, params) {\n return this.jsonRpcFetchFunc(method, params);\n }\n}\n//# sourceMappingURL=web3-provider.js.map","export const HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n//# sourceMappingURL=hashes.js.map","'use strict'\nvar ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'\n\n// pre-compute lookup table\nvar ALPHABET_MAP = {}\nfor (var z = 0; z < ALPHABET.length; z++) {\n var x = ALPHABET.charAt(z)\n\n if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')\n ALPHABET_MAP[x] = z\n}\n\nfunction polymodStep (pre) {\n var b = pre >> 25\n return ((pre & 0x1FFFFFF) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3)\n}\n\nfunction prefixChk (prefix) {\n var chk = 1\n for (var i = 0; i < prefix.length; ++i) {\n var c = prefix.charCodeAt(i)\n if (c < 33 || c > 126) return 'Invalid prefix (' + prefix + ')'\n\n chk = polymodStep(chk) ^ (c >> 5)\n }\n chk = polymodStep(chk)\n\n for (i = 0; i < prefix.length; ++i) {\n var v = prefix.charCodeAt(i)\n chk = polymodStep(chk) ^ (v & 0x1f)\n }\n return chk\n}\n\nfunction encode (prefix, words, LIMIT) {\n LIMIT = LIMIT || 90\n if ((prefix.length + 7 + words.length) > LIMIT) throw new TypeError('Exceeds length limit')\n\n prefix = prefix.toLowerCase()\n\n // determine chk mod\n var chk = prefixChk(prefix)\n if (typeof chk === 'string') throw new Error(chk)\n\n var result = prefix + '1'\n for (var i = 0; i < words.length; ++i) {\n var x = words[i]\n if ((x >> 5) !== 0) throw new Error('Non 5-bit word')\n\n chk = polymodStep(chk) ^ x\n result += ALPHABET.charAt(x)\n }\n\n for (i = 0; i < 6; ++i) {\n chk = polymodStep(chk)\n }\n chk ^= 1\n\n for (i = 0; i < 6; ++i) {\n var v = (chk >> ((5 - i) * 5)) & 0x1f\n result += ALPHABET.charAt(v)\n }\n\n return result\n}\n\nfunction __decode (str, LIMIT) {\n LIMIT = LIMIT || 90\n if (str.length < 8) return str + ' too short'\n if (str.length > LIMIT) return 'Exceeds length limit'\n\n // don't allow mixed case\n var lowered = str.toLowerCase()\n var uppered = str.toUpperCase()\n if (str !== lowered && str !== uppered) return 'Mixed-case string ' + str\n str = lowered\n\n var split = str.lastIndexOf('1')\n if (split === -1) return 'No separator character for ' + str\n if (split === 0) return 'Missing prefix for ' + str\n\n var prefix = str.slice(0, split)\n var wordChars = str.slice(split + 1)\n if (wordChars.length < 6) return 'Data too short'\n\n var chk = prefixChk(prefix)\n if (typeof chk === 'string') return chk\n\n var words = []\n for (var i = 0; i < wordChars.length; ++i) {\n var c = wordChars.charAt(i)\n var v = ALPHABET_MAP[c]\n if (v === undefined) return 'Unknown character ' + c\n chk = polymodStep(chk) ^ v\n\n // not in the checksum?\n if (i + 6 >= wordChars.length) continue\n words.push(v)\n }\n\n if (chk !== 1) return 'Invalid checksum for ' + str\n return { prefix: prefix, words: words }\n}\n\nfunction decodeUnsafe () {\n var res = __decode.apply(null, arguments)\n if (typeof res === 'object') return res\n}\n\nfunction decode (str) {\n var res = __decode.apply(null, arguments)\n if (typeof res === 'object') return res\n\n throw new Error(res)\n}\n\nfunction convert (data, inBits, outBits, pad) {\n var value = 0\n var bits = 0\n var maxV = (1 << outBits) - 1\n\n var result = []\n for (var i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i]\n bits += inBits\n\n while (bits >= outBits) {\n bits -= outBits\n result.push((value >> bits) & maxV)\n }\n }\n\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV)\n }\n } else {\n if (bits >= inBits) return 'Excess padding'\n if ((value << (outBits - bits)) & maxV) return 'Non-zero padding'\n }\n\n return result\n}\n\nfunction toWordsUnsafe (bytes) {\n var res = convert(bytes, 8, 5, true)\n if (Array.isArray(res)) return res\n}\n\nfunction toWords (bytes) {\n var res = convert(bytes, 8, 5, true)\n if (Array.isArray(res)) return res\n\n throw new Error(res)\n}\n\nfunction fromWordsUnsafe (words) {\n var res = convert(words, 5, 8, false)\n if (Array.isArray(res)) return res\n}\n\nfunction fromWords (words) {\n var res = convert(words, 5, 8, false)\n if (Array.isArray(res)) return res\n\n throw new Error(res)\n}\n\nmodule.exports = {\n decodeUnsafe: decodeUnsafe,\n decode: decode,\n encode: encode,\n toWordsUnsafe: toWordsUnsafe,\n toWords: toWords,\n fromWordsUnsafe: fromWordsUnsafe,\n fromWords: fromWords\n}\n","'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar React = require('react');\n\nvar PropTypes = require('prop-types'); // qr.js doesn't handle error level of zero (M) so we need to do it right,\n// thus the deep require.\n\n\nvar QRCodeImpl = require('qr.js/lib/QRCode');\n\nvar ErrorCorrectLevel = require('qr.js/lib/ErrorCorrectLevel'); // TODO: pull this off of the QRCode class type so it matches.\n\n\n// Convert from UTF-16, forcing the use of byte-mode encoding in our QR Code.\n// This allows us to encode Hanji, Kanji, emoji, etc. Ideally we'd do more\n// detection and not resort to byte-mode if possible, but we're trading off\n// a smaller library for a smaller amount of data we can potentially encode.\n// Based on http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/\nfunction convertStr(str) {\n var out = '';\n\n for (var i = 0; i < str.length; i++) {\n var charcode = str.charCodeAt(i);\n\n if (charcode < 0x0080) {\n out += String.fromCharCode(charcode);\n } else if (charcode < 0x0800) {\n out += String.fromCharCode(0xc0 | charcode >> 6);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n } else if (charcode < 0xd800 || charcode >= 0xe000) {\n out += String.fromCharCode(0xe0 | charcode >> 12);\n out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n } else {\n // This is a surrogate pair, so we'll reconsitute the pieces and work\n // from that\n i++;\n charcode = 0x10000 + ((charcode & 0x3ff) << 10 | str.charCodeAt(i) & 0x3ff);\n out += String.fromCharCode(0xf0 | charcode >> 18);\n out += String.fromCharCode(0x80 | charcode >> 12 & 0x3f);\n out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f);\n out += String.fromCharCode(0x80 | charcode & 0x3f);\n }\n }\n\n return out;\n}\n\nvar DEFAULT_PROPS = {\n size: 128,\n level: 'L',\n bgColor: '#FFFFFF',\n fgColor: '#000000',\n includeMargin: false\n};\nvar PROP_TYPES = process.env.NODE_ENV !== 'production' ? {\n value: PropTypes.string.isRequired,\n size: PropTypes.number,\n level: PropTypes.oneOf(['L', 'M', 'Q', 'H']),\n bgColor: PropTypes.string,\n fgColor: PropTypes.string,\n includeMargin: PropTypes.bool,\n imageSettings: PropTypes.shape({\n src: PropTypes.string.isRequired,\n height: PropTypes.number.isRequired,\n width: PropTypes.number.isRequired,\n excavate: PropTypes.bool,\n x: PropTypes.number,\n y: PropTypes.number\n })\n} : {};\nvar MARGIN_SIZE = 4; // This is *very* rough estimate of max amount of QRCode allowed to be covered.\n// It is \"wrong\" in a lot of ways (area is a terrible way to estimate, it\n// really should be number of modules covered), but if for some reason we don't\n// get an explicit height or width, I'd rather default to something than throw.\n\nvar DEFAULT_IMG_SCALE = 0.1;\n\nfunction generatePath(modules) {\n var margin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var ops = [];\n modules.forEach(function (row, y) {\n var start = null;\n row.forEach(function (cell, x) {\n if (!cell && start !== null) {\n // M0 0h7v1H0z injects the space with the move and drops the comma,\n // saving a char per operation\n ops.push(\"M\".concat(start + margin, \" \").concat(y + margin, \"h\").concat(x - start, \"v1H\").concat(start + margin, \"z\"));\n start = null;\n return;\n } // end of row, clean up or skip\n\n\n if (x === row.length - 1) {\n if (!cell) {\n // We would have closed the op above already so this can only mean\n // 2+ light modules in a row.\n return;\n }\n\n if (start === null) {\n // Just a single dark module.\n ops.push(\"M\".concat(x + margin, \",\").concat(y + margin, \" h1v1H\").concat(x + margin, \"z\"));\n } else {\n // Otherwise finish the current line.\n ops.push(\"M\".concat(start + margin, \",\").concat(y + margin, \" h\").concat(x + 1 - start, \"v1H\").concat(start + margin, \"z\"));\n }\n\n return;\n }\n\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join('');\n} // We could just do this in generatePath, except that we want to support\n// non-Path2D canvas, so we need to keep it an explicit step.\n\n\nfunction excavateModules(modules, excavation) {\n return modules.slice().map(function (row, y) {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n\n return row.map(function (cell, x) {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n\n return false;\n });\n });\n}\n\nfunction getImageSettings(props, cells) {\n var imageSettings = props.imageSettings,\n size = props.size,\n includeMargin = props.includeMargin;\n\n if (imageSettings == null) {\n return null;\n }\n\n var margin = includeMargin ? MARGIN_SIZE : 0;\n var numCells = cells.length + margin * 2;\n var defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n var scale = numCells / size;\n var w = (imageSettings.width || defaultSize) * scale;\n var h = (imageSettings.height || defaultSize) * scale;\n var x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n var y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n var excavation = null;\n\n if (imageSettings.excavate) {\n var floorX = Math.floor(x);\n var floorY = Math.floor(y);\n var ceilW = Math.ceil(w + x - floorX);\n var ceilH = Math.ceil(h + y - floorY);\n excavation = {\n x: floorX,\n y: floorY,\n w: ceilW,\n h: ceilH\n };\n }\n\n return {\n x: x,\n y: y,\n h: h,\n w: w,\n excavation: excavation\n };\n} // For canvas we're going to switch our drawing mode based on whether or not\n// the environment supports Path2D. We only need the constructor to be\n// supported, but Edge doesn't actually support the path (string) type\n// argument. Luckily it also doesn't support the addPath() method. We can\n// treat that as the same thing.\n\n\nvar SUPPORTS_PATH2D = function () {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n\n return true;\n}();\n\nvar QRCodeCanvas =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(QRCodeCanvas, _React$PureComponent);\n\n function QRCodeCanvas() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, QRCodeCanvas);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(QRCodeCanvas)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"_canvas\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_image\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n imgLoaded: false\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleImageLoad\", function () {\n _this.setState({\n imgLoaded: true\n });\n });\n\n return _this;\n }\n\n _createClass(QRCodeCanvas, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this._image && this._image.complete) {\n this.handleImageLoad();\n }\n\n this.update();\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var _this$props$imageSett, _nextProps$imageSetti;\n\n var currentSrc = (_this$props$imageSett = this.props.imageSettings) === null || _this$props$imageSett === void 0 ? void 0 : _this$props$imageSett.src;\n var nextSrc = (_nextProps$imageSetti = nextProps.imageSettings) === null || _nextProps$imageSetti === void 0 ? void 0 : _nextProps$imageSetti.src;\n\n if (currentSrc !== nextSrc) {\n this.setState({\n imgLoaded: false\n });\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.update();\n }\n }, {\n key: \"update\",\n value: function update() {\n var _this$props = this.props,\n value = _this$props.value,\n size = _this$props.size,\n level = _this$props.level,\n bgColor = _this$props.bgColor,\n fgColor = _this$props.fgColor,\n includeMargin = _this$props.includeMargin,\n imageSettings = _this$props.imageSettings; // We'll use type===-1 to force QRCode to automatically pick the best type\n\n var qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n qrcode.addData(convertStr(value));\n qrcode.make();\n\n if (this._canvas != null) {\n var canvas = this._canvas;\n var ctx = canvas.getContext('2d');\n\n if (!ctx) {\n return;\n }\n\n var cells = qrcode.modules;\n\n if (cells === null) {\n return;\n }\n\n var margin = includeMargin ? MARGIN_SIZE : 0;\n var numCells = cells.length + margin * 2;\n var calculatedImageSettings = getImageSettings(this.props, cells);\n\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cells = excavateModules(cells, calculatedImageSettings.excavation);\n }\n } // We're going to scale this so that the number of drawable units\n // matches the number of cells. This avoids rounding issues, but does\n // result in some potentially unwanted single pixel issues between\n // blocks, only in environments that don't support Path2D.\n\n\n var pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n var scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale); // Draw solid background, only paint dark modules.\n\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n\n if (SUPPORTS_PATH2D) {\n // $FlowFixMe: Path2D c'tor doesn't support args yet.\n ctx.fill(new Path2D(generatePath(cells, margin)));\n } else {\n cells.forEach(function (row, rdx) {\n row.forEach(function (cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n\n if (this.state.imgLoaded && this._image && calculatedImageSettings != null) {\n ctx.drawImage(this._image, calculatedImageSettings.x + margin, calculatedImageSettings.y + margin, calculatedImageSettings.w, calculatedImageSettings.h);\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n value = _this$props2.value,\n size = _this$props2.size,\n level = _this$props2.level,\n bgColor = _this$props2.bgColor,\n fgColor = _this$props2.fgColor,\n style = _this$props2.style,\n includeMargin = _this$props2.includeMargin,\n imageSettings = _this$props2.imageSettings,\n otherProps = _objectWithoutProperties(_this$props2, [\"value\", \"size\", \"level\", \"bgColor\", \"fgColor\", \"style\", \"includeMargin\", \"imageSettings\"]);\n\n var canvasStyle = _objectSpread({\n height: size,\n width: size\n }, style);\n\n var img = null;\n var imgSrc = imageSettings && imageSettings.src;\n\n if (imageSettings != null && imgSrc != null) {\n img = React.createElement(\"img\", {\n src: imgSrc,\n style: {\n display: 'none'\n },\n onLoad: this.handleImageLoad,\n ref: function ref(_ref) {\n return _this2._image = _ref;\n }\n });\n }\n\n return React.createElement(React.Fragment, null, React.createElement(\"canvas\", _extends({\n style: canvasStyle,\n height: size,\n width: size,\n ref: function ref(_ref2) {\n return _this2._canvas = _ref2;\n }\n }, otherProps)), img);\n }\n }]);\n\n return QRCodeCanvas;\n}(React.PureComponent);\n\n_defineProperty(QRCodeCanvas, \"defaultProps\", DEFAULT_PROPS);\n\nif (process.env.NODE_ENV !== 'production') {\n QRCodeCanvas.propTypes = PROP_TYPES;\n}\n\nvar QRCodeSVG =\n/*#__PURE__*/\nfunction (_React$PureComponent2) {\n _inherits(QRCodeSVG, _React$PureComponent2);\n\n function QRCodeSVG() {\n _classCallCheck(this, QRCodeSVG);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(QRCodeSVG).apply(this, arguments));\n }\n\n _createClass(QRCodeSVG, [{\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n value = _this$props3.value,\n size = _this$props3.size,\n level = _this$props3.level,\n bgColor = _this$props3.bgColor,\n fgColor = _this$props3.fgColor,\n includeMargin = _this$props3.includeMargin,\n imageSettings = _this$props3.imageSettings,\n otherProps = _objectWithoutProperties(_this$props3, [\"value\", \"size\", \"level\", \"bgColor\", \"fgColor\", \"includeMargin\", \"imageSettings\"]); // We'll use type===-1 to force QRCode to automatically pick the best type\n\n\n var qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n qrcode.addData(convertStr(value));\n qrcode.make();\n var cells = qrcode.modules;\n\n if (cells === null) {\n return null;\n }\n\n var margin = includeMargin ? MARGIN_SIZE : 0;\n var numCells = cells.length + margin * 2;\n var calculatedImageSettings = getImageSettings(this.props, cells);\n var image = null;\n\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cells = excavateModules(cells, calculatedImageSettings.excavation);\n }\n\n image = React.createElement(\"image\", {\n xlinkHref: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\"\n });\n } // Drawing strategy: instead of a rect per module, we're going to create a\n // single path for the dark modules and layer that on top of a light rect,\n // for a total of 2 DOM nodes. We pay a bit more in string concat but that's\n // way faster than DOM ops.\n // For level 1, 441 nodes -> 2\n // For level 40, 31329 -> 2\n\n\n var fgPath = generatePath(cells, margin);\n return React.createElement(\"svg\", _extends({\n shapeRendering: \"crispEdges\",\n height: size,\n width: size,\n viewBox: \"0 0 \".concat(numCells, \" \").concat(numCells)\n }, otherProps), React.createElement(\"path\", {\n fill: bgColor,\n d: \"M0,0 h\".concat(numCells, \"v\").concat(numCells, \"H0z\")\n }), React.createElement(\"path\", {\n fill: fgColor,\n d: fgPath\n }), image);\n }\n }]);\n\n return QRCodeSVG;\n}(React.PureComponent);\n\n_defineProperty(QRCodeSVG, \"defaultProps\", DEFAULT_PROPS);\n\nif (process.env.NODE_ENV !== 'production') {\n QRCodeSVG.propTypes = PROP_TYPES;\n}\n\nvar QRCode = function QRCode(props) {\n var renderAs = props.renderAs,\n otherProps = _objectWithoutProperties(props, [\"renderAs\"]);\n\n var Component = renderAs === 'svg' ? QRCodeSVG : QRCodeCanvas;\n return React.createElement(Component, otherProps);\n};\n\nQRCode.defaultProps = _objectSpread({\n renderAs: 'canvas'\n}, DEFAULT_PROPS);\nmodule.exports = QRCode;","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n","import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a that uses HTML5 history.\n */\nclass BrowserRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n BrowserRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n forceRefresh: PropTypes.bool,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number\n };\n\n BrowserRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\"\n );\n };\n}\n\nexport default BrowserRouter;\n","import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createHashHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a that uses window.location.hash.\n */\nclass HashRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n HashRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n getUserConfirmation: PropTypes.func,\n hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n };\n\n HashRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { HashRouter as Router }`.\"\n );\n };\n}\n\nexport default HashRouter;\n","import { createLocation } from \"history\";\n\nexport const resolveToLocation = (to, currentLocation) =>\n typeof to === \"function\" ? to(currentLocation) : to;\n\nexport const normalizeToLocation = (to, currentLocation) => {\n return typeof to === \"string\"\n ? createLocation(to, null, null, currentLocation)\n : to;\n};\n","import React from \"react\";\nimport { __RouterContext as RouterContext } from \"react-router\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport {\n resolveToLocation,\n normalizeToLocation\n} from \"./utils/locationUtils.js\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nconst LinkAnchor = forwardRef(\n (\n {\n innerRef, // TODO: deprecate\n navigate,\n onClick,\n ...rest\n },\n forwardedRef\n ) => {\n const { target } = rest;\n\n let props = {\n ...rest,\n onClick: event => {\n try {\n if (onClick) onClick(event);\n } catch (ex) {\n event.preventDefault();\n throw ex;\n }\n\n if (\n !event.defaultPrevented && // onClick prevented default\n event.button === 0 && // ignore everything but left clicks\n (!target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n navigate();\n }\n }\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.ref = innerRef;\n }\n\n /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n return ;\n }\n);\n\nif (__DEV__) {\n LinkAnchor.displayName = \"LinkAnchor\";\n}\n\n/**\n * The public API for rendering a history-aware .\n */\nconst Link = forwardRef(\n (\n {\n component = LinkAnchor,\n replace,\n to,\n innerRef, // TODO: deprecate\n ...rest\n },\n forwardedRef\n ) => {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const { history } = context;\n\n const location = normalizeToLocation(\n resolveToLocation(to, context.location),\n context.location\n );\n\n const href = location ? history.createHref(location) : \"\";\n const props = {\n ...rest,\n href,\n navigate() {\n const location = resolveToLocation(to, context.location);\n const method = replace ? history.replace : history.push;\n\n method(location);\n }\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return React.createElement(component, props);\n }}\n \n );\n }\n);\n\nif (__DEV__) {\n const toType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object,\n PropTypes.func\n ]);\n const refType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.shape({ current: PropTypes.any })\n ]);\n\n Link.displayName = \"Link\";\n\n Link.propTypes = {\n innerRef: refType,\n onClick: PropTypes.func,\n replace: PropTypes.bool,\n target: PropTypes.string,\n to: toType.isRequired\n };\n}\n\nexport default Link;\n","import React from \"react\";\nimport { __RouterContext as RouterContext, matchPath } from \"react-router\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport Link from \"./Link.js\";\nimport {\n resolveToLocation,\n normalizeToLocation\n} from \"./utils/locationUtils.js\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction joinClassnames(...classnames) {\n return classnames.filter(i => i).join(\" \");\n}\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = forwardRef(\n (\n {\n \"aria-current\": ariaCurrent = \"page\",\n activeClassName = \"active\",\n activeStyle,\n className: classNameProp,\n exact,\n isActive: isActiveProp,\n location: locationProp,\n sensitive,\n strict,\n style: styleProp,\n to,\n innerRef, // TODO: deprecate\n ...rest\n },\n forwardedRef\n ) => {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const currentLocation = locationProp || context.location;\n const toLocation = normalizeToLocation(\n resolveToLocation(to, currentLocation),\n currentLocation\n );\n const { pathname: path } = toLocation;\n // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n const escapedPath =\n path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n\n const match = escapedPath\n ? matchPath(currentLocation.pathname, {\n path: escapedPath,\n exact,\n sensitive,\n strict\n })\n : null;\n const isActive = !!(isActiveProp\n ? isActiveProp(match, currentLocation)\n : match);\n\n const className = isActive\n ? joinClassnames(classNameProp, activeClassName)\n : classNameProp;\n const style = isActive ? { ...styleProp, ...activeStyle } : styleProp;\n\n const props = {\n \"aria-current\": (isActive && ariaCurrent) || null,\n className,\n style,\n to: toLocation,\n ...rest\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return ;\n }}\n \n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n\n const ariaCurrentType = PropTypes.oneOf([\n \"page\",\n \"step\",\n \"location\",\n \"date\",\n \"time\",\n \"true\"\n ]);\n\n NavLink.propTypes = {\n ...Link.propTypes,\n \"aria-current\": ariaCurrentType,\n activeClassName: PropTypes.string,\n activeStyle: PropTypes.object,\n className: PropTypes.string,\n exact: PropTypes.bool,\n isActive: PropTypes.func,\n location: PropTypes.object,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool,\n style: PropTypes.object\n };\n}\n\nexport default NavLink;\n","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n var key = '__global_unique_id__';\n return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n var Provider = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (process.env.NODE_ENV !== 'production') {\n warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n var Consumer = /*#__PURE__*/function (_Component2) {\n _inheritsLoose(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","/* eslint-disable no-use-before-define */\n\n/**\n * Base class for inheritance.\n */\nexport class Base {\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n static create(...args) {\n return new this(...args);\n }\n\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn(properties) {\n return Object.assign(this, properties);\n }\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone() {\n const clone = new this.constructor();\n Object.assign(clone, this);\n return clone;\n }\n}\n\n/**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\nexport class WordArray extends Base {\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n constructor(words = [], sigBytes = words.length * 4) {\n super();\n\n let typedArray = words;\n // Convert buffers to uint8\n if (typedArray instanceof ArrayBuffer) {\n typedArray = new Uint8Array(typedArray);\n }\n\n // Convert other array views to uint8\n if (\n typedArray instanceof Int8Array\n || typedArray instanceof Uint8ClampedArray\n || typedArray instanceof Int16Array\n || typedArray instanceof Uint16Array\n || typedArray instanceof Int32Array\n || typedArray instanceof Uint32Array\n || typedArray instanceof Float32Array\n || typedArray instanceof Float64Array\n ) {\n typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n }\n\n // Handle Uint8Array\n if (typedArray instanceof Uint8Array) {\n // Shortcut\n const typedArrayByteLength = typedArray.byteLength;\n\n // Extract bytes\n const _words = [];\n for (let i = 0; i < typedArrayByteLength; i += 1) {\n _words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n }\n\n // Initialize this word array\n this.words = _words;\n this.sigBytes = typedArrayByteLength;\n } else {\n // Else call normal init\n this.words = words;\n this.sigBytes = sigBytes;\n }\n }\n\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n static random(nBytes) {\n const words = [];\n\n const r = (m_w) => {\n let _m_w = m_w;\n let _m_z = 0x3ade68b1;\n const mask = 0xffffffff;\n\n return () => {\n _m_z = (0x9069 * (_m_z & 0xFFFF) + (_m_z >> 0x10)) & mask;\n _m_w = (0x4650 * (_m_w & 0xFFFF) + (_m_w >> 0x10)) & mask;\n let result = ((_m_z << 0x10) + _m_w) & mask;\n result /= 0x100000000;\n result += 0.5;\n return result * (Math.random() > 0.5 ? 1 : -1);\n };\n };\n\n for (let i = 0, rcache; i < nBytes; i += 4) {\n const _r = r((rcache || Math.random()) * 0x100000000);\n\n rcache = _r() * 0x3ade67b7;\n words.push((_r() * 0x100000000) | 0);\n }\n\n return new WordArray(words, nBytes);\n }\n\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString(encoder = Hex) {\n return encoder.stringify(this);\n }\n\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat(wordArray) {\n // Shortcuts\n const thisWords = this.words;\n const thatWords = wordArray.words;\n const thisSigBytes = this.sigBytes;\n const thatSigBytes = wordArray.sigBytes;\n\n // Clamp excess bits\n this.clamp();\n\n // Concat\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (let i = 0; i < thatSigBytes; i += 1) {\n const thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n }\n } else {\n // Copy one word at a time\n for (let i = 0; i < thatSigBytes; i += 4) {\n thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n }\n }\n this.sigBytes += thatSigBytes;\n\n // Chainable\n return this;\n }\n\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp() {\n // Shortcuts\n const { words, sigBytes } = this;\n\n // Clamp\n words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n words.length = Math.ceil(sigBytes / 4);\n }\n\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone() {\n const clone = super.clone.call(this);\n clone.words = this.words.slice(0);\n\n return clone;\n }\n}\n\n/**\n * Hex encoding strategy.\n */\nexport const Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n\n // Convert\n const hexChars = [];\n for (let i = 0; i < sigBytes; i += 1) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n\n return hexChars.join('');\n },\n\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse(hexStr) {\n // Shortcut\n const hexStrLength = hexStr.length;\n\n // Convert\n const words = [];\n for (let i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n }\n\n return new WordArray(words, hexStrLength / 2);\n },\n};\n\n/**\n * Latin1 encoding strategy.\n */\nexport const Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n\n // Convert\n const latin1Chars = [];\n for (let i = 0; i < sigBytes; i += 1) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n\n return latin1Chars.join('');\n },\n\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse(latin1Str) {\n // Shortcut\n const latin1StrLength = latin1Str.length;\n\n // Convert\n const words = [];\n for (let i = 0; i < latin1StrLength; i += 1) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n }\n\n return new WordArray(words, latin1StrLength);\n },\n};\n\n/**\n * UTF-8 encoding strategy.\n */\nexport const Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify(wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse(utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n },\n};\n\n/**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize\n *\n * The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\nexport class BufferedBlockAlgorithm extends Base {\n constructor() {\n super();\n this._minBufferSize = 0;\n }\n\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset() {\n // Initial values\n this._data = new WordArray();\n this._nDataBytes = 0;\n }\n\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data\n *\n * The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append(data) {\n let m_data = data;\n\n // Convert string to WordArray, else assume WordArray already\n if (typeof m_data === 'string') {\n m_data = Utf8.parse(m_data);\n }\n\n // Append\n this._data.concat(m_data);\n this._nDataBytes += m_data.sigBytes;\n }\n\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process(doFlush) {\n let processedWords;\n\n // Shortcuts\n const { _data: data, blockSize } = this;\n const dataWords = data.words;\n const dataSigBytes = data.sigBytes;\n const blockSizeBytes = blockSize * 4;\n\n // Count blocks ready\n let nBlocksReady = dataSigBytes / blockSizeBytes;\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n }\n\n // Count words ready\n const nWordsReady = nBlocksReady * blockSize;\n\n // Count bytes ready\n const nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n // Process blocks\n if (nWordsReady) {\n for (let offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n }\n\n // Remove processed words\n processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n }\n\n // Return processed words\n return new WordArray(processedWords, nBytesReady);\n }\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone() {\n const clone = super.clone.call(this);\n clone._data = this._data.clone();\n\n return clone;\n }\n}\n\n/**\n * Abstract hasher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\nexport class Hasher extends BufferedBlockAlgorithm {\n constructor(cfg) {\n super();\n\n this.blockSize = 512 / 32;\n\n /**\n * Configuration options.\n */\n this.cfg = Object.assign(new Base(), cfg);\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} SubHasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n static _createHelper(SubHasher) {\n return (message, cfg) => new SubHasher(cfg).finalize(message);\n }\n\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} SubHasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n static _createHmacHelper(SubHasher) {\n return (message, key) => new HMAC(SubHasher, key).finalize(message);\n }\n\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset() {\n // Reset data buffer\n super.reset.call(this);\n\n // Perform concrete-hasher logic\n this._doReset();\n }\n\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update(messageUpdate) {\n // Append\n this._append(messageUpdate);\n\n // Update the hash\n this._process();\n\n // Chainable\n return this;\n }\n\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize(messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n }\n\n // Perform concrete-hasher logic\n const hash = this._doFinalize();\n\n return hash;\n }\n}\n\n/**\n * HMAC algorithm.\n */\nexport class HMAC extends Base {\n /**\n * Initializes a newly created HMAC.\n *\n * @param {Hasher} SubHasher The hash algorithm to use.\n * @param {WordArray|string} key The secret key.\n *\n * @example\n *\n * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n */\n constructor(SubHasher, key) {\n super();\n\n const hasher = new SubHasher();\n this._hasher = hasher;\n\n // Convert string to WordArray, else assume WordArray already\n let _key = key;\n if (typeof _key === 'string') {\n _key = Utf8.parse(_key);\n }\n\n // Shortcuts\n const hasherBlockSize = hasher.blockSize;\n const hasherBlockSizeBytes = hasherBlockSize * 4;\n\n // Allow arbitrary length keys\n if (_key.sigBytes > hasherBlockSizeBytes) {\n _key = hasher.finalize(key);\n }\n\n // Clamp excess bits\n _key.clamp();\n\n // Clone key for inner and outer pads\n const oKey = _key.clone();\n this._oKey = oKey;\n const iKey = _key.clone();\n this._iKey = iKey;\n\n // Shortcuts\n const oKeyWords = oKey.words;\n const iKeyWords = iKey.words;\n\n // XOR keys with pad constants\n for (let i = 0; i < hasherBlockSize; i += 1) {\n oKeyWords[i] ^= 0x5c5c5c5c;\n iKeyWords[i] ^= 0x36363636;\n }\n oKey.sigBytes = hasherBlockSizeBytes;\n iKey.sigBytes = hasherBlockSizeBytes;\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Resets this HMAC to its initial state.\n *\n * @example\n *\n * hmacHasher.reset();\n */\n reset() {\n // Shortcut\n const hasher = this._hasher;\n\n // Reset\n hasher.reset();\n hasher.update(this._iKey);\n }\n\n /**\n * Updates this HMAC with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {HMAC} This HMAC instance.\n *\n * @example\n *\n * hmacHasher.update('message');\n * hmacHasher.update(wordArray);\n */\n update(messageUpdate) {\n this._hasher.update(messageUpdate);\n\n // Chainable\n return this;\n }\n\n /**\n * Finalizes the HMAC computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The HMAC.\n *\n * @example\n *\n * var hmac = hmacHasher.finalize();\n * var hmac = hmacHasher.finalize('message');\n * var hmac = hmacHasher.finalize(wordArray);\n */\n finalize(messageUpdate) {\n // Shortcut\n const hasher = this._hasher;\n\n // Compute HMAC\n const innerHash = hasher.finalize(messageUpdate);\n hasher.reset();\n const hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n return hmac;\n }\n}\n","import {\n Base,\n WordArray,\n} from './core.js';\n\nconst X32WordArray = WordArray;\n\n/**\n * A 64-bit word.\n */\nexport class X64Word extends Base {\n /**\n * Initializes a newly created 64-bit word.\n *\n * @param {number} high The high 32 bits.\n * @param {number} low The low 32 bits.\n *\n * @example\n *\n * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n */\n constructor(high, low) {\n super();\n\n this.high = high;\n this.low = low;\n }\n}\n\n/**\n * An array of 64-bit words.\n *\n * @property {Array} words The array of CryptoJS.x64.Word objects.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\nexport class X64WordArray extends Base {\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.x64.WordArray.create();\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ]);\n *\n * var wordArray = CryptoJS.x64.WordArray.create([\n * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n * ], 10);\n */\n constructor(words = [], sigBytes = words.length * 8) {\n super();\n\n this.words = words;\n this.sigBytes = sigBytes;\n }\n\n /**\n * Converts this 64-bit word array to a 32-bit word array.\n *\n * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n *\n * @example\n *\n * var x32WordArray = x64WordArray.toX32();\n */\n toX32() {\n // Shortcuts\n const x64Words = this.words;\n const x64WordsLength = x64Words.length;\n\n // Convert\n const x32Words = [];\n for (let i = 0; i < x64WordsLength; i += 1) {\n const x64Word = x64Words[i];\n x32Words.push(x64Word.high);\n x32Words.push(x64Word.low);\n }\n\n return X32WordArray.create(x32Words, this.sigBytes);\n }\n\n /**\n * Creates a copy of this word array.\n *\n * @return {X64WordArray} The clone.\n *\n * @example\n *\n * var clone = x64WordArray.clone();\n */\n clone() {\n const clone = super.clone.call(this);\n\n // Clone \"words\" array\n clone.words = this.words.slice(0);\n const { words } = clone;\n\n // Clone each X64Word object\n const wordsLength = words.length;\n for (let i = 0; i < wordsLength; i += 1) {\n words[i] = words[i].clone();\n }\n\n return clone;\n }\n}\n","import {\n WordArray,\n} from './core.js';\n\nconst parseLoop = (base64Str, base64StrLength, reverseMap) => {\n const words = [];\n let nBytes = 0;\n for (let i = 0; i < base64StrLength; i += 1) {\n if (i % 4) {\n const bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n const bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n const bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n nBytes += 1;\n }\n }\n return WordArray.create(words, nBytes);\n};\n\n/**\n * Base64 encoding strategy.\n */\nexport const Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * const base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n const map = this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n const base64Chars = [];\n for (let i = 0; i < sigBytes; i += 3) {\n const byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n const byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n const byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n const triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n for (let j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j += 1) {\n base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n }\n }\n\n // Add padding\n const paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n\n return base64Chars.join('');\n },\n\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * const wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse(base64Str) {\n // Shortcuts\n let base64StrLength = base64Str.length;\n const map = this._map;\n let reverseMap = this._reverseMap;\n\n if (!reverseMap) {\n this._reverseMap = [];\n reverseMap = this._reverseMap;\n for (let j = 0; j < map.length; j += 1) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n }\n\n // Ignore padding\n const paddingChar = map.charAt(64);\n if (paddingChar) {\n const paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n};\n","import {\n WordArray,\n Hasher,\n} from './core.js';\n\n// Constants table\nconst T = [];\n\n// Compute constants\nfor (let i = 0; i < 64; i += 1) {\n T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n}\n\nconst FF = (a, b, c, d, x, s, t) => {\n const n = a + ((b & c) | (~b & d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst GG = (a, b, c, d, x, s, t) => {\n const n = a + ((b & d) | (c & ~d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst HH = (a, b, c, d, x, s, t) => {\n const n = a + (b ^ c ^ d) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst II = (a, b, c, d, x, s, t) => {\n const n = a + (c ^ (b | ~d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\n/**\n * MD5 hash algorithm.\n */\nexport class MD5Algo extends Hasher {\n _doReset() {\n this._hash = new WordArray([\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n ]);\n }\n\n _doProcessBlock(M, offset) {\n const _M = M;\n\n // Swap endian\n for (let i = 0; i < 16; i += 1) {\n // Shortcuts\n const offset_i = offset + i;\n const M_offset_i = M[offset_i];\n\n _M[offset_i] = (\n (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff)\n | (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n );\n }\n\n // Shortcuts\n const H = this._hash.words;\n\n const M_offset_0 = _M[offset + 0];\n const M_offset_1 = _M[offset + 1];\n const M_offset_2 = _M[offset + 2];\n const M_offset_3 = _M[offset + 3];\n const M_offset_4 = _M[offset + 4];\n const M_offset_5 = _M[offset + 5];\n const M_offset_6 = _M[offset + 6];\n const M_offset_7 = _M[offset + 7];\n const M_offset_8 = _M[offset + 8];\n const M_offset_9 = _M[offset + 9];\n const M_offset_10 = _M[offset + 10];\n const M_offset_11 = _M[offset + 11];\n const M_offset_12 = _M[offset + 12];\n const M_offset_13 = _M[offset + 13];\n const M_offset_14 = _M[offset + 14];\n const M_offset_15 = _M[offset + 15];\n\n // Working varialbes\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n\n // Computation\n a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n a = II(a, b, c, d, M_offset_0, 6, T[48]);\n d = II(d, a, b, c, M_offset_7, 10, T[49]);\n c = II(c, d, a, b, M_offset_14, 15, T[50]);\n b = II(b, c, d, a, M_offset_5, 21, T[51]);\n a = II(a, b, c, d, M_offset_12, 6, T[52]);\n d = II(d, a, b, c, M_offset_3, 10, T[53]);\n c = II(c, d, a, b, M_offset_10, 15, T[54]);\n b = II(b, c, d, a, M_offset_1, 21, T[55]);\n a = II(a, b, c, d, M_offset_8, 6, T[56]);\n d = II(d, a, b, c, M_offset_15, 10, T[57]);\n c = II(c, d, a, b, M_offset_6, 15, T[58]);\n b = II(b, c, d, a, M_offset_13, 21, T[59]);\n a = II(a, b, c, d, M_offset_4, 6, T[60]);\n d = II(d, a, b, c, M_offset_11, 10, T[61]);\n c = II(c, d, a, b, M_offset_2, 15, T[62]);\n b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n // Intermediate hash value\n H[0] = (H[0] + a) | 0;\n H[1] = (H[1] + b) | 0;\n H[2] = (H[2] + c) | 0;\n H[3] = (H[3] + d) | 0;\n }\n /* eslint-ensable no-param-reassign */\n\n _doFinalize() {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n\n const nBitsTotal = this._nDataBytes * 8;\n const nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n\n const nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n const nBitsTotalL = nBitsTotal;\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff)\n | (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n );\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff)\n | (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n );\n\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n const hash = this._hash;\n const H = hash.words;\n\n // Swap endian\n for (let i = 0; i < 4; i += 1) {\n // Shortcut\n const H_i = H[i];\n\n H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff)\n | (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n }\n\n // Return final computed hash\n return hash;\n }\n\n clone() {\n const clone = super.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.MD5('message');\n * var hash = CryptoJS.MD5(wordArray);\n */\nexport const MD5 = Hasher._createHelper(MD5Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacMD5(message, key);\n */\nexport const HmacMD5 = Hasher._createHmacHelper(MD5Algo);\n","import {\n Base,\n WordArray,\n} from './core.js';\nimport { MD5Algo } from './md5.js';\n\n/**\n * This key derivation function is meant to conform with EVP_BytesToKey.\n * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n */\nexport class EvpKDFAlgo extends Base {\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * const kdf = CryptoJS.algo.EvpKDF.create();\n * const kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n * const kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n */\n constructor(cfg) {\n super();\n\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n this.cfg = Object.assign(\n new Base(),\n {\n keySize: 128 / 32,\n hasher: MD5Algo,\n iterations: 1,\n },\n cfg,\n );\n }\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * const key = kdf.compute(password, salt);\n */\n compute(password, salt) {\n let block;\n\n // Shortcut\n const { cfg } = this;\n\n // Init hasher\n const hasher = cfg.hasher.create();\n\n // Initial values\n const derivedKey = WordArray.create();\n\n // Shortcuts\n const derivedKeyWords = derivedKey.words;\n const { keySize, iterations } = cfg;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n if (block) {\n hasher.update(block);\n }\n block = hasher.update(password).finalize(salt);\n hasher.reset();\n\n // Iterations\n for (let i = 1; i < iterations; i += 1) {\n block = hasher.finalize(block);\n hasher.reset();\n }\n\n derivedKey.concat(block);\n }\n derivedKey.sigBytes = keySize * 4;\n\n return derivedKey;\n }\n}\n\n/**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.EvpKDF(password, salt);\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n */\nexport const EvpKDF = (password, salt, cfg) => EvpKDFAlgo.create(cfg).compute(password, salt);\n","/* eslint-disable no-use-before-define */\n\nimport {\n Base,\n WordArray,\n BufferedBlockAlgorithm,\n} from './core.js';\nimport { Base64 } from './enc-base64.js';\nimport { EvpKDFAlgo } from './evpkdf.js';\n\n/**\n * Abstract base cipher template.\n *\n * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n */\nexport class Cipher extends BufferedBlockAlgorithm {\n /**\n * Initializes a newly created cipher.\n *\n * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.create(\n * CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }\n * );\n */\n constructor(xformMode, key, cfg) {\n super();\n\n /**\n * Configuration options.\n *\n * @property {WordArray} iv The IV to use for this operation.\n */\n this.cfg = Object.assign(new Base(), cfg);\n\n // Store transform mode and key\n this._xformMode = xformMode;\n this._key = key;\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Creates this cipher in encryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n */\n static createEncryptor(key, cfg) {\n return this.create(this._ENC_XFORM_MODE, key, cfg);\n }\n\n /**\n * Creates this cipher in decryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n */\n static createDecryptor(key, cfg) {\n return this.create(this._DEC_XFORM_MODE, key, cfg);\n }\n\n /**\n * Creates shortcut functions to a cipher's object interface.\n *\n * @param {Cipher} cipher The cipher to create a helper for.\n *\n * @return {Object} An object with encrypt and decrypt shortcut functions.\n *\n * @static\n *\n * @example\n *\n * const AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n */\n static _createHelper(SubCipher) {\n const selectCipherStrategy = (key) => {\n if (typeof key === 'string') {\n return PasswordBasedCipher;\n }\n return SerializableCipher;\n };\n\n return {\n encrypt(message, key, cfg) {\n return selectCipherStrategy(key).encrypt(SubCipher, message, key, cfg);\n },\n\n decrypt(ciphertext, key, cfg) {\n return selectCipherStrategy(key).decrypt(SubCipher, ciphertext, key, cfg);\n },\n };\n }\n\n /**\n * Resets this cipher to its initial state.\n *\n * @example\n *\n * cipher.reset();\n */\n reset() {\n // Reset data buffer\n super.reset.call(this);\n\n // Perform concrete-cipher logic\n this._doReset();\n }\n\n /**\n * Adds data to be encrypted or decrypted.\n *\n * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n *\n * @return {WordArray} The data after processing.\n *\n * @example\n *\n * const encrypted = cipher.process('data');\n * const encrypted = cipher.process(wordArray);\n */\n process(dataUpdate) {\n // Append\n this._append(dataUpdate);\n\n // Process available blocks\n return this._process();\n }\n\n /**\n * Finalizes the encryption or decryption process.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n *\n * @return {WordArray} The data after final processing.\n *\n * @example\n *\n * const encrypted = cipher.finalize();\n * const encrypted = cipher.finalize('data');\n * const encrypted = cipher.finalize(wordArray);\n */\n finalize(dataUpdate) {\n // Final data update\n if (dataUpdate) {\n this._append(dataUpdate);\n }\n\n // Perform concrete-cipher logic\n const finalProcessedData = this._doFinalize();\n\n return finalProcessedData;\n }\n}\nCipher._ENC_XFORM_MODE = 1;\nCipher._DEC_XFORM_MODE = 2;\nCipher.keySize = 128 / 32;\nCipher.ivSize = 128 / 32;\n\n/**\n * Abstract base stream cipher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n */\nexport class StreamCipher extends Cipher {\n constructor(...args) {\n super(...args);\n\n this.blockSize = 1;\n }\n\n _doFinalize() {\n // Process partial blocks\n const finalProcessedBlocks = this._process(!!'flush');\n\n return finalProcessedBlocks;\n }\n}\n\n/**\n * Abstract base block cipher mode template.\n */\nexport class BlockCipherMode extends Base {\n /**\n * Initializes a newly created mode.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n */\n constructor(cipher, iv) {\n super();\n\n this._cipher = cipher;\n this._iv = iv;\n }\n\n /**\n * Creates this mode for encryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n */\n static createEncryptor(cipher, iv) {\n return this.Encryptor.create(cipher, iv);\n }\n\n /**\n * Creates this mode for decryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n */\n static createDecryptor(cipher, iv) {\n return this.Decryptor.create(cipher, iv);\n }\n}\n\nfunction xorBlock(words, offset, blockSize) {\n const _words = words;\n let block;\n\n // Shortcut\n const iv = this._iv;\n\n // Choose mixing block\n if (iv) {\n block = iv;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n block = this._prevBlock;\n }\n\n // XOR blocks\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= block[i];\n }\n}\n\n/**\n * Cipher Block Chaining mode.\n */\n\n/**\n * Abstract base CBC mode.\n */\nexport class CBC extends BlockCipherMode {\n}\n/**\n * CBC encryptor.\n */\nCBC.Encryptor = class extends CBC {\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock(words, offset) {\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n\n // XOR and encrypt\n xorBlock.call(this, words, offset, blockSize);\n cipher.encryptBlock(words, offset);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n};\n/**\n * CBC decryptor.\n */\nCBC.Decryptor = class extends CBC {\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock(words, offset) {\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n\n // Remember this block to use with next block\n const thisBlock = words.slice(offset, offset + blockSize);\n\n // Decrypt and XOR\n cipher.decryptBlock(words, offset);\n xorBlock.call(this, words, offset, blockSize);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n};\n\n/**\n * PKCS #5/7 padding strategy.\n */\nexport const Pkcs7 = {\n /**\n * Pads data using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to pad.\n * @param {number} blockSize The multiple that the data should be padded to.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n */\n pad(data, blockSize) {\n // Shortcut\n const blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n const nPaddingBytes = blockSizeBytes - (data.sigBytes % blockSizeBytes);\n\n // Create padding word\n const paddingWord = (nPaddingBytes << 24)\n | (nPaddingBytes << 16)\n | (nPaddingBytes << 8)\n | nPaddingBytes;\n\n // Create padding\n const paddingWords = [];\n for (let i = 0; i < nPaddingBytes; i += 4) {\n paddingWords.push(paddingWord);\n }\n const padding = WordArray.create(paddingWords, nPaddingBytes);\n\n // Add padding\n data.concat(padding);\n },\n\n /**\n * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to unpad.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.unpad(wordArray);\n */\n unpad(data) {\n const _data = data;\n\n // Get number of padding bytes from last byte\n const nPaddingBytes = _data.words[(_data.sigBytes - 1) >>> 2] & 0xff;\n\n // Remove padding\n _data.sigBytes -= nPaddingBytes;\n },\n};\n\n/**\n * Abstract base block cipher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n */\nexport class BlockCipher extends Cipher {\n constructor(xformMode, key, cfg) {\n /**\n * Configuration options.\n *\n * @property {Mode} mode The block mode to use. Default: CBC\n * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n */\n super(xformMode, key, Object.assign(\n {\n mode: CBC,\n padding: Pkcs7,\n },\n cfg,\n ));\n\n this.blockSize = 128 / 32;\n }\n\n reset() {\n let modeCreator;\n\n // Reset cipher\n super.reset.call(this);\n\n // Shortcuts\n const { cfg } = this;\n const { iv, mode } = cfg;\n\n // Reset block mode\n if (this._xformMode === this.constructor._ENC_XFORM_MODE) {\n modeCreator = mode.createEncryptor;\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n modeCreator = mode.createDecryptor;\n // Keep at least one block in the buffer for unpadding\n this._minBufferSize = 1;\n }\n\n this._mode = modeCreator.call(mode, this, iv && iv.words);\n this._mode.__creator = modeCreator;\n }\n\n _doProcessBlock(words, offset) {\n this._mode.processBlock(words, offset);\n }\n\n _doFinalize() {\n let finalProcessedBlocks;\n\n // Shortcut\n const { padding } = this.cfg;\n\n // Finalize\n if (this._xformMode === this.constructor._ENC_XFORM_MODE) {\n // Pad data\n padding.pad(this._data, this.blockSize);\n\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n\n // Unpad data\n padding.unpad(finalProcessedBlocks);\n }\n\n return finalProcessedBlocks;\n }\n}\n\n/**\n * A collection of cipher parameters.\n *\n * @property {WordArray} ciphertext The raw ciphertext.\n * @property {WordArray} key The key to this ciphertext.\n * @property {WordArray} iv The IV used in the ciphering operation.\n * @property {WordArray} salt The salt used with a key derivation function.\n * @property {Cipher} algorithm The cipher algorithm.\n * @property {Mode} mode The block mode used in the ciphering operation.\n * @property {Padding} padding The padding scheme used in the ciphering operation.\n * @property {number} blockSize The block size of the cipher.\n * @property {Format} formatter\n * The default formatting strategy to convert this cipher params object to a string.\n */\nexport class CipherParams extends Base {\n /**\n * Initializes a newly created cipher params object.\n *\n * @param {Object} cipherParams An object with any of the possible cipher parameters.\n *\n * @example\n *\n * var cipherParams = CryptoJS.lib.CipherParams.create({\n * ciphertext: ciphertextWordArray,\n * key: keyWordArray,\n * iv: ivWordArray,\n * salt: saltWordArray,\n * algorithm: CryptoJS.algo.AES,\n * mode: CryptoJS.mode.CBC,\n * padding: CryptoJS.pad.PKCS7,\n * blockSize: 4,\n * formatter: CryptoJS.format.OpenSSL\n * });\n */\n constructor(cipherParams) {\n super();\n\n this.mixIn(cipherParams);\n }\n\n /**\n * Converts this cipher params object to a string.\n *\n * @param {Format} formatter (Optional) The formatting strategy to use.\n *\n * @return {string} The stringified cipher params.\n *\n * @throws Error If neither the formatter nor the default formatter is set.\n *\n * @example\n *\n * var string = cipherParams + '';\n * var string = cipherParams.toString();\n * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n */\n toString(formatter) {\n return (formatter || this.formatter).stringify(this);\n }\n}\n\n/**\n * OpenSSL formatting strategy.\n */\nexport const OpenSSLFormatter = {\n /**\n * Converts a cipher params object to an OpenSSL-compatible string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The OpenSSL-compatible string.\n *\n * @static\n *\n * @example\n *\n * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n */\n stringify(cipherParams) {\n let wordArray;\n\n // Shortcuts\n const { ciphertext, salt } = cipherParams;\n\n // Format\n if (salt) {\n wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n } else {\n wordArray = ciphertext;\n }\n\n return wordArray.toString(Base64);\n },\n\n /**\n * Converts an OpenSSL-compatible string to a cipher params object.\n *\n * @param {string} openSSLStr The OpenSSL-compatible string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n */\n parse(openSSLStr) {\n let salt;\n\n // Parse base64\n const ciphertext = Base64.parse(openSSLStr);\n\n // Shortcut\n const ciphertextWords = ciphertext.words;\n\n // Test for salt\n if (ciphertextWords[0] === 0x53616c74 && ciphertextWords[1] === 0x65645f5f) {\n // Extract salt\n salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n // Remove salt from ciphertext\n ciphertextWords.splice(0, 4);\n ciphertext.sigBytes -= 16;\n }\n\n return CipherParams.create({ ciphertext, salt });\n },\n};\n\n/**\n * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n */\nexport class SerializableCipher extends Base {\n /**\n * Encrypts a message.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key);\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n static encrypt(cipher, message, key, cfg) {\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Encrypt\n const encryptor = cipher.createEncryptor(key, _cfg);\n const ciphertext = encryptor.finalize(message);\n\n // Shortcut\n const cipherCfg = encryptor.cfg;\n\n // Create and return serializable cipher params\n return CipherParams.create({\n ciphertext,\n key,\n iv: cipherCfg.iv,\n algorithm: cipher,\n mode: cipherCfg.mode,\n padding: cipherCfg.padding,\n blockSize: encryptor.blockSize,\n formatter: _cfg.format,\n });\n }\n\n /**\n * Decrypts serialized ciphertext.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.SerializableCipher\n * .decrypt(CryptoJS.algo.AES, formattedCiphertext, key,\n * { iv: iv, format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.SerializableCipher\n * .decrypt(CryptoJS.algo.AES, ciphertextParams, key,\n * { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n static decrypt(cipher, ciphertext, key, cfg) {\n let _ciphertext = ciphertext;\n\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Convert string to CipherParams\n _ciphertext = this._parse(_ciphertext, _cfg.format);\n\n // Decrypt\n const plaintext = cipher.createDecryptor(key, _cfg).finalize(_ciphertext.ciphertext);\n\n return plaintext;\n }\n\n /**\n * Converts serialized ciphertext to CipherParams,\n * else assumed CipherParams already and returns ciphertext unchanged.\n *\n * @param {CipherParams|string} ciphertext The ciphertext.\n * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n *\n * @return {CipherParams} The unserialized ciphertext.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * ._parse(ciphertextStringOrParams, format);\n */\n static _parse(ciphertext, format) {\n if (typeof ciphertext === 'string') {\n return format.parse(ciphertext, this);\n }\n return ciphertext;\n }\n}\n/**\n * Configuration options.\n *\n * @property {Formatter} format\n *\n * The formatting strategy to convert cipher param objects to and from a string.\n * Default: OpenSSL\n */\nSerializableCipher.cfg = Object.assign(\n new Base(),\n { format: OpenSSLFormatter },\n);\n\n/**\n * OpenSSL key derivation function.\n */\nexport const OpenSSLKdf = {\n /**\n * Derives a key and IV from a password.\n *\n * @param {string} password The password to derive from.\n * @param {number} keySize The size in words of the key to generate.\n * @param {number} ivSize The size in words of the IV to generate.\n * @param {WordArray|string} salt\n * (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n *\n * @return {CipherParams} A cipher params object with the key, IV, and salt.\n *\n * @static\n *\n * @example\n *\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n */\n execute(password, keySize, ivSize, salt) {\n let _salt = salt;\n\n // Generate random salt\n if (!_salt) {\n _salt = WordArray.random(64 / 8);\n }\n\n // Derive key and IV\n const key = EvpKDFAlgo.create({ keySize: keySize + ivSize }).compute(password, _salt);\n\n // Separate key and IV\n const iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n key.sigBytes = keySize * 4;\n\n // Return params\n return CipherParams.create({ key, iv, salt: _salt });\n },\n};\n\n/**\n * A serializable cipher wrapper that derives the key from a password,\n * and returns ciphertext as a serializable cipher params object.\n */\nexport class PasswordBasedCipher extends SerializableCipher {\n /**\n * Encrypts a message using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher\n * .encrypt(CryptoJS.algo.AES, message, 'password');\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher\n * .encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n */\n static encrypt(cipher, message, password, cfg) {\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Derive key and other params\n const derivedParams = _cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n // Add IV to config\n _cfg.iv = derivedParams.iv;\n\n // Encrypt\n const ciphertext = SerializableCipher.encrypt\n .call(this, cipher, message, derivedParams.key, _cfg);\n\n // Mix in derived params\n ciphertext.mixIn(derivedParams);\n\n return ciphertext;\n }\n\n /**\n * Decrypts serialized ciphertext using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.PasswordBasedCipher\n * .decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password',\n * { format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.PasswordBasedCipher\n * .decrypt(CryptoJS.algo.AES, ciphertextParams, 'password',\n * { format: CryptoJS.format.OpenSSL });\n */\n static decrypt(cipher, ciphertext, password, cfg) {\n let _ciphertext = ciphertext;\n\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Convert string to CipherParams\n _ciphertext = this._parse(_ciphertext, _cfg.format);\n\n // Derive key and other params\n const derivedParams = _cfg.kdf\n .execute(password, cipher.keySize, cipher.ivSize, _ciphertext.salt);\n\n // Add IV to config\n _cfg.iv = derivedParams.iv;\n\n // Decrypt\n const plaintext = SerializableCipher.decrypt\n .call(this, cipher, _ciphertext, derivedParams.key, _cfg);\n\n return plaintext;\n }\n}\n/**\n * Configuration options.\n *\n * @property {KDF} kdf\n * The key derivation function to use to generate a key and IV from a password.\n * Default: OpenSSL\n */\nPasswordBasedCipher.cfg = Object.assign(SerializableCipher.cfg, { kdf: OpenSSLKdf });\n","import {\n WordArray,\n} from './core.js';\n\nconst swapEndian = word => ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\n/**\n * UTF-16 BE encoding strategy.\n */\nexport const Utf16BE = {\n /**\n * Converts a word array to a UTF-16 BE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 BE string.\n *\n * @static\n *\n * @example\n *\n * const utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n\n // Convert\n const utf16Chars = [];\n for (let i = 0; i < sigBytes; i += 2) {\n const codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n\n return utf16Chars.join('');\n },\n\n /**\n * Converts a UTF-16 BE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 BE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * const wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n */\n parse(utf16Str) {\n // Shortcut\n const utf16StrLength = utf16Str.length;\n\n // Convert\n const words = [];\n for (let i = 0; i < utf16StrLength; i += 1) {\n words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n }\n\n return WordArray.create(words, utf16StrLength * 2);\n },\n};\nexport const Utf16 = Utf16BE;\n\n/**\n * UTF-16 LE encoding strategy.\n */\nexport const Utf16LE = {\n /**\n * Converts a word array to a UTF-16 LE string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-16 LE string.\n *\n * @static\n *\n * @example\n *\n * const utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n\n // Convert\n const utf16Chars = [];\n for (let i = 0; i < sigBytes; i += 2) {\n const codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n utf16Chars.push(String.fromCharCode(codePoint));\n }\n\n return utf16Chars.join('');\n },\n\n /**\n * Converts a UTF-16 LE string to a word array.\n *\n * @param {string} utf16Str The UTF-16 LE string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * const wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n */\n parse(utf16Str) {\n // Shortcut\n const utf16StrLength = utf16Str.length;\n\n // Convert\n const words = [];\n for (let i = 0; i < utf16StrLength; i += 1) {\n words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n }\n\n return WordArray.create(words, utf16StrLength * 2);\n },\n};\n","import {\n WordArray,\n Hasher,\n} from './core.js';\n\n// Reusable object\nconst W = [];\n\n/**\n * SHA-1 hash algorithm.\n */\nexport class SHA1Algo extends Hasher {\n _doReset() {\n this._hash = new WordArray([\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n 0xc3d2e1f0,\n ]);\n }\n\n _doProcessBlock(M, offset) {\n // Shortcut\n const H = this._hash.words;\n\n // Working variables\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n // Computation\n for (let i = 0; i < 80; i += 1) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n const n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = (n << 1) | (n >>> 31);\n }\n\n let t = ((a << 5) | (a >>> 27)) + e + W[i];\n if (i < 20) {\n t += ((b & c) | (~b & d)) + 0x5a827999;\n } else if (i < 40) {\n t += (b ^ c ^ d) + 0x6ed9eba1;\n } else if (i < 60) {\n t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n } else /* if (i < 80) */ {\n t += (b ^ c ^ d) - 0x359d3e2a;\n }\n\n e = d;\n d = c;\n c = (b << 30) | (b >>> 2);\n b = a;\n a = t;\n }\n\n // Intermediate hash value\n H[0] = (H[0] + a) | 0;\n H[1] = (H[1] + b) | 0;\n H[2] = (H[2] + c) | 0;\n H[3] = (H[3] + d) | 0;\n H[4] = (H[4] + e) | 0;\n }\n\n _doFinalize() {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n\n const nBitsTotal = this._nDataBytes * 8;\n const nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n }\n\n clone() {\n const clone = super.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA1('message');\n * var hash = CryptoJS.SHA1(wordArray);\n */\nexport const SHA1 = Hasher._createHelper(SHA1Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA1(message, key);\n */\nexport const HmacSHA1 = Hasher._createHmacHelper(SHA1Algo);\n","import {\n WordArray,\n Hasher,\n} from './core.js';\n\n// Initialization and round constants tables\nconst H = [];\nconst K = [];\n\n// Compute constants\nconst isPrime = (n) => {\n const sqrtN = Math.sqrt(n);\n for (let factor = 2; factor <= sqrtN; factor += 1) {\n if (!(n % factor)) {\n return false;\n }\n }\n\n return true;\n};\n\nconst getFractionalBits = n => ((n - (n | 0)) * 0x100000000) | 0;\n\nlet n = 2;\nlet nPrime = 0;\nwhile (nPrime < 64) {\n if (isPrime(n)) {\n if (nPrime < 8) {\n H[nPrime] = getFractionalBits(n ** (1 / 2));\n }\n K[nPrime] = getFractionalBits(n ** (1 / 3));\n\n nPrime += 1;\n }\n\n n += 1;\n}\n\n// Reusable object\nconst W = [];\n\n/**\n * SHA-256 hash algorithm.\n */\nexport class SHA256Algo extends Hasher {\n _doReset() {\n this._hash = new WordArray(H.slice(0));\n }\n\n _doProcessBlock(M, offset) {\n // Shortcut\n const _H = this._hash.words;\n\n // Working variables\n let a = _H[0];\n let b = _H[1];\n let c = _H[2];\n let d = _H[3];\n let e = _H[4];\n let f = _H[5];\n let g = _H[6];\n let h = _H[7];\n\n // Computation\n for (let i = 0; i < 64; i += 1) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n const gamma0x = W[i - 15];\n const gamma0 = ((gamma0x << 25) | (gamma0x >>> 7))\n ^ ((gamma0x << 14) | (gamma0x >>> 18))\n ^ (gamma0x >>> 3);\n\n const gamma1x = W[i - 2];\n const gamma1 = ((gamma1x << 15) | (gamma1x >>> 17))\n ^ ((gamma1x << 13) | (gamma1x >>> 19))\n ^ (gamma1x >>> 10);\n\n W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n }\n\n const ch = (e & f) ^ (~e & g);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n\n const sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n const sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n const t1 = h + sigma1 + ch + K[i] + W[i];\n const t2 = sigma0 + maj;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n // Intermediate hash value\n _H[0] = (_H[0] + a) | 0;\n _H[1] = (_H[1] + b) | 0;\n _H[2] = (_H[2] + c) | 0;\n _H[3] = (_H[3] + d) | 0;\n _H[4] = (_H[4] + e) | 0;\n _H[5] = (_H[5] + f) | 0;\n _H[6] = (_H[6] + g) | 0;\n _H[7] = (_H[7] + h) | 0;\n }\n\n _doFinalize() {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n\n const nBitsTotal = this._nDataBytes * 8;\n const nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Return final computed hash\n return this._hash;\n }\n\n clone() {\n const clone = super.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA256('message');\n * var hash = CryptoJS.SHA256(wordArray);\n */\nexport const SHA256 = Hasher._createHelper(SHA256Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA256(message, key);\n */\nexport const HmacSHA256 = Hasher._createHmacHelper(SHA256Algo);\n","import { WordArray } from './core.js';\nimport { SHA256Algo } from './sha256.js';\n\n/**\n * SHA-224 hash algorithm.\n */\nexport class SHA224Algo extends SHA256Algo {\n _doReset() {\n this._hash = new WordArray([\n 0xc1059ed8,\n 0x367cd507,\n 0x3070dd17,\n 0xf70e5939,\n 0xffc00b31,\n 0x68581511,\n 0x64f98fa7,\n 0xbefa4fa4,\n ]);\n }\n\n _doFinalize() {\n const hash = super._doFinalize.call(this);\n\n hash.sigBytes -= 4;\n\n return hash;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA224('message');\n * var hash = CryptoJS.SHA224(wordArray);\n */\nexport const SHA224 = SHA256Algo._createHelper(SHA224Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA224(message, key);\n */\nexport const HmacSHA224 = SHA256Algo._createHmacHelper(SHA224Algo);\n","import { Hasher } from './core.js';\nimport {\n X64Word,\n X64WordArray,\n} from './x64-core.js';\n\n// Constants\nconst K = [\n new X64Word(0x428a2f98, 0xd728ae22),\n new X64Word(0x71374491, 0x23ef65cd),\n new X64Word(0xb5c0fbcf, 0xec4d3b2f),\n new X64Word(0xe9b5dba5, 0x8189dbbc),\n new X64Word(0x3956c25b, 0xf348b538),\n new X64Word(0x59f111f1, 0xb605d019),\n new X64Word(0x923f82a4, 0xaf194f9b),\n new X64Word(0xab1c5ed5, 0xda6d8118),\n new X64Word(0xd807aa98, 0xa3030242),\n new X64Word(0x12835b01, 0x45706fbe),\n new X64Word(0x243185be, 0x4ee4b28c),\n new X64Word(0x550c7dc3, 0xd5ffb4e2),\n new X64Word(0x72be5d74, 0xf27b896f),\n new X64Word(0x80deb1fe, 0x3b1696b1),\n new X64Word(0x9bdc06a7, 0x25c71235),\n new X64Word(0xc19bf174, 0xcf692694),\n new X64Word(0xe49b69c1, 0x9ef14ad2),\n new X64Word(0xefbe4786, 0x384f25e3),\n new X64Word(0x0fc19dc6, 0x8b8cd5b5),\n new X64Word(0x240ca1cc, 0x77ac9c65),\n new X64Word(0x2de92c6f, 0x592b0275),\n new X64Word(0x4a7484aa, 0x6ea6e483),\n new X64Word(0x5cb0a9dc, 0xbd41fbd4),\n new X64Word(0x76f988da, 0x831153b5),\n new X64Word(0x983e5152, 0xee66dfab),\n new X64Word(0xa831c66d, 0x2db43210),\n new X64Word(0xb00327c8, 0x98fb213f),\n new X64Word(0xbf597fc7, 0xbeef0ee4),\n new X64Word(0xc6e00bf3, 0x3da88fc2),\n new X64Word(0xd5a79147, 0x930aa725),\n new X64Word(0x06ca6351, 0xe003826f),\n new X64Word(0x14292967, 0x0a0e6e70),\n new X64Word(0x27b70a85, 0x46d22ffc),\n new X64Word(0x2e1b2138, 0x5c26c926),\n new X64Word(0x4d2c6dfc, 0x5ac42aed),\n new X64Word(0x53380d13, 0x9d95b3df),\n new X64Word(0x650a7354, 0x8baf63de),\n new X64Word(0x766a0abb, 0x3c77b2a8),\n new X64Word(0x81c2c92e, 0x47edaee6),\n new X64Word(0x92722c85, 0x1482353b),\n new X64Word(0xa2bfe8a1, 0x4cf10364),\n new X64Word(0xa81a664b, 0xbc423001),\n new X64Word(0xc24b8b70, 0xd0f89791),\n new X64Word(0xc76c51a3, 0x0654be30),\n new X64Word(0xd192e819, 0xd6ef5218),\n new X64Word(0xd6990624, 0x5565a910),\n new X64Word(0xf40e3585, 0x5771202a),\n new X64Word(0x106aa070, 0x32bbd1b8),\n new X64Word(0x19a4c116, 0xb8d2d0c8),\n new X64Word(0x1e376c08, 0x5141ab53),\n new X64Word(0x2748774c, 0xdf8eeb99),\n new X64Word(0x34b0bcb5, 0xe19b48a8),\n new X64Word(0x391c0cb3, 0xc5c95a63),\n new X64Word(0x4ed8aa4a, 0xe3418acb),\n new X64Word(0x5b9cca4f, 0x7763e373),\n new X64Word(0x682e6ff3, 0xd6b2b8a3),\n new X64Word(0x748f82ee, 0x5defb2fc),\n new X64Word(0x78a5636f, 0x43172f60),\n new X64Word(0x84c87814, 0xa1f0ab72),\n new X64Word(0x8cc70208, 0x1a6439ec),\n new X64Word(0x90befffa, 0x23631e28),\n new X64Word(0xa4506ceb, 0xde82bde9),\n new X64Word(0xbef9a3f7, 0xb2c67915),\n new X64Word(0xc67178f2, 0xe372532b),\n new X64Word(0xca273ece, 0xea26619c),\n new X64Word(0xd186b8c7, 0x21c0c207),\n new X64Word(0xeada7dd6, 0xcde0eb1e),\n new X64Word(0xf57d4f7f, 0xee6ed178),\n new X64Word(0x06f067aa, 0x72176fba),\n new X64Word(0x0a637dc5, 0xa2c898a6),\n new X64Word(0x113f9804, 0xbef90dae),\n new X64Word(0x1b710b35, 0x131c471b),\n new X64Word(0x28db77f5, 0x23047d84),\n new X64Word(0x32caab7b, 0x40c72493),\n new X64Word(0x3c9ebe0a, 0x15c9bebc),\n new X64Word(0x431d67c4, 0x9c100d4c),\n new X64Word(0x4cc5d4be, 0xcb3e42b6),\n new X64Word(0x597f299c, 0xfc657e2a),\n new X64Word(0x5fcb6fab, 0x3ad6faec),\n new X64Word(0x6c44198c, 0x4a475817),\n];\n\n// Reusable objects\nconst W = [];\nfor (let i = 0; i < 80; i += 1) {\n W[i] = new X64Word();\n}\n\n/**\n * SHA-512 hash algorithm.\n */\nexport class SHA512Algo extends Hasher {\n constructor() {\n super();\n\n this.blockSize = 1024 / 32;\n }\n\n _doReset() {\n this._hash = new X64WordArray([\n new X64Word(0x6a09e667, 0xf3bcc908),\n new X64Word(0xbb67ae85, 0x84caa73b),\n new X64Word(0x3c6ef372, 0xfe94f82b),\n new X64Word(0xa54ff53a, 0x5f1d36f1),\n new X64Word(0x510e527f, 0xade682d1),\n new X64Word(0x9b05688c, 0x2b3e6c1f),\n new X64Word(0x1f83d9ab, 0xfb41bd6b),\n new X64Word(0x5be0cd19, 0x137e2179),\n ]);\n }\n\n _doProcessBlock(M, offset) {\n // Shortcuts\n const H = this._hash.words;\n\n const H0 = H[0];\n const H1 = H[1];\n const H2 = H[2];\n const H3 = H[3];\n const H4 = H[4];\n const H5 = H[5];\n const H6 = H[6];\n const H7 = H[7];\n\n const H0h = H0.high;\n let H0l = H0.low;\n const H1h = H1.high;\n let H1l = H1.low;\n const H2h = H2.high;\n let H2l = H2.low;\n const H3h = H3.high;\n let H3l = H3.low;\n const H4h = H4.high;\n let H4l = H4.low;\n const H5h = H5.high;\n let H5l = H5.low;\n const H6h = H6.high;\n let H6l = H6.low;\n const H7h = H7.high;\n let H7l = H7.low;\n\n // Working variables\n let ah = H0h;\n let al = H0l;\n let bh = H1h;\n let bl = H1l;\n let ch = H2h;\n let cl = H2l;\n let dh = H3h;\n let dl = H3l;\n let eh = H4h;\n let el = H4l;\n let fh = H5h;\n let fl = H5l;\n let gh = H6h;\n let gl = H6l;\n let hh = H7h;\n let hl = H7l;\n\n // Rounds\n for (let i = 0; i < 80; i += 1) {\n let Wil;\n let Wih;\n\n // Shortcut\n const Wi = W[i];\n\n // Extend message\n if (i < 16) {\n Wi.high = M[offset + i * 2] | 0;\n Wih = Wi.high;\n Wi.low = M[offset + i * 2 + 1] | 0;\n Wil = Wi.low;\n } else {\n // Gamma0\n const gamma0x = W[i - 15];\n const gamma0xh = gamma0x.high;\n const gamma0xl = gamma0x.low;\n const gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31))\n ^ ((gamma0xh >>> 8) | (gamma0xl << 24))\n ^ (gamma0xh >>> 7);\n const gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31))\n ^ ((gamma0xl >>> 8) | (gamma0xh << 24))\n ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n // Gamma1\n const gamma1x = W[i - 2];\n const gamma1xh = gamma1x.high;\n const gamma1xl = gamma1x.low;\n const gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13))\n ^ ((gamma1xh << 3) | (gamma1xl >>> 29))\n ^ (gamma1xh >>> 6);\n const gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13))\n ^ ((gamma1xl << 3) | (gamma1xh >>> 29))\n ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n const Wi7 = W[i - 7];\n const Wi7h = Wi7.high;\n const Wi7l = Wi7.low;\n\n const Wi16 = W[i - 16];\n const Wi16h = Wi16.high;\n const Wi16l = Wi16.low;\n\n Wil = gamma0l + Wi7l;\n Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n Wil += gamma1l;\n Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n Wil += Wi16l;\n Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n Wi.high = Wih;\n Wi.low = Wil;\n }\n\n const chh = (eh & fh) ^ (~eh & gh);\n const chl = (el & fl) ^ (~el & gl);\n const majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n const majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n const sigma0h = ((ah >>> 28) | (al << 4))\n ^ ((ah << 30) | (al >>> 2))\n ^ ((ah << 25) | (al >>> 7));\n const sigma0l = ((al >>> 28) | (ah << 4))\n ^ ((al << 30) | (ah >>> 2))\n ^ ((al << 25) | (ah >>> 7));\n const sigma1h = ((eh >>> 14) | (el << 18))\n ^ ((eh >>> 18) | (el << 14))\n ^ ((eh << 23) | (el >>> 9));\n const sigma1l = ((el >>> 14) | (eh << 18))\n ^ ((el >>> 18) | (eh << 14))\n ^ ((el << 23) | (eh >>> 9));\n\n // t1 = h + sigma1 + ch + K[i] + W[i]\n const Ki = K[i];\n const Kih = Ki.high;\n const Kil = Ki.low;\n\n let t1l = hl + sigma1l;\n let t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n t1l += chl;\n t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n t1l += Kil;\n t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n t1l += Wil;\n t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n // t2 = sigma0 + maj\n const t2l = sigma0l + majl;\n const t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n // Update working variables\n hh = gh;\n hl = gl;\n gh = fh;\n gl = fl;\n fh = eh;\n fl = el;\n el = (dl + t1l) | 0;\n eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n dh = ch;\n dl = cl;\n ch = bh;\n cl = bl;\n bh = ah;\n bl = al;\n al = (t1l + t2l) | 0;\n ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n }\n\n // Intermediate hash value\n H0.low = (H0l + al);\n H0l = H0.low;\n H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n H1.low = (H1l + bl);\n H1l = H1.low;\n H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n H2.low = (H2l + cl);\n H2l = H2.low;\n H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n H3.low = (H3l + dl);\n H3l = H3.low;\n H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n H4.low = (H4l + el);\n H4l = H4.low;\n H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n H5.low = (H5l + fl);\n H5l = H5.low;\n H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n H6.low = (H6l + gl);\n H6l = H6.low;\n H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n H7.low = (H7l + hl);\n H7l = H7.low;\n H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n }\n\n _doFinalize() {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n\n const nBitsTotal = this._nDataBytes * 8;\n const nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Convert hash to 32-bit word array before returning\n const hash = this._hash.toX32();\n\n // Return final computed hash\n return hash;\n }\n\n clone() {\n const clone = super.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA512('message');\n * var hash = CryptoJS.SHA512(wordArray);\n */\nexport const SHA512 = Hasher._createHelper(SHA512Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA512(message, key);\n */\nexport const HmacSHA512 = Hasher._createHmacHelper(SHA512Algo);\n","import {\n X64Word,\n X64WordArray,\n} from './x64-core.js';\nimport { SHA512Algo } from './sha512.js';\n\n/**\n * SHA-384 hash algorithm.\n */\nexport class SHA384Algo extends SHA512Algo {\n _doReset() {\n this._hash = new X64WordArray([\n new X64Word(0xcbbb9d5d, 0xc1059ed8),\n new X64Word(0x629a292a, 0x367cd507),\n new X64Word(0x9159015a, 0x3070dd17),\n new X64Word(0x152fecd8, 0xf70e5939),\n new X64Word(0x67332667, 0xffc00b31),\n new X64Word(0x8eb44a87, 0x68581511),\n new X64Word(0xdb0c2e0d, 0x64f98fa7),\n new X64Word(0x47b5481d, 0xbefa4fa4),\n ]);\n }\n\n _doFinalize() {\n const hash = super._doFinalize.call(this);\n\n hash.sigBytes -= 16;\n\n return hash;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA384('message');\n * var hash = CryptoJS.SHA384(wordArray);\n */\nexport const SHA384 = SHA512Algo._createHelper(SHA384Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA384(message, key);\n */\nexport const HmacSHA384 = SHA512Algo._createHmacHelper(SHA384Algo);\n","import {\n WordArray,\n Hasher,\n} from './core.js';\nimport { X64Word } from './x64-core.js';\n\n// Constants tables\nconst RHO_OFFSETS = [];\nconst PI_INDEXES = [];\nconst ROUND_CONSTANTS = [];\n\n// Compute Constants\n// Compute rho offset constants\nlet _x = 1;\nlet _y = 0;\nfor (let t = 0; t < 24; t += 1) {\n RHO_OFFSETS[_x + 5 * _y] = ((t + 1) * (t + 2) / 2) % 64;\n\n const newX = _y % 5;\n const newY = (2 * _x + 3 * _y) % 5;\n _x = newX;\n _y = newY;\n}\n\n// Compute pi index constants\nfor (let x = 0; x < 5; x += 1) {\n for (let y = 0; y < 5; y += 1) {\n PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n }\n}\n\n// Compute round constants\nlet LFSR = 0x01;\nfor (let i = 0; i < 24; i += 1) {\n let roundConstantMsw = 0;\n let roundConstantLsw = 0;\n\n for (let j = 0; j < 7; j += 1) {\n if (LFSR & 0x01) {\n const bitPosition = (1 << j) - 1;\n if (bitPosition < 32) {\n roundConstantLsw ^= 1 << bitPosition;\n } else /* if (bitPosition >= 32) */ {\n roundConstantMsw ^= 1 << (bitPosition - 32);\n }\n }\n\n // Compute next LFSR\n if (LFSR & 0x80) {\n // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n LFSR = (LFSR << 1) ^ 0x71;\n } else {\n LFSR <<= 1;\n }\n }\n\n ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n}\n\n// Reusable objects for temporary values\nconst T = [];\nfor (let i = 0; i < 25; i += 1) {\n T[i] = X64Word.create();\n}\n\n/**\n * SHA-3 hash algorithm.\n */\nexport class SHA3Algo extends Hasher {\n constructor(cfg) {\n /**\n * Configuration options.\n *\n * @property {number} outputLength\n * The desired number of bits in the output hash.\n * Only values permitted are: 224, 256, 384, 512.\n * Default: 512\n */\n super(Object.assign(\n { outputLength: 512 },\n cfg,\n ));\n }\n\n _doReset() {\n this._state = [];\n const state = this._state;\n for (let i = 0; i < 25; i += 1) {\n state[i] = new X64Word();\n }\n\n this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n }\n\n _doProcessBlock(M, offset) {\n // Shortcuts\n const state = this._state;\n const nBlockSizeLanes = this.blockSize / 2;\n\n // Absorb\n for (let i = 0; i < nBlockSizeLanes; i += 1) {\n // Shortcuts\n let M2i = M[offset + 2 * i];\n let M2i1 = M[offset + 2 * i + 1];\n\n // Swap endian\n M2i = (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff)\n | (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00);\n M2i1 = (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff)\n | (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00);\n\n // Absorb message into state\n const lane = state[i];\n lane.high ^= M2i1;\n lane.low ^= M2i;\n }\n\n // Rounds\n for (let round = 0; round < 24; round += 1) {\n // Theta\n for (let x = 0; x < 5; x += 1) {\n // Mix column lanes\n let tMsw = 0;\n let tLsw = 0;\n for (let y = 0; y < 5; y += 1) {\n const lane = state[x + 5 * y];\n tMsw ^= lane.high;\n tLsw ^= lane.low;\n }\n\n // Temporary values\n const Tx = T[x];\n Tx.high = tMsw;\n Tx.low = tLsw;\n }\n for (let x = 0; x < 5; x += 1) {\n // Shortcuts\n const Tx4 = T[(x + 4) % 5];\n const Tx1 = T[(x + 1) % 5];\n const Tx1Msw = Tx1.high;\n const Tx1Lsw = Tx1.low;\n\n // Mix surrounding columns\n const tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n const tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n for (let y = 0; y < 5; y += 1) {\n const lane = state[x + 5 * y];\n lane.high ^= tMsw;\n lane.low ^= tLsw;\n }\n }\n\n // Rho Pi\n for (let laneIndex = 1; laneIndex < 25; laneIndex += 1) {\n let tMsw;\n let tLsw;\n\n // Shortcuts\n const lane = state[laneIndex];\n const laneMsw = lane.high;\n const laneLsw = lane.low;\n const rhoOffset = RHO_OFFSETS[laneIndex];\n\n // Rotate lanes\n if (rhoOffset < 32) {\n tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n } else /* if (rhoOffset >= 32) */ {\n tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n }\n\n // Transpose lanes\n const TPiLane = T[PI_INDEXES[laneIndex]];\n TPiLane.high = tMsw;\n TPiLane.low = tLsw;\n }\n\n // Rho pi at x = y = 0\n const T0 = T[0];\n const state0 = state[0];\n T0.high = state0.high;\n T0.low = state0.low;\n\n // Chi\n for (let x = 0; x < 5; x += 1) {\n for (let y = 0; y < 5; y += 1) {\n // Shortcuts\n const laneIndex = x + 5 * y;\n const lane = state[laneIndex];\n const TLane = T[laneIndex];\n const Tx1Lane = T[((x + 1) % 5) + 5 * y];\n const Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n // Mix rows\n lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n }\n }\n\n // Iota\n const lane = state[0];\n const roundConstant = ROUND_CONSTANTS[round];\n lane.high ^= roundConstant.high;\n lane.low ^= roundConstant.low;\n }\n }\n\n _doFinalize() {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n const nBitsLeft = data.sigBytes * 8;\n const blockSizeBits = this.blockSize * 32;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - (nBitsLeft % 32));\n dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n data.sigBytes = dataWords.length * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n const state = this._state;\n const outputLengthBytes = this.cfg.outputLength / 8;\n const outputLengthLanes = outputLengthBytes / 8;\n\n // Squeeze\n const hashWords = [];\n for (let i = 0; i < outputLengthLanes; i += 1) {\n // Shortcuts\n const lane = state[i];\n let laneMsw = lane.high;\n let laneLsw = lane.low;\n\n // Swap endian\n laneMsw = (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff)\n | (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00);\n laneLsw = (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff)\n | (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00);\n\n // Squeeze state to retrieve hash\n hashWords.push(laneLsw);\n hashWords.push(laneMsw);\n }\n\n // Return final computed hash\n return new WordArray(hashWords, outputLengthBytes);\n }\n\n clone() {\n const clone = super.clone.call(this);\n\n clone._state = this._state.slice(0);\n const state = clone._state;\n for (let i = 0; i < 25; i += 1) {\n state[i] = state[i].clone();\n }\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA3('message');\n * var hash = CryptoJS.SHA3(wordArray);\n */\nexport const SHA3 = Hasher._createHelper(SHA3Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA3(message, key);\n */\nexport const HmacSHA3 = Hasher._createHmacHelper(SHA3Algo);\n","/** @preserve\n(c) 2012 by Cédric Mesnil. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted\nprovided that the following conditions are met:\n\n - Redistributions of source code must retain the above copyright notice, this list of\n conditions and the following disclaimer.\n - Redistributions in binary form must reproduce the above copyright notice, this list\n of conditions and the following disclaimer in the documentation and/or other materials\n provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS\nOR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY\nWAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nimport {\n WordArray,\n Hasher,\n} from './core.js';\n\n// Constants table\nconst _zl = WordArray.create([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\nconst _zr = WordArray.create([\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\nconst _sl = WordArray.create([\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]);\nconst _sr = WordArray.create([\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]);\n\nconst _hl = WordArray.create([0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\nconst _hr = WordArray.create([0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\nconst f1 = (x, y, z) => (x) ^ (y) ^ (z);\n\nconst f2 = (x, y, z) => ((x) & (y)) | ((~x) & (z));\n\nconst f3 = (x, y, z) => ((x) | (~(y))) ^ (z);\n\nconst f4 = (x, y, z) => ((x) & (z)) | ((y) & (~(z)));\n\nconst f5 = (x, y, z) => (x) ^ ((y) | (~(z)));\n\nconst rotl = (x, n) => (x << n) | (x >>> (32 - n));\n\n/**\n * RIPEMD160 hash algorithm.\n */\nexport class RIPEMD160Algo extends Hasher {\n _doReset() {\n this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n }\n\n _doProcessBlock(M, offset) {\n const _M = M;\n\n // Swap endian\n for (let i = 0; i < 16; i += 1) {\n // Shortcuts\n const offset_i = offset + i;\n const M_offset_i = _M[offset_i];\n\n // Swap\n _M[offset_i] = (\n (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff)\n | (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n );\n }\n // Shortcut\n const H = this._hash.words;\n const hl = _hl.words;\n const hr = _hr.words;\n const zl = _zl.words;\n const zr = _zr.words;\n const sl = _sl.words;\n const sr = _sr.words;\n\n // Working variables\n let al = H[0];\n let bl = H[1];\n let cl = H[2];\n let dl = H[3];\n let el = H[4];\n let ar = H[0];\n let br = H[1];\n let cr = H[2];\n let dr = H[3];\n let er = H[4];\n\n // Computation\n let t;\n for (let i = 0; i < 80; i += 1) {\n t = (al + _M[offset + zl[i]]) | 0;\n if (i < 16) {\n t += f1(bl, cl, dl) + hl[0];\n } else if (i < 32) {\n t += f2(bl, cl, dl) + hl[1];\n } else if (i < 48) {\n t += f3(bl, cl, dl) + hl[2];\n } else if (i < 64) {\n t += f4(bl, cl, dl) + hl[3];\n } else { // if (i<80) {\n t += f5(bl, cl, dl) + hl[4];\n }\n t |= 0;\n t = rotl(t, sl[i]);\n t = (t + el) | 0;\n al = el;\n el = dl;\n dl = rotl(cl, 10);\n cl = bl;\n bl = t;\n\n t = (ar + _M[offset + zr[i]]) | 0;\n if (i < 16) {\n t += f5(br, cr, dr) + hr[0];\n } else if (i < 32) {\n t += f4(br, cr, dr) + hr[1];\n } else if (i < 48) {\n t += f3(br, cr, dr) + hr[2];\n } else if (i < 64) {\n t += f2(br, cr, dr) + hr[3];\n } else { // if (i<80) {\n t += f1(br, cr, dr) + hr[4];\n }\n t |= 0;\n t = rotl(t, sr[i]);\n t = (t + er) | 0;\n ar = er;\n er = dr;\n dr = rotl(cr, 10);\n cr = br;\n br = t;\n }\n // Intermediate hash value\n t = (H[1] + cl + dr) | 0;\n H[1] = (H[2] + dl + er) | 0;\n H[2] = (H[3] + el + ar) | 0;\n H[3] = (H[4] + al + br) | 0;\n H[4] = (H[0] + bl + cr) | 0;\n H[0] = t;\n }\n\n _doFinalize() {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n\n const nBitsTotal = this._nDataBytes * 8;\n const nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff)\n | (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n );\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n const hash = this._hash;\n const H = hash.words;\n\n // Swap endian\n for (let i = 0; i < 5; i += 1) {\n // Shortcut\n const H_i = H[i];\n\n // Swap\n H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff)\n | (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n }\n\n // Return final computed hash\n return hash;\n }\n\n clone() {\n const clone = super.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.RIPEMD160('message');\n * var hash = CryptoJS.RIPEMD160(wordArray);\n */\nexport const RIPEMD160 = Hasher._createHelper(RIPEMD160Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n */\nexport const HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160Algo);\n","import {\n Base,\n WordArray,\n} from './core.js';\nimport { SHA1Algo } from './sha1.js';\nimport { HMAC } from './hmac.js';\n\n/**\n * Password-Based Key Derivation Function 2 algorithm.\n */\nexport class PBKDF2Algo extends Base {\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * const kdf = CryptoJS.algo.PBKDF2.create();\n * const kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n * const kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n */\n constructor(cfg) {\n super();\n\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hasher to use. Default: SHA1\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n this.cfg = Object.assign(\n new Base(),\n {\n keySize: 128 / 32,\n hasher: SHA1Algo,\n iterations: 1,\n },\n cfg,\n );\n }\n\n /**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * const key = kdf.compute(password, salt);\n */\n compute(password, salt) {\n // Shortcut\n const { cfg } = this;\n\n // Init HMAC\n const hmac = HMAC.create(cfg.hasher, password);\n\n // Initial values\n const derivedKey = WordArray.create();\n const blockIndex = WordArray.create([0x00000001]);\n\n // Shortcuts\n const derivedKeyWords = derivedKey.words;\n const blockIndexWords = blockIndex.words;\n const { keySize, iterations } = cfg;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n const block = hmac.update(salt).finalize(blockIndex);\n hmac.reset();\n\n // Shortcuts\n const blockWords = block.words;\n const blockWordsLength = blockWords.length;\n\n // Iterations\n let intermediate = block;\n for (let i = 1; i < iterations; i += 1) {\n intermediate = hmac.finalize(intermediate);\n hmac.reset();\n\n // Shortcut\n const intermediateWords = intermediate.words;\n\n // XOR intermediate with block\n for (let j = 0; j < blockWordsLength; j += 1) {\n blockWords[j] ^= intermediateWords[j];\n }\n }\n\n derivedKey.concat(block);\n blockIndexWords[0] += 1;\n }\n derivedKey.sigBytes = keySize * 4;\n\n return derivedKey;\n }\n}\n\n/**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.PBKDF2(password, salt);\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n */\nexport const PBKDF2 = (password, salt, cfg) => PBKDF2Algo.create(cfg).compute(password, salt);\n","import {\n BlockCipher,\n} from './cipher-core.js';\n\n// Lookup tables\nconst _SBOX = [];\nconst INV_SBOX = [];\nconst _SUB_MIX_0 = [];\nconst _SUB_MIX_1 = [];\nconst _SUB_MIX_2 = [];\nconst _SUB_MIX_3 = [];\nconst INV_SUB_MIX_0 = [];\nconst INV_SUB_MIX_1 = [];\nconst INV_SUB_MIX_2 = [];\nconst INV_SUB_MIX_3 = [];\n\n// Compute lookup tables\n\n// Compute double table\nconst d = [];\nfor (let i = 0; i < 256; i += 1) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = (i << 1) ^ 0x11b;\n }\n}\n\n// Walk GF(2^8)\nlet x = 0;\nlet xi = 0;\nfor (let i = 0; i < 256; i += 1) {\n // Compute sbox\n let sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n _SBOX[x] = sx;\n INV_SBOX[sx] = x;\n\n // Compute multiplication\n const x2 = d[x];\n const x4 = d[x2];\n const x8 = d[x4];\n\n // Compute sub bytes, mix columns tables\n let t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n _SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n _SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n _SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n _SUB_MIX_3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n INV_SUB_MIX_3[sx] = t;\n\n // Compute next counter\n if (!x) {\n xi = 1;\n x = xi;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n}\n\n// Precomputed Rcon lookup\nconst RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n/**\n * AES block cipher algorithm.\n */\nexport class AESAlgo extends BlockCipher {\n _doReset() {\n let t;\n\n // Skip reset of nRounds has been set before and key did not change\n if (this._nRounds && this._keyPriorReset === this._key) {\n return;\n }\n\n // Shortcuts\n this._keyPriorReset = this._key;\n const key = this._keyPriorReset;\n const keyWords = key.words;\n const keySize = key.sigBytes / 4;\n\n // Compute number of rounds\n this._nRounds = keySize + 6;\n const nRounds = this._nRounds;\n\n // Compute number of key schedule rows\n const ksRows = (nRounds + 1) * 4;\n\n // Compute key schedule\n this._keySchedule = [];\n const keySchedule = this._keySchedule;\n for (let ksRow = 0; ksRow < ksRows; ksRow += 1) {\n if (ksRow < keySize) {\n keySchedule[ksRow] = keyWords[ksRow];\n } else {\n t = keySchedule[ksRow - 1];\n\n if (!(ksRow % keySize)) {\n // Rot word\n t = (t << 8) | (t >>> 24);\n\n // Sub word\n t = (_SBOX[t >>> 24] << 24)\n | (_SBOX[(t >>> 16) & 0xff] << 16)\n | (_SBOX[(t >>> 8) & 0xff] << 8)\n | _SBOX[t & 0xff];\n\n // Mix Rcon\n t ^= RCON[(ksRow / keySize) | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize === 4) {\n // Sub word\n t = (_SBOX[t >>> 24] << 24)\n | (_SBOX[(t >>> 16) & 0xff] << 16)\n | (_SBOX[(t >>> 8) & 0xff] << 8)\n | _SBOX[t & 0xff];\n }\n\n keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n }\n }\n\n // Compute inv key schedule\n this._invKeySchedule = [];\n const invKeySchedule = this._invKeySchedule;\n for (let invKsRow = 0; invKsRow < ksRows; invKsRow += 1) {\n const ksRow = ksRows - invKsRow;\n\n if (invKsRow % 4) {\n t = keySchedule[ksRow];\n } else {\n t = keySchedule[ksRow - 4];\n }\n\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = INV_SUB_MIX_0[_SBOX[t >>> 24]]\n ^ INV_SUB_MIX_1[_SBOX[(t >>> 16) & 0xff]]\n ^ INV_SUB_MIX_2[_SBOX[(t >>> 8) & 0xff]]\n ^ INV_SUB_MIX_3[_SBOX[t & 0xff]];\n }\n }\n }\n\n encryptBlock(M, offset) {\n this._doCryptBlock(\n M, offset, this._keySchedule, _SUB_MIX_0, _SUB_MIX_1, _SUB_MIX_2, _SUB_MIX_3, _SBOX,\n );\n }\n\n decryptBlock(M, offset) {\n const _M = M;\n\n // Swap 2nd and 4th rows\n let t = _M[offset + 1];\n _M[offset + 1] = _M[offset + 3];\n _M[offset + 3] = t;\n\n this._doCryptBlock(\n _M,\n offset,\n this._invKeySchedule,\n INV_SUB_MIX_0,\n INV_SUB_MIX_1,\n INV_SUB_MIX_2,\n INV_SUB_MIX_3,\n INV_SBOX,\n );\n\n // Inv swap 2nd and 4th rows\n t = _M[offset + 1];\n _M[offset + 1] = _M[offset + 3];\n _M[offset + 3] = t;\n }\n\n _doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n const _M = M;\n\n // Shortcut\n const nRounds = this._nRounds;\n\n // Get input, add round key\n let s0 = _M[offset] ^ keySchedule[0];\n let s1 = _M[offset + 1] ^ keySchedule[1];\n let s2 = _M[offset + 2] ^ keySchedule[2];\n let s3 = _M[offset + 3] ^ keySchedule[3];\n\n // Key schedule row counter\n let ksRow = 4;\n\n // Rounds\n for (let round = 1; round < nRounds; round += 1) {\n // Shift rows, sub bytes, mix columns, add round key\n const t0 = SUB_MIX_0[s0 >>> 24]\n ^ SUB_MIX_1[(s1 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s2 >>> 8) & 0xff]\n ^ SUB_MIX_3[s3 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t1 = SUB_MIX_0[s1 >>> 24]\n ^ SUB_MIX_1[(s2 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s3 >>> 8) & 0xff]\n ^ SUB_MIX_3[s0 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t2 = SUB_MIX_0[s2 >>> 24]\n ^ SUB_MIX_1[(s3 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s0 >>> 8) & 0xff]\n ^ SUB_MIX_3[s1 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t3 = SUB_MIX_0[s3 >>> 24]\n ^ SUB_MIX_1[(s0 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s1 >>> 8) & 0xff]\n ^ SUB_MIX_3[s2 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n }\n\n // Shift rows, sub bytes, add round key\n const t0 = (\n (SBOX[s0 >>> 24] << 24)\n | (SBOX[(s1 >>> 16) & 0xff] << 16)\n | (SBOX[(s2 >>> 8) & 0xff] << 8)\n | SBOX[s3 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t1 = (\n (SBOX[s1 >>> 24] << 24)\n | (SBOX[(s2 >>> 16) & 0xff] << 16)\n | (SBOX[(s3 >>> 8) & 0xff] << 8)\n | SBOX[s0 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t2 = (\n (SBOX[s2 >>> 24] << 24)\n | (SBOX[(s3 >>> 16) & 0xff] << 16)\n | (SBOX[(s0 >>> 8) & 0xff] << 8)\n | SBOX[s1 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t3 = (\n (SBOX[s3 >>> 24] << 24)\n | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n\n // Set output\n _M[offset] = t0;\n _M[offset + 1] = t1;\n _M[offset + 2] = t2;\n _M[offset + 3] = t3;\n }\n}\nAESAlgo.keySize = 256 / 32;\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n */\nexport const AES = BlockCipher._createHelper(AESAlgo);\n","import {\n WordArray,\n} from './core.js';\nimport {\n BlockCipher,\n} from './cipher-core.js';\n\n// Permuted Choice 1 constants\nconst PC1 = [\n 57, 49, 41, 33, 25, 17, 9, 1,\n 58, 50, 42, 34, 26, 18, 10, 2,\n 59, 51, 43, 35, 27, 19, 11, 3,\n 60, 52, 44, 36, 63, 55, 47, 39,\n 31, 23, 15, 7, 62, 54, 46, 38,\n 30, 22, 14, 6, 61, 53, 45, 37,\n 29, 21, 13, 5, 28, 20, 12, 4,\n];\n\n// Permuted Choice 2 constants\nconst PC2 = [\n 14, 17, 11, 24, 1, 5,\n 3, 28, 15, 6, 21, 10,\n 23, 19, 12, 4, 26, 8,\n 16, 7, 27, 20, 13, 2,\n 41, 52, 31, 37, 47, 55,\n 30, 40, 51, 45, 33, 48,\n 44, 49, 39, 56, 34, 53,\n 46, 42, 50, 36, 29, 32,\n];\n\n// Cumulative bit shift constants\nconst BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n// SBOXes and round permutation constants\nconst SBOX_P = [\n {\n 0x0: 0x808200,\n 0x10000000: 0x8000,\n 0x20000000: 0x808002,\n 0x30000000: 0x2,\n 0x40000000: 0x200,\n 0x50000000: 0x808202,\n 0x60000000: 0x800202,\n 0x70000000: 0x800000,\n 0x80000000: 0x202,\n 0x90000000: 0x800200,\n 0xa0000000: 0x8200,\n 0xb0000000: 0x808000,\n 0xc0000000: 0x8002,\n 0xd0000000: 0x800002,\n 0xe0000000: 0x0,\n 0xf0000000: 0x8202,\n 0x8000000: 0x0,\n 0x18000000: 0x808202,\n 0x28000000: 0x8202,\n 0x38000000: 0x8000,\n 0x48000000: 0x808200,\n 0x58000000: 0x200,\n 0x68000000: 0x808002,\n 0x78000000: 0x2,\n 0x88000000: 0x800200,\n 0x98000000: 0x8200,\n 0xa8000000: 0x808000,\n 0xb8000000: 0x800202,\n 0xc8000000: 0x800002,\n 0xd8000000: 0x8002,\n 0xe8000000: 0x202,\n 0xf8000000: 0x800000,\n 0x1: 0x8000,\n 0x10000001: 0x2,\n 0x20000001: 0x808200,\n 0x30000001: 0x800000,\n 0x40000001: 0x808002,\n 0x50000001: 0x8200,\n 0x60000001: 0x200,\n 0x70000001: 0x800202,\n 0x80000001: 0x808202,\n 0x90000001: 0x808000,\n 0xa0000001: 0x800002,\n 0xb0000001: 0x8202,\n 0xc0000001: 0x202,\n 0xd0000001: 0x800200,\n 0xe0000001: 0x8002,\n 0xf0000001: 0x0,\n 0x8000001: 0x808202,\n 0x18000001: 0x808000,\n 0x28000001: 0x800000,\n 0x38000001: 0x200,\n 0x48000001: 0x8000,\n 0x58000001: 0x800002,\n 0x68000001: 0x2,\n 0x78000001: 0x8202,\n 0x88000001: 0x8002,\n 0x98000001: 0x800202,\n 0xa8000001: 0x202,\n 0xb8000001: 0x808200,\n 0xc8000001: 0x800200,\n 0xd8000001: 0x0,\n 0xe8000001: 0x8200,\n 0xf8000001: 0x808002,\n },\n {\n 0x0: 0x40084010,\n 0x1000000: 0x4000,\n 0x2000000: 0x80000,\n 0x3000000: 0x40080010,\n 0x4000000: 0x40000010,\n 0x5000000: 0x40084000,\n 0x6000000: 0x40004000,\n 0x7000000: 0x10,\n 0x8000000: 0x84000,\n 0x9000000: 0x40004010,\n 0xa000000: 0x40000000,\n 0xb000000: 0x84010,\n 0xc000000: 0x80010,\n 0xd000000: 0x0,\n 0xe000000: 0x4010,\n 0xf000000: 0x40080000,\n 0x800000: 0x40004000,\n 0x1800000: 0x84010,\n 0x2800000: 0x10,\n 0x3800000: 0x40004010,\n 0x4800000: 0x40084010,\n 0x5800000: 0x40000000,\n 0x6800000: 0x80000,\n 0x7800000: 0x40080010,\n 0x8800000: 0x80010,\n 0x9800000: 0x0,\n 0xa800000: 0x4000,\n 0xb800000: 0x40080000,\n 0xc800000: 0x40000010,\n 0xd800000: 0x84000,\n 0xe800000: 0x40084000,\n 0xf800000: 0x4010,\n 0x10000000: 0x0,\n 0x11000000: 0x40080010,\n 0x12000000: 0x40004010,\n 0x13000000: 0x40084000,\n 0x14000000: 0x40080000,\n 0x15000000: 0x10,\n 0x16000000: 0x84010,\n 0x17000000: 0x4000,\n 0x18000000: 0x4010,\n 0x19000000: 0x80000,\n 0x1a000000: 0x80010,\n 0x1b000000: 0x40000010,\n 0x1c000000: 0x84000,\n 0x1d000000: 0x40004000,\n 0x1e000000: 0x40000000,\n 0x1f000000: 0x40084010,\n 0x10800000: 0x84010,\n 0x11800000: 0x80000,\n 0x12800000: 0x40080000,\n 0x13800000: 0x4000,\n 0x14800000: 0x40004000,\n 0x15800000: 0x40084010,\n 0x16800000: 0x10,\n 0x17800000: 0x40000000,\n 0x18800000: 0x40084000,\n 0x19800000: 0x40000010,\n 0x1a800000: 0x40004010,\n 0x1b800000: 0x80010,\n 0x1c800000: 0x0,\n 0x1d800000: 0x4010,\n 0x1e800000: 0x40080010,\n 0x1f800000: 0x84000,\n },\n {\n 0x0: 0x104,\n 0x100000: 0x0,\n 0x200000: 0x4000100,\n 0x300000: 0x10104,\n 0x400000: 0x10004,\n 0x500000: 0x4000004,\n 0x600000: 0x4010104,\n 0x700000: 0x4010000,\n 0x800000: 0x4000000,\n 0x900000: 0x4010100,\n 0xa00000: 0x10100,\n 0xb00000: 0x4010004,\n 0xc00000: 0x4000104,\n 0xd00000: 0x10000,\n 0xe00000: 0x4,\n 0xf00000: 0x100,\n 0x80000: 0x4010100,\n 0x180000: 0x4010004,\n 0x280000: 0x0,\n 0x380000: 0x4000100,\n 0x480000: 0x4000004,\n 0x580000: 0x10000,\n 0x680000: 0x10004,\n 0x780000: 0x104,\n 0x880000: 0x4,\n 0x980000: 0x100,\n 0xa80000: 0x4010000,\n 0xb80000: 0x10104,\n 0xc80000: 0x10100,\n 0xd80000: 0x4000104,\n 0xe80000: 0x4010104,\n 0xf80000: 0x4000000,\n 0x1000000: 0x4010100,\n 0x1100000: 0x10004,\n 0x1200000: 0x10000,\n 0x1300000: 0x4000100,\n 0x1400000: 0x100,\n 0x1500000: 0x4010104,\n 0x1600000: 0x4000004,\n 0x1700000: 0x0,\n 0x1800000: 0x4000104,\n 0x1900000: 0x4000000,\n 0x1a00000: 0x4,\n 0x1b00000: 0x10100,\n 0x1c00000: 0x4010000,\n 0x1d00000: 0x104,\n 0x1e00000: 0x10104,\n 0x1f00000: 0x4010004,\n 0x1080000: 0x4000000,\n 0x1180000: 0x104,\n 0x1280000: 0x4010100,\n 0x1380000: 0x0,\n 0x1480000: 0x10004,\n 0x1580000: 0x4000100,\n 0x1680000: 0x100,\n 0x1780000: 0x4010004,\n 0x1880000: 0x10000,\n 0x1980000: 0x4010104,\n 0x1a80000: 0x10104,\n 0x1b80000: 0x4000004,\n 0x1c80000: 0x4000104,\n 0x1d80000: 0x4010000,\n 0x1e80000: 0x4,\n 0x1f80000: 0x10100,\n },\n {\n 0x0: 0x80401000,\n 0x10000: 0x80001040,\n 0x20000: 0x401040,\n 0x30000: 0x80400000,\n 0x40000: 0x0,\n 0x50000: 0x401000,\n 0x60000: 0x80000040,\n 0x70000: 0x400040,\n 0x80000: 0x80000000,\n 0x90000: 0x400000,\n 0xa0000: 0x40,\n 0xb0000: 0x80001000,\n 0xc0000: 0x80400040,\n 0xd0000: 0x1040,\n 0xe0000: 0x1000,\n 0xf0000: 0x80401040,\n 0x8000: 0x80001040,\n 0x18000: 0x40,\n 0x28000: 0x80400040,\n 0x38000: 0x80001000,\n 0x48000: 0x401000,\n 0x58000: 0x80401040,\n 0x68000: 0x0,\n 0x78000: 0x80400000,\n 0x88000: 0x1000,\n 0x98000: 0x80401000,\n 0xa8000: 0x400000,\n 0xb8000: 0x1040,\n 0xc8000: 0x80000000,\n 0xd8000: 0x400040,\n 0xe8000: 0x401040,\n 0xf8000: 0x80000040,\n 0x100000: 0x400040,\n 0x110000: 0x401000,\n 0x120000: 0x80000040,\n 0x130000: 0x0,\n 0x140000: 0x1040,\n 0x150000: 0x80400040,\n 0x160000: 0x80401000,\n 0x170000: 0x80001040,\n 0x180000: 0x80401040,\n 0x190000: 0x80000000,\n 0x1a0000: 0x80400000,\n 0x1b0000: 0x401040,\n 0x1c0000: 0x80001000,\n 0x1d0000: 0x400000,\n 0x1e0000: 0x40,\n 0x1f0000: 0x1000,\n 0x108000: 0x80400000,\n 0x118000: 0x80401040,\n 0x128000: 0x0,\n 0x138000: 0x401000,\n 0x148000: 0x400040,\n 0x158000: 0x80000000,\n 0x168000: 0x80001040,\n 0x178000: 0x40,\n 0x188000: 0x80000040,\n 0x198000: 0x1000,\n 0x1a8000: 0x80001000,\n 0x1b8000: 0x80400040,\n 0x1c8000: 0x1040,\n 0x1d8000: 0x80401000,\n 0x1e8000: 0x400000,\n 0x1f8000: 0x401040,\n },\n {\n 0x0: 0x80,\n 0x1000: 0x1040000,\n 0x2000: 0x40000,\n 0x3000: 0x20000000,\n 0x4000: 0x20040080,\n 0x5000: 0x1000080,\n 0x6000: 0x21000080,\n 0x7000: 0x40080,\n 0x8000: 0x1000000,\n 0x9000: 0x20040000,\n 0xa000: 0x20000080,\n 0xb000: 0x21040080,\n 0xc000: 0x21040000,\n 0xd000: 0x0,\n 0xe000: 0x1040080,\n 0xf000: 0x21000000,\n 0x800: 0x1040080,\n 0x1800: 0x21000080,\n 0x2800: 0x80,\n 0x3800: 0x1040000,\n 0x4800: 0x40000,\n 0x5800: 0x20040080,\n 0x6800: 0x21040000,\n 0x7800: 0x20000000,\n 0x8800: 0x20040000,\n 0x9800: 0x0,\n 0xa800: 0x21040080,\n 0xb800: 0x1000080,\n 0xc800: 0x20000080,\n 0xd800: 0x21000000,\n 0xe800: 0x1000000,\n 0xf800: 0x40080,\n 0x10000: 0x40000,\n 0x11000: 0x80,\n 0x12000: 0x20000000,\n 0x13000: 0x21000080,\n 0x14000: 0x1000080,\n 0x15000: 0x21040000,\n 0x16000: 0x20040080,\n 0x17000: 0x1000000,\n 0x18000: 0x21040080,\n 0x19000: 0x21000000,\n 0x1a000: 0x1040000,\n 0x1b000: 0x20040000,\n 0x1c000: 0x40080,\n 0x1d000: 0x20000080,\n 0x1e000: 0x0,\n 0x1f000: 0x1040080,\n 0x10800: 0x21000080,\n 0x11800: 0x1000000,\n 0x12800: 0x1040000,\n 0x13800: 0x20040080,\n 0x14800: 0x20000000,\n 0x15800: 0x1040080,\n 0x16800: 0x80,\n 0x17800: 0x21040000,\n 0x18800: 0x40080,\n 0x19800: 0x21040080,\n 0x1a800: 0x0,\n 0x1b800: 0x21000000,\n 0x1c800: 0x1000080,\n 0x1d800: 0x40000,\n 0x1e800: 0x20040000,\n 0x1f800: 0x20000080,\n },\n {\n 0x0: 0x10000008,\n 0x100: 0x2000,\n 0x200: 0x10200000,\n 0x300: 0x10202008,\n 0x400: 0x10002000,\n 0x500: 0x200000,\n 0x600: 0x200008,\n 0x700: 0x10000000,\n 0x800: 0x0,\n 0x900: 0x10002008,\n 0xa00: 0x202000,\n 0xb00: 0x8,\n 0xc00: 0x10200008,\n 0xd00: 0x202008,\n 0xe00: 0x2008,\n 0xf00: 0x10202000,\n 0x80: 0x10200000,\n 0x180: 0x10202008,\n 0x280: 0x8,\n 0x380: 0x200000,\n 0x480: 0x202008,\n 0x580: 0x10000008,\n 0x680: 0x10002000,\n 0x780: 0x2008,\n 0x880: 0x200008,\n 0x980: 0x2000,\n 0xa80: 0x10002008,\n 0xb80: 0x10200008,\n 0xc80: 0x0,\n 0xd80: 0x10202000,\n 0xe80: 0x202000,\n 0xf80: 0x10000000,\n 0x1000: 0x10002000,\n 0x1100: 0x10200008,\n 0x1200: 0x10202008,\n 0x1300: 0x2008,\n 0x1400: 0x200000,\n 0x1500: 0x10000000,\n 0x1600: 0x10000008,\n 0x1700: 0x202000,\n 0x1800: 0x202008,\n 0x1900: 0x0,\n 0x1a00: 0x8,\n 0x1b00: 0x10200000,\n 0x1c00: 0x2000,\n 0x1d00: 0x10002008,\n 0x1e00: 0x10202000,\n 0x1f00: 0x200008,\n 0x1080: 0x8,\n 0x1180: 0x202000,\n 0x1280: 0x200000,\n 0x1380: 0x10000008,\n 0x1480: 0x10002000,\n 0x1580: 0x2008,\n 0x1680: 0x10202008,\n 0x1780: 0x10200000,\n 0x1880: 0x10202000,\n 0x1980: 0x10200008,\n 0x1a80: 0x2000,\n 0x1b80: 0x202008,\n 0x1c80: 0x200008,\n 0x1d80: 0x0,\n 0x1e80: 0x10000000,\n 0x1f80: 0x10002008,\n },\n {\n 0x0: 0x100000,\n 0x10: 0x2000401,\n 0x20: 0x400,\n 0x30: 0x100401,\n 0x40: 0x2100401,\n 0x50: 0x0,\n 0x60: 0x1,\n 0x70: 0x2100001,\n 0x80: 0x2000400,\n 0x90: 0x100001,\n 0xa0: 0x2000001,\n 0xb0: 0x2100400,\n 0xc0: 0x2100000,\n 0xd0: 0x401,\n 0xe0: 0x100400,\n 0xf0: 0x2000000,\n 0x8: 0x2100001,\n 0x18: 0x0,\n 0x28: 0x2000401,\n 0x38: 0x2100400,\n 0x48: 0x100000,\n 0x58: 0x2000001,\n 0x68: 0x2000000,\n 0x78: 0x401,\n 0x88: 0x100401,\n 0x98: 0x2000400,\n 0xa8: 0x2100000,\n 0xb8: 0x100001,\n 0xc8: 0x400,\n 0xd8: 0x2100401,\n 0xe8: 0x1,\n 0xf8: 0x100400,\n 0x100: 0x2000000,\n 0x110: 0x100000,\n 0x120: 0x2000401,\n 0x130: 0x2100001,\n 0x140: 0x100001,\n 0x150: 0x2000400,\n 0x160: 0x2100400,\n 0x170: 0x100401,\n 0x180: 0x401,\n 0x190: 0x2100401,\n 0x1a0: 0x100400,\n 0x1b0: 0x1,\n 0x1c0: 0x0,\n 0x1d0: 0x2100000,\n 0x1e0: 0x2000001,\n 0x1f0: 0x400,\n 0x108: 0x100400,\n 0x118: 0x2000401,\n 0x128: 0x2100001,\n 0x138: 0x1,\n 0x148: 0x2000000,\n 0x158: 0x100000,\n 0x168: 0x401,\n 0x178: 0x2100400,\n 0x188: 0x2000001,\n 0x198: 0x2100000,\n 0x1a8: 0x0,\n 0x1b8: 0x2100401,\n 0x1c8: 0x100401,\n 0x1d8: 0x400,\n 0x1e8: 0x2000400,\n 0x1f8: 0x100001,\n },\n {\n 0x0: 0x8000820,\n 0x1: 0x20000,\n 0x2: 0x8000000,\n 0x3: 0x20,\n 0x4: 0x20020,\n 0x5: 0x8020820,\n 0x6: 0x8020800,\n 0x7: 0x800,\n 0x8: 0x8020000,\n 0x9: 0x8000800,\n 0xa: 0x20800,\n 0xb: 0x8020020,\n 0xc: 0x820,\n 0xd: 0x0,\n 0xe: 0x8000020,\n 0xf: 0x20820,\n 0x80000000: 0x800,\n 0x80000001: 0x8020820,\n 0x80000002: 0x8000820,\n 0x80000003: 0x8000000,\n 0x80000004: 0x8020000,\n 0x80000005: 0x20800,\n 0x80000006: 0x20820,\n 0x80000007: 0x20,\n 0x80000008: 0x8000020,\n 0x80000009: 0x820,\n 0x8000000a: 0x20020,\n 0x8000000b: 0x8020800,\n 0x8000000c: 0x0,\n 0x8000000d: 0x8020020,\n 0x8000000e: 0x8000800,\n 0x8000000f: 0x20000,\n 0x10: 0x20820,\n 0x11: 0x8020800,\n 0x12: 0x20,\n 0x13: 0x800,\n 0x14: 0x8000800,\n 0x15: 0x8000020,\n 0x16: 0x8020020,\n 0x17: 0x20000,\n 0x18: 0x0,\n 0x19: 0x20020,\n 0x1a: 0x8020000,\n 0x1b: 0x8000820,\n 0x1c: 0x8020820,\n 0x1d: 0x20800,\n 0x1e: 0x820,\n 0x1f: 0x8000000,\n 0x80000010: 0x20000,\n 0x80000011: 0x800,\n 0x80000012: 0x8020020,\n 0x80000013: 0x20820,\n 0x80000014: 0x20,\n 0x80000015: 0x8020000,\n 0x80000016: 0x8000000,\n 0x80000017: 0x8000820,\n 0x80000018: 0x8020820,\n 0x80000019: 0x8000020,\n 0x8000001a: 0x8000800,\n 0x8000001b: 0x0,\n 0x8000001c: 0x20800,\n 0x8000001d: 0x820,\n 0x8000001e: 0x20020,\n 0x8000001f: 0x8020800,\n },\n];\n\n// Masks that select the SBOX input\nconst SBOX_MASK = [\n 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f,\n];\n\n// Swap bits across the left and right words\nfunction exchangeLR(offset, mask) {\n const t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n this._rBlock ^= t;\n this._lBlock ^= t << offset;\n}\n\nfunction exchangeRL(offset, mask) {\n const t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n this._lBlock ^= t;\n this._rBlock ^= t << offset;\n}\n\n/**\n * DES block cipher algorithm.\n */\nexport class DESAlgo extends BlockCipher {\n _doReset() {\n // Shortcuts\n const key = this._key;\n const keyWords = key.words;\n\n // Select 56 bits according to PC1\n const keyBits = [];\n for (let i = 0; i < 56; i += 1) {\n const keyBitPos = PC1[i] - 1;\n keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - (keyBitPos % 32))) & 1;\n }\n\n // Assemble 16 subkeys\n this._subKeys = [];\n const subKeys = this._subKeys;\n for (let nSubKey = 0; nSubKey < 16; nSubKey += 1) {\n // Create subkey\n subKeys[nSubKey] = [];\n const subKey = subKeys[nSubKey];\n\n // Shortcut\n const bitShift = BIT_SHIFTS[nSubKey];\n\n // Select 48 bits according to PC2\n for (let i = 0; i < 24; i += 1) {\n // Select from the left 28 key bits\n subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - (i % 6));\n\n // Select from the right 28 key bits\n subKey[4 + ((i / 6) | 0)]\n |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)]\n << (31 - (i % 6));\n }\n\n // Since each subkey is applied to an expanded 32-bit input,\n // the subkey can be broken into 8 values scaled to 32-bits,\n // which allows the key to be used without expansion\n subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n for (let i = 1; i < 7; i += 1) {\n subKey[i] >>>= ((i - 1) * 4 + 3);\n }\n subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n }\n\n // Compute inverse subkeys\n this._invSubKeys = [];\n const invSubKeys = this._invSubKeys;\n for (let i = 0; i < 16; i += 1) {\n invSubKeys[i] = subKeys[15 - i];\n }\n }\n\n encryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._subKeys);\n }\n\n decryptBlock(M, offset) {\n this._doCryptBlock(M, offset, this._invSubKeys);\n }\n\n _doCryptBlock(M, offset, subKeys) {\n const _M = M;\n\n // Get input\n this._lBlock = M[offset];\n this._rBlock = M[offset + 1];\n\n // Initial permutation\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeLR.call(this, 1, 0x55555555);\n\n // Rounds\n for (let round = 0; round < 16; round += 1) {\n // Shortcuts\n const subKey = subKeys[round];\n const lBlock = this._lBlock;\n const rBlock = this._rBlock;\n\n // Feistel function\n let f = 0;\n for (let i = 0; i < 8; i += 1) {\n f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n }\n this._lBlock = rBlock;\n this._rBlock = lBlock ^ f;\n }\n\n // Undo swap from last round\n const t = this._lBlock;\n this._lBlock = this._rBlock;\n this._rBlock = t;\n\n // Final permutation\n exchangeLR.call(this, 1, 0x55555555);\n exchangeRL.call(this, 8, 0x00ff00ff);\n exchangeRL.call(this, 2, 0x33333333);\n exchangeLR.call(this, 16, 0x0000ffff);\n exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n // Set output\n _M[offset] = this._lBlock;\n _M[offset + 1] = this._rBlock;\n }\n}\nDESAlgo.keySize = 64 / 32;\nDESAlgo.ivSize = 64 / 32;\nDESAlgo.blockSize = 64 / 32;\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n */\nexport const DES = BlockCipher._createHelper(DESAlgo);\n\n/**\n * Triple-DES block cipher algorithm.\n */\nexport class TripleDESAlgo extends BlockCipher {\n _doReset() {\n // Shortcuts\n const key = this._key;\n const keyWords = key.words;\n // Make sure the key length is valid (64, 128 or >= 192 bit)\n if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n }\n\n // Extend the key according to the keying options defined in 3DES standard\n const key1 = keyWords.slice(0, 2);\n const key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n const key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n // Create DES instances\n this._des1 = DESAlgo.createEncryptor(WordArray.create(key1));\n this._des2 = DESAlgo.createEncryptor(WordArray.create(key2));\n this._des3 = DESAlgo.createEncryptor(WordArray.create(key3));\n }\n\n encryptBlock(M, offset) {\n this._des1.encryptBlock(M, offset);\n this._des2.decryptBlock(M, offset);\n this._des3.encryptBlock(M, offset);\n }\n\n decryptBlock(M, offset) {\n this._des3.decryptBlock(M, offset);\n this._des2.encryptBlock(M, offset);\n this._des1.decryptBlock(M, offset);\n }\n}\nTripleDESAlgo.keySize = 192 / 32;\nTripleDESAlgo.ivSize = 64 / 32;\nTripleDESAlgo.blockSize = 64 / 32;\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n */\nexport const TripleDES = BlockCipher._createHelper(TripleDESAlgo);\n","import {\n StreamCipher,\n} from './cipher-core.js';\n\n// Reusable objects\nconst S = [];\nconst C_ = [];\nconst G = [];\n\nfunction nextState() {\n // Shortcuts\n const X = this._X;\n const C = this._C;\n\n // Save old counter values\n for (let i = 0; i < 8; i += 1) {\n C_[i] = C[i];\n }\n\n // Calculate new counter values\n C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n // Calculate the g-values\n for (let i = 0; i < 8; i += 1) {\n const gx = X[i] + C[i];\n\n // Construct high and low argument for squaring\n const ga = gx & 0xffff;\n const gb = gx >>> 16;\n\n // Calculate high and low result of squaring\n const gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n const gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n // High XOR low\n G[i] = gh ^ gl;\n }\n\n // Calculate new state values\n X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n}\n\n/**\n * Rabbit stream cipher algorithm\n */\nexport class RabbitAlgo extends StreamCipher {\n constructor(...args) {\n super(...args);\n\n this.blockSize = 128 / 32;\n this.ivSize = 64 / 32;\n }\n\n _doReset() {\n // Shortcuts\n const K = this._key.words;\n const { iv } = this.cfg;\n\n // Swap endian\n for (let i = 0; i < 4; i += 1) {\n K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff)\n | (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n }\n\n // Generate initial state values\n this._X = [\n K[0], (K[3] << 16) | (K[2] >>> 16),\n K[1], (K[0] << 16) | (K[3] >>> 16),\n K[2], (K[1] << 16) | (K[0] >>> 16),\n K[3], (K[2] << 16) | (K[1] >>> 16),\n ];\n const X = this._X;\n\n // Generate initial counter values\n this._C = [\n (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff),\n ];\n const C = this._C;\n\n // Carry bit\n this._b = 0;\n\n // Iterate the system four times\n for (let i = 0; i < 4; i += 1) {\n nextState.call(this);\n }\n\n // Modify the counters\n for (let i = 0; i < 8; i += 1) {\n C[i] ^= X[(i + 4) & 7];\n }\n\n // IV setup\n if (iv) {\n // Shortcuts\n const IV = iv.words;\n const IV_0 = IV[0];\n const IV_1 = IV[1];\n\n // Generate four subvectors\n const i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff)\n | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n const i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff)\n | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n const i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n const i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n // Modify counter values\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3;\n\n // Iterate the system four times\n for (let i = 0; i < 4; i += 1) {\n nextState.call(this);\n }\n }\n }\n\n _doProcessBlock(M, offset) {\n const _M = M;\n\n // Shortcut\n const X = this._X;\n\n // Iterate the system\n nextState.call(this);\n\n // Generate four keystream words\n S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n for (let i = 0; i < 4; i += 1) {\n // Swap endian\n S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff)\n | (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n // Encrypt\n _M[offset + i] ^= S[i];\n }\n }\n}\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n */\nexport const Rabbit = StreamCipher._createHelper(RabbitAlgo);\n","import {\n StreamCipher,\n} from './cipher-core.js';\n\n// Reusable objects\nconst S = [];\nconst C_ = [];\nconst G = [];\n\nfunction nextState() {\n // Shortcuts\n const X = this._X;\n const C = this._C;\n\n // Save old counter values\n for (let i = 0; i < 8; i += 1) {\n C_[i] = C[i];\n }\n\n // Calculate new counter values\n C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n // Calculate the g-values\n for (let i = 0; i < 8; i += 1) {\n const gx = X[i] + C[i];\n\n // Construct high and low argument for squaring\n const ga = gx & 0xffff;\n const gb = gx >>> 16;\n\n // Calculate high and low result of squaring\n const gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n const gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n // High XOR low\n G[i] = gh ^ gl;\n }\n\n // Calculate new state values\n X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n}\n\n/**\n * Rabbit stream cipher algorithm.\n *\n * This is a legacy version that neglected to convert the key to little-endian.\n * This error doesn't affect the cipher's security,\n * but it does affect its compatibility with other implementations.\n */\nexport class RabbitLegacyAlgo extends StreamCipher {\n constructor(...args) {\n super(...args);\n\n this.blockSize = 128 / 32;\n this.ivSize = 64 / 32;\n }\n\n _doReset() {\n // Shortcuts\n const K = this._key.words;\n const { iv } = this.cfg;\n\n // Generate initial state values\n this._X = [\n K[0], (K[3] << 16) | (K[2] >>> 16),\n K[1], (K[0] << 16) | (K[3] >>> 16),\n K[2], (K[1] << 16) | (K[0] >>> 16),\n K[3], (K[2] << 16) | (K[1] >>> 16),\n ];\n const X = this._X;\n\n // Generate initial counter values\n this._C = [\n (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff),\n ];\n const C = this._C;\n\n // Carry bit\n this._b = 0;\n\n // Iterate the system four times\n for (let i = 0; i < 4; i += 1) {\n nextState.call(this);\n }\n\n // Modify the counters\n for (let i = 0; i < 8; i += 1) {\n C[i] ^= X[(i + 4) & 7];\n }\n\n // IV setup\n if (iv) {\n // Shortcuts\n const IV = iv.words;\n const IV_0 = IV[0];\n const IV_1 = IV[1];\n\n // Generate four subvectors\n const i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff)\n | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n const i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff)\n | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n const i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n const i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n // Modify counter values\n C[0] ^= i0;\n C[1] ^= i1;\n C[2] ^= i2;\n C[3] ^= i3;\n C[4] ^= i0;\n C[5] ^= i1;\n C[6] ^= i2;\n C[7] ^= i3;\n\n // Iterate the system four times\n for (let i = 0; i < 4; i += 1) {\n nextState.call(this);\n }\n }\n }\n\n _doProcessBlock(M, offset) {\n const _M = M;\n\n // Shortcut\n const X = this._X;\n\n // Iterate the system\n nextState.call(this);\n\n // Generate four keystream words\n S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n for (let i = 0; i < 4; i += 1) {\n // Swap endian\n S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff)\n | (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n // Encrypt\n _M[offset + i] ^= S[i];\n }\n }\n}\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n */\nexport const RabbitLegacy = StreamCipher._createHelper(RabbitLegacyAlgo);\n","import {\n StreamCipher,\n} from './cipher-core.js';\n\nfunction generateKeystreamWord() {\n // Shortcuts\n const S = this._S;\n let i = this._i;\n let j = this._j;\n\n // Generate keystream word\n let keystreamWord = 0;\n for (let n = 0; n < 4; n += 1) {\n i = (i + 1) % 256;\n j = (j + S[i]) % 256;\n\n // Swap\n const t = S[i];\n S[i] = S[j];\n S[j] = t;\n\n keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n }\n\n // Update counters\n this._i = i;\n this._j = j;\n\n return keystreamWord;\n}\n\n/**\n * RC4 stream cipher algorithm.\n */\nexport class RC4Algo extends StreamCipher {\n _doReset() {\n // Shortcuts\n const key = this._key;\n const keyWords = key.words;\n const keySigBytes = key.sigBytes;\n\n // Init sbox\n this._S = [];\n const S = this._S;\n for (let i = 0; i < 256; i += 1) {\n S[i] = i;\n }\n\n // Key setup\n for (let i = 0, j = 0; i < 256; i += 1) {\n const keyByteIndex = i % keySigBytes;\n const keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n j = (j + S[i] + keyByte) % 256;\n\n // Swap\n const t = S[i];\n S[i] = S[j];\n S[j] = t;\n }\n\n // Counters\n this._j = 0;\n this._i = this._j;\n }\n\n _doProcessBlock(M, offset) {\n const _M = M;\n\n _M[offset] ^= generateKeystreamWord.call(this);\n }\n}\nRC4Algo.keySize = 256 / 32;\nRC4Algo.ivSize = 0;\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n */\nexport const RC4 = StreamCipher._createHelper(RC4Algo);\n\n/**\n * Modified RC4 stream cipher algorithm.\n */\nexport class RC4DropAlgo extends RC4Algo {\n constructor(...args) {\n super(...args);\n\n /**\n * Configuration options.\n *\n * @property {number} drop The number of keystream words to drop. Default 192\n */\n Object.assign(this.cfg, { drop: 192 });\n }\n\n _doReset() {\n super._doReset.call(this);\n\n // Drop\n for (let i = this.cfg.drop; i > 0; i -= 1) {\n generateKeystreamWord.call(this);\n }\n }\n}\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n */\nexport const RC4Drop = StreamCipher._createHelper(RC4DropAlgo);\n","import {\n BlockCipherMode,\n} from './cipher-core.js';\n\nfunction generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n const _words = words;\n let keystream;\n\n // Shortcut\n const iv = this._iv;\n\n // Generate keystream\n if (iv) {\n keystream = iv.slice(0);\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n keystream = this._prevBlock;\n }\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= keystream[i];\n }\n}\n\n/**\n * Cipher Feedback block mode.\n */\nexport class CFB extends BlockCipherMode {\n}\nCFB.Encryptor = class extends CFB {\n processBlock(words, offset) {\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n};\nCFB.Decryptor = class extends CFB {\n processBlock(words, offset) {\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n\n // Remember this block to use with next block\n const thisBlock = words.slice(offset, offset + blockSize);\n\n generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n};\n","/**\n * Counter block mode.\n */\nimport {\n BlockCipherMode,\n} from './cipher-core.js';\n\nexport class CTR extends BlockCipherMode {\n}\nCTR.Encryptor = class extends CTR {\n processBlock(words, offset) {\n const _words = words;\n\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n const iv = this._iv;\n let counter = this._counter;\n\n // Generate keystream\n if (iv) {\n this._counter = iv.slice(0);\n counter = this._counter;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n const keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Increment counter\n counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0;\n\n // Encrypt\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= keystream[i];\n }\n }\n};\nCTR.Decryptor = CTR.Encryptor;\n","import {\n BlockCipherMode,\n} from './cipher-core.js';\n\nconst incWord = (word) => {\n let _word = word;\n\n if (((word >> 24) & 0xff) === 0xff) { // overflow\n let b1 = (word >> 16) & 0xff;\n let b2 = (word >> 8) & 0xff;\n let b3 = word & 0xff;\n\n if (b1 === 0xff) { // overflow b1\n b1 = 0;\n if (b2 === 0xff) {\n b2 = 0;\n if (b3 === 0xff) {\n b3 = 0;\n } else {\n b3 += 1;\n }\n } else {\n b2 += 1;\n }\n } else {\n b1 += 1;\n }\n\n _word = 0;\n _word += (b1 << 16);\n _word += (b2 << 8);\n _word += b3;\n } else {\n _word += (0x01 << 24);\n }\n return _word;\n};\n\nconst incCounter = (counter) => {\n const _counter = counter;\n _counter[0] = incWord(_counter[0]);\n\n if (_counter[0] === 0) {\n // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n _counter[1] = incWord(_counter[1]);\n }\n return _counter;\n};\n\n/** @preserve\n * Counter block mode compatible with Dr Brian Gladman fileenc.c\n * derived from CryptoJS.mode.CTR\n * Jan Hruby jhruby.web@gmail.com\n */\nexport class CTRGladman extends BlockCipherMode {\n}\nCTRGladman.Encryptor = class extends CTRGladman {\n processBlock(words, offset) {\n const _words = words;\n\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n const iv = this._iv;\n let counter = this._counter;\n\n // Generate keystream\n if (iv) {\n this._counter = iv.slice(0);\n counter = this._counter;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n\n incCounter(counter);\n\n const keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= keystream[i];\n }\n }\n};\nCTRGladman.Decryptor = CTRGladman.Encryptor;\n","/**\n * Electronic Codebook block mode.\n */\nimport {\n BlockCipherMode,\n} from './cipher-core.js';\n\nexport class ECB extends BlockCipherMode {\n}\nECB.Encryptor = class extends ECB {\n processBlock(words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n};\nECB.Decryptor = class extends ECB {\n processBlock(words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n};\n","/**\n * Output Feedback block mode.\n */\nimport {\n BlockCipherMode,\n} from './cipher-core.js';\n\nexport class OFB extends BlockCipherMode {\n}\nOFB.Encryptor = class extends OFB {\n processBlock(words, offset) {\n const _words = words;\n\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n const iv = this._iv;\n let keystream = this._keystream;\n\n // Generate keystream\n if (iv) {\n this._keystream = iv.slice(0);\n keystream = this._keystream;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n cipher.encryptBlock(keystream, 0);\n\n // Encrypt\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= keystream[i];\n }\n }\n};\nOFB.Decryptor = OFB.Encryptor;\n","/**\n * ANSI X.923 padding strategy.\n */\nexport const AnsiX923 = {\n pad(data, blockSize) {\n const _data = data;\n\n // Shortcuts\n const dataSigBytes = _data.sigBytes;\n const blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n const nPaddingBytes = blockSizeBytes - (dataSigBytes % blockSizeBytes);\n\n // Compute last byte position\n const lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n // Pad\n _data.clamp();\n _data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n _data.sigBytes += nPaddingBytes;\n },\n\n unpad(data) {\n const _data = data;\n\n // Get number of padding bytes from last byte\n const nPaddingBytes = _data.words[(_data.sigBytes - 1) >>> 2] & 0xff;\n\n // Remove padding\n _data.sigBytes -= nPaddingBytes;\n },\n};\n","import {\n WordArray,\n} from './core.js';\n\n/**\n * ISO 10126 padding strategy.\n */\nexport const Iso10126 = {\n pad(data, blockSize) {\n // Shortcut\n const blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n const nPaddingBytes = blockSizeBytes - (data.sigBytes % blockSizeBytes);\n\n // Pad\n data\n .concat(WordArray.random(nPaddingBytes - 1))\n .concat(WordArray.create([nPaddingBytes << 24], 1));\n },\n\n unpad(data) {\n const _data = data;\n // Get number of padding bytes from last byte\n const nPaddingBytes = _data.words[(_data.sigBytes - 1) >>> 2] & 0xff;\n\n // Remove padding\n _data.sigBytes -= nPaddingBytes;\n },\n};\n","/**\n * Zero padding strategy.\n */\nexport const ZeroPadding = {\n pad(data, blockSize) {\n const _data = data;\n\n // Shortcut\n const blockSizeBytes = blockSize * 4;\n\n // Pad\n _data.clamp();\n _data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n },\n\n unpad(data) {\n const _data = data;\n\n // Shortcut\n const dataWords = _data.words;\n\n // Unpad\n for (let i = _data.sigBytes - 1; i >= 0; i -= 1) {\n if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n _data.sigBytes = i + 1;\n break;\n }\n }\n },\n};\n","import {\n WordArray,\n} from './core.js';\nimport {\n ZeroPadding,\n} from './pad-zeropadding.js';\n\n/**\n * ISO/IEC 9797-1 Padding Method 2.\n */\nexport const Iso97971 = {\n pad(data, blockSize) {\n // Add 0x80 byte\n data.concat(WordArray.create([0x80000000], 1));\n\n // Zero pad the rest\n ZeroPadding.pad(data, blockSize);\n },\n\n unpad(data) {\n const _data = data;\n\n // Remove zero padding\n ZeroPadding.unpad(_data);\n\n // Remove one more byte -- the 0x80 byte\n _data.sigBytes -= 1;\n },\n};\n","import {\n CipherParams,\n} from './cipher-core.js';\nimport {\n Hex,\n} from './core.js';\n\nexport const HexFormatter = {\n /**\n * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The hexadecimally encoded string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n */\n stringify(cipherParams) {\n return cipherParams.ciphertext.toString(Hex);\n },\n\n /**\n * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n *\n * @param {string} input The hexadecimally encoded string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n */\n parse(input) {\n const ciphertext = Hex.parse(input);\n return CipherParams.create({ ciphertext });\n },\n};\n","import {\n Base,\n WordArray,\n Hex,\n Latin1,\n Utf8,\n BufferedBlockAlgorithm,\n Hasher,\n} from './core.js';\nimport {\n X64Word,\n X64WordArray,\n} from './x64-core.js';\nimport {\n Cipher,\n StreamCipher,\n BlockCipherMode,\n CBC,\n Pkcs7,\n BlockCipher,\n CipherParams,\n OpenSSLFormatter,\n SerializableCipher,\n OpenSSLKdf,\n PasswordBasedCipher,\n} from './cipher-core.js';\n\nimport { Utf16, Utf16BE, Utf16LE } from './enc-utf16.js';\nimport { Base64 } from './enc-base64.js';\nimport { HMAC } from './hmac.js';\nimport { MD5Algo, MD5, HmacMD5 } from './md5.js';\nimport { SHA1Algo, SHA1, HmacSHA1 } from './sha1.js';\nimport { SHA224Algo, SHA224, HmacSHA224 } from './sha224.js';\nimport { SHA256Algo, SHA256, HmacSHA256 } from './sha256.js';\nimport { SHA384Algo, SHA384, HmacSHA384 } from './sha384.js';\nimport { SHA512Algo, SHA512, HmacSHA512 } from './sha512.js';\nimport { SHA3Algo, SHA3, HmacSHA3 } from './sha3.js';\nimport { RIPEMD160Algo, RIPEMD160, HmacRIPEMD160 } from './ripemd160.js';\nimport { PBKDF2Algo, PBKDF2 } from './pbkdf2.js';\nimport { EvpKDFAlgo, EvpKDF } from './evpkdf.js';\nimport { AESAlgo, AES } from './aes.js';\nimport {\n DESAlgo,\n DES,\n TripleDESAlgo,\n TripleDES,\n} from './tripledes.js';\nimport { RabbitAlgo, Rabbit } from './rabbit.js';\nimport { RabbitLegacyAlgo, RabbitLegacy } from './rabbit-legacy.js';\nimport {\n RC4Algo,\n RC4,\n RC4DropAlgo,\n RC4Drop,\n} from './rc4.js';\nimport { CFB } from './mode-cfb.js';\nimport { CTR } from './mode-ctr.js';\nimport { CTRGladman } from './mode-ctr-gladman.js';\nimport { ECB } from './mode-ecb.js';\nimport { OFB } from './mode-ofb.js';\nimport { AnsiX923 } from './pad-ansix923.js';\nimport { Iso10126 } from './pad-iso10126.js';\nimport { Iso97971 } from './pad-iso97971.js';\nimport { NoPadding } from './pad-nopadding.js';\nimport { ZeroPadding } from './pad-zeropadding.js';\nimport { HexFormatter } from './format-hex.js';\n\nexport default {\n lib: {\n Base,\n WordArray,\n BufferedBlockAlgorithm,\n Hasher,\n Cipher,\n StreamCipher,\n BlockCipherMode,\n BlockCipher,\n CipherParams,\n SerializableCipher,\n PasswordBasedCipher,\n },\n\n x64: {\n Word: X64Word,\n WordArray: X64WordArray,\n },\n\n enc: {\n Hex,\n Latin1,\n Utf8,\n Utf16,\n Utf16BE,\n Utf16LE,\n Base64,\n },\n\n algo: {\n HMAC,\n MD5: MD5Algo,\n SHA1: SHA1Algo,\n SHA224: SHA224Algo,\n SHA256: SHA256Algo,\n SHA384: SHA384Algo,\n SHA512: SHA512Algo,\n SHA3: SHA3Algo,\n RIPEMD160: RIPEMD160Algo,\n\n PBKDF2: PBKDF2Algo,\n EvpKDF: EvpKDFAlgo,\n\n AES: AESAlgo,\n DES: DESAlgo,\n TripleDES: TripleDESAlgo,\n Rabbit: RabbitAlgo,\n RabbitLegacy: RabbitLegacyAlgo,\n RC4: RC4Algo,\n RC4Drop: RC4DropAlgo,\n },\n\n mode: {\n CBC,\n CFB,\n CTR,\n CTRGladman,\n ECB,\n OFB,\n },\n\n pad: {\n Pkcs7,\n AnsiX923,\n Iso10126,\n Iso97971,\n NoPadding,\n ZeroPadding,\n },\n\n format: {\n OpenSSL: OpenSSLFormatter,\n Hex: HexFormatter,\n },\n\n kdf: {\n OpenSSL: OpenSSLKdf,\n },\n\n MD5,\n HmacMD5,\n SHA1,\n HmacSHA1,\n SHA224,\n HmacSHA224,\n SHA256,\n HmacSHA256,\n SHA384,\n HmacSHA384,\n SHA512,\n HmacSHA512,\n SHA3,\n HmacSHA3,\n RIPEMD160,\n HmacRIPEMD160,\n\n PBKDF2,\n EvpKDF,\n\n AES,\n DES,\n TripleDES,\n Rabbit,\n RabbitLegacy,\n RC4,\n RC4Drop,\n};\n","/**\n * A noop padding strategy.\n */\nexport const NoPadding = {\n pad() {\n },\n\n unpad() {\n },\n};\n","import SturdyWebSocket from 'sturdy-websocket';\nimport CryptoEs from 'crypto-es';\nconst networks = {\n bitcoin: {\n '1': 'main',\n '2': 'testnet'\n },\n ethereum: {\n '1': 'main',\n '3': 'ropsten',\n '4': 'rinkeby',\n '5': 'goerli',\n '42': 'kovan',\n '56': 'bsc-main',\n '100': 'xdai'\n }\n};\nconst DEFAULT_RATE_LIMIT_RULES = {\n points: 150,\n duration: 1\n};\nconst QUEUE_LIMIT = 10000;\n\nfunction createEmitter() {\n return {\n listeners: {},\n on: function (eventCode, listener) {\n // check if valid eventCode\n switch (eventCode) {\n case 'txSent':\n case 'txPool':\n case 'txConfirmed':\n case 'txSpeedUp':\n case 'txCancel':\n case 'txFailed':\n case 'txDropped':\n case 'txRequest':\n case 'nsfFail':\n case 'txRepeat':\n case 'txAwaitingApproval':\n case 'txConfirmReminder':\n case 'txSendFail':\n case 'txError':\n case 'txUnderPriced':\n case 'txPoolSimulation':\n case 'all':\n break;\n\n default:\n throw new Error(`${eventCode} is not a valid event code, for a list of valid event codes see: https://docs.blocknative.com/notify-sdk#event-codes`);\n } // check that listener is a function\n\n\n if (typeof listener !== 'function') {\n throw new Error('Listener must be a function');\n } // add listener for the eventCode\n\n\n this.listeners[eventCode] = listener;\n },\n off: function (eventCode) {\n delete this.listeners[eventCode];\n },\n emit: function (state) {\n if (this.listeners[state.eventCode]) {\n return this.listeners[state.eventCode](state);\n }\n\n if (this.listeners.all) {\n return this.listeners.all(state);\n }\n }\n };\n}\n\nfunction networkName(blockchain, id) {\n return networks[blockchain][id];\n}\n\nfunction serverEcho(eventCode) {\n switch (eventCode) {\n case 'txRequest':\n case 'nsfFail':\n case 'txRepeat':\n case 'txAwaitingApproval':\n case 'txConfirmReminder':\n case 'txSendFail':\n case 'txError':\n case 'txUnderPriced':\n case 'txSent':\n return true;\n\n default:\n return false;\n }\n}\n\nfunction last(arr) {\n return arr.reverse()[0];\n} // isAddress and isTxid are not meant to perform real validation,\n// just needs to work out if it is an address or a transaction id\n// the server will do more thorough validation\n\n\nfunction isAddress(blockchain, addressOrHash) {\n switch (blockchain) {\n case 'ethereum':\n return addressOrHash.length === 42;\n\n case 'bitcoin':\n return addressOrHash.length !== 64;\n\n default:\n return false;\n }\n}\n\nfunction isTxid(blockchain, addressOrHash) {\n switch (blockchain) {\n case 'ethereum':\n return addressOrHash.length === 66;\n\n case 'bitcoin':\n return addressOrHash.length === 64;\n\n default:\n return false;\n }\n}\n\nfunction wait(time) {\n return new Promise(resolve => {\n setTimeout(resolve, time);\n });\n}\n\nconst jsonPreserveUndefined = (k, v) => v === undefined ? 'undefined' : v;\n\nfunction transaction(hash, id) {\n if (this._destroyed) throw new Error('The WebSocket instance has been destroyed, re-initialize to continue making requests.'); // create startTime for transaction\n\n const startTime = Date.now(); // create emitter for transaction\n\n const emitter = createEmitter(); // create eventCode for transaction\n\n const eventCode = 'txSent'; // put in queue\n\n this._watchedTransactions.push({\n hash,\n emitter\n });\n\n const transaction = {\n [this._system === 'ethereum' ? 'hash' : 'txid']: hash,\n id: id || hash,\n startTime,\n status: 'sent'\n };\n const newState = { ...transaction,\n eventCode\n }; // logEvent to server\n\n this._sendMessage({\n eventCode,\n categoryCode: 'activeTransaction',\n transaction\n });\n\n const transactionObj = {\n details: newState,\n emitter\n };\n\n function emitState() {\n const emitterResult = emitter.emit(newState);\n\n this._transactionHandlers.forEach(handler => handler({\n transaction: newState,\n emitterResult\n }));\n } // emit after delay to allow for listener to be registered\n\n\n setTimeout(emitState.bind(this), 5);\n return transactionObj;\n}\n\nfunction account(address) {\n if (this._destroyed) throw new Error('The WebSocket instance has been destroyed, re-initialize to continue making requests.'); // lowercase the address if Ethereum\n\n address = this._system === 'ethereum' ? address.toLowerCase() : address; // create emitter for transaction\n\n const emitter = createEmitter(); // create eventCode for transaction\n\n const eventCode = 'watch';\n\n const existingAddressWatcher = this._watchedAccounts.find(ac => ac.address === address);\n\n if (existingAddressWatcher) {\n // add to existing emitters array\n existingAddressWatcher.emitters.push(emitter);\n } else {\n // put in accounts queue\n this._watchedAccounts.push({\n address,\n emitters: [emitter]\n });\n } // logEvent to server\n\n\n this._sendMessage({\n eventCode,\n categoryCode: 'accountAddress',\n account: {\n address\n }\n });\n\n return {\n emitter,\n details: {\n address\n }\n };\n}\n\nfunction event(eventObj) {\n if (this._destroyed) throw new Error('The WebSocket instance has been destroyed, re-initialize to continue making requests.');\n\n this._sendMessage(eventObj);\n}\n\nfunction unsubscribe(addressOrHash) {\n if (this._destroyed) throw new Error('The WebSocket instance has been destroyed, re-initialize to continue making requests.');\n const address = isAddress(this._system, addressOrHash);\n const txid = isTxid(this._system, addressOrHash); // check if it is an address or a hash\n\n if (address) {\n const normalizedAddress = this._system === 'ethereum' ? addressOrHash.toLowerCase() : addressOrHash; // remove address from accounts\n\n this._watchedAccounts = this._watchedAccounts.filter(ac => ac.address !== normalizedAddress); // logEvent to server\n\n this._sendMessage({\n categoryCode: 'accountAddress',\n eventCode: 'unwatch',\n account: {\n address: normalizedAddress\n }\n });\n } else if (txid) {\n // remove transaction from transactions\n this._watchedTransactions = this._watchedTransactions.filter(tx => tx.hash !== addressOrHash); // logEvent to server\n\n this._sendMessage({\n categoryCode: 'activeTransaction',\n eventCode: 'unwatch',\n transaction: {\n [this._system === 'ethereum' ? 'hash' : 'txid']: addressOrHash,\n id: addressOrHash,\n status: 'unsubscribed'\n }\n });\n } else {\n throw new Error(`Error trying to unsubscribe ${addressOrHash}: not a valid address or transaction id/hash`);\n }\n}\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\n\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nvar _enable_super_gross_mode_that_will_cause_bad_things = false;\nvar config = {\n Promise: undefined,\n\n set useDeprecatedSynchronousErrorHandling(value) {\n if (value) {\n var error = /*@__PURE__*/new Error();\n /*@__PURE__*/\n\n console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \\n' + error.stack);\n }\n\n _enable_super_gross_mode_that_will_cause_bad_things = value;\n },\n\n get useDeprecatedSynchronousErrorHandling() {\n return _enable_super_gross_mode_that_will_cause_bad_things;\n }\n\n};\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\nfunction hostReportError(err) {\n setTimeout(function () {\n throw err;\n }, 0);\n}\n/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */\n\n\nvar empty = {\n closed: true,\n next: function (value) {},\n error: function (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n } else {\n hostReportError(err);\n }\n },\n complete: function () {}\n};\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\nvar isArray = /*@__PURE__*/function () {\n return Array.isArray || function (x) {\n return x && typeof x.length === 'number';\n };\n}();\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nfunction isObject(x) {\n return x !== null && typeof x === 'object';\n}\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nvar UnsubscriptionErrorImpl = /*@__PURE__*/function () {\n function UnsubscriptionErrorImpl(errors) {\n Error.call(this);\n this.message = errors ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) {\n return i + 1 + \") \" + err.toString();\n }).join('\\n ') : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n return this;\n }\n\n UnsubscriptionErrorImpl.prototype = /*@__PURE__*/Object.create(Error.prototype);\n return UnsubscriptionErrorImpl;\n}();\n\nvar UnsubscriptionError = UnsubscriptionErrorImpl;\n/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */\n\nvar Subscription = /*@__PURE__*/function () {\n function Subscription(unsubscribe) {\n this.closed = false;\n this._parentOrParents = null;\n this._subscriptions = null;\n\n if (unsubscribe) {\n this._ctorUnsubscribe = true;\n this._unsubscribe = unsubscribe;\n }\n }\n\n Subscription.prototype.unsubscribe = function () {\n var errors;\n\n if (this.closed) {\n return;\n }\n\n var _a = this,\n _parentOrParents = _a._parentOrParents,\n _ctorUnsubscribe = _a._ctorUnsubscribe,\n _unsubscribe = _a._unsubscribe,\n _subscriptions = _a._subscriptions;\n\n this.closed = true;\n this._parentOrParents = null;\n this._subscriptions = null;\n\n if (_parentOrParents instanceof Subscription) {\n _parentOrParents.remove(this);\n } else if (_parentOrParents !== null) {\n for (var index = 0; index < _parentOrParents.length; ++index) {\n var parent_1 = _parentOrParents[index];\n parent_1.remove(this);\n }\n }\n\n if (isFunction(_unsubscribe)) {\n if (_ctorUnsubscribe) {\n this._unsubscribe = undefined;\n }\n\n try {\n _unsubscribe.call(this);\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e];\n }\n }\n\n if (isArray(_subscriptions)) {\n var index = -1;\n var len = _subscriptions.length;\n\n while (++index < len) {\n var sub = _subscriptions[index];\n\n if (isObject(sub)) {\n try {\n sub.unsubscribe();\n } catch (e) {\n errors = errors || [];\n\n if (e instanceof UnsubscriptionError) {\n errors = errors.concat(flattenUnsubscriptionErrors(e.errors));\n } else {\n errors.push(e);\n }\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n };\n\n Subscription.prototype.add = function (teardown) {\n var subscription = teardown;\n\n if (!teardown) {\n return Subscription.EMPTY;\n }\n\n switch (typeof teardown) {\n case 'function':\n subscription = new Subscription(teardown);\n\n case 'object':\n if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {\n return subscription;\n } else if (this.closed) {\n subscription.unsubscribe();\n return subscription;\n } else if (!(subscription instanceof Subscription)) {\n var tmp = subscription;\n subscription = new Subscription();\n subscription._subscriptions = [tmp];\n }\n\n break;\n\n default:\n {\n throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n }\n }\n\n var _parentOrParents = subscription._parentOrParents;\n\n if (_parentOrParents === null) {\n subscription._parentOrParents = this;\n } else if (_parentOrParents instanceof Subscription) {\n if (_parentOrParents === this) {\n return subscription;\n }\n\n subscription._parentOrParents = [_parentOrParents, this];\n } else if (_parentOrParents.indexOf(this) === -1) {\n _parentOrParents.push(this);\n } else {\n return subscription;\n }\n\n var subscriptions = this._subscriptions;\n\n if (subscriptions === null) {\n this._subscriptions = [subscription];\n } else {\n subscriptions.push(subscription);\n }\n\n return subscription;\n };\n\n Subscription.prototype.remove = function (subscription) {\n var subscriptions = this._subscriptions;\n\n if (subscriptions) {\n var subscriptionIndex = subscriptions.indexOf(subscription);\n\n if (subscriptionIndex !== -1) {\n subscriptions.splice(subscriptionIndex, 1);\n }\n }\n };\n\n Subscription.EMPTY = function (empty) {\n empty.closed = true;\n return empty;\n }(new Subscription());\n\n return Subscription;\n}();\n\nfunction flattenUnsubscriptionErrors(errors) {\n return errors.reduce(function (errs, err) {\n return errs.concat(err instanceof UnsubscriptionError ? err.errors : err);\n }, []);\n}\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nvar rxSubscriber = /*@__PURE__*/function () {\n return typeof Symbol === 'function' ? /*@__PURE__*/Symbol('rxSubscriber') : '@@rxSubscriber_' + /*@__PURE__*/Math.random();\n}();\n/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */\n\n\nvar Subscriber = /*@__PURE__*/function (_super) {\n __extends(Subscriber, _super);\n\n function Subscriber(destinationOrNext, error, complete) {\n var _this = _super.call(this) || this;\n\n _this.syncErrorValue = null;\n _this.syncErrorThrown = false;\n _this.syncErrorThrowable = false;\n _this.isStopped = false;\n\n switch (arguments.length) {\n case 0:\n _this.destination = empty;\n break;\n\n case 1:\n if (!destinationOrNext) {\n _this.destination = empty;\n break;\n }\n\n if (typeof destinationOrNext === 'object') {\n if (destinationOrNext instanceof Subscriber) {\n _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;\n _this.destination = destinationOrNext;\n destinationOrNext.add(_this);\n } else {\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext);\n }\n\n break;\n }\n\n default:\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);\n break;\n }\n\n return _this;\n }\n\n Subscriber.prototype[rxSubscriber] = function () {\n return this;\n };\n\n Subscriber.create = function (next, error, complete) {\n var subscriber = new Subscriber(next, error, complete);\n subscriber.syncErrorThrowable = false;\n return subscriber;\n };\n\n Subscriber.prototype.next = function (value) {\n if (!this.isStopped) {\n this._next(value);\n }\n };\n\n Subscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n this.isStopped = true;\n\n this._error(err);\n }\n };\n\n Subscriber.prototype.complete = function () {\n if (!this.isStopped) {\n this.isStopped = true;\n\n this._complete();\n }\n };\n\n Subscriber.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n\n this.isStopped = true;\n\n _super.prototype.unsubscribe.call(this);\n };\n\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n\n Subscriber.prototype._error = function (err) {\n this.destination.error(err);\n this.unsubscribe();\n };\n\n Subscriber.prototype._complete = function () {\n this.destination.complete();\n this.unsubscribe();\n };\n\n Subscriber.prototype._unsubscribeAndRecycle = function () {\n var _parentOrParents = this._parentOrParents;\n this._parentOrParents = null;\n this.unsubscribe();\n this.closed = false;\n this.isStopped = false;\n this._parentOrParents = _parentOrParents;\n return this;\n };\n\n return Subscriber;\n}(Subscription);\n\nvar SafeSubscriber = /*@__PURE__*/function (_super) {\n __extends(SafeSubscriber, _super);\n\n function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n\n _this._parentSubscriber = _parentSubscriber;\n var next;\n var context = _this;\n\n if (isFunction(observerOrNext)) {\n next = observerOrNext;\n } else if (observerOrNext) {\n next = observerOrNext.next;\n error = observerOrNext.error;\n complete = observerOrNext.complete;\n\n if (observerOrNext !== empty) {\n context = Object.create(observerOrNext);\n\n if (isFunction(context.unsubscribe)) {\n _this.add(context.unsubscribe.bind(context));\n }\n\n context.unsubscribe = _this.unsubscribe.bind(_this);\n }\n }\n\n _this._context = context;\n _this._next = next;\n _this._error = error;\n _this._complete = complete;\n return _this;\n }\n\n SafeSubscriber.prototype.next = function (value) {\n if (!this.isStopped && this._next) {\n var _parentSubscriber = this._parentSubscriber;\n\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._next, value);\n } else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n this.unsubscribe();\n }\n }\n };\n\n SafeSubscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n var useDeprecatedSynchronousErrorHandling = config.useDeprecatedSynchronousErrorHandling;\n\n if (this._error) {\n if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._error, err);\n\n this.unsubscribe();\n } else {\n this.__tryOrSetError(_parentSubscriber, this._error, err);\n\n this.unsubscribe();\n }\n } else if (!_parentSubscriber.syncErrorThrowable) {\n this.unsubscribe();\n\n if (useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n\n hostReportError(err);\n } else {\n if (useDeprecatedSynchronousErrorHandling) {\n _parentSubscriber.syncErrorValue = err;\n _parentSubscriber.syncErrorThrown = true;\n } else {\n hostReportError(err);\n }\n\n this.unsubscribe();\n }\n }\n };\n\n SafeSubscriber.prototype.complete = function () {\n var _this = this;\n\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n\n if (this._complete) {\n var wrappedComplete = function () {\n return _this._complete.call(_this._context);\n };\n\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(wrappedComplete);\n\n this.unsubscribe();\n } else {\n this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n\n this.unsubscribe();\n }\n } else {\n this.unsubscribe();\n }\n }\n };\n\n SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n try {\n fn.call(this._context, value);\n } catch (err) {\n this.unsubscribe();\n\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n } else {\n hostReportError(err);\n }\n }\n };\n\n SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n if (!config.useDeprecatedSynchronousErrorHandling) {\n throw new Error('bad call');\n }\n\n try {\n fn.call(this._context, value);\n } catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n parent.syncErrorValue = err;\n parent.syncErrorThrown = true;\n return true;\n } else {\n hostReportError(err);\n return true;\n }\n }\n\n return false;\n };\n\n SafeSubscriber.prototype._unsubscribe = function () {\n var _parentSubscriber = this._parentSubscriber;\n this._context = null;\n this._parentSubscriber = null;\n\n _parentSubscriber.unsubscribe();\n };\n\n return SafeSubscriber;\n}(Subscriber);\n/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */\n\n\nfunction canReportError(observer) {\n while (observer) {\n var _a = observer,\n closed_1 = _a.closed,\n destination = _a.destination,\n isStopped = _a.isStopped;\n\n if (closed_1 || isStopped) {\n return false;\n } else if (destination && destination instanceof Subscriber) {\n observer = destination;\n } else {\n observer = null;\n }\n }\n\n return true;\n}\n/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */\n\n\nfunction toSubscriber(nextOrObserver, error, complete) {\n if (nextOrObserver) {\n if (nextOrObserver instanceof Subscriber) {\n return nextOrObserver;\n }\n\n if (nextOrObserver[rxSubscriber]) {\n return nextOrObserver[rxSubscriber]();\n }\n }\n\n if (!nextOrObserver && !error && !complete) {\n return new Subscriber(empty);\n }\n\n return new Subscriber(nextOrObserver, error, complete);\n}\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nvar observable = /*@__PURE__*/function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}();\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nfunction identity(x) {\n return x;\n}\n/** PURE_IMPORTS_START _identity PURE_IMPORTS_END */\n\n\nfunction pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input) {\n return fns.reduce(function (prev, fn) {\n return fn(prev);\n }, input);\n };\n}\n/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */\n\n\nvar Observable = /*@__PURE__*/function () {\n function Observable(subscribe) {\n this._isScalar = false;\n\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var operator = this.operator;\n var sink = toSubscriber(observerOrNext, error, complete);\n\n if (operator) {\n sink.add(operator.call(sink, this.source));\n } else {\n sink.add(this.source || config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable ? this._subscribe(sink) : this._trySubscribe(sink));\n }\n\n if (config.useDeprecatedSynchronousErrorHandling) {\n if (sink.syncErrorThrowable) {\n sink.syncErrorThrowable = false;\n\n if (sink.syncErrorThrown) {\n throw sink.syncErrorValue;\n }\n }\n }\n\n return sink;\n };\n\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n } catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n sink.syncErrorThrown = true;\n sink.syncErrorValue = err;\n }\n\n if (canReportError(sink)) {\n sink.error(err);\n } else {\n console.warn(err);\n }\n }\n };\n\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscription;\n subscription = _this.subscribe(function (value) {\n try {\n next(value);\n } catch (err) {\n reject(err);\n\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n }, reject, resolve);\n });\n };\n\n Observable.prototype._subscribe = function (subscriber) {\n var source = this.source;\n return source && source.subscribe(subscriber);\n };\n\n Observable.prototype[observable] = function () {\n return this;\n };\n\n Observable.prototype.pipe = function () {\n var operations = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n\n if (operations.length === 0) {\n return this;\n }\n\n return pipeFromArray(operations)(this);\n };\n\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n\n _this.subscribe(function (x) {\n return value = x;\n }, function (err) {\n return reject(err);\n }, function () {\n return resolve(value);\n });\n });\n };\n\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n\n return Observable;\n}();\n\nfunction getPromiseCtor(promiseCtor) {\n if (!promiseCtor) {\n promiseCtor = Promise;\n }\n\n if (!promiseCtor) {\n throw new Error('no Promise impl found');\n }\n\n return promiseCtor;\n}\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nvar ObjectUnsubscribedErrorImpl = /*@__PURE__*/function () {\n function ObjectUnsubscribedErrorImpl() {\n Error.call(this);\n this.message = 'object unsubscribed';\n this.name = 'ObjectUnsubscribedError';\n return this;\n }\n\n ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/Object.create(Error.prototype);\n return ObjectUnsubscribedErrorImpl;\n}();\n\nvar ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;\n/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */\n\nvar SubjectSubscription = /*@__PURE__*/function (_super) {\n __extends(SubjectSubscription, _super);\n\n function SubjectSubscription(subject, subscriber) {\n var _this = _super.call(this) || this;\n\n _this.subject = subject;\n _this.subscriber = subscriber;\n _this.closed = false;\n return _this;\n }\n\n SubjectSubscription.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n\n this.closed = true;\n var subject = this.subject;\n var observers = subject.observers;\n this.subject = null;\n\n if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n return;\n }\n\n var subscriberIndex = observers.indexOf(this.subscriber);\n\n if (subscriberIndex !== -1) {\n observers.splice(subscriberIndex, 1);\n }\n };\n\n return SubjectSubscription;\n}(Subscription);\n/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */\n\n\nvar SubjectSubscriber = /*@__PURE__*/function (_super) {\n __extends(SubjectSubscriber, _super);\n\n function SubjectSubscriber(destination) {\n var _this = _super.call(this, destination) || this;\n\n _this.destination = destination;\n return _this;\n }\n\n return SubjectSubscriber;\n}(Subscriber);\n\nvar Subject = /*@__PURE__*/function (_super) {\n __extends(Subject, _super);\n\n function Subject() {\n var _this = _super.call(this) || this;\n\n _this.observers = [];\n _this.closed = false;\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n\n Subject.prototype[rxSubscriber] = function () {\n return new SubjectSubscriber(this);\n };\n\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n\n Subject.prototype.next = function (value) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n\n if (!this.isStopped) {\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n\n for (var i = 0; i < len; i++) {\n copy[i].next(value);\n }\n }\n };\n\n Subject.prototype.error = function (err) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n\n this.hasError = true;\n this.thrownError = err;\n this.isStopped = true;\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n\n for (var i = 0; i < len; i++) {\n copy[i].error(err);\n }\n\n this.observers.length = 0;\n };\n\n Subject.prototype.complete = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n\n this.isStopped = true;\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n\n for (var i = 0; i < len; i++) {\n copy[i].complete();\n }\n\n this.observers.length = 0;\n };\n\n Subject.prototype.unsubscribe = function () {\n this.isStopped = true;\n this.closed = true;\n this.observers = null;\n };\n\n Subject.prototype._trySubscribe = function (subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n } else {\n return _super.prototype._trySubscribe.call(this, subscriber);\n }\n };\n\n Subject.prototype._subscribe = function (subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n } else if (this.hasError) {\n subscriber.error(this.thrownError);\n return Subscription.EMPTY;\n } else if (this.isStopped) {\n subscriber.complete();\n return Subscription.EMPTY;\n } else {\n this.observers.push(subscriber);\n return new SubjectSubscription(this, subscriber);\n }\n };\n\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n\n return Subject;\n}(Observable);\n\nvar AnonymousSubject = /*@__PURE__*/function (_super) {\n __extends(AnonymousSubject, _super);\n\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n\n AnonymousSubject.prototype.next = function (value) {\n var destination = this.destination;\n\n if (destination && destination.next) {\n destination.next(value);\n }\n };\n\n AnonymousSubject.prototype.error = function (err) {\n var destination = this.destination;\n\n if (destination && destination.error) {\n this.destination.error(err);\n }\n };\n\n AnonymousSubject.prototype.complete = function () {\n var destination = this.destination;\n\n if (destination && destination.complete) {\n this.destination.complete();\n }\n };\n\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var source = this.source;\n\n if (source) {\n return this.source.subscribe(subscriber);\n } else {\n return Subscription.EMPTY;\n }\n };\n\n return AnonymousSubject;\n}(Subject);\n/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */\n\n\nvar Action = /*@__PURE__*/function (_super) {\n __extends(Action, _super);\n\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n\n Action.prototype.schedule = function (state, delay) {\n return this;\n };\n\n return Action;\n}(Subscription);\n/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */\n\n\nvar AsyncAction = /*@__PURE__*/function (_super) {\n __extends(AsyncAction, _super);\n\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n\n AsyncAction.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n if (this.closed) {\n return this;\n }\n\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n this.pending = true;\n this.delay = delay;\n this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n\n AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n\n AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n if (delay !== null && this.delay === delay && this.pending === false) {\n return id;\n }\n\n clearInterval(id);\n return undefined;\n };\n\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n\n var error = this._execute(state, delay);\n\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n\n AsyncAction.prototype._execute = function (state, delay) {\n var errored = false;\n var errorValue = undefined;\n\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n errorValue = !!e && e || new Error(e);\n }\n\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n\n AsyncAction.prototype._unsubscribe = function () {\n var id = this.id;\n var scheduler = this.scheduler;\n var actions = scheduler.actions;\n var index = actions.indexOf(this);\n this.work = null;\n this.state = null;\n this.pending = false;\n this.scheduler = null;\n\n if (index !== -1) {\n actions.splice(index, 1);\n }\n\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null;\n };\n\n return AsyncAction;\n}(Action);\n\nvar Scheduler = /*@__PURE__*/function () {\n function Scheduler(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n\n this.SchedulerAction = SchedulerAction;\n this.now = now;\n }\n\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return new this.SchedulerAction(this, work).schedule(state, delay);\n };\n\n Scheduler.now = function () {\n return Date.now();\n };\n\n return Scheduler;\n}();\n/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */\n\n\nvar AsyncScheduler = /*@__PURE__*/function (_super) {\n __extends(AsyncScheduler, _super);\n\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n\n var _this = _super.call(this, SchedulerAction, function () {\n if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {\n return AsyncScheduler.delegate.now();\n } else {\n return now();\n }\n }) || this;\n\n _this.actions = [];\n _this.active = false;\n _this.scheduled = undefined;\n return _this;\n }\n\n AsyncScheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n\n if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {\n return AsyncScheduler.delegate.schedule(work, delay, state);\n } else {\n return _super.prototype.schedule.call(this, work, delay, state);\n }\n };\n\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n\n if (this.active) {\n actions.push(action);\n return;\n }\n\n var error;\n this.active = true;\n\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (action = actions.shift());\n\n this.active = false;\n\n if (error) {\n while (action = actions.shift()) {\n action.unsubscribe();\n }\n\n throw error;\n }\n };\n\n return AsyncScheduler;\n}(Scheduler);\n/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */\n\n\nvar EMPTY = /*@__PURE__*/new Observable(function (subscriber) {\n return subscriber.complete();\n});\n\nfunction empty$1(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) {\n return scheduler.schedule(function () {\n return subscriber.complete();\n });\n });\n}\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nvar subscribeToArray = function (array) {\n return function (subscriber) {\n for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n\n subscriber.complete();\n };\n};\n/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */\n\n\nfunction throwError(error, scheduler) {\n if (!scheduler) {\n return new Observable(function (subscriber) {\n return subscriber.error(error);\n });\n } else {\n return new Observable(function (subscriber) {\n return scheduler.schedule(dispatch, 0, {\n error: error,\n subscriber: subscriber\n });\n });\n }\n}\n\nfunction dispatch(_a) {\n var error = _a.error,\n subscriber = _a.subscriber;\n subscriber.error(error);\n}\n/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */\n\n\nvar asyncScheduler = /*@__PURE__*/new AsyncScheduler(AsyncAction);\nvar async = asyncScheduler;\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\nvar ArgumentOutOfRangeErrorImpl = /*@__PURE__*/function () {\n function ArgumentOutOfRangeErrorImpl() {\n Error.call(this);\n this.message = 'argument out of range';\n this.name = 'ArgumentOutOfRangeError';\n return this;\n }\n\n ArgumentOutOfRangeErrorImpl.prototype = /*@__PURE__*/Object.create(Error.prototype);\n return ArgumentOutOfRangeErrorImpl;\n}();\n\nvar ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\nvar TimeoutErrorImpl = /*@__PURE__*/function () {\n function TimeoutErrorImpl() {\n Error.call(this);\n this.message = 'Timeout has occurred';\n this.name = 'TimeoutError';\n return this;\n }\n\n TimeoutErrorImpl.prototype = /*@__PURE__*/Object.create(Error.prototype);\n return TimeoutErrorImpl;\n}();\n\nvar TimeoutError = TimeoutErrorImpl;\n/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */\n\nvar subscribeToPromise = function (promise) {\n return function (subscriber) {\n promise.then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) {\n return subscriber.error(err);\n }).then(null, hostReportError);\n return subscriber;\n };\n};\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nfunction getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n\n return Symbol.iterator;\n}\n\nvar iterator = /*@__PURE__*/getSymbolIterator();\n/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */\n\nvar subscribeToIterable = function (iterable) {\n return function (subscriber) {\n var iterator$1 = iterable[iterator]();\n\n do {\n var item = void 0;\n\n try {\n item = iterator$1.next();\n } catch (err) {\n subscriber.error(err);\n return subscriber;\n }\n\n if (item.done) {\n subscriber.complete();\n break;\n }\n\n subscriber.next(item.value);\n\n if (subscriber.closed) {\n break;\n }\n } while (true);\n\n if (typeof iterator$1.return === 'function') {\n subscriber.add(function () {\n if (iterator$1.return) {\n iterator$1.return();\n }\n });\n }\n\n return subscriber;\n };\n};\n/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */\n\n\nvar subscribeToObservable = function (obj) {\n return function (subscriber) {\n var obs = obj[observable]();\n\n if (typeof obs.subscribe !== 'function') {\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n } else {\n return obs.subscribe(subscriber);\n }\n };\n};\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nvar isArrayLike = function (x) {\n return x && typeof x.length === 'number' && typeof x !== 'function';\n};\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nfunction isPromise(value) {\n return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\n/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */\n\n\nvar subscribeTo = function (result) {\n if (!!result && typeof result[observable] === 'function') {\n return subscribeToObservable(result);\n } else if (isArrayLike(result)) {\n return subscribeToArray(result);\n } else if (isPromise(result)) {\n return subscribeToPromise(result);\n } else if (!!result && typeof result[iterator] === 'function') {\n return subscribeToIterable(result);\n } else {\n var value = isObject(result) ? 'an invalid object' : \"'\" + result + \"'\";\n var msg = \"You provided \" + value + \" where a stream was expected.\" + ' You can provide an Observable, Promise, Array, or Iterable.';\n throw new TypeError(msg);\n }\n};\n/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_util_subscribeTo PURE_IMPORTS_END */\n\n\nvar SimpleInnerSubscriber = /*@__PURE__*/function (_super) {\n __extends(SimpleInnerSubscriber, _super);\n\n function SimpleInnerSubscriber(parent) {\n var _this = _super.call(this) || this;\n\n _this.parent = parent;\n return _this;\n }\n\n SimpleInnerSubscriber.prototype._next = function (value) {\n this.parent.notifyNext(value);\n };\n\n SimpleInnerSubscriber.prototype._error = function (error) {\n this.parent.notifyError(error);\n this.unsubscribe();\n };\n\n SimpleInnerSubscriber.prototype._complete = function () {\n this.parent.notifyComplete();\n this.unsubscribe();\n };\n\n return SimpleInnerSubscriber;\n}(Subscriber);\n\nvar SimpleOuterSubscriber = /*@__PURE__*/function (_super) {\n __extends(SimpleOuterSubscriber, _super);\n\n function SimpleOuterSubscriber() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n SimpleOuterSubscriber.prototype.notifyNext = function (innerValue) {\n this.destination.next(innerValue);\n };\n\n SimpleOuterSubscriber.prototype.notifyError = function (err) {\n this.destination.error(err);\n };\n\n SimpleOuterSubscriber.prototype.notifyComplete = function () {\n this.destination.complete();\n };\n\n return SimpleOuterSubscriber;\n}(Subscriber);\n\nfunction innerSubscribe(result, innerSubscriber) {\n if (innerSubscriber.closed) {\n return undefined;\n }\n\n if (result instanceof Observable) {\n return result.subscribe(innerSubscriber);\n }\n\n return subscribeTo(result)(innerSubscriber);\n}\n/** PURE_IMPORTS_START PURE_IMPORTS_END */\n\n\nfunction isDate(value) {\n return value instanceof Date && !isNaN(+value);\n}\n/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */\n\n\nfunction take(count) {\n return function (source) {\n if (count === 0) {\n return empty$1();\n } else {\n return source.lift(new TakeOperator(count));\n }\n };\n}\n\nvar TakeOperator = /*@__PURE__*/function () {\n function TakeOperator(total) {\n this.total = total;\n\n if (this.total < 0) {\n throw new ArgumentOutOfRangeError();\n }\n }\n\n TakeOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new TakeSubscriber(subscriber, this.total));\n };\n\n return TakeOperator;\n}();\n\nvar TakeSubscriber = /*@__PURE__*/function (_super) {\n __extends(TakeSubscriber, _super);\n\n function TakeSubscriber(destination, total) {\n var _this = _super.call(this, destination) || this;\n\n _this.total = total;\n _this.count = 0;\n return _this;\n }\n\n TakeSubscriber.prototype._next = function (value) {\n var total = this.total;\n var count = ++this.count;\n\n if (count <= total) {\n this.destination.next(value);\n\n if (count === total) {\n this.destination.complete();\n this.unsubscribe();\n }\n }\n };\n\n return TakeSubscriber;\n}(Subscriber);\n/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_innerSubscribe PURE_IMPORTS_END */\n\n\nfunction timeoutWith(due, withObservable, scheduler) {\n if (scheduler === void 0) {\n scheduler = async;\n }\n\n return function (source) {\n var absoluteTimeout = isDate(due);\n var waitFor = absoluteTimeout ? +due - scheduler.now() : Math.abs(due);\n return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));\n };\n}\n\nvar TimeoutWithOperator = /*@__PURE__*/function () {\n function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {\n this.waitFor = waitFor;\n this.absoluteTimeout = absoluteTimeout;\n this.withObservable = withObservable;\n this.scheduler = scheduler;\n }\n\n TimeoutWithOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));\n };\n\n return TimeoutWithOperator;\n}();\n\nvar TimeoutWithSubscriber = /*@__PURE__*/function (_super) {\n __extends(TimeoutWithSubscriber, _super);\n\n function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {\n var _this = _super.call(this, destination) || this;\n\n _this.absoluteTimeout = absoluteTimeout;\n _this.waitFor = waitFor;\n _this.withObservable = withObservable;\n _this.scheduler = scheduler;\n\n _this.scheduleTimeout();\n\n return _this;\n }\n\n TimeoutWithSubscriber.dispatchTimeout = function (subscriber) {\n var withObservable = subscriber.withObservable;\n\n subscriber._unsubscribeAndRecycle();\n\n subscriber.add(innerSubscribe(withObservable, new SimpleInnerSubscriber(subscriber)));\n };\n\n TimeoutWithSubscriber.prototype.scheduleTimeout = function () {\n var action = this.action;\n\n if (action) {\n this.action = action.schedule(this, this.waitFor);\n } else {\n this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));\n }\n };\n\n TimeoutWithSubscriber.prototype._next = function (value) {\n if (!this.absoluteTimeout) {\n this.scheduleTimeout();\n }\n\n _super.prototype._next.call(this, value);\n };\n\n TimeoutWithSubscriber.prototype._unsubscribe = function () {\n this.action = undefined;\n this.scheduler = null;\n this.withObservable = null;\n };\n\n return TimeoutWithSubscriber;\n}(SimpleOuterSubscriber);\n/** PURE_IMPORTS_START _scheduler_async,_util_TimeoutError,_timeoutWith,_observable_throwError PURE_IMPORTS_END */\n\n\nfunction timeout(due, scheduler) {\n if (scheduler === void 0) {\n scheduler = async;\n }\n\n return timeoutWith(due, throwError(new TimeoutError()), scheduler);\n}\n\nfunction configuration(config) {\n if (this._destroyed) {\n throw new Error('The WebSocket instance has been destroyed, re-initialize to continue making requests.');\n }\n\n const casedScope = this._system === 'ethereum' ? config.scope.toLowerCase() : config.scope; // resolve previous configuration if exists\n\n const previousConfiguration = this._configurations.get(casedScope);\n\n previousConfiguration && previousConfiguration.subscription && previousConfiguration.subscription.next();\n const subscription = new Subject(); // create emitter for transaction\n\n const emitter = config.watchAddress ? {\n emitter: createEmitter()\n } : {};\n\n this._configurations.set(casedScope, { ...config,\n ...emitter,\n subscription\n });\n\n this._sendMessage({\n categoryCode: 'configs',\n eventCode: 'put',\n config\n });\n\n return new Promise((resolve, reject) => {\n subscription.pipe(take(1), timeout(5000)).subscribe({\n next: () => resolve({ ...emitter,\n details: {\n config\n }\n }),\n error: () => reject(`Configuration with scope: ${config.scope} has been sent to the Blocknative server, but has not received a reply within 5 seconds.`)\n });\n });\n}\n\nvar version = \"3.4.0\";\n\nfunction sendMessage(msg) {\n if (this._queuedMessages.length > QUEUE_LIMIT) {\n throw new Error(`Queue limit of ${QUEUE_LIMIT} messages has been reached.`);\n }\n\n this._queuedMessages.push(createEventLog.bind(this)(msg));\n\n if (!this._processingQueue) {\n this._processQueue();\n }\n}\n\nasync function processQueue() {\n this._processingQueue = true;\n\n if (!this._connected) {\n await waitForConnectionOpen.bind(this)();\n }\n\n while (this._queuedMessages.length > 0) {\n // small wait to allow response from server to take affect\n await wait(1);\n\n if (this._waitToRetry !== null) {\n // have been rate limited so wait\n await this._waitToRetry;\n this._waitToRetry = null;\n }\n\n const msg = this._queuedMessages.shift();\n\n const delay = this._limitRules.duration / this._limitRules.points * 1000;\n await wait(delay);\n\n this._socket.send(msg);\n }\n\n this._processingQueue = false;\n this._limitRules = DEFAULT_RATE_LIMIT_RULES;\n}\n\nfunction handleMessage(msg) {\n const {\n status,\n reason,\n event,\n connectionId,\n serverVersion,\n retryMs,\n limitRules,\n blockedMsg\n } = JSON.parse(msg.data);\n\n if (connectionId) {\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(this._storageKey, connectionId);\n }\n\n this._connectionId = connectionId;\n } // handle any errors from the server\n\n\n if (status === 'error') {\n if (reason.includes('ratelimit') && !reason.match(/IP (PendingSimulation|Notification) ratelimit reached/)) {\n this._waitToRetry = wait(retryMs);\n this._limitRules = limitRules; // add blocked msg to the front of the queue\n\n blockedMsg && this._queuedMessages.unshift(blockedMsg);\n return;\n }\n\n if (reason.includes('not a valid API key')) {\n if (this._onerror) {\n this._onerror({\n message: reason\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n }\n\n if (reason.includes('network not supported')) {\n if (this._onerror) {\n this._onerror({\n message: reason\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n }\n\n if (reason.includes('maximum allowed amount')) {\n if (this._onerror) {\n this._onerror({\n message: reason\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n } // handle bitcoin txid error\n\n\n if (reason.includes('invalid txid')) {\n const reason = `${event.transaction.txid} is an invalid txid`;\n\n if (this._onerror) {\n this._onerror({\n message: reason,\n transaction: event.transaction.txid\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n } // handle ethereum transaction hash error\n\n\n if (reason.includes('invalid hash')) {\n const reason = `${event.transaction.hash} is an invalid transaction hash`;\n\n if (this._onerror) {\n this._onerror({\n message: reason,\n transaction: event.transaction.hash\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n } // handle general address error\n\n\n if (reason.includes('invalid address')) {\n const reason = `${event.account.address} is an invalid address`;\n\n if (this._onerror) {\n this._onerror({\n message: reason,\n account: event.account.address\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n } // handle bitcoin specific address error\n\n\n if (reason.includes('not a valid Bitcoin')) {\n if (this._onerror) {\n this._onerror({\n message: reason,\n account: event.account.address\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n } // handle ethereum specific address error\n\n\n if (reason.includes('not a valid Ethereum')) {\n if (this._onerror) {\n this._onerror({\n message: reason,\n account: event.account.address\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n } // handle config error\n\n\n if (event && event.config) {\n const configuration = this._configurations.get(event.config.scope);\n\n if (configuration && configuration.subscription) {\n configuration.subscription.error(reason);\n }\n\n return;\n } // throw error that comes back from the server without formatting the message\n\n\n if (this._onerror) {\n this._onerror({\n message: reason\n });\n\n return;\n } else {\n throw new Error(reason);\n }\n }\n\n if (event && event.config) {\n const casedScope = this._system === 'ethereum' ? event.config.scope.toLowerCase() : event.config.scope;\n\n const configuration = this._configurations.get(casedScope);\n\n if (configuration && configuration.subscription) {\n configuration.subscription.next();\n }\n }\n\n if (event && event.transaction) {\n const {\n transaction,\n eventCode,\n contractCall,\n timeStamp,\n blockchain: {\n system,\n network\n }\n } = event; // flatten in to one object\n\n const newState = this._system === 'ethereum' ? { ...transaction,\n serverVersion,\n eventCode,\n timeStamp,\n system,\n network,\n contractCall\n } : { ...transaction,\n serverVersion,\n eventCode,\n timeStamp,\n system,\n network\n }; // ignore server echo and unsubscribe messages\n\n if (serverEcho(eventCode) || transaction.status === 'unsubscribed') {\n return;\n } // replace originalHash to match webhook API\n\n\n if (newState.originalHash) {\n newState.replaceHash = newState.originalHash;\n delete newState.originalHash;\n } // replace status to match webhook API\n\n\n if (eventCode === 'txSpeedUp' && newState.status !== 'speedup') {\n newState.status = 'speedup';\n } // replace status to match webhook API\n\n\n if (eventCode === 'txCancel' && newState.status !== 'cancel') {\n newState.status = 'cancel';\n } // handle change of hash in speedup and cancel events\n\n\n if (eventCode === 'txSpeedUp' || eventCode === 'txCancel') {\n this._watchedTransactions = this._watchedTransactions.map(tx => {\n if (tx.hash === newState.replaceHash) {\n // reassign hash parameter in transaction queue to new hash or txid\n tx.hash = transaction.hash || transaction.txid;\n }\n\n return tx;\n });\n }\n\n const watchedAddress = transaction.watchedAddress && this._system === 'ethereum' ? transaction.watchedAddress.toLowerCase() : transaction.watchedAddress;\n\n if (watchedAddress) {\n const accountObj = this._watchedAccounts.find(ac => ac.address === watchedAddress);\n\n const accountEmitterResult = accountObj ? last(accountObj.emitters.map(emitter => emitter.emit(newState))) : false;\n\n const configuration = this._configurations.get(watchedAddress);\n\n const emitterResult = configuration && configuration.emitter ? configuration.emitter.emit(newState) || accountEmitterResult : accountEmitterResult;\n\n this._transactionHandlers.forEach(handler => handler({\n transaction: newState,\n emitterResult\n }));\n } else {\n const transactionObj = this._watchedTransactions.find(tx => tx.hash === transaction.hash || transaction.txid);\n\n const emitterResult = transactionObj && transactionObj.emitter.emit(newState);\n\n this._transactionHandlers.forEach(handler => handler({\n transaction: newState,\n emitterResult\n }));\n }\n }\n}\n\nfunction createEventLog(msg) {\n return JSON.stringify({\n timeStamp: new Date().toISOString(),\n dappId: this._dappId,\n version,\n appName: this._appName,\n appVersion: this._appVersion,\n blockchain: {\n system: this._system,\n network: networkName(this._system, this._networkId) || 'local'\n },\n ...msg\n }, msg.categoryCode === 'configs' ? jsonPreserveUndefined : undefined);\n}\n\nfunction waitForConnectionOpen() {\n return new Promise(resolve => {\n const interval = setInterval(() => {\n if (this._connected) {\n setTimeout(resolve, 100);\n clearInterval(interval);\n }\n });\n });\n}\n\nfunction validateType(options) {\n const {\n name,\n value,\n type,\n optional,\n customValidation\n } = options;\n\n if (!optional && typeof value === 'undefined') {\n throw new Error(`\"${name}\" is required`);\n }\n\n if (typeof value !== 'undefined' && (type === 'array' ? Array.isArray(type) : typeof value !== type)) {\n throw new Error(`\"${name}\" must be of type: ${type}, received type: ${typeof value} from value: ${value}`);\n }\n\n if (typeof value !== 'undefined' && customValidation && !customValidation(value)) {\n throw new Error(`\"${value}\" is not a valid \"${name}\"`);\n }\n}\n\nfunction validateOptions(options) {\n validateType({\n name: 'sdk options',\n value: options,\n type: 'object'\n });\n const {\n dappId,\n system,\n name,\n appVersion,\n networkId,\n transactionHandlers,\n apiUrl,\n ws,\n onopen,\n ondown,\n onreopen,\n onerror,\n onclose,\n ...otherParams\n } = options;\n invalidParams(otherParams, ['dappId', 'system', 'name', 'appVersion', 'networkId', 'transactionHandlers', 'apiUrl', 'ws', 'onopen', 'ondown', 'onreopen', 'onerror', 'onclose'], 'Initialization Options');\n validateType({\n name: 'dappId',\n value: dappId,\n type: 'string'\n });\n validateType({\n name: 'system',\n value: system,\n type: 'string',\n optional: true,\n customValidation: validSystem\n });\n validateType({\n name: 'name',\n value: name,\n type: 'string',\n optional: true\n });\n validateType({\n name: 'appVersion',\n value: appVersion,\n type: 'string',\n optional: true\n });\n validateType({\n name: 'networkId',\n value: networkId,\n type: 'number'\n });\n validateType({\n name: 'transactionHandler',\n value: transactionHandlers,\n type: 'array',\n optional: true\n });\n\n if (transactionHandlers) {\n transactionHandlers.forEach(handler => validateType({\n name: 'transactionHandler',\n value: handler,\n type: 'function'\n }));\n }\n\n validateType({\n name: 'apiUrl',\n value: apiUrl,\n type: 'string',\n optional: true\n });\n validateType({\n name: 'ws',\n value: ws,\n type: 'function',\n optional: true\n });\n validateType({\n name: 'onopen',\n value: onopen,\n type: 'function',\n optional: true\n });\n validateType({\n name: 'ondown',\n value: ondown,\n type: 'function',\n optional: true\n });\n validateType({\n name: 'onreopen',\n value: onreopen,\n type: 'function',\n optional: true\n });\n validateType({\n name: 'onerror',\n value: onerror,\n type: 'function',\n optional: true\n });\n validateType({\n name: 'onclose',\n value: onclose,\n type: 'function',\n optional: true\n });\n}\n\nfunction validSystem(system) {\n return !!networks[system];\n}\n\nfunction invalidParams(params, validParams, functionName) {\n const invalid = Object.keys(params);\n\n if (invalid.length > 0) {\n throw new Error(`${invalid[0]} is not a valid parameter for ${functionName}, must be one of the following valid parameters: ${validParams.join(', ')}`);\n }\n}\n\nconst DEFAULT_APP_NAME = 'unknown';\nconst DEFAULT_APP_VERSION = 'unknown';\nconst DEFAULT_SYSTEM = 'ethereum';\n\nclass Blocknative {\n constructor(options) {\n validateOptions(options);\n const {\n dappId,\n system = DEFAULT_SYSTEM,\n name = DEFAULT_APP_NAME,\n appVersion = DEFAULT_APP_VERSION,\n networkId,\n transactionHandlers = [],\n apiUrl,\n ws,\n onopen,\n ondown,\n onreopen,\n onerror,\n onclose\n } = options;\n const socket = new SturdyWebSocket(apiUrl || 'wss://api.blocknative.com/v0', ws ? {\n wsConstructor: ws\n } : {});\n socket.onopen = onOpen.bind(this, onopen);\n socket.ondown = onDown.bind(this, ondown);\n socket.onreopen = onReopen.bind(this, onreopen);\n socket.onmessage = handleMessage.bind(this);\n\n socket.onerror = error => onerror && onerror({\n message: 'There was a WebSocket error',\n error\n });\n\n socket.onclose = () => {\n this._pingTimeout && clearInterval(this._pingTimeout);\n onclose && onclose();\n };\n\n const storageKey = CryptoEs.SHA1(`${dappId} - ${name}`).toString();\n const storedConnectionId = typeof window !== 'undefined' && window.localStorage.getItem(storageKey);\n this._storageKey = storageKey;\n this._connectionId = storedConnectionId || undefined;\n this._dappId = dappId;\n this._system = system;\n this._networkId = networkId;\n this._appName = name;\n this._appVersion = appVersion;\n this._transactionHandlers = transactionHandlers;\n this._socket = socket;\n this._connected = false;\n this._sendMessage = sendMessage.bind(this);\n this._watchedTransactions = [];\n this._watchedAccounts = [];\n this._configurations = new Map();\n this._pingTimeout = undefined;\n this._destroyed = false;\n this._onerror = onerror;\n this._queuedMessages = [];\n this._limitRules = DEFAULT_RATE_LIMIT_RULES;\n this._waitToRetry = null;\n this._processingQueue = false;\n this._processQueue = processQueue.bind(this);\n\n if (this._socket.ws.on) {\n this._heartbeat = () => {\n this._pingTimeout && clearTimeout(this._pingTimeout);\n this._pingTimeout = setTimeout(() => {\n // terminate connection if we haven't heard the server ping after server timeout plus conservative latency delay\n // Sturdy Websocket will handle the new connection logic\n this._socket.ws.terminate();\n }, 30000 + 1000);\n };\n\n this._socket.ws.on('ping', () => {\n this._heartbeat && this._heartbeat();\n });\n } // public API\n\n\n this.transaction = transaction.bind(this);\n this.account = account.bind(this);\n this.event = event.bind(this);\n this.unsubscribe = unsubscribe.bind(this);\n this.configuration = configuration.bind(this);\n\n this.destroy = () => {\n this._socket.close();\n\n this._destroyed = true; // call onclose manually here as SturdyWebSocket doesn't currently work as expected\n // https://github.com/dphilipson/sturdy-websocket/issues/5\n\n this._socket.onclose();\n };\n }\n\n}\n\nfunction onOpen(handler) {\n this._connected = true;\n const msg = {\n categoryCode: 'initialize',\n eventCode: 'checkDappId',\n connectionId: this._connectionId\n }; // send this message directly rather than put in queue\n\n this._socket.send(createEventLog.bind(this)(msg));\n\n this._heartbeat && this._heartbeat();\n handler && handler();\n}\n\nfunction onDown(handler, closeEvent) {\n this._connected = false;\n\n if (handler) {\n handler(closeEvent);\n }\n\n this._pingTimeout && clearTimeout(this._pingTimeout);\n}\n\nasync function onReopen(handler) {\n this._connected = true;\n const msg = {\n categoryCode: 'initialize',\n eventCode: 'checkDappId',\n connectionId: this._connectionId\n };\n\n this._socket.send(createEventLog.bind(this)(msg)); // re-register all configurations on re-connection\n\n\n const configurations = Array.from(this._configurations.values()); // register global config first and wait for it to complete\n\n const globalConfiguration = this._configurations.get('global');\n\n if (globalConfiguration) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n emitter,\n subscription,\n ...config\n } = globalConfiguration;\n await this.configuration(config);\n } catch (error) {\n console.warn('Error re-sending global configuration upon reconnection:', error);\n }\n }\n\n const addressConfigurations = configurations.filter(({\n scope\n }) => scope !== 'global');\n addressConfigurations.forEach(enhancedConfig => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n emitter,\n subscription,\n ...config\n } = enhancedConfig;\n\n this._sendMessage({\n categoryCode: 'configs',\n eventCode: 'put',\n config\n });\n }); // re-register all accounts to be watched by server upon\n // re-connection as they don't get transferred over automatically\n // to the new connection like tx hashes do\n\n this._watchedAccounts.forEach(account => {\n this._sendMessage({\n eventCode: 'accountAddress',\n categoryCode: 'watch',\n account: {\n address: account.address\n }\n });\n });\n\n if (handler) {\n handler();\n }\n\n if (this._socket.ws.on) {\n // need to re-register ping event since new connection\n this._socket.ws.on('ping', () => {\n this._heartbeat && this._heartbeat();\n });\n\n this._heartbeat();\n }\n}\n\nexport default Blocknative;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getClientMeta = exports.getLocalStorage = exports.getLocalStorageOrThrow = exports.getCrypto = exports.getCryptoOrThrow = exports.getLocation = exports.getLocationOrThrow = exports.getNavigator = exports.getNavigatorOrThrow = exports.getDocument = exports.getDocumentOrThrow = exports.getFromWindowOrThrow = exports.getFromWindow = exports.isBrowser = exports.isNode = exports.isMobile = exports.isIOS = exports.detectOS = exports.detectEnv = void 0;\nconst tslib_1 = require(\"tslib\");\nconst windowMetadata = tslib_1.__importStar(require(\"window-metadata\"));\nconst windowGetters = tslib_1.__importStar(require(\"window-getters\"));\nconst detect_browser_1 = require(\"detect-browser\");\nfunction detectEnv(userAgent) {\n return detect_browser_1.detect(userAgent);\n}\nexports.detectEnv = detectEnv;\nfunction detectOS() {\n const env = detectEnv();\n return env && env.os ? env.os : undefined;\n}\nexports.detectOS = detectOS;\nfunction isIOS() {\n const os = detectOS();\n return os ? os.toLowerCase().includes(\"ios\") : false;\n}\nexports.isIOS = isIOS;\nfunction isMobile() {\n const os = detectOS();\n return os ? os.toLowerCase().includes(\"android\") || os.toLowerCase().includes(\"ios\") : false;\n}\nexports.isMobile = isMobile;\nfunction isNode() {\n const env = detectEnv();\n const result = env && env.name ? env.name.toLowerCase() === \"node\" : false;\n return result;\n}\nexports.isNode = isNode;\nfunction isBrowser() {\n const result = !isNode() && !!exports.getNavigator();\n return result;\n}\nexports.isBrowser = isBrowser;\nexports.getFromWindow = windowGetters.getFromWindow;\nexports.getFromWindowOrThrow = windowGetters.getFromWindowOrThrow;\nexports.getDocumentOrThrow = windowGetters.getDocumentOrThrow;\nexports.getDocument = windowGetters.getDocument;\nexports.getNavigatorOrThrow = windowGetters.getNavigatorOrThrow;\nexports.getNavigator = windowGetters.getNavigator;\nexports.getLocationOrThrow = windowGetters.getLocationOrThrow;\nexports.getLocation = windowGetters.getLocation;\nexports.getCryptoOrThrow = windowGetters.getCryptoOrThrow;\nexports.getCrypto = windowGetters.getCrypto;\nexports.getLocalStorageOrThrow = windowGetters.getLocalStorageOrThrow;\nexports.getLocalStorage = windowGetters.getLocalStorage;\nfunction getClientMeta() {\n return windowMetadata.getWindowMetadata();\n}\nexports.getClientMeta = getClientMeta;\n//# sourceMappingURL=browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.safeJsonStringify = exports.safeJsonParse = void 0;\nconst tslib_1 = require(\"tslib\");\nconst safeJsonUtils = tslib_1.__importStar(require(\"safe-json-utils\"));\nexports.safeJsonParse = safeJsonUtils.safeJsonParse;\nexports.safeJsonStringify = safeJsonUtils.safeJsonStringify;\n//# sourceMappingURL=json.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeLocal = exports.getLocal = exports.setLocal = void 0;\nconst json_1 = require(\"./json\");\nconst browser_1 = require(\"./browser\");\nfunction setLocal(key, data) {\n const raw = json_1.safeJsonStringify(data);\n const local = browser_1.getLocalStorage();\n if (local) {\n local.setItem(key, raw);\n }\n}\nexports.setLocal = setLocal;\nfunction getLocal(key) {\n let data = null;\n let raw = null;\n const local = browser_1.getLocalStorage();\n if (local) {\n raw = local.getItem(key);\n }\n data = json_1.safeJsonParse(raw);\n return data;\n}\nexports.getLocal = getLocal;\nfunction removeLocal(key) {\n const local = browser_1.getLocalStorage();\n if (local) {\n local.removeItem(key);\n }\n}\nexports.removeLocal = removeLocal;\n//# sourceMappingURL=local.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertNumberToHex = exports.convertNumberToUtf8 = exports.convertNumberToArrayBuffer = exports.convertNumberToBuffer = exports.convertHexToNumber = exports.convertHexToUtf8 = exports.convertHexToArrayBuffer = exports.convertHexToBuffer = exports.convertUtf8ToNumber = exports.convertUtf8ToHex = exports.convertUtf8ToBuffer = exports.convertUtf8ToArrayBuffer = exports.concatBuffers = exports.convertBufferToNumber = exports.convertBufferToHex = exports.convertBufferToUtf8 = exports.convertBufferToArrayBuffer = exports.concatArrayBuffers = exports.convertArrayBufferToNumber = exports.convertArrayBufferToHex = exports.convertArrayBufferToUtf8 = exports.convertArrayBufferToBuffer = void 0;\nconst tslib_1 = require(\"tslib\");\nconst bn_js_1 = tslib_1.__importDefault(require(\"bn.js\"));\nconst encUtils = tslib_1.__importStar(require(\"enc-utils\"));\nfunction convertArrayBufferToBuffer(arrBuf) {\n return encUtils.arrayToBuffer(new Uint8Array(arrBuf));\n}\nexports.convertArrayBufferToBuffer = convertArrayBufferToBuffer;\nfunction convertArrayBufferToUtf8(arrBuf) {\n return encUtils.arrayToUtf8(new Uint8Array(arrBuf));\n}\nexports.convertArrayBufferToUtf8 = convertArrayBufferToUtf8;\nfunction convertArrayBufferToHex(arrBuf, noPrefix) {\n return encUtils.arrayToHex(new Uint8Array(arrBuf), !noPrefix);\n}\nexports.convertArrayBufferToHex = convertArrayBufferToHex;\nfunction convertArrayBufferToNumber(arrBuf) {\n return encUtils.arrayToNumber(new Uint8Array(arrBuf));\n}\nexports.convertArrayBufferToNumber = convertArrayBufferToNumber;\nfunction concatArrayBuffers(...args) {\n return encUtils.hexToArray(args.map(b => encUtils.arrayToHex(new Uint8Array(b))).join(\"\")).buffer;\n}\nexports.concatArrayBuffers = concatArrayBuffers;\nfunction convertBufferToArrayBuffer(buf) {\n return encUtils.bufferToArray(buf).buffer;\n}\nexports.convertBufferToArrayBuffer = convertBufferToArrayBuffer;\nfunction convertBufferToUtf8(buf) {\n return encUtils.bufferToUtf8(buf);\n}\nexports.convertBufferToUtf8 = convertBufferToUtf8;\nfunction convertBufferToHex(buf, noPrefix) {\n return encUtils.bufferToHex(buf, !noPrefix);\n}\nexports.convertBufferToHex = convertBufferToHex;\nfunction convertBufferToNumber(buf) {\n return encUtils.bufferToNumber(buf);\n}\nexports.convertBufferToNumber = convertBufferToNumber;\nfunction concatBuffers(...args) {\n return encUtils.concatBuffers(...args);\n}\nexports.concatBuffers = concatBuffers;\nfunction convertUtf8ToArrayBuffer(utf8) {\n return encUtils.utf8ToArray(utf8).buffer;\n}\nexports.convertUtf8ToArrayBuffer = convertUtf8ToArrayBuffer;\nfunction convertUtf8ToBuffer(utf8) {\n return encUtils.utf8ToBuffer(utf8);\n}\nexports.convertUtf8ToBuffer = convertUtf8ToBuffer;\nfunction convertUtf8ToHex(utf8, noPrefix) {\n return encUtils.utf8ToHex(utf8, !noPrefix);\n}\nexports.convertUtf8ToHex = convertUtf8ToHex;\nfunction convertUtf8ToNumber(utf8) {\n return new bn_js_1.default(utf8, 10).toNumber();\n}\nexports.convertUtf8ToNumber = convertUtf8ToNumber;\nfunction convertHexToBuffer(hex) {\n return encUtils.hexToBuffer(hex);\n}\nexports.convertHexToBuffer = convertHexToBuffer;\nfunction convertHexToArrayBuffer(hex) {\n return encUtils.hexToArray(hex).buffer;\n}\nexports.convertHexToArrayBuffer = convertHexToArrayBuffer;\nfunction convertHexToUtf8(hex) {\n return encUtils.hexToUtf8(hex);\n}\nexports.convertHexToUtf8 = convertHexToUtf8;\nfunction convertHexToNumber(hex) {\n return new bn_js_1.default(encUtils.removeHexPrefix(hex), \"hex\").toNumber();\n}\nexports.convertHexToNumber = convertHexToNumber;\nfunction convertNumberToBuffer(num) {\n return encUtils.numberToBuffer(num);\n}\nexports.convertNumberToBuffer = convertNumberToBuffer;\nfunction convertNumberToArrayBuffer(num) {\n return encUtils.numberToArray(num).buffer;\n}\nexports.convertNumberToArrayBuffer = convertNumberToArrayBuffer;\nfunction convertNumberToUtf8(num) {\n return new bn_js_1.default(num).toString();\n}\nexports.convertNumberToUtf8 = convertNumberToUtf8;\nfunction convertNumberToHex(num, noPrefix) {\n const hex = encUtils.removeHexPrefix(encUtils.sanitizeHex(new bn_js_1.default(num).toString(16)));\n return noPrefix ? hex : encUtils.addHexPrefix(hex);\n}\nexports.convertNumberToHex = convertNumberToHex;\n//# sourceMappingURL=encoding.js.map","module.exports = isTypedArray\nisTypedArray.strict = isStrictTypedArray\nisTypedArray.loose = isLooseTypedArray\n\nvar toString = Object.prototype.toString\nvar names = {\n '[object Int8Array]': true\n , '[object Int16Array]': true\n , '[object Int32Array]': true\n , '[object Uint8Array]': true\n , '[object Uint8ClampedArray]': true\n , '[object Uint16Array]': true\n , '[object Uint32Array]': true\n , '[object Float32Array]': true\n , '[object Float64Array]': true\n}\n\nfunction isTypedArray(arr) {\n return (\n isStrictTypedArray(arr)\n || isLooseTypedArray(arr)\n )\n}\n\nfunction isStrictTypedArray(arr) {\n return (\n arr instanceof Int8Array\n || arr instanceof Int16Array\n || arr instanceof Int32Array\n || arr instanceof Uint8Array\n || arr instanceof Uint8ClampedArray\n || arr instanceof Uint16Array\n || arr instanceof Uint32Array\n || arr instanceof Float32Array\n || arr instanceof Float64Array\n )\n}\n\nfunction isLooseTypedArray(arr) {\n return names[toString.call(arr)]\n}\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateJsonRpcError = exports.getErrorByCode = exports.getError = exports.isValidErrorCode = exports.isReservedErrorCode = exports.isServerErrorCode = void 0;\nconst constants_1 = require(\"./constants\");\nfunction isServerErrorCode(code) {\n return code <= constants_1.SERVER_ERROR_CODE_RANGE[0] && code >= constants_1.SERVER_ERROR_CODE_RANGE[1];\n}\nexports.isServerErrorCode = isServerErrorCode;\nfunction isReservedErrorCode(code) {\n return constants_1.RESERVED_ERROR_CODES.includes(code);\n}\nexports.isReservedErrorCode = isReservedErrorCode;\nfunction isValidErrorCode(code) {\n return isServerErrorCode(code) || isReservedErrorCode(code);\n}\nexports.isValidErrorCode = isValidErrorCode;\nfunction getError(type) {\n if (!Object.keys(constants_1.STANDARD_ERROR_MAP).includes(type)) {\n return constants_1.STANDARD_ERROR_MAP[constants_1.INTERNAL_ERROR];\n }\n return constants_1.STANDARD_ERROR_MAP[type];\n}\nexports.getError = getError;\nfunction getErrorByCode(code) {\n const match = Object.values(constants_1.STANDARD_ERROR_MAP).find(e => e.code === code);\n if (!match) {\n return constants_1.STANDARD_ERROR_MAP[constants_1.INTERNAL_ERROR];\n }\n return match;\n}\nexports.getErrorByCode = getErrorByCode;\nfunction validateJsonRpcError(response) {\n if (typeof response.error.code === \"undefined\") {\n return { valid: false, error: \"Missing code for JSON-RPC error\" };\n }\n if (typeof response.error.message === \"undefined\") {\n return { valid: false, error: \"Missing message for JSON-RPC error\" };\n }\n if (!isValidErrorCode(response.error.code)) {\n return {\n valid: false,\n error: `Invalid error code for JSON-RPC error code: ${response.error.code}`,\n };\n }\n if (isReservedErrorCode(response.error.code)) {\n const error = getErrorByCode(response.error.code);\n if (error.message !== constants_1.STANDARD_ERROR_MAP[constants_1.INTERNAL_ERROR].message &&\n response.error.message === error.message) {\n return {\n valid: false,\n error: `Invalid error message for JSON-RPC error code: ${response.error.code}`,\n };\n }\n }\n return { valid: true };\n}\nexports.validateJsonRpcError = validateJsonRpcError;\n//# sourceMappingURL=error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isJsonRpcValidationInvalid = exports.isJsonRpcError = exports.isJsonRpcResult = exports.isJsonRpcResponse = exports.isJsonRpcRequest = exports.isJsonRpcPayload = void 0;\nfunction isJsonRpcPayload(payload) {\n return \"id\" in payload && \"jsonrpc\" in payload && payload.jsonrpc === \"2.0\";\n}\nexports.isJsonRpcPayload = isJsonRpcPayload;\nfunction isJsonRpcRequest(payload) {\n return isJsonRpcPayload(payload) && \"method\" in payload;\n}\nexports.isJsonRpcRequest = isJsonRpcRequest;\nfunction isJsonRpcResponse(payload) {\n return isJsonRpcPayload(payload) && (\"result\" in payload || \"error\" in payload);\n}\nexports.isJsonRpcResponse = isJsonRpcResponse;\nfunction isJsonRpcResult(payload) {\n return \"result\" in payload;\n}\nexports.isJsonRpcResult = isJsonRpcResult;\nfunction isJsonRpcError(payload) {\n return \"error\" in payload;\n}\nexports.isJsonRpcError = isJsonRpcError;\nfunction isJsonRpcValidationInvalid(validation) {\n return \"error\" in validation && validation.valid === false;\n}\nexports.isJsonRpcValidationInvalid = isJsonRpcValidationInvalid;\n//# sourceMappingURL=validators.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatQueryString = exports.parseQueryString = exports.appendToQueryString = exports.getQueryString = void 0;\nconst tslib_1 = require(\"tslib\");\nconst queryStringUtils = tslib_1.__importStar(require(\"query-string\"));\nfunction getQueryString(url) {\n const pathEnd = url.indexOf(\"?\") !== -1 ? url.indexOf(\"?\") : undefined;\n const queryString = typeof pathEnd !== \"undefined\" ? url.substr(pathEnd) : \"\";\n return queryString;\n}\nexports.getQueryString = getQueryString;\nfunction appendToQueryString(queryString, newQueryParams) {\n let queryParams = parseQueryString(queryString);\n queryParams = Object.assign(Object.assign({}, queryParams), newQueryParams);\n queryString = formatQueryString(queryParams);\n return queryString;\n}\nexports.appendToQueryString = appendToQueryString;\nfunction parseQueryString(queryString) {\n return queryStringUtils.parse(queryString);\n}\nexports.parseQueryString = parseQueryString;\nfunction formatQueryString(queryParams) {\n return queryStringUtils.stringify(queryParams);\n}\nexports.formatQueryString = formatQueryString;\n//# sourceMappingURL=url.js.map","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./browser\"), exports);\n__exportStar(require(\"./fallback\"), exports);\n__exportStar(require(\"./node\"), exports);\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","var ECLevel = require('./error-correction-level')\r\n\r\nvar EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nvar EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n","/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n","var numeric = '[0-9]+'\nvar alphanumeric = '[A-Z $%*+\\\\-./:]+'\nvar kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nvar byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nvar TEST_KANJI = new RegExp('^' + kanji + '$')\nvar TEST_NUMERIC = new RegExp('^' + numeric + '$')\nvar TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n","function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n var hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n var hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n var margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0 ? 4 : options.margin\n\n var width = options.width && options.width >= 21 ? options.width : undefined\n var scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n var scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n var size = qr.modules.size\n var data = qr.modules.data\n var scale = exports.getScale(size, opts)\n var symbolSize = Math.floor((size + opts.margin * 2) * scale)\n var scaledMargin = opts.margin * scale\n var palette = [opts.color.light, opts.color.dark]\n\n for (var i = 0; i < symbolSize; i++) {\n for (var j = 0; j < symbolSize; j++) {\n var posDst = (i * symbolSize + j) * 4\n var pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n var iSrc = Math.floor((i - scaledMargin) / scale)\n var jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","var ClientRequest = require('./lib/request')\nvar response = require('./lib/response')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.ClientRequest = ClientRequest\nhttp.IncomingMessage = response.IncomingMessage\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.globalAgent = new http.Agent()\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]","exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.writableStream = isFunction(global.WritableStream)\n\nexports.abortController = isFunction(global.AbortController)\n\nexports.blobConstructor = false\ntry {\n\tnew Blob([new ArrayBuffer(1)])\n\texports.blobConstructor = true\n} catch (e) {}\n\n// The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\nvar xhr\nfunction getXHR () {\n\t// Cache the xhr value\n\tif (xhr !== undefined) return xhr\n\n\tif (global.XMLHttpRequest) {\n\t\txhr = new global.XMLHttpRequest()\n\t\t// If XDomainRequest is available (ie only, where xhr might not work\n\t\t// cross domain), use the page location. Otherwise use example.com\n\t\t// Note: this doesn't actually make an http request.\n\t\ttry {\n\t\t\txhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')\n\t\t} catch(e) {\n\t\t\txhr = null\n\t\t}\n\t} else {\n\t\t// Service workers don't have XHR\n\t\txhr = null\n\t}\n\treturn xhr\n}\n\nfunction checkTypeSupport (type) {\n\tvar xhr = getXHR()\n\tif (!xhr) return false\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)\n\n// If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\nexports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))\n\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&\n\tcheckTypeSupport('moz-chunked-arraybuffer')\n\n// If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)\n\nexports.vbArray = isFunction(global.VBArray)\n\nfunction isFunction (value) {\n\treturn typeof value === 'function'\n}\n\nxhr = null // Help gc\n","var capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t\n\t\tresponse.headers.forEach(function (header, key){\n\t\t\tself.headers[key.toLowerCase()] = header\n\t\t\tself.rawHeaders.push(key, header)\n\t\t})\n\n\t\tif (capability.writableStream) {\n\t\t\tvar writable = new WritableStream({\n\t\t\t\twrite: function (chunk) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tif (self._destroyed) {\n\t\t\t\t\t\t\treject()\n\t\t\t\t\t\t} else if(self.push(new Buffer(chunk))) {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._resumeFetch = resolve\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.push(null)\n\t\t\t\t},\n\t\t\t\tabort: function (err) {\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tresponse.body.pipeTo(writable).catch(function (err) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t} catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\t\t}\n\t\t// fallback for when writableStream or pipeTo aren't available\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tif (result.done) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(new Buffer(result.value))\n\t\t\t\tread()\n\t\t\t}).catch(function (err) {\n\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\tif (!self._destroyed)\n\t\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t}\n\t\tread()\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {\n\tvar self = this\n\n\tvar resolve = self._resumeFetch\n\tif (resolve) {\n\t\tself._resumeFetch = null\n\t\tresolve()\n\t}\n}\n\nIncomingMessage.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text:vbarray': // For IE9\n\t\t\tif (xhr.readyState !== rStates.DONE)\n\t\t\t\tbreak\n\t\t\ttry {\n\t\t\t\t// This fails in IE8\n\t\t\t\tresponse = new global.VBArray(xhr.responseBody).toArray()\n\t\t\t} catch (e) {}\n\t\t\tif (response !== null) {\n\t\t\t\tself.push(new Buffer(response))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Falls through in IE8\t\n\t\tcase 'text':\n\t\t\ttry { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n\t\t\t\tresponse = xhr.responseText\n\t\t\t} catch (e) {\n\t\t\t\tself._mode = 'text:vbarray'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = new Buffer(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE || !xhr.response)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tself.push(null)\n\t}\n}\n","/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param {String} str the string input value\n * @return {Boolean} a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nmodule.exports = function isHexPrefixed(str) {\n if (typeof str !== 'string') {\n throw new Error(\"[is-hex-prefixed] value must be type 'string', is currently type \" + (typeof str) + \", while checking isHexPrefixed.\");\n }\n\n return str.slice(0, 2) === '0x';\n}\n","const pify = require('pify')\nconst BaseBlockTracker = require('./base')\n\nconst sec = 1000\n\nclass PollingBlockTracker extends BaseBlockTracker {\n\n constructor (opts = {}) {\n // parse + validate args\n if (!opts.provider) throw new Error('PollingBlockTracker - no provider specified.')\n const pollingInterval = opts.pollingInterval || 20 * sec\n const retryTimeout = opts.retryTimeout || pollingInterval / 10\n const keepEventLoopActive = opts.keepEventLoopActive !== undefined ? opts.keepEventLoopActive : true\n const setSkipCacheFlag = opts.setSkipCacheFlag || false\n // BaseBlockTracker constructor\n super(Object.assign({\n blockResetDuration: pollingInterval,\n }, opts))\n // config\n this._provider = opts.provider\n this._pollingInterval = pollingInterval\n this._retryTimeout = retryTimeout\n this._keepEventLoopActive = keepEventLoopActive\n this._setSkipCacheFlag = setSkipCacheFlag\n }\n\n //\n // public\n //\n\n // trigger block polling\n async checkForLatestBlock () {\n await this._updateLatestBlock()\n return await this.getLatestBlock()\n }\n\n //\n // private\n //\n\n _start () {\n this._performSync().catch(err => this.emit('error', err))\n }\n\n async _performSync () {\n while (this._isRunning) {\n try {\n await this._updateLatestBlock()\n await timeout(this._pollingInterval, !this._keepEventLoopActive)\n } catch (err) {\n const newErr = new Error(`PollingBlockTracker - encountered an error while attempting to update latest block:\\n${err.stack}`)\n try {\n this.emit('error', newErr)\n } catch (emitErr) {\n console.error(newErr)\n }\n await timeout(this._retryTimeout, !this._keepEventLoopActive)\n }\n }\n }\n\n async _updateLatestBlock () {\n // fetch + set latest block\n const latestBlock = await this._fetchLatestBlock()\n this._newPotentialLatest(latestBlock)\n }\n\n async _fetchLatestBlock () {\n const req = { jsonrpc: \"2.0\", id: 1, method: 'eth_blockNumber', params: [] }\n if (this._setSkipCacheFlag) req.skipCache = true\n const res = await pify((cb) => this._provider.sendAsync(req, cb))()\n if (res.error) throw new Error(`PollingBlockTracker - encountered error fetching block:\\n${res.error}`)\n return res.result\n }\n\n}\n\nmodule.exports = PollingBlockTracker\n\nfunction timeout (duration, unref) {\n return new Promise(resolve => {\n const timoutRef = setTimeout(resolve, duration)\n // don't keep process open\n if (timoutRef.unref && unref) {\n timoutRef.unref()\n }\n })\n}\n","'use strict';\n\nconst processFn = (fn, opts) => function () {\n\tconst P = opts.promiseModule;\n\tconst args = new Array(arguments.length);\n\n\tfor (let i = 0; i < arguments.length; i++) {\n\t\targs[i] = arguments[i];\n\t}\n\n\treturn new P((resolve, reject) => {\n\t\tif (opts.errorFirst) {\n\t\t\targs.push(function (err, result) {\n\t\t\t\tif (opts.multiArgs) {\n\t\t\t\t\tconst results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (let i = 1; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i - 1] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tresults.unshift(err);\n\t\t\t\t\t\treject(results);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(results);\n\t\t\t\t\t}\n\t\t\t\t} else if (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\targs.push(function (result) {\n\t\t\t\tif (opts.multiArgs) {\n\t\t\t\t\tconst results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (let i = 0; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(results);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfn.apply(this, args);\n\t});\n};\n\nmodule.exports = (obj, opts) => {\n\topts = Object.assign({\n\t\texclude: [/.+(Sync|Stream)$/],\n\t\terrorFirst: true,\n\t\tpromiseModule: Promise\n\t}, opts);\n\n\tconst filter = key => {\n\t\tconst match = pattern => typeof pattern === 'string' ? key === pattern : pattern.test(key);\n\t\treturn opts.include ? opts.include.some(match) : !opts.exclude.some(match);\n\t};\n\n\tlet ret;\n\tif (typeof obj === 'function') {\n\t\tret = function () {\n\t\t\tif (opts.excludeMain) {\n\t\t\t\treturn obj.apply(this, arguments);\n\t\t\t}\n\n\t\t\treturn processFn(obj, opts).apply(this, arguments);\n\t\t};\n\t} else {\n\t\tret = Object.create(Object.getPrototypeOf(obj));\n\t}\n\n\tfor (const key in obj) { // eslint-disable-line guard-for-in\n\t\tconst x = obj[key];\n\t\tret[key] = typeof x === 'function' && filter(key) ? processFn(x, opts) : x;\n\t}\n\n\treturn ret;\n};\n","const extend = require('xtend')\nconst createRandomId = require('json-rpc-random-id')()\n\nmodule.exports = EthQuery\n\n\nfunction EthQuery(provider){\n const self = this\n self.currentProvider = provider\n}\n\n//\n// base queries\n//\n\n// default block\nEthQuery.prototype.getBalance = generateFnWithDefaultBlockFor(2, 'eth_getBalance')\nEthQuery.prototype.getCode = generateFnWithDefaultBlockFor(2, 'eth_getCode')\nEthQuery.prototype.getTransactionCount = generateFnWithDefaultBlockFor(2, 'eth_getTransactionCount')\nEthQuery.prototype.getStorageAt = generateFnWithDefaultBlockFor(3, 'eth_getStorageAt')\nEthQuery.prototype.call = generateFnWithDefaultBlockFor(2, 'eth_call')\n// standard\nEthQuery.prototype.protocolVersion = generateFnFor('eth_protocolVersion')\nEthQuery.prototype.syncing = generateFnFor('eth_syncing')\nEthQuery.prototype.coinbase = generateFnFor('eth_coinbase')\nEthQuery.prototype.mining = generateFnFor('eth_mining')\nEthQuery.prototype.hashrate = generateFnFor('eth_hashrate')\nEthQuery.prototype.gasPrice = generateFnFor('eth_gasPrice')\nEthQuery.prototype.accounts = generateFnFor('eth_accounts')\nEthQuery.prototype.blockNumber = generateFnFor('eth_blockNumber')\nEthQuery.prototype.getBlockTransactionCountByHash = generateFnFor('eth_getBlockTransactionCountByHash')\nEthQuery.prototype.getBlockTransactionCountByNumber = generateFnFor('eth_getBlockTransactionCountByNumber')\nEthQuery.prototype.getUncleCountByBlockHash = generateFnFor('eth_getUncleCountByBlockHash')\nEthQuery.prototype.getUncleCountByBlockNumber = generateFnFor('eth_getUncleCountByBlockNumber')\nEthQuery.prototype.sign = generateFnFor('eth_sign')\nEthQuery.prototype.sendTransaction = generateFnFor('eth_sendTransaction')\nEthQuery.prototype.sendRawTransaction = generateFnFor('eth_sendRawTransaction')\nEthQuery.prototype.estimateGas = generateFnFor('eth_estimateGas')\nEthQuery.prototype.getBlockByHash = generateFnFor('eth_getBlockByHash')\nEthQuery.prototype.getBlockByNumber = generateFnFor('eth_getBlockByNumber')\nEthQuery.prototype.getTransactionByHash = generateFnFor('eth_getTransactionByHash')\nEthQuery.prototype.getTransactionByBlockHashAndIndex = generateFnFor('eth_getTransactionByBlockHashAndIndex')\nEthQuery.prototype.getTransactionByBlockNumberAndIndex = generateFnFor('eth_getTransactionByBlockNumberAndIndex')\nEthQuery.prototype.getTransactionReceipt = generateFnFor('eth_getTransactionReceipt')\nEthQuery.prototype.getUncleByBlockHashAndIndex = generateFnFor('eth_getUncleByBlockHashAndIndex')\nEthQuery.prototype.getUncleByBlockNumberAndIndex = generateFnFor('eth_getUncleByBlockNumberAndIndex')\nEthQuery.prototype.getCompilers = generateFnFor('eth_getCompilers')\nEthQuery.prototype.compileLLL = generateFnFor('eth_compileLLL')\nEthQuery.prototype.compileSolidity = generateFnFor('eth_compileSolidity')\nEthQuery.prototype.compileSerpent = generateFnFor('eth_compileSerpent')\nEthQuery.prototype.newFilter = generateFnFor('eth_newFilter')\nEthQuery.prototype.newBlockFilter = generateFnFor('eth_newBlockFilter')\nEthQuery.prototype.newPendingTransactionFilter = generateFnFor('eth_newPendingTransactionFilter')\nEthQuery.prototype.uninstallFilter = generateFnFor('eth_uninstallFilter')\nEthQuery.prototype.getFilterChanges = generateFnFor('eth_getFilterChanges')\nEthQuery.prototype.getFilterLogs = generateFnFor('eth_getFilterLogs')\nEthQuery.prototype.getLogs = generateFnFor('eth_getLogs')\nEthQuery.prototype.getWork = generateFnFor('eth_getWork')\nEthQuery.prototype.submitWork = generateFnFor('eth_submitWork')\nEthQuery.prototype.submitHashrate = generateFnFor('eth_submitHashrate')\n\n// network level\n\nEthQuery.prototype.sendAsync = function(opts, cb){\n const self = this\n self.currentProvider.sendAsync(createPayload(opts), function(err, response){\n if (!err && response.error) err = new Error('EthQuery - RPC Error - '+response.error.message)\n if (err) return cb(err)\n cb(null, response.result)\n })\n}\n\n// util\n\nfunction generateFnFor(methodName){\n return function(){\n const self = this\n var args = [].slice.call(arguments)\n var cb = args.pop()\n self.sendAsync({\n method: methodName,\n params: args,\n }, cb)\n }\n}\n\nfunction generateFnWithDefaultBlockFor(argCount, methodName){\n return function(){\n const self = this\n var args = [].slice.call(arguments)\n var cb = args.pop()\n // set optional default block param\n if (args.length < argCount) args.push('latest')\n self.sendAsync({\n method: methodName,\n params: args,\n }, cb)\n }\n}\n\nfunction createPayload(data){\n return extend({\n // defaults\n id: createRandomId(),\n jsonrpc: '2.0',\n params: [],\n // user-specified\n }, data)\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _doParallel = require('./internal/doParallel');\n\nvar _doParallel2 = _interopRequireDefault(_doParallel);\n\nvar _map = require('./internal/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callback\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array. The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @example\n *\n * async.map(['file1','file2','file3'], fs.stat, function(err, results) {\n * // results is now an array of stats for each file\n * });\n */\nexports.default = (0, _doParallel2.default)(_map2.default);\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (coll, iteratee, callback) {\n var eachOfImplementation = (0, _isArrayLike2.default)(coll) ? eachOfArrayLike : eachOfGeneric;\n eachOfImplementation(coll, (0, _wrapAsync2.default)(iteratee), callback);\n};\n\nvar _isArrayLike = require('lodash/isArrayLike');\n\nvar _isArrayLike2 = _interopRequireDefault(_isArrayLike);\n\nvar _breakLoop = require('./internal/breakLoop');\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nvar _eachOfLimit = require('./eachOfLimit');\n\nvar _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);\n\nvar _doLimit = require('./internal/doLimit');\n\nvar _doLimit2 = _interopRequireDefault(_doLimit);\n\nvar _noop = require('lodash/noop');\n\nvar _noop2 = _interopRequireDefault(_noop);\n\nvar _once = require('./internal/once');\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _onlyOnce = require('./internal/onlyOnce');\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = require('./internal/wrapAsync');\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// eachOf implementation optimized for array-likes\nfunction eachOfArrayLike(coll, iteratee, callback) {\n callback = (0, _once2.default)(callback || _noop2.default);\n var index = 0,\n completed = 0,\n length = coll.length;\n if (length === 0) {\n callback(null);\n }\n\n function iteratorCallback(err, value) {\n if (err) {\n callback(err);\n } else if (++completed === length || value === _breakLoop2.default) {\n callback(null);\n }\n }\n\n for (; index < length; index++) {\n iteratee(coll[index], index, (0, _onlyOnce2.default)(iteratorCallback));\n }\n}\n\n// a generic version of eachOf which can handle array, object, and iterator cases.\nvar eachOfGeneric = (0, _doLimit2.default)(_eachOfLimit2.default, Infinity);\n\n/**\n * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n * to the iteratee.\n *\n * @name eachOf\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEachOf\n * @category Collection\n * @see [async.each]{@link module:Collections.each}\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each\n * item in `coll`.\n * The `key` is the item's key, or index in the case of an array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @example\n *\n * var obj = {dev: \"/dev.json\", test: \"/test.json\", prod: \"/prod.json\"};\n * var configs = {};\n *\n * async.forEachOf(obj, function (value, key, callback) {\n * fs.readFile(__dirname + value, \"utf8\", function (err, data) {\n * if (err) return callback(err);\n * try {\n * configs[key] = JSON.parse(data);\n * } catch (e) {\n * return callback(e);\n * }\n * callback();\n * });\n * }, function (err) {\n * if (err) console.error(err.message);\n * // configs is now a map of JSON data\n * doSomethingWith(configs);\n * });\n */\nmodule.exports = exports['default'];","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nexports.default = {};\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _eachOfLimit;\n\nvar _noop = require('lodash/noop');\n\nvar _noop2 = _interopRequireDefault(_noop);\n\nvar _once = require('./once');\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _iterator = require('./iterator');\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _onlyOnce = require('./onlyOnce');\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _breakLoop = require('./breakLoop');\n\nvar _breakLoop2 = _interopRequireDefault(_breakLoop);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _eachOfLimit(limit) {\n return function (obj, iteratee, callback) {\n callback = (0, _once2.default)(callback || _noop2.default);\n if (limit <= 0 || !obj) {\n return callback(null);\n }\n var nextElem = (0, _iterator2.default)(obj);\n var done = false;\n var running = 0;\n var looping = false;\n\n function iterateeCallback(err, value) {\n running -= 1;\n if (err) {\n done = true;\n callback(err);\n } else if (value === _breakLoop2.default || done && running <= 0) {\n done = true;\n return callback(null);\n } else if (!looping) {\n replenish();\n }\n }\n\n function replenish() {\n looping = true;\n while (running < limit && !done) {\n var elem = nextElem();\n if (elem === null) {\n done = true;\n if (running <= 0) {\n callback(null);\n }\n return;\n }\n running += 1;\n iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback));\n }\n looping = false;\n }\n\n replenish();\n };\n}\nmodule.exports = exports['default'];","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = doLimit;\nfunction doLimit(fn, limit) {\n return function (iterable, iteratee, callback) {\n return fn(iterable, limit, iteratee, callback);\n };\n}\nmodule.exports = exports[\"default\"];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _eachLimit = require('./eachLimit');\n\nvar _eachLimit2 = _interopRequireDefault(_eachLimit);\n\nvar _doLimit = require('./internal/doLimit');\n\nvar _doLimit2 = _interopRequireDefault(_doLimit);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n */\nexports.default = (0, _doLimit2.default)(_eachLimit2.default, 1);\nmodule.exports = exports['default'];","const stringify = require('json-stable-stringify')\n\nmodule.exports = {\n cacheIdentifierForPayload: cacheIdentifierForPayload,\n canCache: canCache,\n blockTagForPayload: blockTagForPayload,\n paramsWithoutBlockTag: paramsWithoutBlockTag,\n blockTagParamIndex: blockTagParamIndex,\n cacheTypeForPayload: cacheTypeForPayload,\n}\n\nfunction cacheIdentifierForPayload(payload, opts = {}){\n if (!canCache(payload)) return null\n const { includeBlockRef } = opts\n const params = includeBlockRef ? payload.params : paramsWithoutBlockTag(payload)\n return payload.method + ':' + stringify(params)\n}\n\nfunction canCache(payload){\n return cacheTypeForPayload(payload) !== 'never'\n}\n\nfunction blockTagForPayload(payload){\n var index = blockTagParamIndex(payload);\n\n // Block tag param not passed.\n if (index >= payload.params.length) {\n return null;\n }\n\n return payload.params[index];\n}\n\nfunction paramsWithoutBlockTag(payload){\n var index = blockTagParamIndex(payload);\n\n // Block tag param not passed.\n if (index >= payload.params.length) {\n return payload.params;\n }\n\n // eth_getBlockByNumber has the block tag first, then the optional includeTx? param\n if (payload.method === 'eth_getBlockByNumber') {\n return payload.params.slice(1);\n }\n\n return payload.params.slice(0,index);\n}\n\nfunction blockTagParamIndex(payload){\n switch(payload.method) {\n // blockTag is third param\n case 'eth_getStorageAt':\n return 2\n // blockTag is second param\n case 'eth_getBalance':\n case 'eth_getCode':\n case 'eth_getTransactionCount':\n case 'eth_call':\n case 'eth_estimateGas':\n return 1\n // blockTag is first param\n case 'eth_getBlockByNumber':\n return 0\n // there is no blockTag\n default:\n return undefined\n }\n}\n\nfunction cacheTypeForPayload(payload) {\n switch (payload.method) {\n // cache permanently\n case 'web3_clientVersion':\n case 'web3_sha3':\n case 'eth_protocolVersion':\n case 'eth_getBlockTransactionCountByHash':\n case 'eth_getUncleCountByBlockHash':\n case 'eth_getCode':\n case 'eth_getBlockByHash':\n case 'eth_getTransactionByHash':\n case 'eth_getTransactionByBlockHashAndIndex':\n case 'eth_getTransactionReceipt':\n case 'eth_getUncleByBlockHashAndIndex':\n case 'eth_getCompilers':\n case 'eth_compileLLL':\n case 'eth_compileSolidity':\n case 'eth_compileSerpent':\n case 'shh_version':\n return 'perma'\n\n // cache until fork\n case 'eth_getBlockByNumber':\n case 'eth_getBlockTransactionCountByNumber':\n case 'eth_getUncleCountByBlockNumber':\n case 'eth_getTransactionByBlockNumberAndIndex':\n case 'eth_getUncleByBlockNumberAndIndex':\n return 'fork'\n\n // cache for block\n case 'eth_gasPrice':\n case 'eth_getBalance':\n case 'eth_getStorageAt':\n case 'eth_getTransactionCount':\n case 'eth_call':\n case 'eth_estimateGas':\n case 'eth_getFilterLogs':\n case 'eth_getLogs':\n case 'eth_blockNumber':\n return 'block'\n\n // never cache\n case 'net_version':\n case 'net_peerCount':\n case 'net_listening':\n case 'eth_syncing':\n case 'eth_sign':\n case 'eth_coinbase':\n case 'eth_mining':\n case 'eth_hashrate':\n case 'eth_accounts':\n case 'eth_sendTransaction':\n case 'eth_sendRawTransaction':\n case 'eth_newFilter':\n case 'eth_newBlockFilter':\n case 'eth_newPendingTransactionFilter':\n case 'eth_uninstallFilter':\n case 'eth_getFilterChanges':\n case 'eth_getWork':\n case 'eth_submitWork':\n case 'eth_submitHashrate':\n case 'db_putString':\n case 'db_getString':\n case 'db_putHex':\n case 'db_getHex':\n case 'shh_post':\n case 'shh_newIdentity':\n case 'shh_hasIdentity':\n case 'shh_newGroup':\n case 'shh_addToGroup':\n case 'shh_newFilter':\n case 'shh_uninstallFilter':\n case 'shh_getFilterChanges':\n case 'shh_getMessages':\n return 'never'\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getUniqueId = void 0;\n// uint32 (two's complement) max\n// more conservative than Number.MAX_SAFE_INTEGER\nconst MAX = 4294967295;\nlet idCounter = Math.floor(Math.random() * MAX);\nfunction getUniqueId() {\n idCounter = (idCounter + 1) % MAX;\n return idCounter;\n}\nexports.getUniqueId = getUniqueId;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0VW5pcXVlSWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0VW5pcXVlSWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0NBQWdDO0FBQ2hDLGlEQUFpRDtBQUNqRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUM7QUFDdkIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFFaEQsU0FBZ0IsV0FBVztJQUN6QixTQUFTLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2xDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFIRCxrQ0FHQyJ9","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsonRpcEngine = void 0;\nconst safe_event_emitter_1 = __importDefault(require(\"@metamask/safe-event-emitter\"));\nconst eth_rpc_errors_1 = require(\"eth-rpc-errors\");\n/**\n * A JSON-RPC request and response processor.\n * Give it a stack of middleware, pass it requests, and get back responses.\n */\nclass JsonRpcEngine extends safe_event_emitter_1.default {\n constructor() {\n super();\n this._middleware = [];\n }\n /**\n * Add a middleware function to the engine's middleware stack.\n *\n * @param middleware - The middleware function to add.\n */\n push(middleware) {\n this._middleware.push(middleware);\n }\n handle(req, cb) {\n if (cb && typeof cb !== 'function') {\n throw new Error('\"callback\" must be a function if provided.');\n }\n if (Array.isArray(req)) {\n if (cb) {\n return this._handleBatch(req, cb);\n }\n return this._handleBatch(req);\n }\n if (cb) {\n return this._handle(req, cb);\n }\n return this._promiseHandle(req);\n }\n /**\n * Returns this engine as a middleware function that can be pushed to other\n * engines.\n *\n * @returns This engine as a middleware function.\n */\n asMiddleware() {\n return async (req, res, next, end) => {\n try {\n const [middlewareError, isComplete, returnHandlers,] = await JsonRpcEngine._runAllMiddleware(req, res, this._middleware);\n if (isComplete) {\n await JsonRpcEngine._runReturnHandlers(returnHandlers);\n return end(middlewareError);\n }\n return next(async (handlerCallback) => {\n try {\n await JsonRpcEngine._runReturnHandlers(returnHandlers);\n }\n catch (error) {\n return handlerCallback(error);\n }\n return handlerCallback();\n });\n }\n catch (error) {\n return end(error);\n }\n };\n }\n async _handleBatch(reqs, cb) {\n // The order here is important\n try {\n // 2. Wait for all requests to finish, or throw on some kind of fatal\n // error\n const responses = await Promise.all(\n // 1. Begin executing each request in the order received\n reqs.map(this._promiseHandle.bind(this)));\n // 3. Return batch response\n if (cb) {\n return cb(null, responses);\n }\n return responses;\n }\n catch (error) {\n if (cb) {\n return cb(error);\n }\n throw error;\n }\n }\n /**\n * A promise-wrapped _handle.\n */\n _promiseHandle(req) {\n return new Promise((resolve) => {\n this._handle(req, (_err, res) => {\n // There will always be a response, and it will always have any error\n // that is caught and propagated.\n resolve(res);\n });\n });\n }\n /**\n * Ensures that the request object is valid, processes it, and passes any\n * error and the response object to the given callback.\n *\n * Does not reject.\n */\n async _handle(callerReq, cb) {\n if (!callerReq ||\n Array.isArray(callerReq) ||\n typeof callerReq !== 'object') {\n const error = new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.invalidRequest, `Requests must be plain objects. Received: ${typeof callerReq}`, { request: callerReq });\n return cb(error, { id: undefined, jsonrpc: '2.0', error });\n }\n if (typeof callerReq.method !== 'string') {\n const error = new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.invalidRequest, `Must specify a string method. Received: ${typeof callerReq.method}`, { request: callerReq });\n return cb(error, { id: callerReq.id, jsonrpc: '2.0', error });\n }\n const req = Object.assign({}, callerReq);\n const res = {\n id: req.id,\n jsonrpc: req.jsonrpc,\n };\n let error = null;\n try {\n await this._processRequest(req, res);\n }\n catch (_error) {\n // A request handler error, a re-thrown middleware error, or something\n // unexpected.\n error = _error;\n }\n if (error) {\n // Ensure no result is present on an errored response\n delete res.result;\n if (!res.error) {\n res.error = eth_rpc_errors_1.serializeError(error);\n }\n }\n return cb(error, res);\n }\n /**\n * For the given request and response, runs all middleware and their return\n * handlers, if any, and ensures that internal request processing semantics\n * are satisfied.\n */\n async _processRequest(req, res) {\n const [error, isComplete, returnHandlers,] = await JsonRpcEngine._runAllMiddleware(req, res, this._middleware);\n // Throw if \"end\" was not called, or if the response has neither a result\n // nor an error.\n JsonRpcEngine._checkForCompletion(req, res, isComplete);\n // The return handlers should run even if an error was encountered during\n // middleware processing.\n await JsonRpcEngine._runReturnHandlers(returnHandlers);\n // Now we re-throw the middleware processing error, if any, to catch it\n // further up the call chain.\n if (error) {\n throw error;\n }\n }\n /**\n * Serially executes the given stack of middleware.\n *\n * @returns An array of any error encountered during middleware execution,\n * a boolean indicating whether the request was completed, and an array of\n * middleware-defined return handlers.\n */\n static async _runAllMiddleware(req, res, middlewareStack) {\n const returnHandlers = [];\n let error = null;\n let isComplete = false;\n // Go down stack of middleware, call and collect optional returnHandlers\n for (const middleware of middlewareStack) {\n [error, isComplete] = await JsonRpcEngine._runMiddleware(req, res, middleware, returnHandlers);\n if (isComplete) {\n break;\n }\n }\n return [error, isComplete, returnHandlers.reverse()];\n }\n /**\n * Runs an individual middleware.\n *\n * @returns An array of any error encountered during middleware exection,\n * and a boolean indicating whether the request should end.\n */\n static _runMiddleware(req, res, middleware, returnHandlers) {\n return new Promise((resolve) => {\n const end = (err) => {\n const error = err || res.error;\n if (error) {\n res.error = eth_rpc_errors_1.serializeError(error);\n }\n // True indicates that the request should end\n resolve([error, true]);\n };\n const next = (returnHandler) => {\n if (res.error) {\n end(res.error);\n }\n else {\n if (returnHandler) {\n if (typeof returnHandler !== 'function') {\n end(new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: \"next\" return handlers must be functions. ` +\n `Received \"${typeof returnHandler}\" for request:\\n${jsonify(req)}`, { request: req }));\n }\n returnHandlers.push(returnHandler);\n }\n // False indicates that the request should not end\n resolve([null, false]);\n }\n };\n try {\n middleware(req, res, next, end);\n }\n catch (error) {\n end(error);\n }\n });\n }\n /**\n * Serially executes array of return handlers. The request and response are\n * assumed to be in their scope.\n */\n static async _runReturnHandlers(handlers) {\n for (const handler of handlers) {\n await new Promise((resolve, reject) => {\n handler((err) => (err ? reject(err) : resolve()));\n });\n }\n }\n /**\n * Throws an error if the response has neither a result nor an error, or if\n * the \"isComplete\" flag is falsy.\n */\n static _checkForCompletion(req, res, isComplete) {\n if (!('result' in res) && !('error' in res)) {\n throw new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: Response has no error or result for request:\\n${jsonify(req)}`, { request: req });\n }\n if (!isComplete) {\n throw new eth_rpc_errors_1.EthereumRpcError(eth_rpc_errors_1.errorCodes.rpc.internal, `JsonRpcEngine: Nothing ended request:\\n${jsonify(req)}`, { request: req });\n }\n }\n}\nexports.JsonRpcEngine = JsonRpcEngine;\nfunction jsonify(request) {\n return JSON.stringify(request, null, 2);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSnNvblJwY0VuZ2luZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Kc29uUnBjRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNGQUE0RDtBQUM1RCxtREFBOEU7QUF1RjlFOzs7R0FHRztBQUNILE1BQWEsYUFBYyxTQUFRLDRCQUFnQjtJQUdqRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLENBQU8sVUFBbUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBaUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUEyQ0QsTUFBTSxDQUFDLEdBQVksRUFBRSxFQUFRO1FBQzNCLElBQUksRUFBRSxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNuQztZQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjtRQUVELElBQUksRUFBRSxFQUFFO1lBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQThCLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDekQ7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBOEIsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVk7UUFDVixPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNuQyxJQUFJ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","module.exports = stringify\nstringify.default = stringify\nstringify.stable = deterministicStringify\nstringify.stableStringify = deterministicStringify\n\nvar LIMIT_REPLACE_NODE = '[...]'\nvar CIRCULAR_REPLACE_NODE = '[Circular]'\n\nvar arr = []\nvar replacerStack = []\n\nfunction defaultOptions () {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER\n }\n}\n\n// Regular stringify\nfunction stringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n decirc(obj, '', 0, [], undefined, 0, options)\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer)\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction setReplace (replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k)\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace })\n arr.push([parent, k, val, propertyDescriptor])\n } else {\n replacerStack.push([val, k, replace])\n }\n } else {\n parent[k] = replace\n arr.push([parent, k, val])\n }\n}\n\nfunction decirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n var keys = Object.keys(val)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n decirc(val[key], key, i, stack, val, depth, options)\n }\n }\n stack.pop()\n }\n}\n\n// Stable-stringify\nfunction compareFunction (a, b) {\n if (a < b) {\n return -1\n }\n if (a > b) {\n return 1\n }\n return 0\n}\n\nfunction deterministicStringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer)\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return\n }\n } catch (_) {\n return\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {}\n var keys = Object.keys(val).sort(compareFunction)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n deterministicDecirc(val[key], key, i, stack, val, depth, options)\n tmp[key] = val[key]\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val])\n parent[k] = tmp\n } else {\n return tmp\n }\n }\n stack.pop()\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues (replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v\n }\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i]\n if (part[1] === key && part[0] === val) {\n val = part[2]\n replacerStack.splice(i, 1)\n break\n }\n }\n }\n return replacer.call(this, key, val)\n }\n}\n","// for backwards compat\nmodule.exports = require('json-rpc-engine/src/createScaffoldMiddleware')\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (tasks, callback) {\n callback = (0, _once2.default)(callback || _noop2.default);\n if (!(0, _isArray2.default)(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n if (!tasks.length) return callback();\n var taskIndex = 0;\n\n function nextTask(args) {\n var task = (0, _wrapAsync2.default)(tasks[taskIndex++]);\n args.push((0, _onlyOnce2.default)(next));\n task.apply(null, args);\n }\n\n function next(err /*, ...args*/) {\n if (err || taskIndex === tasks.length) {\n return callback.apply(null, arguments);\n }\n nextTask((0, _slice2.default)(arguments, 1));\n }\n\n nextTask([]);\n};\n\nvar _isArray = require('lodash/isArray');\n\nvar _isArray2 = _interopRequireDefault(_isArray);\n\nvar _noop = require('lodash/noop');\n\nvar _noop2 = _interopRequireDefault(_noop);\n\nvar _once = require('./internal/once');\n\nvar _once2 = _interopRequireDefault(_once);\n\nvar _slice = require('./internal/slice');\n\nvar _slice2 = _interopRequireDefault(_slice);\n\nvar _onlyOnce = require('./internal/onlyOnce');\n\nvar _onlyOnce2 = _interopRequireDefault(_onlyOnce);\n\nvar _wrapAsync = require('./internal/wrapAsync');\n\nvar _wrapAsync2 = _interopRequireDefault(_wrapAsync);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = exports['default'];\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns undefined\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = parallelLimit;\n\nvar _eachOf = require('./eachOf');\n\nvar _eachOf2 = _interopRequireDefault(_eachOf);\n\nvar _parallel = require('./internal/parallel');\n\nvar _parallel2 = _interopRequireDefault(_parallel);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Run the `tasks` collection of functions in parallel, without waiting until\n * the previous function has completed. If any of the functions pass an error to\n * its callback, the main `callback` is immediately called with the value of the\n * error. Once the `tasks` have completed, the results are passed to the final\n * `callback` as an array.\n *\n * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n * parallel execution of code. If your tasks do not use any timers or perform\n * any I/O, they will actually be executed in series. Any synchronous setup\n * sections for each task will happen one after the other. JavaScript remains\n * single-threaded.\n *\n * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n * execution of other tasks when a task fails.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.parallel}.\n *\n * @name parallel\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n *\n * @example\n * async.parallel([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ],\n * // optional callback\n * function(err, results) {\n * // the results array will equal ['one','two'] even though\n * // the second function had a shorter timeout.\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n * one: function(callback) {\n * setTimeout(function() {\n * callback(null, 1);\n * }, 200);\n * },\n * two: function(callback) {\n * setTimeout(function() {\n * callback(null, 2);\n * }, 100);\n * }\n * }, function(err, results) {\n * // results is now equals to: {one: 1, two: 2}\n * });\n */\nfunction parallelLimit(tasks, callback) {\n (0, _parallel2.default)(_eachOf2.default, tasks, callback);\n}\nmodule.exports = exports['default'];","module.exports = require('./lib/index.js')\n",";(function(global) {\n\n'use strict';\n\nvar nextTick = function (fn) { setTimeout(fn, 0); }\nif (typeof process != 'undefined' && process && typeof process.nextTick == 'function') {\n\t// node.js and the like\n\tnextTick = process.nextTick;\n}\n\nfunction semaphore(capacity) {\n\tvar semaphore = {\n\t\tcapacity: capacity || 1,\n\t\tcurrent: 0,\n\t\tqueue: [],\n\t\tfirstHere: false,\n\n\t\ttake: function() {\n\t\t\tif (semaphore.firstHere === false) {\n \t\t\tsemaphore.current++;\n \t\t\tsemaphore.firstHere = true;\n \t\t\tvar isFirst = 1;\n \t\t\t} else {\n \t\t\tvar isFirst = 0;\n \t\t\t}\n\t\t\tvar item = { n: 1 };\n\n\t\t\tif (typeof arguments[0] == 'function') {\n\t\t\t\titem.task = arguments[0];\n\t\t\t} else {\n\t\t\t\titem.n = arguments[0];\n\t\t\t}\n\n\t\t\tif (arguments.length >= 2) {\n\t\t\t\tif (typeof arguments[1] == 'function') item.task = arguments[1];\n\t\t\t\telse item.n = arguments[1];\n\t\t\t}\n\n\t\t\tvar task = item.task;\n\t\t\titem.task = function() { task(semaphore.leave); };\n\n\t\t\tif (semaphore.current + item.n - isFirst > semaphore.capacity) {\n \t\t\tif (isFirst === 1) {\n \t\t\t\tsemaphore.current--;\n \t\t\t\tsemaphore.firstHere = false;\n \t\t\t}\n\t\t\t\treturn semaphore.queue.push(item);\n\t\t\t}\n\n\t\t\tsemaphore.current += item.n - isFirst;\n\t\t\titem.task(semaphore.leave);\n \t\t\tif (isFirst === 1) semaphore.firstHere = false;\n\t\t},\n\n\t\tleave: function(n) {\n\t\t\tn = n || 1;\n\n\t\t\tsemaphore.current -= n;\n\n\t\t\tif (!semaphore.queue.length) {\n\t\t\t\tif (semaphore.current < 0) {\n\t\t\t\t\tthrow new Error('leave called too many times.');\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = semaphore.queue[0];\n\n\t\t\tif (item.n + semaphore.current > semaphore.capacity) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsemaphore.queue.shift();\n\t\t\tsemaphore.current += item.n;\n\n\t\t\tnextTick(item.task);\n\t\t},\n\n\t\tavailable: function(n) {\n\t\t\tn = n || 1;\n\t\t\treturn(semaphore.current + n <= semaphore.capacity);\n\t\t}\n\t};\n\n\treturn semaphore;\n};\n\nif (typeof exports === 'object') {\n // node export\n module.exports = semaphore;\n} else if (typeof define === 'function' && define.amd) {\n // amd export\n define(function () {\n return semaphore;\n });\n} else {\n // browser global\n global.semaphore = semaphore;\n}\n}(this));\n","const stringify = require('json-stable-stringify')\n\nmodule.exports = {\n cacheIdentifierForPayload: cacheIdentifierForPayload,\n canCache: canCache,\n blockTagForPayload: blockTagForPayload,\n paramsWithoutBlockTag: paramsWithoutBlockTag,\n blockTagParamIndex: blockTagParamIndex,\n cacheTypeForPayload: cacheTypeForPayload,\n}\n\nfunction cacheIdentifierForPayload(payload, opts = {}){\n if (!canCache(payload)) return null\n const { includeBlockRef } = opts\n const params = includeBlockRef ? payload.params : paramsWithoutBlockTag(payload)\n return payload.method + ':' + stringify(params)\n}\n\nfunction canCache(payload){\n return cacheTypeForPayload(payload) !== 'never'\n}\n\nfunction blockTagForPayload(payload){\n var index = blockTagParamIndex(payload);\n\n // Block tag param not passed.\n if (index >= payload.params.length) {\n return null;\n }\n\n return payload.params[index];\n}\n\nfunction paramsWithoutBlockTag(payload){\n var index = blockTagParamIndex(payload);\n\n // Block tag param not passed.\n if (index >= payload.params.length) {\n return payload.params;\n }\n\n // eth_getBlockByNumber has the block tag first, then the optional includeTx? param\n if (payload.method === 'eth_getBlockByNumber') {\n return payload.params.slice(1);\n }\n\n return payload.params.slice(0,index);\n}\n\nfunction blockTagParamIndex(payload){\n switch(payload.method) {\n // blockTag is third param\n case 'eth_getStorageAt':\n return 2\n // blockTag is second param\n case 'eth_getBalance':\n case 'eth_getCode':\n case 'eth_getTransactionCount':\n case 'eth_call':\n case 'eth_estimateGas':\n return 1\n // blockTag is first param\n case 'eth_getBlockByNumber':\n return 0\n // there is no blockTag\n default:\n return undefined\n }\n}\n\nfunction cacheTypeForPayload(payload) {\n switch (payload.method) {\n // cache permanently\n case 'web3_clientVersion':\n case 'web3_sha3':\n case 'eth_protocolVersion':\n case 'eth_getBlockTransactionCountByHash':\n case 'eth_getUncleCountByBlockHash':\n case 'eth_getCode':\n case 'eth_getBlockByHash':\n case 'eth_getTransactionByHash':\n case 'eth_getTransactionByBlockHashAndIndex':\n case 'eth_getTransactionReceipt':\n case 'eth_getUncleByBlockHashAndIndex':\n case 'eth_getCompilers':\n case 'eth_compileLLL':\n case 'eth_compileSolidity':\n case 'eth_compileSerpent':\n case 'shh_version':\n return 'perma'\n\n // cache until fork\n case 'eth_getBlockByNumber':\n case 'eth_getBlockTransactionCountByNumber':\n case 'eth_getUncleCountByBlockNumber':\n case 'eth_getTransactionByBlockNumberAndIndex':\n case 'eth_getUncleByBlockNumberAndIndex':\n return 'fork'\n\n // cache for block\n case 'eth_gasPrice':\n case 'eth_getBalance':\n case 'eth_getStorageAt':\n case 'eth_getTransactionCount':\n case 'eth_call':\n case 'eth_estimateGas':\n case 'eth_getFilterLogs':\n case 'eth_getLogs':\n case 'eth_blockNumber':\n return 'block'\n\n // never cache\n case 'net_version':\n case 'net_peerCount':\n case 'net_listening':\n case 'eth_syncing':\n case 'eth_sign':\n case 'eth_coinbase':\n case 'eth_mining':\n case 'eth_hashrate':\n case 'eth_accounts':\n case 'eth_sendTransaction':\n case 'eth_sendRawTransaction':\n case 'eth_newFilter':\n case 'eth_newBlockFilter':\n case 'eth_newPendingTransactionFilter':\n case 'eth_uninstallFilter':\n case 'eth_getFilterChanges':\n case 'eth_getWork':\n case 'eth_submitWork':\n case 'eth_submitHashrate':\n case 'db_putString':\n case 'db_getString':\n case 'db_putHex':\n case 'db_getHex':\n case 'shh_post':\n case 'shh_newIdentity':\n case 'shh_hasIdentity':\n case 'shh_newGroup':\n case 'shh_addToGroup':\n case 'shh_newFilter':\n case 'shh_uninstallFilter':\n case 'shh_getFilterChanges':\n case 'shh_getMessages':\n return 'never'\n }\n}\n","const ethUtil = require('ethereumjs-util')\nconst ethAbi = require('ethereumjs-abi')\n\nmodule.exports = {\n\n concatSig: function (v, r, s) {\n const rSig = ethUtil.fromSigned(r)\n const sSig = ethUtil.fromSigned(s)\n const vSig = ethUtil.bufferToInt(v)\n const rStr = padWithZeroes(ethUtil.toUnsigned(rSig).toString('hex'), 64)\n const sStr = padWithZeroes(ethUtil.toUnsigned(sSig).toString('hex'), 64)\n const vStr = ethUtil.stripHexPrefix(ethUtil.intToHex(vSig))\n return ethUtil.addHexPrefix(rStr.concat(sStr, vStr)).toString('hex')\n },\n\n normalize: function (input) {\n if (!input) return\n\n if (typeof input === 'number') {\n const buffer = ethUtil.toBuffer(input)\n input = ethUtil.bufferToHex(buffer)\n }\n\n if (typeof input !== 'string') {\n var msg = 'eth-sig-util.normalize() requires hex string or integer input.'\n msg += ' received ' + (typeof input) + ': ' + input\n throw new Error(msg)\n }\n\n return ethUtil.addHexPrefix(input.toLowerCase())\n },\n\n personalSign: function (privateKey, msgParams) {\n var message = ethUtil.toBuffer(msgParams.data)\n var msgHash = ethUtil.hashPersonalMessage(message)\n var sig = ethUtil.ecsign(msgHash, privateKey)\n var serialized = ethUtil.bufferToHex(this.concatSig(sig.v, sig.r, sig.s))\n return serialized\n },\n\n recoverPersonalSignature: function (msgParams) {\n const publicKey = getPublicKeyFor(msgParams)\n const sender = ethUtil.publicToAddress(publicKey)\n const senderHex = ethUtil.bufferToHex(sender)\n return senderHex\n },\n\n extractPublicKey: function (msgParams) {\n const publicKey = getPublicKeyFor(msgParams)\n return '0x' + publicKey.toString('hex')\n },\n\n typedSignatureHash: function (typedData) {\n const hashBuffer = typedSignatureHash(typedData)\n return ethUtil.bufferToHex(hashBuffer)\n },\n\n signTypedData: function (privateKey, msgParams) {\n const msgHash = typedSignatureHash(msgParams.data)\n const sig = ethUtil.ecsign(msgHash, privateKey)\n return ethUtil.bufferToHex(this.concatSig(sig.v, sig.r, sig.s))\n },\n\n recoverTypedSignature: function (msgParams) {\n const msgHash = typedSignatureHash(msgParams.data)\n const publicKey = recoverPublicKey(msgHash, msgParams.sig)\n const sender = ethUtil.publicToAddress(publicKey)\n return ethUtil.bufferToHex(sender)\n }\n\n}\n\n/**\n * @param typedData - Array of data along with types, as per EIP712.\n * @returns Buffer\n */\nfunction typedSignatureHash(typedData) {\n const error = new Error('Expect argument to be non-empty array')\n if (typeof typedData !== 'object' || !typedData.length) throw error\n\n const data = typedData.map(function (e) {\n return e.type === 'bytes' ? ethUtil.toBuffer(e.value) : e.value\n })\n const types = typedData.map(function (e) { return e.type })\n const schema = typedData.map(function (e) {\n if (!e.name) throw error\n return e.type + ' ' + e.name\n })\n\n return ethAbi.soliditySHA3(\n ['bytes32', 'bytes32'],\n [\n ethAbi.soliditySHA3(new Array(typedData.length).fill('string'), schema),\n ethAbi.soliditySHA3(types, data)\n ]\n )\n}\n\nfunction recoverPublicKey(hash, sig) {\n const signature = ethUtil.toBuffer(sig)\n const sigParams = ethUtil.fromRpcSig(signature)\n return ethUtil.ecrecover(hash, sigParams.v, sigParams.r, sigParams.s)\n}\n\nfunction getPublicKeyFor (msgParams) {\n const message = ethUtil.toBuffer(msgParams.data)\n const msgHash = ethUtil.hashPersonalMessage(message)\n return recoverPublicKey(msgHash, msgParams.sig)\n}\n\n\nfunction padWithZeroes (number, length) {\n var myString = '' + number\n while (myString.length < length) {\n myString = '0' + myString\n }\n return myString\n}\n","\nconst errorValues = require('./errorValues.json')\nconst FALLBACK_ERROR_CODE = require('./errorCodes.json').rpc.internal\nconst { EthereumRpcError } = require('./classes')\n\nconst JSON_RPC_SERVER_ERROR_MESSAGE = 'Unspecified server error.'\n\nconst FALLBACK_MESSAGE = 'Unspecified error message. This is a bug, please report it.'\n\nconst FALLBACK_ERROR = {\n code: FALLBACK_ERROR_CODE,\n message: getMessageFromCode(FALLBACK_ERROR_CODE)\n}\n\n/**\n * Gets the message for a given code, or a fallback message if the code has\n * no corresponding message.\n * \n * @param {number} code - The integer error code\n * @param {string} fallbackMessage - The fallback message\n * @return {string} The corresponding message or the fallback message\n */\nfunction getMessageFromCode(code, fallbackMessage = FALLBACK_MESSAGE) {\n\n if (Number.isInteger(code)) {\n\n const codeString = code.toString()\n if (errorValues[codeString]) return errorValues[codeString].message\n\n if (isJsonRpcServerError(code)) return JSON_RPC_SERVER_ERROR_MESSAGE\n\n // TODO: allow valid codes and messages to be extended\n // // EIP 1193 Status Codes\n // if (code >= 4000 && code <= 4999) return Something?\n }\n return fallbackMessage\n}\n\n/**\n * Returns whether the given code is valid.\n * A code is only valid if it has a message.\n * \n * @param {number} code - The code to check\n * @return {boolean} true if the code is valid, false otherwise.\n */\nfunction isValidCode(code) {\n\n if (!Number.isInteger(code)) return false\n\n const codeString = code.toString()\n if (errorValues[codeString]) return true\n\n if (isJsonRpcServerError(code)) return true\n\n // TODO: allow valid codes and messages to be extended\n // // EIP 1193 Status Codes\n // if (code >= 4000 && code <= 4999) return true\n\n return false\n}\n\n/**\n * Serializes the given error to an Ethereum JSON RPC-compatible error object.\n * Merely copies the given error's values if it is already compatible.\n * If the given error is not fully compatible, it will be preserved on the\n * returned object's data.originalError property.\n * Adds a 'stack' property if it exists on the given error.\n *\n * @param {any} error - The error to serialize.\n * @param {object} fallbackError - The custom fallback error values if the\n * given error is invalid.\n * @return {object} A standardized error object.\n */\nfunction serializeError (error, fallbackError = FALLBACK_ERROR) {\n\n if (\n !fallbackError || \n !Number.isInteger(fallbackError.code) ||\n typeof fallbackError.message !== 'string'\n ) {\n throw new Error(\n 'fallbackError must contain integer number code and string message.'\n )\n }\n\n if (error instanceof EthereumRpcError) {\n return error.serialize()\n }\n\n const serialized = {}\n\n if (error && isValidCode(error.code)) {\n\n serialized.code = error.code\n\n if (error.message && typeof error.message === 'string') {\n serialized.message = error.message\n if (error.hasOwnProperty('data')) serialized.data = error.data\n } else {\n serialized.message = getMessageFromCode(serialized.code)\n serialized.data = { originalError: assignOriginalError(error) }\n }\n\n } else {\n serialized.code = fallbackError.code\n serialized.message = (\n error && error.message\n ? error.message\n : fallbackError.message\n )\n serialized.data = { originalError: assignOriginalError(error) }\n }\n\n if (error && error.stack) serialized.stack = error.stack\n return serialized\n}\n\n// Internal\n\nfunction isJsonRpcServerError (code) {\n return code >= -32099 && code <= -32000\n}\n\nfunction assignOriginalError (error) {\n if (error && typeof error === 'object' && !Array.isArray(error)) {\n return Object.assign({}, error)\n }\n return error\n}\n\n// Exports\n\nmodule.exports = {\n getMessageFromCode,\n isValidCode,\n serializeError,\n JSON_RPC_SERVER_ERROR_MESSAGE,\n}\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar events = require('events');\nvar precond = require('precond');\nvar util = require('util');\n\n// A class to hold the state of a backoff operation. Accepts a backoff strategy\n// to generate the backoff delays.\nfunction Backoff(backoffStrategy) {\n events.EventEmitter.call(this);\n\n this.backoffStrategy_ = backoffStrategy;\n this.maxNumberOfRetry_ = -1;\n this.backoffNumber_ = 0;\n this.backoffDelay_ = 0;\n this.timeoutID_ = -1;\n\n this.handlers = {\n backoff: this.onBackoff_.bind(this)\n };\n}\nutil.inherits(Backoff, events.EventEmitter);\n\n// Sets a limit, greater than 0, on the maximum number of backoffs. A 'fail'\n// event will be emitted when the limit is reached.\nBackoff.prototype.failAfter = function(maxNumberOfRetry) {\n precond.checkArgument(maxNumberOfRetry > 0,\n 'Expected a maximum number of retry greater than 0 but got %s.',\n maxNumberOfRetry);\n\n this.maxNumberOfRetry_ = maxNumberOfRetry;\n};\n\n// Starts a backoff operation. Accepts an optional parameter to let the\n// listeners know why the backoff operation was started.\nBackoff.prototype.backoff = function(err) {\n precond.checkState(this.timeoutID_ === -1, 'Backoff in progress.');\n\n if (this.backoffNumber_ === this.maxNumberOfRetry_) {\n this.emit('fail', err);\n this.reset();\n } else {\n this.backoffDelay_ = this.backoffStrategy_.next();\n this.timeoutID_ = setTimeout(this.handlers.backoff, this.backoffDelay_);\n this.emit('backoff', this.backoffNumber_, this.backoffDelay_, err);\n }\n};\n\n// Handles the backoff timeout completion.\nBackoff.prototype.onBackoff_ = function() {\n this.timeoutID_ = -1;\n this.emit('ready', this.backoffNumber_, this.backoffDelay_);\n this.backoffNumber_++;\n};\n\n// Stops any backoff operation and resets the backoff delay to its inital value.\nBackoff.prototype.reset = function() {\n this.backoffNumber_ = 0;\n this.backoffStrategy_.reset();\n clearTimeout(this.timeoutID_);\n this.timeoutID_ = -1;\n};\n\nmodule.exports = Backoff;\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar events = require('events');\nvar util = require('util');\n\nfunction isDef(value) {\n return value !== undefined && value !== null;\n}\n\n// Abstract class defining the skeleton for the backoff strategies. Accepts an\n// object holding the options for the backoff strategy:\n//\n// * `randomisationFactor`: The randomisation factor which must be between 0\n// and 1 where 1 equates to a randomization factor of 100% and 0 to no\n// randomization.\n// * `initialDelay`: The backoff initial delay in milliseconds.\n// * `maxDelay`: The backoff maximal delay in milliseconds.\nfunction BackoffStrategy(options) {\n options = options || {};\n\n if (isDef(options.initialDelay) && options.initialDelay < 1) {\n throw new Error('The initial timeout must be greater than 0.');\n } else if (isDef(options.maxDelay) && options.maxDelay < 1) {\n throw new Error('The maximal timeout must be greater than 0.');\n }\n\n this.initialDelay_ = options.initialDelay || 100;\n this.maxDelay_ = options.maxDelay || 10000;\n\n if (this.maxDelay_ <= this.initialDelay_) {\n throw new Error('The maximal backoff delay must be ' +\n 'greater than the initial backoff delay.');\n }\n\n if (isDef(options.randomisationFactor) &&\n (options.randomisationFactor < 0 || options.randomisationFactor > 1)) {\n throw new Error('The randomisation factor must be between 0 and 1.');\n }\n\n this.randomisationFactor_ = options.randomisationFactor || 0;\n}\n\n// Gets the maximal backoff delay.\nBackoffStrategy.prototype.getMaxDelay = function() {\n return this.maxDelay_;\n};\n\n// Gets the initial backoff delay.\nBackoffStrategy.prototype.getInitialDelay = function() {\n return this.initialDelay_;\n};\n\n// Template method that computes and returns the next backoff delay in\n// milliseconds.\nBackoffStrategy.prototype.next = function() {\n var backoffDelay = this.next_();\n var randomisationMultiple = 1 + Math.random() * this.randomisationFactor_;\n var randomizedDelay = Math.round(backoffDelay * randomisationMultiple);\n return randomizedDelay;\n};\n\n// Computes and returns the next backoff delay. Intended to be overridden by\n// subclasses.\nBackoffStrategy.prototype.next_ = function() {\n throw new Error('BackoffStrategy.next_() unimplemented.');\n};\n\n// Template method that resets the backoff delay to its initial value.\nBackoffStrategy.prototype.reset = function() {\n this.reset_();\n};\n\n// Resets the backoff delay to its initial value. Intended to be overridden by\n// subclasses.\nBackoffStrategy.prototype.reset_ = function() {\n throw new Error('BackoffStrategy.reset_() unimplemented.');\n};\n\nmodule.exports = BackoffStrategy;\n","// Copyright (c) 2012 Mathieu Turcotte\n// Licensed under the MIT license.\n\nvar util = require('util');\n\nvar BackoffStrategy = require('./strategy');\n\n// Fibonacci backoff strategy.\nfunction FibonacciBackoffStrategy(options) {\n BackoffStrategy.call(this, options);\n this.backoffDelay_ = 0;\n this.nextBackoffDelay_ = this.getInitialDelay();\n}\nutil.inherits(FibonacciBackoffStrategy, BackoffStrategy);\n\nFibonacciBackoffStrategy.prototype.next_ = function() {\n var backoffDelay = Math.min(this.nextBackoffDelay_, this.getMaxDelay());\n this.nextBackoffDelay_ += this.backoffDelay_;\n this.backoffDelay_ = backoffDelay;\n return backoffDelay;\n};\n\nFibonacciBackoffStrategy.prototype.reset_ = function() {\n this.nextBackoffDelay_ = this.getInitialDelay();\n this.backoffDelay_ = 0;\n};\n\nmodule.exports = FibonacciBackoffStrategy;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// browserify by default only pulls in files that are hard coded in requires\n// In order of last to first in this file, the default wordlist will be chosen\n// based on what is present. (Bundles may remove wordlists they don't need)\nconst wordlists = {};\nexports.wordlists = wordlists;\nlet _default;\nexports._default = _default;\ntry {\n exports._default = _default = require('./wordlists/czech.json');\n wordlists.czech = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/chinese_simplified.json');\n wordlists.chinese_simplified = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/chinese_traditional.json');\n wordlists.chinese_traditional = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/korean.json');\n wordlists.korean = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/french.json');\n wordlists.french = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/italian.json');\n wordlists.italian = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/spanish.json');\n wordlists.spanish = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/japanese.json');\n wordlists.japanese = _default;\n wordlists.JA = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/portuguese.json');\n wordlists.portuguese = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/english.json');\n wordlists.english = _default;\n wordlists.EN = _default;\n}\ncatch (err) { }\n","'use strict'\n\nvar createHash = require('create-hash')\nvar bs58checkBase = require('./base')\n\n// SHA256(SHA256(buffer))\nfunction sha256x2 (buffer) {\n var tmp = createHash('sha256').update(buffer).digest()\n return createHash('sha256').update(tmp).digest()\n}\n\nmodule.exports = bs58checkBase(sha256x2)\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n if (\n (utils.isBlob(requestData) || utils.isFile(requestData)) &&\n requestData.type\n ) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = unescape(encodeURIComponent(config.auth.password)) || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","module.exports = {\n\tMODE_NUMBER :\t\t1 << 0,\n\tMODE_ALPHA_NUM : \t1 << 1,\n\tMODE_8BIT_BYTE : \t1 << 2,\n\tMODE_KANJI :\t\t1 << 3\n};\n","module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","var math = require('./math');\n\nfunction QRPolynomial(num, shift) {\n\n\tif (num.length == undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] == 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= math.gexp(math.glog(this.get(i) ) + math.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = math.glog(this.get(0) ) - math.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < e.getLength(); i++) {\n\t\t\tnum[i] ^= math.gexp(math.glog(e.get(i) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","\"use strict\";\n\nconst IExecContractsClient = require('iexec-contracts-js-client');\n\nconst {\n getDefaultProvider,\n providers\n} = require('ethers');\n\nconst wallet = require('../common/modules/wallet');\n\nconst account = require('../common/modules/account');\n\nconst hub = require('../common/modules/hub');\n\nconst order = require('../common/modules/order');\n\nconst orderbook = require('../common/modules/orderbook');\n\nconst deal = require('../common/modules/deal');\n\nconst task = require('../common/modules/task');\n\nconst iexecProcess = require('../common/modules/iexecProcess');\n\nconst secretMgtServ = require('../common/modules/sms');\n\nconst resultProxyServ = require('../common/modules/result-proxy');\n\nconst ens = require('../common/modules/ens');\n\nconst {\n checkRequestRequirements\n} = require('../common/modules/request-helper');\n\nconst {\n getStorageTokenKeyName,\n getResultEncryptionKeyName\n} = require('../common/utils/secrets-utils');\n\nconst errors = require('../common/utils/errors');\n\nconst {\n BN,\n NULL_ADDRESS,\n NULL_BYTES32,\n parseEth,\n parseRLC,\n formatEth,\n formatRLC,\n encodeTag,\n decodeTag,\n sumTags,\n decryptResult\n} = require('../common/utils/utils');\n\nconst {\n generateAes256Key,\n encryptAes256Cbc,\n sha256Sum\n} = require('../common/utils/encryption-utils');\n\nconst {\n EnhancedWallet,\n EnhancedWeb3Signer,\n getSignerFromPrivateKey\n} = require('../common/utils/signers');\n\nconst {\n getChainDefaults,\n isEnterpriseEnabled\n} = require('../common/utils/config');\n\nconst utils = {\n BN,\n NULL_ADDRESS,\n NULL_BYTES32,\n parseEth,\n parseRLC,\n formatEth,\n formatRLC,\n encodeTag,\n decodeTag,\n sumTags,\n getSignerFromPrivateKey,\n decryptResult\n};\n\nclass IExec {\n constructor(_ref) {\n let {\n ethProvider,\n flavour = 'standard'\n } = _ref;\n let {\n hubAddress,\n ensRegistryAddress,\n ensPublicResolverAddress,\n isNative,\n useGas = true,\n confirms,\n bridgeAddress,\n bridgedNetworkConf = {},\n enterpriseSwapConf = {},\n resultProxyURL,\n smsURL,\n ipfsGatewayURL,\n iexecGatewayURL\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const isEnhancedWallet = ethProvider instanceof EnhancedWallet;\n\n const networkPromise = (async () => {\n let disposableProvider;\n\n if (isEnhancedWallet) {\n disposableProvider = ethProvider.provider;\n } else {\n disposableProvider = new providers.Web3Provider(ethProvider);\n }\n\n const {\n chainId,\n name,\n ensAddress\n } = await disposableProvider.getNetwork();\n return {\n chainId,\n name,\n ensAddress\n };\n })();\n\n const chainConfDefaultsPromise = (async () => {\n const {\n chainId\n } = await networkPromise;\n return getChainDefaults({\n id: chainId,\n flavour\n });\n })();\n\n const signerProviderPromise = (async () => {\n let provider;\n let signer;\n const network = await networkPromise;\n const {\n ensRegistry\n } = await chainConfDefaultsPromise;\n const networkOverride = { ...network,\n ...(ensRegistry && {\n ensAddress: ensRegistry\n }),\n ...(ensRegistryAddress && {\n ensAddress: ensRegistryAddress\n })\n };\n\n if (isEnhancedWallet) {\n if (ethProvider.provider && ethProvider.provider.connection && ethProvider.provider.connection.url) {\n // case JsonRpcProvider\n signer = ethProvider.connect(new providers.JsonRpcProvider(ethProvider.provider.connection.url, networkOverride));\n } else {\n // case FallbackProvider can not override\n if (ensRegistryAddress) {\n console.warn('IExec: ensRegistyAddress option is not supported when using a default provider');\n }\n\n signer = ethProvider;\n }\n\n provider = signer.provider;\n } else {\n const web3SignerProvider = new EnhancedWeb3Signer(ethProvider, networkOverride);\n signer = web3SignerProvider;\n provider = signer.provider;\n }\n\n return {\n provider,\n signer\n };\n })();\n\n const contractsPromise = (async () => {\n const {\n chainId\n } = await networkPromise;\n const {\n provider,\n signer\n } = await signerProviderPromise;\n return new IExecContractsClient({\n chainId,\n provider,\n signer,\n hubAddress,\n useGas,\n confirms,\n isNative,\n flavour\n });\n })();\n\n let _enterpriseSwapContracts;\n\n const getEnterpriseSwapContracts = async () => {\n if (!_enterpriseSwapContracts) {\n const {\n chainId\n } = await networkPromise;\n const {\n provider,\n signer\n } = await signerProviderPromise;\n let enterpriseConf;\n const hasEnterpriseConf = enterpriseSwapConf.hubAddress || isEnterpriseEnabled(chainId);\n const enterpriseSwapFlavour = flavour === 'enterprise' ? 'standard' : 'enterprise';\n\n if (hasEnterpriseConf) {\n const enterpriseSwapConfDefaults = getChainDefaults({\n id: chainId,\n flavour: enterpriseSwapFlavour\n });\n enterpriseConf = { ...enterpriseSwapConfDefaults,\n ...enterpriseSwapConf\n };\n }\n\n _enterpriseSwapContracts = hasEnterpriseConf ? new IExecContractsClient({\n chainId,\n provider,\n signer,\n hubAddress: enterpriseConf.hubAddress,\n confirms,\n isNative: enterpriseConf.isNative,\n flavour: enterpriseSwapFlavour\n }) : undefined;\n }\n\n return _enterpriseSwapContracts;\n };\n\n let _bridgedConf;\n\n const getBridgedConf = async () => {\n if (!_bridgedConf) {\n const {\n chainId\n } = await networkPromise;\n const chainConfDefaults = await chainConfDefaultsPromise;\n const contracts = await contractsPromise;\n const isBridged = Object.getOwnPropertyNames(bridgedNetworkConf).length > 0 || chainConfDefaults.bridge;\n\n if (isBridged) {\n const bridgedChainId = bridgedNetworkConf.chainId !== undefined ? bridgedNetworkConf.chainId : chainConfDefaults.bridge && chainConfDefaults.bridge.bridgedChainId;\n\n if (!bridgedChainId) {\n throw new errors.ConfigurationError(\"Missing chainId in bridgedNetworkConf and no default value for your chain \".concat(chainId));\n }\n\n const bridgedChainConfDefaults = getChainDefaults({\n id: bridgedChainId,\n flavour\n });\n const bridgedRpcUrl = bridgedNetworkConf.rpcURL !== undefined ? bridgedNetworkConf.rpcURL : bridgedChainConfDefaults.host;\n\n if (!bridgedRpcUrl) {\n throw new errors.ConfigurationError(\"Missing rpcURL in bridgedNetworkConf and no default value for bridged chain \".concat(bridgedChainId));\n }\n\n const bridgedBridgeAddress = bridgedNetworkConf.bridgeAddress !== undefined ? bridgedNetworkConf.bridgeAddress : bridgedChainConfDefaults.bridge && bridgedChainConfDefaults.bridge.contract;\n\n if (!bridgedBridgeAddress) {\n throw new errors.ConfigurationError(\"Missing bridgeAddress in bridgedNetworkConf and no default value for bridged chain \".concat(bridgedChainId));\n }\n\n _bridgedConf = {\n chainId: bridgedChainId,\n rpcURL: bridgedRpcUrl,\n isNative: flavour === 'standard' ? !contracts.isNative : contracts.isNative,\n hubAddress: bridgedNetworkConf.hubAddress,\n bridgeAddress: bridgedBridgeAddress\n };\n }\n }\n\n return _bridgedConf;\n };\n\n let _bridgedContracts;\n\n const getBridgedContracts = async () => {\n if (!_bridgedContracts) {\n const chainConfDefaults = await chainConfDefaultsPromise;\n const isBridged = Object.getOwnPropertyNames(bridgedNetworkConf).length > 0 || chainConfDefaults.bridge;\n\n if (isBridged) {\n const bridgedConf = await getBridgedConf();\n _bridgedContracts = new IExecContractsClient({\n chainId: bridgedConf.chainId,\n provider: getDefaultProvider(bridgedConf.rpcURL),\n hubAddress: bridgedConf.hubAddress,\n confirms,\n isNative: bridgedConf.isNative,\n flavour\n });\n }\n }\n\n return _bridgedContracts;\n };\n\n const getSmsURL = async () => {\n const {\n chainId\n } = await networkPromise;\n const chainConfDefaults = await chainConfDefaultsPromise;\n const value = smsURL || chainConfDefaults.sms;\n\n if (value !== undefined) {\n return value;\n }\n\n throw Error(\"smsURL option not set and no default value for your chain \".concat(chainId));\n };\n\n const getResultProxyURL = async () => {\n const {\n chainId\n } = await networkPromise;\n const chainConfDefaults = await chainConfDefaultsPromise;\n const value = resultProxyURL || chainConfDefaults.resultProxy;\n\n if (value !== undefined) {\n return value;\n }\n\n throw Error(\"resultProxyURL option not set and no default value for your chain \".concat(chainId));\n };\n\n const getIexecGatewayURL = async () => {\n const {\n chainId\n } = await networkPromise;\n const chainConfDefaults = await chainConfDefaultsPromise;\n const value = iexecGatewayURL || chainConfDefaults.iexecGateway;\n\n if (value !== undefined) {\n return value;\n }\n\n throw Error(\"iexecGatewayURL option not set and no default value for your chain \".concat(chainId));\n };\n\n const getIpfsGatewayURL = async () => {\n const {\n chainId\n } = await networkPromise;\n const chainConfDefaults = await chainConfDefaultsPromise;\n const value = ipfsGatewayURL || chainConfDefaults.ipfsGateway;\n\n if (value !== undefined) {\n return value;\n }\n\n throw Error(\"ipfsGatewayURL option not set and no default value for your chain \".concat(chainId));\n };\n\n const getBridgeAddress = async () => {\n const {\n chainId\n } = await networkPromise;\n const chainConfDefaults = await chainConfDefaultsPromise;\n const value = bridgeAddress || chainConfDefaults.bridge && chainConfDefaults.bridge.contract;\n\n if (value !== undefined) {\n return value;\n }\n\n throw Error(\"bridgeAddress option not set and no default value for your chain \".concat(chainId));\n };\n\n const getEnsPublicResolverAddress = async () => {\n const {\n chainId\n } = await networkPromise;\n const chainConfDefaults = await chainConfDefaultsPromise;\n const value = ensPublicResolverAddress || chainConfDefaults.ensPublicResolver;\n\n if (value !== undefined) {\n return value;\n }\n\n throw Error(\"ensPublicResolverAddress option not set and no default value for your chain \".concat(chainId));\n };\n\n const getStandardContracts = async () => {\n const {\n chainId\n } = await networkPromise;\n const contracts = await contractsPromise;\n\n if (contracts.flavour === 'standard') {\n return contracts;\n }\n\n const enterpriseSwapContracts = await getEnterpriseSwapContracts();\n\n if (enterpriseSwapContracts && enterpriseSwapContracts.flavour === 'standard') {\n return enterpriseSwapContracts;\n }\n\n throw Error(\"enterpriseSwapConf option not set and no default value for your chain \".concat(chainId));\n };\n\n const getEnterpriseContracts = async () => {\n const {\n chainId\n } = await networkPromise;\n const contracts = await contractsPromise;\n\n if (contracts.flavour === 'enterprise') {\n return contracts;\n }\n\n const enterpriseSwapContracts = await getEnterpriseSwapContracts();\n\n if (enterpriseSwapContracts && enterpriseSwapContracts.flavour === 'enterprise') {\n return enterpriseSwapContracts;\n }\n\n throw Error(\"enterpriseSwapConf option not set and no default value for your chain \".concat(chainId));\n };\n\n this.wallet = {};\n\n this.wallet.getAddress = async () => wallet.getAddress(await contractsPromise);\n\n this.wallet.checkBalances = async address => wallet.checkBalances(await contractsPromise, address);\n\n this.wallet.checkBridgedBalances = async address => wallet.checkBalances(await getBridgedContracts(), address);\n\n this.wallet.sendETH = async (weiAmount, to) => wallet.sendETH(await contractsPromise, weiAmount, to);\n\n this.wallet.sendRLC = async (nRlcAmount, to) => wallet.sendRLC(await contractsPromise, nRlcAmount, to);\n\n this.wallet.sweep = async to => wallet.sweep(await contractsPromise, to);\n\n this.wallet.bridgeToSidechain = async nRlcAmount => wallet.bridgeToSidechain(await contractsPromise, await getBridgeAddress(), nRlcAmount, {\n bridgedContracts: await getBridgedContracts(),\n sidechainBridgeAddress: await getBridgedConf().then(bridgedConf => bridgedConf && bridgedConf.bridgeAddress)\n });\n\n this.wallet.bridgeToMainchain = async nRlcAmount => wallet.bridgeToMainchain(await contractsPromise, await getBridgeAddress(), nRlcAmount, {\n bridgedContracts: await getBridgedContracts(),\n mainchainBridgeAddress: await getBridgedConf().then(bridgedConf => bridgedConf && bridgedConf.bridgeAddress)\n });\n\n this.wallet.wrapEnterpriseRLC = async nRlcAmount => wallet.wrapEnterpriseRLC(await getStandardContracts(), await getEnterpriseContracts(), nRlcAmount);\n\n this.wallet.unwrapEnterpriseRLC = async nRlcAmount => wallet.unwrapEnterpriseRLC(await getEnterpriseContracts(), nRlcAmount);\n\n this.account = {};\n\n this.account.checkBalance = async address => account.checkBalance(await contractsPromise, address);\n\n this.account.checkBridgedBalance = async address => account.checkBalance(await getBridgedContracts(), address);\n\n this.account.deposit = async nRlcAmount => account.deposit(await contractsPromise, nRlcAmount);\n\n this.account.withdraw = async nRlcAmount => account.withdraw(await contractsPromise, nRlcAmount);\n\n this.app = {};\n\n this.app.deployApp = async app => hub.deployApp(await contractsPromise, app);\n\n this.app.showApp = async address => hub.showApp(await contractsPromise, address);\n\n this.app.showUserApp = async (index, userAddress) => hub.showUserApp(await contractsPromise, index, userAddress);\n\n this.app.countUserApps = async address => hub.countUserApps(await contractsPromise, address);\n\n this.dataset = {};\n\n this.dataset.generateEncryptionKey = () => generateAes256Key();\n\n this.dataset.encrypt = (datasetFile, encryptionKey) => encryptAes256Cbc(datasetFile, encryptionKey);\n\n this.dataset.computeEncryptedFileChecksum = encryptedFile => sha256Sum(encryptedFile);\n\n this.dataset.deployDataset = async dataset => hub.deployDataset(await contractsPromise, dataset);\n\n this.dataset.showDataset = async address => hub.showDataset(await contractsPromise, address);\n\n this.dataset.showUserDataset = async (index, userAddress) => hub.showUserDataset(await contractsPromise, index, userAddress);\n\n this.dataset.countUserDatasets = async address => hub.countUserDatasets(await contractsPromise, address);\n\n this.dataset.checkDatasetSecretExists = async datasetAddress => secretMgtServ.checkWeb3SecretExists(await contractsPromise, await getSmsURL(), datasetAddress);\n\n this.dataset.pushDatasetSecret = async (datasetAddress, datasetSecret) => secretMgtServ.pushWeb3Secret(await contractsPromise, await getSmsURL(), datasetAddress, datasetSecret);\n\n this.workerpool = {};\n\n this.workerpool.deployWorkerpool = async workerpool => hub.deployWorkerpool(await contractsPromise, workerpool);\n\n this.workerpool.showWorkerpool = async address => hub.showWorkerpool(await contractsPromise, address);\n\n this.workerpool.showUserWorkerpool = async (index, userAddress) => hub.showUserWorkerpool(await contractsPromise, index, userAddress);\n\n this.workerpool.countUserWorkerpools = async address => hub.countUserWorkerpools(await contractsPromise, address);\n\n this.hub = {};\n\n this.hub.createCategory = async category => hub.createCategory(await contractsPromise, category);\n\n this.hub.showCategory = async index => hub.showCategory(await contractsPromise, index);\n\n this.hub.countCategory = async () => hub.countCategory(await contractsPromise);\n\n this.hub.getTimeoutRatio = async () => hub.getTimeoutRatio(await contractsPromise);\n\n this.deal = {};\n\n this.deal.show = async dealid => deal.show(await contractsPromise, dealid);\n\n this.deal.obsDeal = async dealid => iexecProcess.obsDeal(await contractsPromise, dealid);\n\n this.deal.computeTaskId = (dealid, taskIdx) => deal.computeTaskId(dealid, taskIdx);\n\n this.deal.fetchRequesterDeals = async function (requesterAddress) {\n let {\n appAddress,\n datasetAddress,\n workerpoolAddress\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return deal.fetchRequesterDeals(await contractsPromise, await getIexecGatewayURL(), requesterAddress, {\n appAddress,\n datasetAddress,\n workerpoolAddress\n });\n };\n\n this.deal.claim = async dealid => deal.claim(await contractsPromise, dealid);\n\n this.deal.fetchDealsByApporder = async apporderHash => order.fetchDealsByOrderHash(await getIexecGatewayURL(), order.APP_ORDER, (await networkPromise).chainId, apporderHash);\n\n this.deal.fetchDealsByDatasetorder = async datasetorderHash => order.fetchDealsByOrderHash(await getIexecGatewayURL(), order.DATASET_ORDER, (await networkPromise).chainId, datasetorderHash);\n\n this.deal.fetchDealsByWorkerpoolorder = async workerpoolorderHash => order.fetchDealsByOrderHash(await getIexecGatewayURL(), order.WORKERPOOL_ORDER, (await networkPromise).chainId, workerpoolorderHash);\n\n this.deal.fetchDealsByRequestorder = async requestorderHash => order.fetchDealsByOrderHash(await getIexecGatewayURL(), order.REQUEST_ORDER, (await networkPromise).chainId, requestorderHash);\n\n this.order = {};\n\n this.order.createApporder = async overwrite => order.createApporder(await contractsPromise, overwrite);\n\n this.order.createDatasetorder = async overwrite => order.createDatasetorder(await contractsPromise, overwrite);\n\n this.order.createWorkerpoolorder = async overwrite => order.createWorkerpoolorder(await contractsPromise, overwrite);\n\n this.order.createRequestorder = async overwrite => order.createRequestorder({\n contracts: await contractsPromise,\n resultProxyURL: await getResultProxyURL()\n }, overwrite);\n\n this.order.hashApporder = async apporder => order.hashApporder(await contractsPromise, apporder);\n\n this.order.hashDatasetorder = async datasetorder => order.hashDatasetorder(await contractsPromise, datasetorder);\n\n this.order.hashWorkerpoolorder = async workerpoolorder => order.hashWorkerpoolorder(await contractsPromise, workerpoolorder);\n\n this.order.hashRequestorder = async requestorder => order.hashRequestorder(await contractsPromise, requestorder);\n\n this.order.signApporder = async apporder => order.signApporder(await contractsPromise, apporder);\n\n this.order.signDatasetorder = async datasetorder => order.signDatasetorder(await contractsPromise, datasetorder);\n\n this.order.signWorkerpoolorder = async workerpoolorder => order.signWorkerpoolorder(await contractsPromise, workerpoolorder);\n\n this.order.signRequestorder = async function (requestorder) {\n let {\n checkRequest = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return order.signRequestorder(await contractsPromise, checkRequest === true ? await checkRequestRequirements({\n contracts: await contractsPromise,\n smsURL: await getSmsURL()\n }, requestorder).then(() => requestorder) : requestorder);\n };\n\n this.order.cancelApporder = async signedApporder => order.cancelApporder(await contractsPromise, signedApporder);\n\n this.order.cancelDatasetorder = async signedDatasetorder => order.cancelDatasetorder(await contractsPromise, signedDatasetorder);\n\n this.order.cancelWorkerpoolorder = async signedWorkerpoolorder => order.cancelWorkerpoolorder(await contractsPromise, signedWorkerpoolorder);\n\n this.order.cancelRequestorder = async signedRequestorder => order.cancelRequestorder(await contractsPromise, signedRequestorder);\n\n this.order.publishApporder = async signedApporder => order.publishApporder(await contractsPromise, await getIexecGatewayURL(), signedApporder);\n\n this.order.publishDatasetorder = async signedDatasetorder => order.publishDatasetorder(await contractsPromise, await getIexecGatewayURL(), signedDatasetorder);\n\n this.order.publishWorkerpoolorder = async signedWorkerpoolorder => order.publishWorkerpoolorder(await contractsPromise, await getIexecGatewayURL(), signedWorkerpoolorder);\n\n this.order.publishRequestorder = async function (signedRequestorder) {\n let {\n checkRequest = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return order.publishRequestorder(await contractsPromise, await getIexecGatewayURL(), checkRequest === true ? await checkRequestRequirements({\n contracts: await contractsPromise,\n smsURL: await getSmsURL()\n }, signedRequestorder).then(() => signedRequestorder) : signedRequestorder);\n };\n\n this.order.unpublishApporder = async apporderHash => order.unpublishApporder(await contractsPromise, await getIexecGatewayURL(), apporderHash);\n\n this.order.unpublishDatasetorder = async datasetorderHash => order.unpublishDatasetorder(await contractsPromise, await getIexecGatewayURL(), datasetorderHash);\n\n this.order.unpublishWorkerpoolorder = async workerpoolorderHash => order.unpublishWorkerpoolorder(await contractsPromise, await getIexecGatewayURL(), workerpoolorderHash);\n\n this.order.unpublishRequestorder = async requestorderHash => order.unpublishRequestorder(await contractsPromise, await getIexecGatewayURL(), requestorderHash);\n\n this.order.unpublishLastApporder = async appAddress => order.unpublishLastApporder(await contractsPromise, await getIexecGatewayURL(), appAddress);\n\n this.order.unpublishLastDatasetorder = async datasetAddress => order.unpublishLastDatasetorder(await contractsPromise, await getIexecGatewayURL(), datasetAddress);\n\n this.order.unpublishLastWorkerpoolorder = async workerpoolAddress => order.unpublishLastWorkerpoolorder(await contractsPromise, await getIexecGatewayURL(), workerpoolAddress);\n\n this.order.unpublishLastRequestorder = async () => order.unpublishLastRequestorder(await contractsPromise, await getIexecGatewayURL());\n\n this.order.unpublishAllApporders = async appAddress => order.unpublishAllApporders(await contractsPromise, await getIexecGatewayURL(), appAddress);\n\n this.order.unpublishAllDatasetorders = async datasetAddress => order.unpublishAllDatasetorders(await contractsPromise, await getIexecGatewayURL(), datasetAddress);\n\n this.order.unpublishAllWorkerpoolorders = async workerpoolAddress => order.unpublishAllWorkerpoolorders(await contractsPromise, await getIexecGatewayURL(), workerpoolAddress);\n\n this.order.unpublishAllRequestorders = async () => order.unpublishAllRequestorders(await contractsPromise, await getIexecGatewayURL());\n\n this.order.matchOrders = async function (_ref2) {\n let {\n apporder,\n datasetorder = order.NULL_DATASETORDER,\n workerpoolorder,\n requestorder\n } = _ref2;\n let {\n checkRequest = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return order.matchOrders(await contractsPromise, apporder, datasetorder, workerpoolorder, checkRequest === true ? await checkRequestRequirements({\n contracts: await contractsPromise,\n smsURL: await getSmsURL()\n }, requestorder).then(() => requestorder) : requestorder);\n };\n\n this.orderbook = {};\n\n this.orderbook.fetchApporder = async apporderHash => order.fetchPublishedOrderByHash(await getIexecGatewayURL(), order.APP_ORDER, (await networkPromise).chainId, apporderHash);\n\n this.orderbook.fetchDatasetorder = async datasetorderHash => order.fetchPublishedOrderByHash(await getIexecGatewayURL(), order.DATASET_ORDER, (await networkPromise).chainId, datasetorderHash);\n\n this.orderbook.fetchWorkerpoolorder = async workerpoolorderHash => order.fetchPublishedOrderByHash(await getIexecGatewayURL(), order.WORKERPOOL_ORDER, (await networkPromise).chainId, workerpoolorderHash);\n\n this.orderbook.fetchRequestorder = async requestorderHash => order.fetchPublishedOrderByHash(await getIexecGatewayURL(), order.REQUEST_ORDER, (await networkPromise).chainId, requestorderHash);\n\n this.orderbook.fetchAppOrderbook = async function (appAddress) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return orderbook.fetchAppOrderbook(await contractsPromise, await getIexecGatewayURL(), appAddress, options);\n };\n\n this.orderbook.fetchDatasetOrderbook = async function (datasetAddress) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return orderbook.fetchDatasetOrderbook(await contractsPromise, await getIexecGatewayURL(), datasetAddress, options);\n };\n\n this.orderbook.fetchWorkerpoolOrderbook = async options => orderbook.fetchWorkerpoolOrderbook(await contractsPromise, await getIexecGatewayURL(), options);\n\n this.orderbook.fetchRequestOrderbook = async options => orderbook.fetchRequestOrderbook(await contractsPromise, await getIexecGatewayURL(), options);\n\n this.task = {};\n\n this.task.show = async taskid => task.show(await contractsPromise, taskid);\n\n this.task.obsTask = async function (taskid) {\n let {\n dealid\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return iexecProcess.obsTask(await contractsPromise, taskid, {\n dealid\n });\n };\n\n this.task.claim = async taskid => task.claim(await contractsPromise, taskid);\n\n this.task.fetchResults = async taskid => iexecProcess.fetchTaskResults(await contractsPromise, taskid, {\n ipfsGatewayURL: await getIpfsGatewayURL()\n });\n\n this.result = {};\n\n this.result.checkResultEncryptionKeyExists = async address => secretMgtServ.checkWeb2SecretExists(await contractsPromise, await getSmsURL(), address, getResultEncryptionKeyName());\n\n this.result.pushResultEncryptionKey = async function (publicKey) {\n let {\n forceUpdate = false\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return secretMgtServ.pushWeb2Secret(await contractsPromise, await getSmsURL(), getResultEncryptionKeyName(), publicKey, {\n forceUpdate\n });\n };\n\n this.storage = {};\n\n this.storage.defaultStorageLogin = async () => resultProxyServ.login(await contractsPromise, await getResultProxyURL());\n\n this.storage.checkStorageTokenExists = async function (address) {\n let {\n provider\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return secretMgtServ.checkWeb2SecretExists(await contractsPromise, await getSmsURL(), address, getStorageTokenKeyName(provider));\n };\n\n this.storage.pushStorageToken = async function (token) {\n let {\n provider,\n forceUpdate = false\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return secretMgtServ.pushWeb2Secret(await contractsPromise, await getSmsURL(), getStorageTokenKeyName(provider), token, {\n forceUpdate\n });\n };\n\n this.ens = {};\n\n this.ens.getOwner = async name => ens.getOwner(await contractsPromise, name);\n\n this.ens.resolveName = async name => ens.resolveName(await contractsPromise, name);\n\n this.ens.lookupAddress = async address => ens.lookupAddress(await contractsPromise, address);\n\n this.ens.claimName = async (label, domain) => ens.registerFifsEns(await contractsPromise, label, domain);\n\n this.ens.configureResolution = async (name, address) => ens.configureResolution(await contractsPromise, await getEnsPublicResolverAddress(), name, address);\n\n this.network = {};\n\n this.network.getNetwork = async () => {\n const contracts = await contractsPromise;\n return {\n chainId: contracts.chainId,\n isNative: contracts.isNative\n };\n };\n }\n\n}\n\nconst sdk = {\n IExec,\n errors,\n utils\n};\nmodule.exports = sdk;","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\"use strict\";\n\nconst Debug = require('debug');\n\nconst iexecProxyNetworks = require('@iexec/poco/build/contracts-min/ERC1538Proxy.json').networks;\n\nconst enterpriseHubMap = {\n 1: '0x0bf375A6238359CE14987C2285B8B099eE8e8709',\n 5: '0x0bf375A6238359CE14987C2285B8B099eE8e8709'\n};\nconst debug = Debug('iexec:utils');\n\nconst getHubAddress = (chainId, flavour, {\n strict = true\n} = {}) => {\n try {\n if (flavour === 'enterprise') {\n if (!enterpriseHubMap[chainId]) {\n if (strict) {\n throw Error('missing iExec proxy configuration');\n }\n\n return undefined;\n }\n\n return enterpriseHubMap[chainId];\n }\n\n if (!iexecProxyNetworks) {\n if (strict) {\n throw Error('missing iExec proxy configuration');\n }\n\n return undefined;\n }\n\n if (!(chainId in iexecProxyNetworks)) {\n if (strict) {\n throw Error(`missing chainId \"${chainId}\" in iExec proxy configuration`);\n }\n\n return undefined;\n }\n\n if (!('address' in iexecProxyNetworks[chainId])) {\n if (strict) {\n throw Error(`missing address in iExec proxy configuration for chainId \"${chainId}\"`);\n }\n\n return undefined;\n }\n\n return iexecProxyNetworks[chainId].address;\n } catch (error) {\n debug('getHubAddress()', error);\n throw error;\n }\n};\n\nconst getContractAddress = (objName, desc, chainId, flavour, {\n strict = true\n} = {}) => {\n try {\n if (objName === 'hub') return getHubAddress(chainId, flavour, {\n strict\n });\n\n if (flavour === 'enterprise') {\n if (strict) {\n throw Error('missing enterprise configuration');\n }\n\n return undefined;\n }\n\n if (!('networks' in desc)) {\n if (strict) {\n throw Error('missing networks key in contract JSON description');\n }\n\n return undefined;\n }\n\n if (!(chainId in desc.networks)) {\n if (strict) {\n throw Error(`missing \"${chainId}\" key in contract JSON description`);\n }\n\n return undefined;\n }\n\n if (!('address' in desc.networks[chainId])) {\n if (strict) {\n throw Error(`missing address key in contract JSON description for chainId: ${chainId}`);\n }\n\n return undefined;\n }\n\n return desc.networks[chainId].address;\n } catch (error) {\n debug('getContractAddress()', error);\n throw error;\n }\n};\n\nconst toUpperFirst = str => ''.concat(str[0].toUpperCase(), str.substr(1));\n\nconst nativeNetworks = {\n standard: ['133', '134'],\n enterprise: []\n};\nconst gasPriceByNetwork = {\n 133: '0x0',\n 134: '0x0'\n};\n\nconst getIsNative = (chainId, flavour) => nativeNetworks[flavour].includes(chainId);\n\nconst getGasPriceOverride = chainId => gasPriceByNetwork[chainId];\n\nmodule.exports = {\n getContractAddress,\n getIsNative,\n getGasPriceOverride,\n toUpperFirst\n};","var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = self.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.onabort = function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!self.fetch) {\n self.fetch = fetch;\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","var BigInteger = require('../libs/jsbn.js');\r\nvar schemes = require('../schemes/schemes.js');\r\n\r\nmodule.exports = function (keyPair, options) {\r\n var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options);\r\n\r\n return {\r\n encrypt: function (buffer, usePrivate) {\r\n var m, c;\r\n if (usePrivate) {\r\n /* Type 1: zeros padding for private key encrypt */\r\n m = new BigInteger(pkcs1Scheme.encPad(buffer, {type: 1}));\r\n c = keyPair.$doPrivate(m);\r\n } else {\r\n m = new BigInteger(keyPair.encryptionScheme.encPad(buffer));\r\n c = keyPair.$doPublic(m);\r\n }\r\n return c.toBuffer(keyPair.encryptedDataLength);\r\n },\r\n\r\n decrypt: function (buffer, usePublic) {\r\n var m, c = new BigInteger(buffer);\r\n\r\n if (usePublic) {\r\n m = keyPair.$doPublic(c);\r\n /* Type 1: zeros padding for private key decrypt */\r\n return pkcs1Scheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength), {type: 1});\r\n } else {\r\n m = keyPair.$doPrivate(c);\r\n return keyPair.encryptionScheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength));\r\n }\r\n }\r\n };\r\n};","'use strict';\nconst ipRegex = require('ip-regex');\n\nconst isIp = string => ipRegex({exact: true}).test(string);\nisIp.v4 = string => ipRegex.v4({exact: true}).test(string);\nisIp.v6 = string => ipRegex.v6({exact: true}).test(string);\nisIp.version = string => isIp(string) ? (isIp.v4(string) ? 4 : 6) : undefined;\n\nmodule.exports = isIp;\n","'use strict';\n\nvar basics = require('multiformats/basics');\n\nfunction createCodec(name, prefix, encode, decode) {\n return {\n name,\n prefix,\n encoder: {\n name,\n prefix,\n encode\n },\n decoder: { decode }\n };\n}\nconst string = createCodec('utf8', 'u', buf => {\n const decoder = new TextDecoder('utf8');\n return 'u' + decoder.decode(buf);\n}, str => {\n const encoder = new TextEncoder();\n return encoder.encode(str.substring(1));\n});\nconst ascii = createCodec('ascii', 'a', buf => {\n let string = 'a';\n for (let i = 0; i < buf.length; i++) {\n string += String.fromCharCode(buf[i]);\n }\n return string;\n}, str => {\n str = str.substring(1);\n const buf = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n});\nconst BASES = {\n utf8: string,\n 'utf-8': string,\n hex: basics.bases.base16,\n latin1: ascii,\n ascii: ascii,\n binary: ascii,\n ...basics.bases\n};\n\nmodule.exports = BASES;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.js');\n\nconst base16 = base.rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n});\nconst base16upper = base.rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n});\n\nexports.base16 = base16;\nexports.base16upper = base16upper;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\nconst name = 'json';\nconst code = 512;\nconst encode = node => textEncoder.encode(JSON.stringify(node));\nconst decode = data => JSON.parse(textDecoder.decode(data));\n\nexports.code = code;\nexports.decode = decode;\nexports.encode = encode;\nexports.name = name;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayReduce = require('./_arrayReduce'),\n deburr = require('./deburr'),\n words = require('./words');\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nmodule.exports = createCompounder;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","\"use strict\";\n\nconst paramsKeyName = {\n IEXEC_ARGS: 'iexec_args',\n IEXEC_INPUT_FILES: 'iexec_input_files',\n IEXEC_RESULT_ENCRYPTION: 'iexec_result_encryption',\n IEXEC_RESULT_STORAGE_PROVIDER: 'iexec_result_storage_provider',\n IEXEC_RESULT_STORAGE_PROXY: 'iexec_result_storage_proxy',\n IEXEC_DEVELOPER_LOGGER: 'iexec_developer_logger'\n};\n\nconst storageProviders = () => ['ipfs', 'dropbox'];\n\nmodule.exports = {\n paramsKeyName,\n storageProviders\n};","\"use strict\";\n\nconst Debug = require('debug');\n\nconst BN = require('bn.js');\n\nconst {\n getAddress,\n isInWhitelist,\n checkBalances\n} = require('./wallet');\n\nconst {\n checkEvent,\n ethersBnToBn,\n bnNRlcToBnWei,\n bnToEthersBn,\n NULL_BYTES\n} = require('../utils/utils');\n\nconst {\n nRlcAmountSchema,\n addressSchema,\n throwIfMissing\n} = require('../utils/validator');\n\nconst {\n wrapCall,\n wrapSend,\n wrapWait\n} = require('../utils/errorWrappers');\n\nconst debug = Debug('iexec:account');\n\nconst checkBalance = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(address);\n const {\n stake,\n locked\n } = await wrapCall(contracts.checkBalance(vAddress));\n const balance = {\n stake: ethersBnToBn(stake),\n locked: ethersBnToBn(locked)\n };\n return balance;\n } catch (error) {\n debug('checkBalance()', error);\n throw error;\n }\n};\n\nconst deposit = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAmount = await nRlcAmountSchema().validate(amount);\n if (new BN(vAmount).lte(new BN(0))) throw Error('Deposit amount must be greather than 0');\n\n if (contracts.flavour === 'enterprise') {\n await isInWhitelist(contracts, await getAddress(contracts), {\n strict: true\n });\n }\n\n let txHash;\n const {\n nRLC\n } = await checkBalances(contracts, await getAddress(contracts));\n if (nRLC.lt(new BN(vAmount))) throw Error('Deposit amount exceed wallet balance');\n const iexecAddress = await contracts.fetchIExecAddress();\n const iexecContract = contracts.getIExecContract();\n\n if (!contracts.isNative) {\n const rlcAddress = await wrapCall(contracts.fetchRLCAddress());\n const tx = await wrapSend(contracts.getRLCContract({\n at: rlcAddress\n }).approveAndCall(iexecAddress, vAmount, NULL_BYTES, contracts.txOptions));\n const txReceipt = await wrapWait(tx.wait(contracts.confirms));\n if (!checkEvent('Approval', txReceipt.events)) throw Error('Approval not confirmed');\n if (!checkEvent('Transfer', txReceipt.events)) throw Error('Transfer not confirmed');\n txHash = tx.hash;\n } else {\n const weiAmount = bnToEthersBn(bnNRlcToBnWei(new BN(vAmount))).toHexString();\n const tx = await wrapSend(iexecContract.deposit({\n value: weiAmount,\n gasPrice: contracts.txOptions && contracts.txOptions.gasPrice || undefined\n }));\n const txReceipt = await wrapWait(tx.wait(contracts.confirms));\n if (!checkEvent('Transfer', txReceipt.events)) throw Error('Deposit not confirmed');\n txHash = tx.hash;\n }\n\n return {\n amount: vAmount,\n txHash\n };\n } catch (error) {\n debug('deposit()', error);\n throw error;\n }\n};\n\nconst withdraw = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vAmount = await nRlcAmountSchema().validate(amount);\n if (new BN(vAmount).lte(new BN(0))) throw Error('Withdraw amount must be greather than 0');\n\n if (contracts.flavour === 'enterprise') {\n await isInWhitelist(contracts, await getAddress(contracts), {\n strict: true\n });\n }\n\n const iexecContract = contracts.getIExecContract();\n const {\n stake\n } = await checkBalance(contracts, await getAddress(contracts));\n if (stake.lt(new BN(vAmount))) throw Error('Withdraw amount exceed account balance');\n const tx = await wrapSend(iexecContract.withdraw(vAmount, contracts.txOptions));\n const txReceipt = await wrapWait(tx.wait(contracts.confirms));\n if (!checkEvent('Transfer', txReceipt.events)) throw Error('Withdraw not confirmed');\n return {\n amount: vAmount,\n txHash: tx.hash\n };\n } catch (error) {\n debug('withdraw()', error);\n throw error;\n }\n};\n\nmodule.exports = {\n checkBalance,\n deposit,\n withdraw\n};","\"use strict\";\n\nconst {\n checkWeb2SecretExists\n} = require('./sms');\n\nconst {\n NULL_BYTES32,\n NULL_ADDRESS,\n checkActiveBitInTag\n} = require('../utils/utils');\n\nconst {\n getStorageTokenKeyName,\n reservedSecretKeyName\n} = require('../utils/secrets-utils');\n\nconst {\n paramsKeyName\n} = require('../utils/params-utils');\n\nconst {\n objParamsSchema,\n requestorderSchema,\n throwIfMissing\n} = require('../utils/validator');\n\nconst createObjParams = async function () {\n let {\n params = {},\n tag = NULL_BYTES32,\n callback = NULL_ADDRESS,\n noCast = false,\n resultProxyURL\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let inputParams;\n\n if (typeof params === 'string') {\n try {\n inputParams = JSON.parse(params);\n } catch (e) {\n inputParams = {\n iexec_args: params\n };\n }\n } else {\n inputParams = params;\n }\n\n const isTee = checkActiveBitInTag(tag, 1);\n const isCallback = callback !== NULL_ADDRESS;\n const objParams = await objParamsSchema().validate(inputParams, {\n strict: noCast,\n context: {\n isTee,\n isCallback,\n resultProxyURL\n }\n });\n return objParams;\n};\n\nconst checkRequestRequirements = async function () {\n let {\n contracts = throwIfMissing(),\n smsURL = throwIfMissing()\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let requestorder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n await requestorderSchema().validate(requestorder);\n const params = await createObjParams({\n params: requestorder.params,\n tag: requestorder.tag,\n callback: requestorder.callback,\n noCast: true\n }); // check encryption key\n\n if (params[paramsKeyName.IEXEC_RESULT_ENCRYPTION] === true) {\n const isEncryptionKeySet = await checkWeb2SecretExists(contracts, smsURL, requestorder.beneficiary, reservedSecretKeyName.IEXEC_RESULT_ENCRYPTION_PUBLIC_KEY);\n\n if (!isEncryptionKeySet) {\n throw Error('Beneficiary result encryption key is not set in the SMS. Result encryption will fail.');\n }\n } // check storage token\n\n\n if (params[paramsKeyName.IEXEC_RESULT_STORAGE_PROVIDER] === 'ipfs' || params[paramsKeyName.IEXEC_RESULT_STORAGE_PROVIDER] === 'dropbox') {\n const isStorageTokenSet = await checkWeb2SecretExists(contracts, smsURL, requestorder.requester, getStorageTokenKeyName(params[paramsKeyName.IEXEC_RESULT_STORAGE_PROVIDER]));\n\n if (!isStorageTokenSet) {\n throw Error(\"Requester storage token is not set for selected provider \\\"\".concat(params[paramsKeyName.IEXEC_RESULT_STORAGE_PROVIDER], \"\\\". Result archive upload will fail.\"));\n }\n }\n\n return true;\n};\n\nmodule.exports = {\n createObjParams,\n checkRequestRequirements\n};","\"use strict\";\n\nconst Debug = require('debug');\n\nconst {\n Buffer\n} = require('buffer');\n\nconst {\n keccak256,\n arrayify\n} = require('ethers').utils;\n\nconst {\n getAddress\n} = require('./wallet');\n\nconst {\n httpRequest\n} = require('../utils/api-utils');\n\nconst {\n addressSchema,\n stringSchema,\n throwIfMissing\n} = require('../utils/validator');\n\nconst {\n wrapPersonalSign\n} = require('../utils/errorWrappers');\n\nconst debug = Debug('iexec:sms');\nconst DOMAIN = 'IEXEC_SMS_DOMAIN';\n\nconst concatenateAndHash = function () {\n for (var _len = arguments.length, hexaStringArray = new Array(_len), _key = 0; _key < _len; _key++) {\n hexaStringArray[_key] = arguments[_key];\n }\n\n const buffer = Buffer.concat(hexaStringArray.map(hexString => Buffer.from(arrayify(hexString))));\n return keccak256(buffer);\n};\n\nconst getChallengeForSetWeb3Secret = (secretAddress, secretValue) => concatenateAndHash(keccak256(Buffer.from(DOMAIN, 'utf8')), secretAddress, keccak256(Buffer.from(secretValue, 'utf8')));\n\nconst getChallengeForSetWeb2Secret = (ownerAddress, secretKey, secretValue) => concatenateAndHash(keccak256(Buffer.from(DOMAIN, 'utf8')), ownerAddress, keccak256(Buffer.from(secretKey, 'utf8')), keccak256(Buffer.from(secretValue, 'utf8')));\n\nconst checkWeb3SecretExists = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let smsURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let resourceAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n\n try {\n const vResourceAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(resourceAddress);\n const res = await httpRequest('HEAD')({\n api: smsURL,\n endpoint: '/secrets/web3',\n query: {\n secretAddress: vResourceAddress\n }\n }).catch(e => {\n debug(e);\n throw Error(\"SMS at \".concat(smsURL, \" didn't answered\"));\n });\n\n if (res.ok) {\n return true;\n }\n\n if (res.status === 404) {\n return false;\n }\n\n throw Error(\"SMS answered with unexpected status: \".concat(res.status, \" \").concat(res.statusText));\n } catch (error) {\n debug('checkWeb3SecretExists()', error);\n throw error;\n }\n};\n\nconst checkWeb2SecretExists = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let smsURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let ownerAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n let secretName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : throwIfMissing();\n\n try {\n const vOwnerAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(ownerAddress);\n const res = await httpRequest('HEAD')({\n api: smsURL,\n endpoint: '/secrets/web2',\n query: {\n ownerAddress: vOwnerAddress,\n secretName\n }\n }).catch(e => {\n debug(e);\n throw Error(\"SMS at \".concat(smsURL, \" didn't answered\"));\n });\n\n if (res.ok) {\n return true;\n }\n\n if (res.status === 404) {\n return false;\n }\n\n throw Error(\"SMS answered with unexpected status: \".concat(res.status, \" \").concat(res.statusText));\n } catch (error) {\n debug('checkWeb2SecretExists()', error);\n throw error;\n }\n};\n\nconst pushWeb3Secret = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let smsURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let resourceAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n let secretValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : throwIfMissing();\n\n try {\n const vResourceAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(resourceAddress);\n const vSignerAddress = await getAddress(contracts);\n await stringSchema().validate(secretValue, {\n strict: true\n });\n const challenge = getChallengeForSetWeb3Secret(vResourceAddress, secretValue);\n const binaryChallenge = arrayify(challenge);\n const auth = await wrapPersonalSign(contracts.signer.signMessage(binaryChallenge));\n const res = await httpRequest('POST')({\n api: smsURL,\n endpoint: '/secrets/web3',\n query: {\n secretAddress: vResourceAddress\n },\n body: secretValue,\n headers: {\n Authorization: auth\n }\n }).catch(e => {\n debug(e);\n throw Error(\"SMS at \".concat(smsURL, \" didn't answered\"));\n });\n\n if (res.ok) {\n return true;\n }\n\n if (res.status === 409) {\n throw Error(\"Secret already exists for \".concat(vResourceAddress, \" and can't be updated\"));\n }\n\n if (res.status === 401) {\n throw Error(\"Wallet \".concat(vSignerAddress, \" is not allowed to set secret for \").concat(vResourceAddress));\n }\n\n throw Error(\"SMS answered with unexpected status: \".concat(res.status, \" \").concat(res.statusText));\n } catch (error) {\n debug('pushWeb3Secret()', error);\n throw error;\n }\n};\n\nconst pushWeb2Secret = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let smsURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let secretName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n let secretValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : throwIfMissing();\n let {\n forceUpdate = false\n } = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n try {\n const ownerAddress = await getAddress(contracts);\n await stringSchema().validate(secretName, {\n strict: true\n });\n await stringSchema().validate(secretValue, {\n strict: true\n });\n const secretExists = await checkWeb2SecretExists(contracts, smsURL, ownerAddress, secretName);\n\n if (secretExists && !forceUpdate) {\n throw Error(\"Secret \\\"\".concat(secretName, \"\\\" already exists for \").concat(ownerAddress));\n }\n\n const update = !!secretExists;\n const challenge = getChallengeForSetWeb2Secret(ownerAddress, secretName, secretValue);\n const binaryChallenge = arrayify(challenge);\n const auth = await wrapPersonalSign(contracts.signer.signMessage(binaryChallenge));\n const res = await httpRequest(update ? 'PUT' : 'POST')({\n api: smsURL,\n endpoint: '/secrets/web2',\n query: {\n ownerAddress,\n secretName\n },\n body: secretValue,\n headers: {\n Authorization: auth\n }\n }).catch(e => {\n debug(e);\n throw Error(\"SMS at \".concat(smsURL, \" didn't answered\"));\n });\n\n if (res.ok) {\n return {\n isPushed: true,\n isUpdated: update\n };\n }\n\n throw Error(\"SMS answered with unexpected status: \".concat(res.status, \" \").concat(res.statusText));\n } catch (error) {\n debug('pushWeb2Secret()', error);\n throw error;\n }\n};\n\nmodule.exports = {\n pushWeb2Secret,\n pushWeb3Secret,\n checkWeb3SecretExists,\n checkWeb2SecretExists\n};","\"use strict\";\n\nconst Debug = require('debug');\n\nconst ethersUtils = require('ethers').utils;\n\nconst debug = Debug('iexec:sig-utils');\n\nconst hashEIP712 = typedData => {\n try {\n const {\n domain,\n message\n } = typedData;\n const {\n EIP712Domain,\n ...types\n } = typedData.types; // use experiental ether utils._TypedDataEncoder (to remove when TypedDataEncoder is included)\n // https://docs.ethers.io/v5/api/utils/hashing/#TypedDataEncoder\n\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_TypedDataEncoder\"] }] */\n\n const TypedDataEncoder = ethersUtils._TypedDataEncoder && ethersUtils._TypedDataEncoder.from && typeof ethersUtils._TypedDataEncoder.from === 'function' ? ethersUtils._TypedDataEncoder : ethersUtils.TypedDataEncoder;\n return TypedDataEncoder.hash(domain, types, message);\n } catch (error) {\n debug('hashEIP712()', error);\n throw error;\n }\n};\n\nmodule.exports = {\n hashEIP712\n};","\"use strict\";\n\nconst reservedSecretKeyName = {\n // result encryption\n IEXEC_RESULT_ENCRYPTION_PUBLIC_KEY: 'iexec-result-encryption-public-key',\n // result storage\n IEXEC_RESULT_DROPBOX_TOKEN: 'iexec-result-dropbox-token',\n IEXEC_RESULT_IEXEC_IPFS_TOKEN: 'iexec-result-iexec-ipfs-token'\n};\n\nconst getStorageTokenKeyName = provider => {\n switch (provider) {\n case undefined:\n case 'default':\n case 'ipfs':\n return reservedSecretKeyName.IEXEC_RESULT_IEXEC_IPFS_TOKEN;\n\n case 'dropbox':\n return reservedSecretKeyName.IEXEC_RESULT_DROPBOX_TOKEN;\n\n default:\n throw Error(\"\\\"\".concat(provider, \"\\\" not supported\"));\n }\n};\n\nconst getResultEncryptionKeyName = () => reservedSecretKeyName.IEXEC_RESULT_ENCRYPTION_PUBLIC_KEY;\n\nmodule.exports = {\n reservedSecretKeyName,\n getStorageTokenKeyName,\n getResultEncryptionKeyName\n};","\"use strict\";\n\nconst Debug = require('debug');\n\nconst {\n defaultAbiCoder,\n keccak256\n} = require('ethers').utils;\n\nconst {\n showCategory,\n getTimeoutRatio\n} = require('./hub');\n\nconst {\n cleanRPC,\n bnifyNestedEthersBn,\n ethersBnToBn,\n NULL_ADDRESS,\n BN\n} = require('../utils/utils');\n\nconst {\n jsonApi,\n wrapPaginableRequest\n} = require('../utils/api-utils');\n\nconst {\n chainIdSchema,\n addressSchema,\n bytes32Schema,\n uint256Schema,\n positiveIntSchema,\n positiveStrictIntSchema,\n throwIfMissing\n} = require('../utils/validator');\n\nconst {\n ObjectNotFoundError\n} = require('../utils/errors');\n\nconst {\n wrapCall,\n wrapSend,\n wrapWait\n} = require('../utils/errorWrappers');\n\nconst debug = Debug('iexec:deal');\n\nconst fetchRequesterDeals = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let iexecGatewayURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let requesterAddress = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n let {\n appAddress,\n datasetAddress,\n workerpoolAddress\n } = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n try {\n const vRequesterAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(requesterAddress);\n const vChainId = await chainIdSchema().validate(contracts.chainId);\n let vAppAddress;\n let vDatasetAddress;\n let vWorkerpoolAddress;\n\n if (appAddress) {\n vAppAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(appAddress);\n }\n\n if (datasetAddress) {\n vDatasetAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(datasetAddress);\n }\n\n if (workerpoolAddress) {\n vWorkerpoolAddress = await addressSchema({\n ethProvider: contracts.provider\n }).validate(workerpoolAddress);\n }\n\n const query = {\n chainId: vChainId,\n requester: vRequesterAddress,\n ...(appAddress && {\n app: vAppAddress\n }),\n ...(datasetAddress && {\n dataset: vDatasetAddress\n }),\n ...(workerpoolAddress && {\n workerpool: vWorkerpoolAddress\n })\n };\n const response = await wrapPaginableRequest(jsonApi.get)({\n api: iexecGatewayURL,\n endpoint: '/deals',\n query\n });\n\n if (response.ok && response.deals) {\n return response;\n }\n\n throw Error('An error occured while getting deals');\n } catch (error) {\n debug('fetchRequesterDeals()', error);\n throw error;\n }\n};\n\nconst computeTaskId = async function () {\n let dealid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let taskIdx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const encodedTypes = ['bytes32', 'uint256'];\n const values = [await bytes32Schema().validate(dealid), await uint256Schema().validate(taskIdx)];\n const encoded = defaultAbiCoder.encode(encodedTypes, values);\n const taskid = keccak256(encoded);\n return taskid;\n } catch (error) {\n debug('computeTaskId()', error);\n throw error;\n }\n};\n\nconst computeTaskIdsArray = async function () {\n let dealid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let firstTaskIdx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n let botSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : throwIfMissing();\n const vDealid = await bytes32Schema().validate(dealid);\n const vFirstTaskIdx = await positiveIntSchema().validate(firstTaskIdx);\n const vBotSize = await positiveStrictIntSchema().validate(botSize);\n const tasksIdx = [...Array(vBotSize).keys()].map(n => n + vFirstTaskIdx);\n const taskids = await Promise.all(tasksIdx.map(idx => computeTaskId(vDealid, idx)));\n return taskids;\n};\n\nconst show = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let dealid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vDealid = await bytes32Schema().validate(dealid);\n const {\n chainId\n } = contracts;\n const iexecContract = contracts.getIExecContract();\n const deal = bnifyNestedEthersBn(cleanRPC(await wrapCall(iexecContract.viewDeal(vDealid))));\n const dealExists = deal && deal.app && deal.app.pointer && deal.app.pointer !== NULL_ADDRESS;\n\n if (!dealExists) {\n throw new ObjectNotFoundError('deal', dealid, chainId);\n }\n\n const [{\n workClockTimeRef\n }, timeoutRatio] = await Promise.all([showCategory(contracts, deal.category), getTimeoutRatio(contracts)]);\n const finalTime = deal.startTime.add(timeoutRatio.mul(workClockTimeRef));\n const now = Math.floor(Date.now() / 1000);\n const deadlineReached = now >= finalTime.toNumber();\n const tasks = await computeTaskIdsArray(dealid, deal.botFirst.toString(), deal.botSize.toString());\n const enhancedDeal = {\n dealid: vDealid,\n ...deal,\n finalTime,\n deadlineReached,\n tasks\n };\n return enhancedDeal;\n } catch (error) {\n debug('show()', error);\n throw error;\n }\n};\n\nconst getTaskStatus = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let taskid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vTaskId = await bytes32Schema().validate(taskid);\n const iexecContract = contracts.getIExecContract();\n const task = bnifyNestedEthersBn(cleanRPC(await wrapCall(iexecContract.viewTask(vTaskId))));\n return new BN(task.status).toNumber();\n } catch (error) {\n debug('getTaskStatus()', error);\n throw error;\n }\n};\n\nconst claim = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let dealid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n const transactions = [];\n const claimed = {};\n\n try {\n const vDealid = await bytes32Schema().validate(dealid);\n const deal = await show(contracts, vDealid);\n\n if (!deal.deadlineReached) {\n throw Error(\"Cannot claim a deal before reaching the final time: \".concat(new Date(1000 * deal.finalTime)));\n }\n\n const {\n tasks\n } = deal;\n const initialized = [];\n const notInitialized = [];\n await Promise.all(Object.entries(tasks).map(async _ref => {\n let [idx, taskid] = _ref;\n const taskStatus = await getTaskStatus(contracts, taskid);\n\n if (taskStatus === 0) {\n notInitialized.push({\n idx,\n taskid\n });\n } else if (taskStatus < 3) {\n initialized.push({\n idx,\n taskid\n });\n }\n }));\n if (initialized.length === 0 && notInitialized.length === 0) throw Error('Nothing to claim');\n initialized.sort((a, b) => parseInt(a.idx, 10) > parseInt(b.idx, 10) ? 1 : -1);\n notInitialized.sort((a, b) => parseInt(a.idx, 10) > parseInt(b.idx, 10) ? 1 : -1);\n const lastBlock = await wrapCall(contracts.provider.getBlock('latest'));\n const blockGasLimit = ethersBnToBn(lastBlock.gasLimit);\n debug('blockGasLimit', blockGasLimit.toString());\n const iexecContract = contracts.getIExecContract();\n\n if (initialized.length > 0) {\n const EST_GAS_PER_CLAIM = new BN(55000);\n const maxClaimPerTx = blockGasLimit.div(EST_GAS_PER_CLAIM);\n\n const processClaims = async () => {\n if (!initialized.length) return;\n const initializedToProcess = initialized.splice(0, maxClaimPerTx.toNumber());\n const taskidToProcess = initializedToProcess.map(_ref2 => {\n let {\n taskid\n } = _ref2;\n return taskid;\n });\n const tx = await wrapSend(iexecContract.claimArray(taskidToProcess, contracts.txOptions));\n debug(\"claimArray \".concat(tx.hash, \" (\").concat(initializedToProcess.length, \" tasks)\"));\n await wrapWait(tx.wait(contracts.confirms));\n transactions.push({\n txHash: tx.hash,\n type: 'claimArray'\n });\n Object.assign(claimed, ...initializedToProcess.map(e => ({\n [e.idx]: e.taskid\n })));\n await processClaims();\n };\n\n await processClaims();\n }\n\n if (notInitialized.length > 0) {\n const EST_GAS_PER_CLAIM = new BN(250000);\n const maxClaimPerTx = blockGasLimit.div(EST_GAS_PER_CLAIM);\n\n const processInitAndClaims = async () => {\n if (!notInitialized.length) return;\n const notInitializedToProcess = notInitialized.splice(0, maxClaimPerTx.toNumber());\n const idxToProcess = notInitializedToProcess.map(_ref3 => {\n let {\n idx\n } = _ref3;\n return idx;\n });\n const dealidArray = new Array(idxToProcess.length).fill(vDealid);\n const tx = await wrapSend(iexecContract.initializeAndClaimArray(dealidArray, idxToProcess, contracts.txOptions));\n debug(\"initializeAndClaimArray \".concat(tx.hash, \" (\").concat(notInitializedToProcess.length, \" tasks)\"));\n await wrapWait(tx.wait(contracts.confirms));\n transactions.push({\n txHash: tx.hash,\n type: 'initializeAndClaimArray'\n });\n Object.assign(claimed, ...notInitializedToProcess.map(e => ({\n [e.idx]: e.taskid\n })));\n await processInitAndClaims();\n };\n\n await processInitAndClaims();\n }\n\n return {\n transactions,\n claimed\n };\n } catch (error) {\n debug('claim()', error);\n throw error;\n }\n};\n\nmodule.exports = {\n show,\n computeTaskId,\n fetchRequesterDeals,\n claim\n};","\"use strict\";\n\nconst Debug = require('debug');\n\nconst {\n Buffer\n} = require('buffer');\n\nconst {\n checkEvent,\n bnifyNestedEthersBn,\n cleanRPC,\n NULL_BYTES32,\n NULL_BYTES\n} = require('../utils/utils');\n\nconst {\n bytes32Schema,\n throwIfMissing\n} = require('../utils/validator');\n\nconst {\n ObjectNotFoundError\n} = require('../utils/errors');\n\nconst {\n wrapCall,\n wrapSend,\n wrapWait\n} = require('../utils/errorWrappers');\n\nconst debug = Debug('iexec:task');\nconst objName = 'task';\nconst TASK_STATUS_MAP = {\n 0: 'UNSET',\n 1: 'ACTIVE',\n 2: 'REVEALING',\n 3: 'COMPLETED',\n 4: 'FAILED',\n timeout: 'TIMEOUT'\n};\n\nconst decodeTaskResult = results => {\n try {\n if (results !== NULL_BYTES) {\n const json = JSON.parse(Buffer.from(results.substr(2), 'hex').toString('utf8'));\n return json;\n }\n } catch (e) {// nothing to do\n }\n\n return {\n storage: 'none'\n };\n};\n\nconst show = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let taskid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vTaskId = await bytes32Schema().validate(taskid);\n const {\n chainId\n } = contracts;\n const iexecContract = contracts.getIExecContract();\n const task = bnifyNestedEthersBn(cleanRPC(await wrapCall(iexecContract.viewTask(vTaskId))));\n\n if (task.dealid === NULL_BYTES32) {\n throw new ObjectNotFoundError('task', vTaskId, chainId);\n }\n\n const now = Math.floor(Date.now() / 1000);\n const consensusTimeout = parseInt(task.finalDeadline, 10);\n const taskTimedOut = task.status !== 3 && now >= consensusTimeout;\n const decodedResult = decodeTaskResult(task.results);\n return {\n taskid: vTaskId,\n ...task,\n statusName: task.status < 3 && taskTimedOut ? TASK_STATUS_MAP.timeout : TASK_STATUS_MAP[task.status],\n taskTimedOut,\n results: decodedResult\n };\n } catch (error) {\n debug('show()', error);\n throw error;\n }\n};\n\nconst claim = async function () {\n let contracts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : throwIfMissing();\n let taskid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : throwIfMissing();\n\n try {\n const vTaskId = await bytes32Schema().validate(taskid);\n const task = await show(contracts, vTaskId);\n const taskStatus = task.status;\n\n if ([3, 4].includes(taskStatus)) {\n throw Error(\"Cannot claim a \".concat(objName, \" having status \").concat(TASK_STATUS_MAP[taskStatus.toString()]));\n }\n\n if (!task.taskTimedOut) {\n throw Error(\"Cannot claim a \".concat(objName, \" before reaching the consensus deadline date: \").concat(new Date(1000 * parseInt(task.finalDeadline, 10))));\n }\n\n const iexecContract = contracts.getIExecContract();\n const claimTx = await wrapSend(iexecContract.claim(taskid, contracts.txOptions));\n const claimTxReceipt = await wrapWait(claimTx.wait(contracts.confirms));\n if (!checkEvent('TaskClaimed', claimTxReceipt.events)) throw Error('TaskClaimed not confirmed');\n return claimTx.hash;\n } catch (error) {\n debug('claim()', error);\n throw error;\n }\n};\n\nmodule.exports = {\n TASK_STATUS_MAP,\n show,\n claim\n};","'use strict'\n\nconst mh = require('multihashes')\nconst multibase = require('multibase')\nconst multicodec = require('multicodec')\nconst CIDUtil = require('./cid-util')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { equals: uint8ArrayEquals } = require('uint8arrays/equals')\n\nconst codecs = multicodec.nameToCode\nconst codecInts = /** @type {CodecName[]} */(Object.keys(codecs)).reduce((p, name) => {\n p[codecs[name]] = name\n return p\n}, /** @type {Record} */({}))\n\nconst symbol = Symbol.for('@ipld/js-cid/CID')\n\n/**\n * @typedef {Object} SerializedCID\n * @property {string} codec\n * @property {number} version\n * @property {Uint8Array} hash\n */\n/**\n * @typedef {0|1} CIDVersion\n * @typedef {import('multibase').BaseNameOrCode} BaseNameOrCode\n * @typedef {import('multicodec').CodecName} CodecName\n * @typedef {import('multicodec').CodecCode} CodecCode\n */\n\n/**\n * Class representing a CID ``\n * , as defined in [ipld/cid](https://github.com/multiformats/cid).\n *\n * @class CID\n */\nclass CID {\n /**\n * Create a new CID.\n *\n * The algorithm for argument input is roughly:\n * ```\n * if (cid)\n * -> create a copy\n * else if (str)\n * if (1st char is on multibase table) -> CID String\n * else -> bs58 encoded multihash\n * else if (Uint8Array)\n * if (1st byte is 0 or 1) -> CID\n * else -> multihash\n * else if (Number)\n * -> construct CID by parts\n * ```\n *\n * @param {CIDVersion | string | Uint8Array | CID} version\n * @param {string|number} [codec]\n * @param {Uint8Array} [multihash]\n * @param {string} [multibaseName]\n *\n * @example\n * new CID(, , , )\n * new CID()\n * new CID()\n * new CID()\n * new CID()\n * new CID()\n */\n constructor (version, codec, multihash, multibaseName) {\n // We have below three blank field accessors only because\n // otherwise TS will not pick them up if done after assignemnts\n\n /**\n * The version of the CID.\n *\n * @type {CIDVersion}\n */\n // eslint-disable-next-line no-unused-expressions\n this.version\n\n /**\n * The codec of the CID.\n *\n * @deprecated\n * @type {CodecName}\n */\n // eslint-disable-next-line no-unused-expressions\n this.codec\n\n /**\n * The multihash of the CID.\n *\n * @type {Uint8Array}\n */\n // eslint-disable-next-line no-unused-expressions\n this.multihash\n\n Object.defineProperty(this, symbol, { value: true })\n if (CID.isCID(version)) {\n // version is an exising CID instance\n const cid = /** @type {CID} */(version)\n this.version = cid.version\n this.codec = cid.codec\n this.multihash = cid.multihash\n // Default guard for when a CID < 0.7 is passed with no multibaseName\n // @ts-ignore\n this.multibaseName = cid.multibaseName || (cid.version === 0 ? 'base58btc' : 'base32')\n return\n }\n\n if (typeof version === 'string') {\n // e.g. 'base32' or false\n const baseName = multibase.isEncoded(version)\n if (baseName) {\n // version is a CID String encoded with multibase, so v1\n const cid = multibase.decode(version)\n this.version = /** @type {CIDVersion} */(parseInt(cid[0].toString(), 16))\n this.codec = multicodec.getCodec(cid.slice(1))\n this.multihash = multicodec.rmPrefix(cid.slice(1))\n this.multibaseName = baseName\n } else {\n // version is a base58btc string multihash, so v0\n this.version = 0\n this.codec = 'dag-pb'\n this.multihash = mh.fromB58String(version)\n this.multibaseName = 'base58btc'\n }\n CID.validateCID(this)\n Object.defineProperty(this, 'string', { value: version })\n return\n }\n\n if (version instanceof Uint8Array) {\n const v = parseInt(version[0].toString(), 16)\n if (v === 1) {\n // version is a CID Uint8Array\n const cid = version\n this.version = v\n this.codec = multicodec.getCodec(cid.slice(1))\n this.multihash = multicodec.rmPrefix(cid.slice(1))\n this.multibaseName = 'base32'\n } else {\n // version is a raw multihash Uint8Array, so v0\n this.version = 0\n this.codec = 'dag-pb'\n this.multihash = version\n this.multibaseName = 'base58btc'\n }\n CID.validateCID(this)\n return\n }\n\n // otherwise, assemble the CID from the parameters\n\n this.version = version\n\n if (typeof codec === 'number') {\n // @ts-ignore\n codec = codecInts[codec]\n }\n\n this.codec = /** @type {CodecName} */ (codec)\n\n this.multihash = /** @type {Uint8Array} */ (multihash)\n\n /**\n * Multibase name as string.\n *\n * @deprecated\n * @type {string}\n */\n this.multibaseName = multibaseName || (version === 0 ? 'base58btc' : 'base32')\n\n CID.validateCID(this)\n }\n\n /**\n * The CID as a `Uint8Array`\n *\n * @returns {Uint8Array}\n *\n */\n get bytes () {\n // @ts-ignore\n let bytes = this._bytes\n\n if (!bytes) {\n if (this.version === 0) {\n bytes = this.multihash\n } else if (this.version === 1) {\n const codec = multicodec.getCodeVarint(this.codec)\n bytes = uint8ArrayConcat([\n [1], codec, this.multihash\n ], 1 + codec.byteLength + this.multihash.byteLength)\n } else {\n throw new Error('unsupported version')\n }\n\n // Cache this Uint8Array so it doesn't have to be recreated\n Object.defineProperty(this, '_bytes', { value: bytes })\n }\n\n return bytes\n }\n\n /**\n * The prefix of the CID.\n *\n * @returns {Uint8Array}\n */\n get prefix () {\n const codec = multicodec.getCodeVarint(this.codec)\n const multihash = mh.prefix(this.multihash)\n const prefix = uint8ArrayConcat([\n [this.version], codec, multihash\n ], 1 + codec.byteLength + multihash.byteLength)\n\n return prefix\n }\n\n /**\n * The codec of the CID in its number form.\n *\n * @returns {CodecCode}\n */\n get code () {\n return codecs[this.codec]\n }\n\n /**\n * Convert to a CID of version `0`.\n *\n * @returns {CID}\n */\n toV0 () {\n if (this.codec !== 'dag-pb') {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n const { name, length } = mh.decode(this.multihash)\n\n if (name !== 'sha2-256') {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n if (length !== 32) {\n throw new Error('Cannot convert non 32 byte multihash CID to CIDv0')\n }\n\n return new CID(0, this.codec, this.multihash)\n }\n\n /**\n * Convert to a CID of version `1`.\n *\n * @returns {CID}\n */\n toV1 () {\n return new CID(1, this.codec, this.multihash, this.multibaseName)\n }\n\n /**\n * Encode the CID into a string.\n *\n * @param {BaseNameOrCode} [base=this.multibaseName] - Base encoding to use.\n * @returns {string}\n */\n toBaseEncodedString (base = this.multibaseName) {\n // @ts-ignore non enumerable cache property\n if (this.string && this.string.length !== 0 && base === this.multibaseName) {\n // @ts-ignore non enumerable cache property\n return this.string\n }\n let str\n if (this.version === 0) {\n if (base !== 'base58btc') {\n throw new Error('not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()')\n }\n str = mh.toB58String(this.multihash)\n } else if (this.version === 1) {\n str = uint8ArrayToString(multibase.encode(base, this.bytes))\n } else {\n throw new Error('unsupported version')\n }\n if (base === this.multibaseName) {\n // cache the string value\n Object.defineProperty(this, 'string', { value: str })\n }\n return str\n }\n\n /**\n * CID(QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n)\n *\n * @returns {string}\n */\n [Symbol.for('nodejs.util.inspect.custom')] () {\n return 'CID(' + this.toString() + ')'\n }\n\n /**\n * Encode the CID into a string.\n *\n * @param {BaseNameOrCode} [base=this.multibaseName] - Base encoding to use.\n * @returns {string}\n */\n toString (base) {\n return this.toBaseEncodedString(base)\n }\n\n /**\n * Serialize to a plain object.\n *\n * @returns {SerializedCID}\n */\n toJSON () {\n return {\n codec: this.codec,\n version: this.version,\n hash: this.multihash\n }\n }\n\n /**\n * Compare equality with another CID.\n *\n * @param {CID} other\n * @returns {boolean}\n */\n equals (other) {\n return this.codec === other.codec &&\n this.version === other.version &&\n uint8ArrayEquals(this.multihash, other.multihash)\n }\n\n /**\n * Test if the given input is a valid CID object.\n * Throws if it is not.\n *\n * @param {any} other - The other CID.\n * @returns {void}\n */\n static validateCID (other) {\n const errorMsg = CIDUtil.checkCIDComponents(other)\n if (errorMsg) {\n throw new Error(errorMsg)\n }\n }\n\n /**\n * Check if object is a CID instance\n *\n * @param {any} value\n * @returns {value is CID}\n */\n static isCID (value) {\n return value instanceof CID || Boolean(value && value[symbol])\n }\n}\n\nCID.codecs = codecs\n\nmodule.exports = CID\n","/**\n * Multihash implementation in JavaScript.\n */\n'use strict'\n\nconst multibase = require('multibase')\nconst varint = require('varint')\nconst { names } = require('./constants')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\n\nconst codes = /** @type {import('./types').CodeNameMap} */({})\n\n// eslint-disable-next-line guard-for-in\nfor (const key in names) {\n const name = /** @type {HashName} */(key)\n codes[names[name]] = name\n}\nObject.freeze(codes)\n\n/**\n * Convert the given multihash to a hex encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toHexString (hash) {\n if (!(hash instanceof Uint8Array)) {\n throw new Error('must be passed a Uint8Array')\n }\n\n return uint8ArrayToString(hash, 'base16')\n}\n\n/**\n * Convert the given hex encoded string to a multihash.\n *\n * @param {string} hash\n * @returns {Uint8Array}\n */\nfunction fromHexString (hash) {\n return uint8ArrayFromString(hash, 'base16')\n}\n\n/**\n * Convert the given multihash to a base58 encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toB58String (hash) {\n if (!(hash instanceof Uint8Array)) {\n throw new Error('must be passed a Uint8Array')\n }\n\n return uint8ArrayToString(multibase.encode('base58btc', hash)).slice(1)\n}\n\n/**\n * Convert the given base58 encoded string to a multihash.\n *\n * @param {string|Uint8Array} hash\n * @returns {Uint8Array}\n */\nfunction fromB58String (hash) {\n const encoded = hash instanceof Uint8Array\n ? uint8ArrayToString(hash)\n : hash\n\n return multibase.decode('z' + encoded)\n}\n\n/**\n * Decode a hash from the given multihash.\n *\n * @param {Uint8Array} bytes\n * @returns {{code: HashCode, name: HashName, length: number, digest: Uint8Array}} result\n */\nfunction decode (bytes) {\n if (!(bytes instanceof Uint8Array)) {\n throw new Error('multihash must be a Uint8Array')\n }\n\n if (bytes.length < 2) {\n throw new Error('multihash too short. must be > 2 bytes.')\n }\n\n const code = /** @type {HashCode} */(varint.decode(bytes))\n if (!isValidCode(code)) {\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\n }\n bytes = bytes.slice(varint.decode.bytes)\n\n const len = varint.decode(bytes)\n if (len < 0) {\n throw new Error(`multihash invalid length: ${len}`)\n }\n bytes = bytes.slice(varint.decode.bytes)\n\n if (bytes.length !== len) {\n throw new Error(`multihash length inconsistent: 0x${uint8ArrayToString(bytes, 'base16')}`)\n }\n\n return {\n code,\n name: codes[code],\n length: len,\n digest: bytes\n }\n}\n\n/**\n * Encode a hash digest along with the specified function code.\n *\n * > **Note:** the length is derived from the length of the digest itself.\n *\n * @param {Uint8Array} digest\n * @param {HashName | HashCode} code\n * @param {number} [length]\n * @returns {Uint8Array}\n */\nfunction encode (digest, code, length) {\n if (!digest || code === undefined) {\n throw new Error('multihash encode requires at least two args: digest, code')\n }\n\n // ensure it's a hashfunction code.\n const hashfn = coerceCode(code)\n\n if (!(digest instanceof Uint8Array)) {\n throw new Error('digest should be a Uint8Array')\n }\n\n if (length == null) {\n length = digest.length\n }\n\n if (length && digest.length !== length) {\n throw new Error('digest length should be equal to specified length.')\n }\n\n const hash = varint.encode(hashfn)\n const len = varint.encode(length)\n return uint8ArrayConcat([hash, len, digest], hash.length + len.length + digest.length)\n}\n\n/**\n * Converts a hash function name into the matching code.\n * If passed a number it will return the number if it's a valid code.\n *\n * @param {HashName | number} name\n * @returns {number}\n */\nfunction coerceCode (name) {\n let code = name\n\n if (typeof name === 'string') {\n if (names[name] === undefined) {\n throw new Error(`Unrecognized hash function named: ${name}`)\n }\n code = names[name]\n }\n\n if (typeof code !== 'number') {\n throw new Error(`Hash function code should be a number. Got: ${code}`)\n }\n\n // @ts-ignore\n if (codes[code] === undefined && !isAppCode(code)) {\n throw new Error(`Unrecognized function code: ${code}`)\n }\n\n return code\n}\n\n/**\n * Checks if a code is part of the app range\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction isAppCode (code) {\n return code > 0 && code < 0x10\n}\n\n/**\n * Checks whether a multihash code is valid.\n *\n * @param {HashCode} code\n * @returns {boolean}\n */\nfunction isValidCode (code) {\n if (isAppCode(code)) {\n return true\n }\n\n if (codes[code]) {\n return true\n }\n\n return false\n}\n\n/**\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {void}\n * @throws {Error}\n */\nfunction validate (multihash) {\n decode(multihash) // throws if bad.\n}\n\n/**\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n * @throws {Error}\n */\nfunction prefix (multihash) {\n validate(multihash)\n\n return multihash.subarray(0, 2)\n}\n\nmodule.exports = {\n names,\n codes,\n toHexString,\n fromHexString,\n toB58String,\n fromB58String,\n decode,\n encode,\n coerceCode,\n isAppCode,\n validate,\n prefix,\n isValidCode\n}\n\n/**\n * @typedef { import(\"./constants\").HashCode } HashCode\n * @typedef { import(\"./constants\").HashName } HashName\n */\n","/**\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\n *\n */\n'use strict'\n\nconst constants = require('./constants')\nconst { encodeText, decodeText, concat } = require('./util')\n\n/** @typedef {import('./base')} Base */\n/** @typedef {import(\"./types\").BaseNameOrCode} BaseNameOrCode */\n/** @typedef {import(\"./types\").BaseCode} BaseCode */\n/** @typedef {import(\"./types\").BaseName} BaseName */\n\n/**\n * Create a new Uint8Array with the multibase varint+code.\n *\n * @param {BaseNameOrCode} nameOrCode - The multibase name or code number.\n * @param {Uint8Array} buf - The data to be prefixed with multibase.\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction multibase (nameOrCode, buf) {\n if (!buf) {\n throw new Error('requires an encoded Uint8Array')\n }\n const { name, codeBuf } = encoding(nameOrCode)\n validEncode(name, buf)\n\n return concat([codeBuf, buf], codeBuf.length + buf.length)\n}\n\n/**\n * Encode data with the specified base and add the multibase prefix.\n *\n * @param {BaseNameOrCode} nameOrCode - The multibase name or code number.\n * @param {Uint8Array} buf - The data to be encoded.\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n *\n */\nfunction encode (nameOrCode, buf) {\n const enc = encoding(nameOrCode)\n const data = encodeText(enc.encode(buf))\n\n return concat([enc.codeBuf, data], enc.codeBuf.length + data.length)\n}\n\n/**\n * Takes a Uint8Array or string encoded with multibase header, decodes it and\n * returns the decoded buffer\n *\n * @param {Uint8Array|string} data\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n *\n */\nfunction decode (data) {\n if (data instanceof Uint8Array) {\n data = decodeText(data)\n }\n const prefix = data[0]\n\n // Make all encodings case-insensitive except the ones that include upper and lower chars in the alphabet\n if (['f', 'F', 'v', 'V', 't', 'T', 'b', 'B', 'c', 'C', 'h', 'k', 'K'].includes(prefix)) {\n data = data.toLowerCase()\n }\n const enc = encoding(/** @type {BaseCode} */(data[0]))\n return enc.decode(data.substring(1))\n}\n\n/**\n * Is the given data multibase encoded?\n *\n * @param {Uint8Array|string} data\n */\nfunction isEncoded (data) {\n if (data instanceof Uint8Array) {\n data = decodeText(data)\n }\n\n // Ensure bufOrString is a string\n if (Object.prototype.toString.call(data) !== '[object String]') {\n return false\n }\n\n try {\n const enc = encoding(/** @type {BaseCode} */(data[0]))\n return enc.name\n } catch (err) {\n return false\n }\n}\n\n/**\n * Validate encoded data\n *\n * @param {BaseNameOrCode} name\n * @param {Uint8Array} buf\n * @returns {void}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction validEncode (name, buf) {\n const enc = encoding(name)\n enc.decode(decodeText(buf))\n}\n\n/**\n * Get the encoding by name or code\n *\n * @param {BaseNameOrCode} nameOrCode\n * @returns {Base}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction encoding (nameOrCode) {\n if (Object.prototype.hasOwnProperty.call(constants.names, /** @type {BaseName} */(nameOrCode))) {\n return constants.names[/** @type {BaseName} */(nameOrCode)]\n } else if (Object.prototype.hasOwnProperty.call(constants.codes, /** @type {BaseCode} */(nameOrCode))) {\n return constants.codes[/** @type {BaseCode} */(nameOrCode)]\n } else {\n throw new Error(`Unsupported encoding: ${nameOrCode}`)\n }\n}\n\n/**\n * Get encoding from data\n *\n * @param {string|Uint8Array} data\n * @returns {Base}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction encodingFromData (data) {\n if (data instanceof Uint8Array) {\n data = decodeText(data)\n }\n\n return encoding(/** @type {BaseCode} */(data[0]))\n}\n\nexports = module.exports = multibase\nexports.encode = encode\nexports.decode = decode\nexports.isEncoded = isEncoded\nexports.encoding = encoding\nexports.encodingFromData = encodingFromData\nconst names = Object.freeze(constants.names)\nconst codes = Object.freeze(constants.codes)\nexports.names = names\nexports.codes = codes\n","'use strict'\n\nconst varint = require('varint')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\n\nmodule.exports = {\n numberToUint8Array,\n uint8ArrayToNumber,\n varintUint8ArrayEncode,\n varintEncode\n}\n\n/**\n * @param {Uint8Array} buf\n */\nfunction uint8ArrayToNumber (buf) {\n return parseInt(uint8ArrayToString(buf, 'base16'), 16)\n}\n\n/**\n * @param {number} num\n */\nfunction numberToUint8Array (num) {\n let hexString = num.toString(16)\n if (hexString.length % 2 === 1) {\n hexString = '0' + hexString\n }\n return uint8ArrayFromString(hexString, 'base16')\n}\n\n/**\n * @param {Uint8Array} input\n */\nfunction varintUint8ArrayEncode (input) {\n return Uint8Array.from(varint.encode(uint8ArrayToNumber(input)))\n}\n\n/**\n * @param {number} num\n */\nfunction varintEncode (num) {\n return Uint8Array.from(varint.encode(num))\n}\n","// https://github.com/electron/electron/issues/2288\nfunction isElectron() {\n // Renderer process\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\n return true;\n }\n\n // Main process\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\n return true;\n }\n\n // Detect the user agent when the `nodeIntegration` option is set to false\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\n return true;\n }\n\n return false;\n}\n\nmodule.exports = isElectron;\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar is = require('./is.js');\nvar token = require('./token.js');\nvar bl = require('./bl.js');\nvar common = require('./common.js');\nvar jump = require('./jump.js');\nvar byteUtils = require('./byte-utils.js');\nvar _0uint = require('./0uint.js');\nvar _1negint = require('./1negint.js');\nvar _2bytes = require('./2bytes.js');\nvar _3string = require('./3string.js');\nvar _4array = require('./4array.js');\nvar _5map = require('./5map.js');\nvar _6tag = require('./6tag.js');\nvar _7float = require('./7float.js');\n\nconst defaultEncodeOptions = {\n float64: false,\n mapSorter,\n quickEncodeToken: jump.quickEncodeToken\n};\nconst cborEncoders = [];\ncborEncoders[token.Type.uint.major] = _0uint.encodeUint;\ncborEncoders[token.Type.negint.major] = _1negint.encodeNegint;\ncborEncoders[token.Type.bytes.major] = _2bytes.encodeBytes;\ncborEncoders[token.Type.string.major] = _3string.encodeString;\ncborEncoders[token.Type.array.major] = _4array.encodeArray;\ncborEncoders[token.Type.map.major] = _5map.encodeMap;\ncborEncoders[token.Type.tag.major] = _6tag.encodeTag;\ncborEncoders[token.Type.float.major] = _7float.encodeFloat;\nconst buf = new bl.Bl();\nclass Ref {\n constructor(obj, parent) {\n this.obj = obj;\n this.parent = parent;\n }\n includes(obj) {\n let p = this;\n do {\n if (p.obj === obj) {\n return true;\n }\n } while (p = p.parent);\n return false;\n }\n static createCheck(stack, obj) {\n if (stack && stack.includes(obj)) {\n throw new Error(`${ common.encodeErrPrefix } object contains circular references`);\n }\n return new Ref(obj, stack);\n }\n}\nconst simpleTokens = {\n null: new token.Token(token.Type.null, null),\n undefined: new token.Token(token.Type.undefined, undefined),\n true: new token.Token(token.Type.true, true),\n false: new token.Token(token.Type.false, false),\n emptyArray: new token.Token(token.Type.array, 0),\n emptyMap: new token.Token(token.Type.map, 0)\n};\nconst typeEncoders = {\n number(obj, _typ, _options, _refStack) {\n if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {\n return new token.Token(token.Type.float, obj);\n } else if (obj >= 0) {\n return new token.Token(token.Type.uint, obj);\n } else {\n return new token.Token(token.Type.negint, obj);\n }\n },\n bigint(obj, _typ, _options, _refStack) {\n if (obj >= BigInt(0)) {\n return new token.Token(token.Type.uint, obj);\n } else {\n return new token.Token(token.Type.negint, obj);\n }\n },\n Uint8Array(obj, _typ, _options, _refStack) {\n return new token.Token(token.Type.bytes, obj);\n },\n string(obj, _typ, _options, _refStack) {\n return new token.Token(token.Type.string, obj);\n },\n boolean(obj, _typ, _options, _refStack) {\n return obj ? simpleTokens.true : simpleTokens.false;\n },\n null(_obj, _typ, _options, _refStack) {\n return simpleTokens.null;\n },\n undefined(_obj, _typ, _options, _refStack) {\n return simpleTokens.undefined;\n },\n ArrayBuffer(obj, _typ, _options, _refStack) {\n return new token.Token(token.Type.bytes, new Uint8Array(obj));\n },\n DataView(obj, _typ, _options, _refStack) {\n return new token.Token(token.Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength));\n },\n Array(obj, _typ, options, refStack) {\n if (!obj.length) {\n if (options.addBreakTokens === true) {\n return [\n simpleTokens.emptyArray,\n new token.Token(token.Type.break)\n ];\n }\n return simpleTokens.emptyArray;\n }\n refStack = Ref.createCheck(refStack, obj);\n const entries = [];\n let i = 0;\n for (const e of obj) {\n entries[i++] = objectToTokens(e, options, refStack);\n }\n if (options.addBreakTokens) {\n return [\n new token.Token(token.Type.array, obj.length),\n entries,\n new token.Token(token.Type.break)\n ];\n }\n return [\n new token.Token(token.Type.array, obj.length),\n entries\n ];\n },\n Object(obj, typ, options, refStack) {\n const isMap = typ !== 'Object';\n const keys = isMap ? obj.keys() : Object.keys(obj);\n const length = isMap ? obj.size : keys.length;\n if (!length) {\n if (options.addBreakTokens === true) {\n return [\n simpleTokens.emptyMap,\n new token.Token(token.Type.break)\n ];\n }\n return simpleTokens.emptyMap;\n }\n refStack = Ref.createCheck(refStack, obj);\n const entries = [];\n let i = 0;\n for (const key of keys) {\n entries[i++] = [\n objectToTokens(key, options, refStack),\n objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)\n ];\n }\n sortMapEntries(entries, options);\n if (options.addBreakTokens) {\n return [\n new token.Token(token.Type.map, length),\n entries,\n new token.Token(token.Type.break)\n ];\n }\n return [\n new token.Token(token.Type.map, length),\n entries\n ];\n }\n};\ntypeEncoders.Map = typeEncoders.Object;\ntypeEncoders.Buffer = typeEncoders.Uint8Array;\nfor (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {\n typeEncoders[`${ typ }Array`] = typeEncoders.DataView;\n}\nfunction objectToTokens(obj, options = {}, refStack) {\n const typ = is.is(obj);\n const customTypeEncoder = options && options.typeEncoders && options.typeEncoders[typ] || typeEncoders[typ];\n if (typeof customTypeEncoder === 'function') {\n const tokens = customTypeEncoder(obj, typ, options, refStack);\n if (tokens != null) {\n return tokens;\n }\n }\n const typeEncoder = typeEncoders[typ];\n if (!typeEncoder) {\n throw new Error(`${ common.encodeErrPrefix } unsupported type: ${ typ }`);\n }\n return typeEncoder(obj, typ, options, refStack);\n}\nfunction sortMapEntries(entries, options) {\n if (options.mapSorter) {\n entries.sort(options.mapSorter);\n }\n}\nfunction mapSorter(e1, e2) {\n const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0];\n const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0];\n if (keyToken1.type !== keyToken2.type) {\n return keyToken1.type.compare(keyToken2.type);\n }\n const major = keyToken1.type.major;\n const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2);\n if (tcmp === 0) {\n console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone');\n }\n return tcmp;\n}\nfunction tokensToEncoded(buf, tokens, encoders, options) {\n if (Array.isArray(tokens)) {\n for (const token of tokens) {\n tokensToEncoded(buf, token, encoders, options);\n }\n } else {\n encoders[tokens.type.major](buf, tokens, options);\n }\n}\nfunction encodeCustom(data, encoders, options) {\n const tokens = objectToTokens(data, options);\n if (!Array.isArray(tokens) && options.quickEncodeToken) {\n const quickBytes = options.quickEncodeToken(tokens);\n if (quickBytes) {\n return quickBytes;\n }\n const encoder = encoders[tokens.type.major];\n if (encoder.encodedSize) {\n const size = encoder.encodedSize(tokens, options);\n const buf = new bl.Bl(size);\n encoder(buf, tokens, options);\n if (buf.chunks.length !== 1) {\n throw new Error(`Unexpected error: pre-calculated length for ${ tokens } was wrong`);\n }\n return byteUtils.asU8A(buf.chunks[0]);\n }\n }\n tokensToEncoded(buf, tokens, encoders, options);\n return buf.toBytes(true);\n}\nfunction encode(data, options) {\n options = Object.assign({}, defaultEncodeOptions, options);\n return encodeCustom(data, cborEncoders, options);\n}\n\nexports.Ref = Ref;\nexports.encode = encode;\nexports.encodeCustom = encodeCustom;\nexports.objectToTokens = objectToTokens;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar _0uint = require('./0uint.js');\nvar _1negint = require('./1negint.js');\nvar _2bytes = require('./2bytes.js');\nvar _3string = require('./3string.js');\nvar _4array = require('./4array.js');\nvar _5map = require('./5map.js');\nvar _6tag = require('./6tag.js');\nvar _7float = require('./7float.js');\nvar common = require('./common.js');\nvar byteUtils = require('./byte-utils.js');\n\nfunction invalidMinor(data, pos, minor) {\n throw new Error(`${ common.decodeErrPrefix } encountered invalid minor (${ minor }) for major ${ data[pos] >>> 5 }`);\n}\nfunction errorer(msg) {\n return () => {\n throw new Error(`${ common.decodeErrPrefix } ${ msg }`);\n };\n}\nconst jump = [];\nfor (let i = 0; i <= 23; i++) {\n jump[i] = invalidMinor;\n}\njump[24] = _0uint.decodeUint8;\njump[25] = _0uint.decodeUint16;\njump[26] = _0uint.decodeUint32;\njump[27] = _0uint.decodeUint64;\njump[28] = invalidMinor;\njump[29] = invalidMinor;\njump[30] = invalidMinor;\njump[31] = invalidMinor;\nfor (let i = 32; i <= 55; i++) {\n jump[i] = invalidMinor;\n}\njump[56] = _1negint.decodeNegint8;\njump[57] = _1negint.decodeNegint16;\njump[58] = _1negint.decodeNegint32;\njump[59] = _1negint.decodeNegint64;\njump[60] = invalidMinor;\njump[61] = invalidMinor;\njump[62] = invalidMinor;\njump[63] = invalidMinor;\nfor (let i = 64; i <= 87; i++) {\n jump[i] = _2bytes.decodeBytesCompact;\n}\njump[88] = _2bytes.decodeBytes8;\njump[89] = _2bytes.decodeBytes16;\njump[90] = _2bytes.decodeBytes32;\njump[91] = _2bytes.decodeBytes64;\njump[92] = invalidMinor;\njump[93] = invalidMinor;\njump[94] = invalidMinor;\njump[95] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 96; i <= 119; i++) {\n jump[i] = _3string.decodeStringCompact;\n}\njump[120] = _3string.decodeString8;\njump[121] = _3string.decodeString16;\njump[122] = _3string.decodeString32;\njump[123] = _3string.decodeString64;\njump[124] = invalidMinor;\njump[125] = invalidMinor;\njump[126] = invalidMinor;\njump[127] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 128; i <= 151; i++) {\n jump[i] = _4array.decodeArrayCompact;\n}\njump[152] = _4array.decodeArray8;\njump[153] = _4array.decodeArray16;\njump[154] = _4array.decodeArray32;\njump[155] = _4array.decodeArray64;\njump[156] = invalidMinor;\njump[157] = invalidMinor;\njump[158] = invalidMinor;\njump[159] = _4array.decodeArrayIndefinite;\nfor (let i = 160; i <= 183; i++) {\n jump[i] = _5map.decodeMapCompact;\n}\njump[184] = _5map.decodeMap8;\njump[185] = _5map.decodeMap16;\njump[186] = _5map.decodeMap32;\njump[187] = _5map.decodeMap64;\njump[188] = invalidMinor;\njump[189] = invalidMinor;\njump[190] = invalidMinor;\njump[191] = _5map.decodeMapIndefinite;\nfor (let i = 192; i <= 215; i++) {\n jump[i] = _6tag.decodeTagCompact;\n}\njump[216] = _6tag.decodeTag8;\njump[217] = _6tag.decodeTag16;\njump[218] = _6tag.decodeTag32;\njump[219] = _6tag.decodeTag64;\njump[220] = invalidMinor;\njump[221] = invalidMinor;\njump[222] = invalidMinor;\njump[223] = invalidMinor;\nfor (let i = 224; i <= 243; i++) {\n jump[i] = errorer('simple values are not supported');\n}\njump[244] = invalidMinor;\njump[245] = invalidMinor;\njump[246] = invalidMinor;\njump[247] = _7float.decodeUndefined;\njump[248] = errorer('simple values are not supported');\njump[249] = _7float.decodeFloat16;\njump[250] = _7float.decodeFloat32;\njump[251] = _7float.decodeFloat64;\njump[252] = invalidMinor;\njump[253] = invalidMinor;\njump[254] = invalidMinor;\njump[255] = _7float.decodeBreak;\nconst quick = [];\nfor (let i = 0; i < 24; i++) {\n quick[i] = new token.Token(token.Type.uint, i, 1);\n}\nfor (let i = -1; i >= -24; i--) {\n quick[31 - i] = new token.Token(token.Type.negint, i, 1);\n}\nquick[64] = new token.Token(token.Type.bytes, new Uint8Array(0), 1);\nquick[96] = new token.Token(token.Type.string, '', 1);\nquick[128] = new token.Token(token.Type.array, 0, 1);\nquick[160] = new token.Token(token.Type.map, 0, 1);\nquick[244] = new token.Token(token.Type.false, false, 1);\nquick[245] = new token.Token(token.Type.true, true, 1);\nquick[246] = new token.Token(token.Type.null, null, 1);\nfunction quickEncodeToken(token$1) {\n switch (token$1.type) {\n case token.Type.false:\n return byteUtils.fromArray([244]);\n case token.Type.true:\n return byteUtils.fromArray([245]);\n case token.Type.null:\n return byteUtils.fromArray([246]);\n case token.Type.bytes:\n if (!token$1.value.length) {\n return byteUtils.fromArray([64]);\n }\n return;\n case token.Type.string:\n if (token$1.value === '') {\n return byteUtils.fromArray([96]);\n }\n return;\n case token.Type.array:\n if (token$1.value === 0) {\n return byteUtils.fromArray([128]);\n }\n return;\n case token.Type.map:\n if (token$1.value === 0) {\n return byteUtils.fromArray([160]);\n }\n return;\n case token.Type.uint:\n if (token$1.value < 24) {\n return byteUtils.fromArray([Number(token$1.value)]);\n }\n return;\n case token.Type.negint:\n if (token$1.value >= -24) {\n return byteUtils.fromArray([31 - Number(token$1.value)]);\n }\n }\n}\n\nexports.jump = jump;\nexports.quick = quick;\nexports.quickEncodeToken = quickEncodeToken;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar _0uint = require('./0uint.js');\nvar common = require('./common.js');\n\nfunction decodeNegint8(data, pos, _minor, options) {\n return new token.Token(token.Type.negint, -1 - _0uint.readUint8(data, pos + 1, options), 2);\n}\nfunction decodeNegint16(data, pos, _minor, options) {\n return new token.Token(token.Type.negint, -1 - _0uint.readUint16(data, pos + 1, options), 3);\n}\nfunction decodeNegint32(data, pos, _minor, options) {\n return new token.Token(token.Type.negint, -1 - _0uint.readUint32(data, pos + 1, options), 5);\n}\nconst neg1b = BigInt(-1);\nconst pos1b = BigInt(1);\nfunction decodeNegint64(data, pos, _minor, options) {\n const int = _0uint.readUint64(data, pos + 1, options);\n if (typeof int !== 'bigint') {\n const value = -1 - int;\n if (value >= Number.MIN_SAFE_INTEGER) {\n return new token.Token(token.Type.negint, value, 9);\n }\n }\n if (options.allowBigInt !== true) {\n throw new Error(`${ common.decodeErrPrefix } integers outside of the safe integer range are not supported`);\n }\n return new token.Token(token.Type.negint, neg1b - BigInt(int), 9);\n}\nfunction encodeNegint(buf, token) {\n const negint = token.value;\n const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n _0uint.encodeUintValue(buf, token.type.majorEncoded, unsigned);\n}\nencodeNegint.encodedSize = function encodedSize(token) {\n const negint = token.value;\n const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n if (unsigned < _0uint.uintBoundaries[0]) {\n return 1;\n }\n if (unsigned < _0uint.uintBoundaries[1]) {\n return 2;\n }\n if (unsigned < _0uint.uintBoundaries[2]) {\n return 3;\n }\n if (unsigned < _0uint.uintBoundaries[3]) {\n return 5;\n }\n return 9;\n};\nencodeNegint.compareTokens = function compareTokens(tok1, tok2) {\n return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : 0;\n};\n\nexports.decodeNegint16 = decodeNegint16;\nexports.decodeNegint32 = decodeNegint32;\nexports.decodeNegint64 = decodeNegint64;\nexports.decodeNegint8 = decodeNegint8;\nexports.encodeNegint = encodeNegint;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar common = require('./common.js');\nvar _0uint = require('./0uint.js');\nvar _2bytes = require('./2bytes.js');\nvar byteUtils = require('./byte-utils.js');\n\nfunction toToken(data, pos, prefix, length) {\n const totLength = prefix + length;\n common.assertEnoughData(data, pos, totLength);\n return new token.Token(token.Type.string, byteUtils.toString(data, pos + prefix, pos + totLength), totLength);\n}\nfunction decodeStringCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nfunction decodeString8(data, pos, _minor, options) {\n return toToken(data, pos, 2, _0uint.readUint8(data, pos + 1, options));\n}\nfunction decodeString16(data, pos, _minor, options) {\n return toToken(data, pos, 3, _0uint.readUint16(data, pos + 1, options));\n}\nfunction decodeString32(data, pos, _minor, options) {\n return toToken(data, pos, 5, _0uint.readUint32(data, pos + 1, options));\n}\nfunction decodeString64(data, pos, _minor, options) {\n const l = _0uint.readUint64(data, pos + 1, options);\n if (typeof l === 'bigint') {\n throw new Error(`${ common.decodeErrPrefix } 64-bit integer string lengths not supported`);\n }\n return toToken(data, pos, 9, l);\n}\nconst encodeString = _2bytes.encodeBytes;\n\nexports.decodeString16 = decodeString16;\nexports.decodeString32 = decodeString32;\nexports.decodeString64 = decodeString64;\nexports.decodeString8 = decodeString8;\nexports.decodeStringCompact = decodeStringCompact;\nexports.encodeString = encodeString;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar _0uint = require('./0uint.js');\nvar common = require('./common.js');\n\nfunction toToken(_data, _pos, prefix, length) {\n return new token.Token(token.Type.array, length, prefix);\n}\nfunction decodeArrayCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nfunction decodeArray8(data, pos, _minor, options) {\n return toToken(data, pos, 2, _0uint.readUint8(data, pos + 1, options));\n}\nfunction decodeArray16(data, pos, _minor, options) {\n return toToken(data, pos, 3, _0uint.readUint16(data, pos + 1, options));\n}\nfunction decodeArray32(data, pos, _minor, options) {\n return toToken(data, pos, 5, _0uint.readUint32(data, pos + 1, options));\n}\nfunction decodeArray64(data, pos, _minor, options) {\n const l = _0uint.readUint64(data, pos + 1, options);\n if (typeof l === 'bigint') {\n throw new Error(`${ common.decodeErrPrefix } 64-bit integer array lengths not supported`);\n }\n return toToken(data, pos, 9, l);\n}\nfunction decodeArrayIndefinite(data, pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${ common.decodeErrPrefix } indefinite length items not allowed`);\n }\n return toToken(data, pos, 1, Infinity);\n}\nfunction encodeArray(buf, token$1) {\n _0uint.encodeUintValue(buf, token.Type.array.majorEncoded, token$1.value);\n}\nencodeArray.compareTokens = _0uint.encodeUint.compareTokens;\n\nexports.decodeArray16 = decodeArray16;\nexports.decodeArray32 = decodeArray32;\nexports.decodeArray64 = decodeArray64;\nexports.decodeArray8 = decodeArray8;\nexports.decodeArrayCompact = decodeArrayCompact;\nexports.decodeArrayIndefinite = decodeArrayIndefinite;\nexports.encodeArray = encodeArray;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar _0uint = require('./0uint.js');\nvar common = require('./common.js');\n\nfunction toToken(_data, _pos, prefix, length) {\n return new token.Token(token.Type.map, length, prefix);\n}\nfunction decodeMapCompact(data, pos, minor, _options) {\n return toToken(data, pos, 1, minor);\n}\nfunction decodeMap8(data, pos, _minor, options) {\n return toToken(data, pos, 2, _0uint.readUint8(data, pos + 1, options));\n}\nfunction decodeMap16(data, pos, _minor, options) {\n return toToken(data, pos, 3, _0uint.readUint16(data, pos + 1, options));\n}\nfunction decodeMap32(data, pos, _minor, options) {\n return toToken(data, pos, 5, _0uint.readUint32(data, pos + 1, options));\n}\nfunction decodeMap64(data, pos, _minor, options) {\n const l = _0uint.readUint64(data, pos + 1, options);\n if (typeof l === 'bigint') {\n throw new Error(`${ common.decodeErrPrefix } 64-bit integer map lengths not supported`);\n }\n return toToken(data, pos, 9, l);\n}\nfunction decodeMapIndefinite(data, pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${ common.decodeErrPrefix } indefinite length items not allowed`);\n }\n return toToken(data, pos, 1, Infinity);\n}\nfunction encodeMap(buf, token$1) {\n _0uint.encodeUintValue(buf, token.Type.map.majorEncoded, token$1.value);\n}\nencodeMap.compareTokens = _0uint.encodeUint.compareTokens;\n\nexports.decodeMap16 = decodeMap16;\nexports.decodeMap32 = decodeMap32;\nexports.decodeMap64 = decodeMap64;\nexports.decodeMap8 = decodeMap8;\nexports.decodeMapCompact = decodeMapCompact;\nexports.decodeMapIndefinite = decodeMapIndefinite;\nexports.encodeMap = encodeMap;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar _0uint = require('./0uint.js');\n\nfunction decodeTagCompact(_data, _pos, minor, _options) {\n return new token.Token(token.Type.tag, minor, 1);\n}\nfunction decodeTag8(data, pos, _minor, options) {\n return new token.Token(token.Type.tag, _0uint.readUint8(data, pos + 1, options), 2);\n}\nfunction decodeTag16(data, pos, _minor, options) {\n return new token.Token(token.Type.tag, _0uint.readUint16(data, pos + 1, options), 3);\n}\nfunction decodeTag32(data, pos, _minor, options) {\n return new token.Token(token.Type.tag, _0uint.readUint32(data, pos + 1, options), 5);\n}\nfunction decodeTag64(data, pos, _minor, options) {\n return new token.Token(token.Type.tag, _0uint.readUint64(data, pos + 1, options), 9);\n}\nfunction encodeTag(buf, token$1) {\n _0uint.encodeUintValue(buf, token.Type.tag.majorEncoded, token$1.value);\n}\nencodeTag.compareTokens = _0uint.encodeUint.compareTokens;\n\nexports.decodeTag16 = decodeTag16;\nexports.decodeTag32 = decodeTag32;\nexports.decodeTag64 = decodeTag64;\nexports.decodeTag8 = decodeTag8;\nexports.decodeTagCompact = decodeTagCompact;\nexports.encodeTag = encodeTag;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar token = require('./token.js');\nvar common = require('./common.js');\nvar _0uint = require('./0uint.js');\n\nconst MINOR_FALSE = 20;\nconst MINOR_TRUE = 21;\nconst MINOR_NULL = 22;\nconst MINOR_UNDEFINED = 23;\nfunction decodeUndefined(_data, _pos, _minor, options) {\n if (options.allowUndefined === false) {\n throw new Error(`${ common.decodeErrPrefix } undefined values are not supported`);\n } else if (options.coerceUndefinedToNull === true) {\n return new token.Token(token.Type.null, null, 1);\n }\n return new token.Token(token.Type.undefined, undefined, 1);\n}\nfunction decodeBreak(_data, _pos, _minor, options) {\n if (options.allowIndefinite === false) {\n throw new Error(`${ common.decodeErrPrefix } indefinite length items not allowed`);\n }\n return new token.Token(token.Type.break, undefined, 1);\n}\nfunction createToken(value, bytes, options) {\n if (options) {\n if (options.allowNaN === false && Number.isNaN(value)) {\n throw new Error(`${ common.decodeErrPrefix } NaN values are not supported`);\n }\n if (options.allowInfinity === false && (value === Infinity || value === -Infinity)) {\n throw new Error(`${ common.decodeErrPrefix } Infinity values are not supported`);\n }\n }\n return new token.Token(token.Type.float, value, bytes);\n}\nfunction decodeFloat16(data, pos, _minor, options) {\n return createToken(readFloat16(data, pos + 1), 3, options);\n}\nfunction decodeFloat32(data, pos, _minor, options) {\n return createToken(readFloat32(data, pos + 1), 5, options);\n}\nfunction decodeFloat64(data, pos, _minor, options) {\n return createToken(readFloat64(data, pos + 1), 9, options);\n}\nfunction encodeFloat(buf, token$1, options) {\n const float = token$1.value;\n if (float === false) {\n buf.push([token.Type.float.majorEncoded | MINOR_FALSE]);\n } else if (float === true) {\n buf.push([token.Type.float.majorEncoded | MINOR_TRUE]);\n } else if (float === null) {\n buf.push([token.Type.float.majorEncoded | MINOR_NULL]);\n } else if (float === undefined) {\n buf.push([token.Type.float.majorEncoded | MINOR_UNDEFINED]);\n } else {\n let decoded;\n let success = false;\n if (!options || options.float64 !== true) {\n encodeFloat16(float);\n decoded = readFloat16(ui8a, 1);\n if (float === decoded || Number.isNaN(float)) {\n ui8a[0] = 249;\n buf.push(ui8a.slice(0, 3));\n success = true;\n } else {\n encodeFloat32(float);\n decoded = readFloat32(ui8a, 1);\n if (float === decoded) {\n ui8a[0] = 250;\n buf.push(ui8a.slice(0, 5));\n success = true;\n }\n }\n }\n if (!success) {\n encodeFloat64(float);\n decoded = readFloat64(ui8a, 1);\n ui8a[0] = 251;\n buf.push(ui8a.slice(0, 9));\n }\n }\n}\nencodeFloat.encodedSize = function encodedSize(token, options) {\n const float = token.value;\n if (float === false || float === true || float === null || float === undefined) {\n return 1;\n }\n let decoded;\n if (!options || options.float64 !== true) {\n encodeFloat16(float);\n decoded = readFloat16(ui8a, 1);\n if (float === decoded || Number.isNaN(float)) {\n return 3;\n }\n encodeFloat32(float);\n decoded = readFloat32(ui8a, 1);\n if (float === decoded) {\n return 5;\n }\n }\n return 9;\n};\nconst buffer = new ArrayBuffer(9);\nconst dataView = new DataView(buffer, 1);\nconst ui8a = new Uint8Array(buffer, 0);\nfunction encodeFloat16(inp) {\n if (inp === Infinity) {\n dataView.setUint16(0, 31744, false);\n } else if (inp === -Infinity) {\n dataView.setUint16(0, 64512, false);\n } else if (Number.isNaN(inp)) {\n dataView.setUint16(0, 32256, false);\n } else {\n dataView.setFloat32(0, inp);\n const valu32 = dataView.getUint32(0);\n const exponent = (valu32 & 2139095040) >> 23;\n const mantissa = valu32 & 8388607;\n if (exponent === 255) {\n dataView.setUint16(0, 31744, false);\n } else if (exponent === 0) {\n dataView.setUint16(0, (inp & 2147483648) >> 16 | mantissa >> 13, false);\n } else {\n const logicalExponent = exponent - 127;\n if (logicalExponent < -24) {\n dataView.setUint16(0, 0);\n } else if (logicalExponent < -14) {\n dataView.setUint16(0, (valu32 & 2147483648) >> 16 | 1 << 24 + logicalExponent, false);\n } else {\n dataView.setUint16(0, (valu32 & 2147483648) >> 16 | logicalExponent + 15 << 10 | mantissa >> 13, false);\n }\n }\n }\n}\nfunction readFloat16(ui8a, pos) {\n if (ui8a.length - pos < 2) {\n throw new Error(`${ common.decodeErrPrefix } not enough data for float16`);\n }\n const half = (ui8a[pos] << 8) + ui8a[pos + 1];\n if (half === 31744) {\n return Infinity;\n }\n if (half === 64512) {\n return -Infinity;\n }\n if (half === 32256) {\n return NaN;\n }\n const exp = half >> 10 & 31;\n const mant = half & 1023;\n let val;\n if (exp === 0) {\n val = mant * 2 ** -24;\n } else if (exp !== 31) {\n val = (mant + 1024) * 2 ** (exp - 25);\n } else {\n val = mant === 0 ? Infinity : NaN;\n }\n return half & 32768 ? -val : val;\n}\nfunction encodeFloat32(inp) {\n dataView.setFloat32(0, inp, false);\n}\nfunction readFloat32(ui8a, pos) {\n if (ui8a.length - pos < 4) {\n throw new Error(`${ common.decodeErrPrefix } not enough data for float32`);\n }\n const offset = (ui8a.byteOffset || 0) + pos;\n return new DataView(ui8a.buffer, offset, 4).getFloat32(0, false);\n}\nfunction encodeFloat64(inp) {\n dataView.setFloat64(0, inp, false);\n}\nfunction readFloat64(ui8a, pos) {\n if (ui8a.length - pos < 8) {\n throw new Error(`${ common.decodeErrPrefix } not enough data for float64`);\n }\n const offset = (ui8a.byteOffset || 0) + pos;\n return new DataView(ui8a.buffer, offset, 8).getFloat64(0, false);\n}\nencodeFloat.compareTokens = _0uint.encodeUint.compareTokens;\n\nexports.decodeBreak = decodeBreak;\nexports.decodeFloat16 = decodeFloat16;\nexports.decodeFloat32 = decodeFloat32;\nexports.decodeFloat64 = decodeFloat64;\nexports.decodeUndefined = decodeUndefined;\nexports.encodeFloat = encodeFloat;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar common = require('./common.js');\nvar token = require('./token.js');\nvar jump = require('./jump.js');\n\nconst defaultDecodeOptions = {\n strict: false,\n allowIndefinite: true,\n allowUndefined: true,\n allowBigInt: true\n};\nclass Tokeniser {\n constructor(data, options = {}) {\n this.pos = 0;\n this.data = data;\n this.options = options;\n }\n done() {\n return this.pos >= this.data.length;\n }\n next() {\n const byt = this.data[this.pos];\n let token = jump.quick[byt];\n if (token === undefined) {\n const decoder = jump.jump[byt];\n if (!decoder) {\n throw new Error(`${ common.decodeErrPrefix } no decoder for major type ${ byt >>> 5 } (byte 0x${ byt.toString(16).padStart(2, '0') })`);\n }\n const minor = byt & 31;\n token = decoder(this.data, this.pos, minor, this.options);\n }\n this.pos += token.encodedLength;\n return token;\n }\n}\nconst DONE = Symbol.for('DONE');\nconst BREAK = Symbol.for('BREAK');\nfunction tokenToArray(token, tokeniser, options) {\n const arr = [];\n for (let i = 0; i < token.value; i++) {\n const value = tokensToObject(tokeniser, options);\n if (value === BREAK) {\n if (token.value === Infinity) {\n break;\n }\n throw new Error(`${ common.decodeErrPrefix } got unexpected break to lengthed array`);\n }\n if (value === DONE) {\n throw new Error(`${ common.decodeErrPrefix } found array but not enough entries (got ${ i }, expected ${ token.value })`);\n }\n arr[i] = value;\n }\n return arr;\n}\nfunction tokenToMap(token, tokeniser, options) {\n const useMaps = options.useMaps === true;\n const obj = useMaps ? undefined : {};\n const m = useMaps ? new Map() : undefined;\n for (let i = 0; i < token.value; i++) {\n const key = tokensToObject(tokeniser, options);\n if (key === BREAK) {\n if (token.value === Infinity) {\n break;\n }\n throw new Error(`${ common.decodeErrPrefix } got unexpected break to lengthed map`);\n }\n if (key === DONE) {\n throw new Error(`${ common.decodeErrPrefix } found map but not enough entries (got ${ i } [no key], expected ${ token.value })`);\n }\n if (useMaps !== true && typeof key !== 'string') {\n throw new Error(`${ common.decodeErrPrefix } non-string keys not supported (got ${ typeof key })`);\n }\n const value = tokensToObject(tokeniser, options);\n if (value === DONE) {\n throw new Error(`${ common.decodeErrPrefix } found map but not enough entries (got ${ i } [no value], expected ${ token.value })`);\n }\n if (useMaps) {\n m.set(key, value);\n } else {\n obj[key] = value;\n }\n }\n return useMaps ? m : obj;\n}\nfunction tokensToObject(tokeniser, options) {\n if (tokeniser.done()) {\n return DONE;\n }\n const token$1 = tokeniser.next();\n if (token$1.type === token.Type.break) {\n return BREAK;\n }\n if (token$1.type.terminal) {\n return token$1.value;\n }\n if (token$1.type === token.Type.array) {\n return tokenToArray(token$1, tokeniser, options);\n }\n if (token$1.type === token.Type.map) {\n return tokenToMap(token$1, tokeniser, options);\n }\n if (token$1.type === token.Type.tag) {\n if (options.tags && typeof options.tags[token$1.value] === 'function') {\n const tagged = tokensToObject(tokeniser, options);\n return options.tags[token$1.value](tagged);\n }\n throw new Error(`${ common.decodeErrPrefix } tag not supported (${ token$1.value })`);\n }\n throw new Error('unsupported');\n}\nfunction decode(data, options) {\n if (!(data instanceof Uint8Array)) {\n throw new Error(`${ common.decodeErrPrefix } data to decode must be a Uint8Array`);\n }\n options = Object.assign({}, defaultDecodeOptions, options);\n const tokeniser = options.tokenizer || new Tokeniser(data, options);\n const decoded = tokensToObject(tokeniser, options);\n if (decoded === DONE) {\n throw new Error(`${ common.decodeErrPrefix } did not find any content to decode`);\n }\n if (decoded === BREAK) {\n throw new Error(`${ common.decodeErrPrefix } got unexpected break`);\n }\n if (!tokeniser.done()) {\n throw new Error(`${ common.decodeErrPrefix } too many terminals, data makes no sense`);\n }\n return decoded;\n}\n\nexports.Tokeniser = Tokeniser;\nexports.decode = decode;\nexports.tokensToObject = tokensToObject;\n","'use strict'\n\nconst isReactNative =\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative'\n\nfunction getDefaultBase () {\n if (isReactNative) {\n return 'http://localhost'\n }\n // in some environments i.e. cloudflare workers location is not available\n if (!self.location) {\n return ''\n }\n\n return self.location.protocol + '//' + self.location.host\n}\n\nconst URL = self.URL\nconst defaultBase = getDefaultBase()\n\nclass URLWithLegacySupport {\n constructor (url = '', base = defaultBase) {\n this.super = new URL(url, base)\n this.path = this.pathname + this.search\n this.auth =\n this.username && this.password\n ? this.username + ':' + this.password\n : null\n\n this.query =\n this.search && this.search.startsWith('?')\n ? this.search.slice(1)\n : null\n }\n\n get hash () {\n return this.super.hash\n }\n\n get host () {\n return this.super.host\n }\n\n get hostname () {\n return this.super.hostname\n }\n\n get href () {\n return this.super.href\n }\n\n get origin () {\n return this.super.origin\n }\n\n get password () {\n return this.super.password\n }\n\n get pathname () {\n return this.super.pathname\n }\n\n get port () {\n return this.super.port\n }\n\n get protocol () {\n return this.super.protocol\n }\n\n get search () {\n return this.super.search\n }\n\n get searchParams () {\n return this.super.searchParams\n }\n\n get username () {\n return this.super.username\n }\n\n set hash (hash) {\n this.super.hash = hash\n }\n\n set host (host) {\n this.super.host = host\n }\n\n set hostname (hostname) {\n this.super.hostname = hostname\n }\n\n set href (href) {\n this.super.href = href\n }\n\n set password (password) {\n this.super.password = password\n }\n\n set pathname (pathname) {\n this.super.pathname = pathname\n }\n\n set port (port) {\n this.super.port = port\n }\n\n set protocol (protocol) {\n this.super.protocol = protocol\n }\n\n set search (search) {\n this.super.search = search\n }\n\n set username (username) {\n this.super.username = username\n }\n\n /**\n * @param {any} o\n */\n static createObjectURL (o) {\n return URL.createObjectURL(o)\n }\n\n /**\n * @param {string} o\n */\n static revokeObjectURL (o) {\n URL.revokeObjectURL(o)\n }\n\n toJSON () {\n return this.super.toJSON()\n }\n\n toString () {\n return this.super.toString()\n }\n\n format () {\n return this.toString()\n }\n}\n\n/**\n * @param {string | import('url').UrlObject} obj\n */\nfunction format (obj) {\n if (typeof obj === 'string') {\n const url = new URL(obj)\n\n return url.toString()\n }\n\n if (!(obj instanceof URL)) {\n const userPass =\n // @ts-ignore its not supported in node but we normalise\n obj.username && obj.password\n // @ts-ignore its not supported in node but we normalise\n ? `${obj.username}:${obj.password}@`\n : ''\n const auth = obj.auth ? obj.auth + '@' : ''\n const port = obj.port ? ':' + obj.port : ''\n const protocol = obj.protocol ? obj.protocol + '//' : ''\n const host = obj.host || ''\n const hostname = obj.hostname || ''\n const search = obj.search || (obj.query ? '?' + obj.query : '')\n const hash = obj.hash || ''\n const pathname = obj.pathname || ''\n // @ts-ignore - path is not supported in node but we normalise\n const path = obj.path || pathname + search\n\n return `${protocol}${userPass || auth}${\n host || hostname + port\n }${path}${hash}`\n }\n}\n\nmodule.exports = {\n URLWithLegacySupport,\n URLSearchParams: self.URLSearchParams,\n defaultBase,\n format\n}\n","'use strict'\n\nclass TimeoutError extends Error {\n constructor (message = 'Request timed out') {\n super(message)\n this.name = 'TimeoutError'\n }\n}\nexports.TimeoutError = TimeoutError\n\nclass AbortError extends Error {\n constructor (message = 'The operation was aborted.') {\n super(message)\n this.name = 'AbortError'\n }\n}\nexports.AbortError = AbortError\n\nclass HTTPError extends Error {\n /**\n * @param {Response} response\n */\n constructor (response) {\n super(response.statusText)\n this.name = 'HTTPError'\n this.response = response\n }\n}\nexports.HTTPError = HTTPError\n","'use strict'\n\nif (globalThis.fetch && globalThis.Headers && globalThis.Request && globalThis.Response) {\n module.exports = {\n default: globalThis.fetch,\n Headers: globalThis.Headers,\n Request: globalThis.Request,\n Response: globalThis.Response\n }\n} else {\n module.exports = {\n default: require('node-fetch').default,\n Headers: require('node-fetch').Headers,\n Request: require('node-fetch').Request,\n Response: require('node-fetch').Response\n }\n}\n","/**\n * Password-based encryption functions.\n *\n * @author Dave Longley\n * @author Stefan Siegl \n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl \n *\n * An EncryptedPrivateKeyInfo:\n *\n * EncryptedPrivateKeyInfo ::= SEQUENCE {\n * encryptionAlgorithm EncryptionAlgorithmIdentifier,\n * encryptedData EncryptedData }\n *\n * EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * EncryptedData ::= OCTET STRING\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./md');\nrequire('./oids');\nrequire('./pbkdf2');\nrequire('./pem');\nrequire('./random');\nrequire('./rc2');\nrequire('./rsa');\nrequire('./util');\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Password-based encryption implementation. */\nvar pki = forge.pki = forge.pki || {};\nmodule.exports = pki.pbe = forge.pbe = forge.pbe || {};\nvar oids = pki.oids;\n\n// validator for an EncryptedPrivateKeyInfo structure\n// Note: Currently only works w/algorithm params\nvar encryptedPrivateKeyValidator = {\n name: 'EncryptedPrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedPrivateKeyInfo.encryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encryptionOid'\n }, {\n name: 'AlgorithmIdentifier.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'encryptionParams'\n }]\n }, {\n // encryptedData\n name: 'EncryptedPrivateKeyInfo.encryptedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encryptedData'\n }]\n};\n\n// validator for a PBES2Algorithms structure\n// Note: Currently only works w/PBKDF2 + AES encryption schemes\nvar PBES2AlgorithmsValidator = {\n name: 'PBES2Algorithms',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.keyDerivationFunc',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.keyDerivationFunc.oid',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'kdfOid'\n }, {\n name: 'PBES2Algorithms.params',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.params.salt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'kdfSalt'\n }, {\n name: 'PBES2Algorithms.params.iterationCount',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'kdfIterationCount'\n }, {\n name: 'PBES2Algorithms.params.keyLength',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n optional: true,\n capture: 'keyLength'\n }, {\n // prf\n name: 'PBES2Algorithms.params.prf',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'PBES2Algorithms.params.prf.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'prfOid'\n }]\n }]\n }]\n }, {\n name: 'PBES2Algorithms.encryptionScheme',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.encryptionScheme.oid',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encOid'\n }, {\n name: 'PBES2Algorithms.encryptionScheme.iv',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encIv'\n }]\n }]\n};\n\nvar pkcs12PbeParamsValidator = {\n name: 'pkcs-12PbeParams',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'pkcs-12PbeParams.salt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'salt'\n }, {\n name: 'pkcs-12PbeParams.iterations',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'iterations'\n }]\n};\n\n/**\n * Encrypts a ASN.1 PrivateKeyInfo object, producing an EncryptedPrivateKeyInfo.\n *\n * PBES2Algorithms ALGORITHM-IDENTIFIER ::=\n * { {PBES2-params IDENTIFIED BY id-PBES2}, ...}\n *\n * id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}\n *\n * PBES2-params ::= SEQUENCE {\n * keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},\n * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}\n * }\n *\n * PBES2-KDFs ALGORITHM-IDENTIFIER ::=\n * { {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }\n *\n * PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... }\n *\n * PBKDF2-params ::= SEQUENCE {\n * salt CHOICE {\n * specified OCTET STRING,\n * otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}\n * },\n * iterationCount INTEGER (1..MAX),\n * keyLength INTEGER (1..MAX) OPTIONAL,\n * prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1\n * }\n *\n * @param obj the ASN.1 PrivateKeyInfo object.\n * @param password the password to encrypt with.\n * @param options:\n * algorithm the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.\n * count the iteration count to use.\n * saltSize the salt size to use.\n * prfAlgorithm the PRF message digest algorithm to use\n * ('sha1', 'sha224', 'sha256', 'sha384', 'sha512')\n *\n * @return the ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptPrivateKeyInfo = function(obj, password, options) {\n // set default options\n options = options || {};\n options.saltSize = options.saltSize || 8;\n options.count = options.count || 2048;\n options.algorithm = options.algorithm || 'aes128';\n options.prfAlgorithm = options.prfAlgorithm || 'sha1';\n\n // generate PBE params\n var salt = forge.random.getBytesSync(options.saltSize);\n var count = options.count;\n var countBytes = asn1.integerToDer(count);\n var dkLen;\n var encryptionAlgorithm;\n var encryptedData;\n if(options.algorithm.indexOf('aes') === 0 || options.algorithm === 'des') {\n // do PBES2\n var ivLen, encOid, cipherFn;\n switch(options.algorithm) {\n case 'aes128':\n dkLen = 16;\n ivLen = 16;\n encOid = oids['aes128-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes192':\n dkLen = 24;\n ivLen = 16;\n encOid = oids['aes192-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes256':\n dkLen = 32;\n ivLen = 16;\n encOid = oids['aes256-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'des':\n dkLen = 8;\n ivLen = 8;\n encOid = oids['desCBC'];\n cipherFn = forge.des.createEncryptionCipher;\n break;\n default:\n var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // get PRF message digest\n var prfAlgorithm = 'hmacWith' + options.prfAlgorithm.toUpperCase();\n var md = prfAlgorithmToMessageDigest(prfAlgorithm);\n\n // encrypt private key using pbe SHA-1 and AES/DES\n var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md);\n var iv = forge.random.getBytesSync(ivLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(obj));\n cipher.finish();\n encryptedData = cipher.output.getBytes();\n\n // get PBKDF2-params\n var params = createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm);\n\n encryptionAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pkcs5PBES2']).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // keyDerivationFunc\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pkcs5PBKDF2']).getBytes()),\n // PBKDF2-params\n params\n ]),\n // encryptionScheme\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(encOid).getBytes()),\n // iv\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, iv)\n ])\n ])\n ]);\n } else if(options.algorithm === '3des') {\n // Do PKCS12 PBE\n dkLen = 24;\n\n var saltBytes = new forge.util.ByteBuffer(salt);\n var dk = pki.pbe.generatePkcs12Key(password, saltBytes, 1, count, dkLen);\n var iv = pki.pbe.generatePkcs12Key(password, saltBytes, 2, count, dkLen);\n var cipher = forge.des.createEncryptionCipher(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(obj));\n cipher.finish();\n encryptedData = cipher.output.getBytes();\n\n encryptionAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pbeWithSHAAnd3-KeyTripleDES-CBC']).getBytes()),\n // pkcs-12PbeParams\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // salt\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt),\n // iteration count\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n countBytes.getBytes())\n ])\n ]);\n } else {\n var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // EncryptedPrivateKeyInfo\n var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // encryptionAlgorithm\n encryptionAlgorithm,\n // encryptedData\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, encryptedData)\n ]);\n return rval;\n};\n\n/**\n * Decrypts a ASN.1 PrivateKeyInfo object.\n *\n * @param obj the ASN.1 EncryptedPrivateKeyInfo object.\n * @param password the password to decrypt with.\n *\n * @return the ASN.1 PrivateKeyInfo on success, null on failure.\n */\npki.decryptPrivateKeyInfo = function(obj, password) {\n var rval = null;\n\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, encryptedPrivateKeyValidator, capture, errors)) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n // get cipher\n var oid = asn1.derToOid(capture.encryptionOid);\n var cipher = pki.pbe.getCipher(oid, capture.encryptionParams, password);\n\n // get encrypted data\n var encrypted = forge.util.createBuffer(capture.encryptedData);\n\n cipher.update(encrypted);\n if(cipher.finish()) {\n rval = asn1.fromDer(cipher.output);\n }\n\n return rval;\n};\n\n/**\n * Converts a EncryptedPrivateKeyInfo to PEM format.\n *\n * @param epki the EncryptedPrivateKeyInfo.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted encrypted private key.\n */\npki.encryptedPrivateKeyToPem = function(epki, maxline) {\n // convert to DER, then PEM-encode\n var msg = {\n type: 'ENCRYPTED PRIVATE KEY',\n body: asn1.toDer(epki).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts a PEM-encoded EncryptedPrivateKeyInfo to ASN.1 format. Decryption\n * is not performed.\n *\n * @param pem the EncryptedPrivateKeyInfo in PEM-format.\n *\n * @return the ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptedPrivateKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'ENCRYPTED PRIVATE KEY') {\n var error = new Error('Could not convert encrypted private key from PEM; ' +\n 'PEM header type is \"ENCRYPTED PRIVATE KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert encrypted private key from PEM; ' +\n 'PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n return asn1.fromDer(msg.body);\n};\n\n/**\n * Encrypts an RSA private key. By default, the key will be wrapped in\n * a PrivateKeyInfo and encrypted to produce a PKCS#8 EncryptedPrivateKeyInfo.\n * This is the standard, preferred way to encrypt a private key.\n *\n * To produce a non-standard PEM-encrypted private key that uses encapsulated\n * headers to indicate the encryption algorithm (old-style non-PKCS#8 OpenSSL\n * private key encryption), set the 'legacy' option to true. Note: Using this\n * option will cause the iteration count to be forced to 1.\n *\n * Note: The 'des' algorithm is supported, but it is not considered to be\n * secure because it only uses a single 56-bit key. If possible, it is highly\n * recommended that a different algorithm be used.\n *\n * @param rsaKey the RSA key to encrypt.\n * @param password the password to use.\n * @param options:\n * algorithm: the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des', 'des').\n * count: the iteration count to use.\n * saltSize: the salt size to use.\n * legacy: output an old non-PKCS#8 PEM-encrypted+encapsulated\n * headers (DEK-Info) private key.\n *\n * @return the PEM-encoded ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptRsaPrivateKey = function(rsaKey, password, options) {\n // standard PKCS#8\n options = options || {};\n if(!options.legacy) {\n // encrypt PrivateKeyInfo\n var rval = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(rsaKey));\n rval = pki.encryptPrivateKeyInfo(rval, password, options);\n return pki.encryptedPrivateKeyToPem(rval);\n }\n\n // legacy non-PKCS#8\n var algorithm;\n var iv;\n var dkLen;\n var cipherFn;\n switch(options.algorithm) {\n case 'aes128':\n algorithm = 'AES-128-CBC';\n dkLen = 16;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes192':\n algorithm = 'AES-192-CBC';\n dkLen = 24;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes256':\n algorithm = 'AES-256-CBC';\n dkLen = 32;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case '3des':\n algorithm = 'DES-EDE3-CBC';\n dkLen = 24;\n iv = forge.random.getBytesSync(8);\n cipherFn = forge.des.createEncryptionCipher;\n break;\n case 'des':\n algorithm = 'DES-CBC';\n dkLen = 8;\n iv = forge.random.getBytesSync(8);\n cipherFn = forge.des.createEncryptionCipher;\n break;\n default:\n var error = new Error('Could not encrypt RSA private key; unsupported ' +\n 'encryption algorithm \"' + options.algorithm + '\".');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // encrypt private key using OpenSSL legacy key derivation\n var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(pki.privateKeyToAsn1(rsaKey)));\n cipher.finish();\n\n var msg = {\n type: 'RSA PRIVATE KEY',\n procType: {\n version: '4',\n type: 'ENCRYPTED'\n },\n dekInfo: {\n algorithm: algorithm,\n parameters: forge.util.bytesToHex(iv).toUpperCase()\n },\n body: cipher.output.getBytes()\n };\n return forge.pem.encode(msg);\n};\n\n/**\n * Decrypts an RSA private key.\n *\n * @param pem the PEM-formatted EncryptedPrivateKeyInfo to decrypt.\n * @param password the password to use.\n *\n * @return the RSA key on success, null on failure.\n */\npki.decryptRsaPrivateKey = function(pem, password) {\n var rval = null;\n\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'ENCRYPTED PRIVATE KEY' &&\n msg.type !== 'PRIVATE KEY' &&\n msg.type !== 'RSA PRIVATE KEY') {\n var error = new Error('Could not convert private key from PEM; PEM header type ' +\n 'is not \"ENCRYPTED PRIVATE KEY\", \"PRIVATE KEY\", or \"RSA PRIVATE KEY\".');\n error.headerType = error;\n throw error;\n }\n\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n var dkLen;\n var cipherFn;\n switch(msg.dekInfo.algorithm) {\n case 'DES-CBC':\n dkLen = 8;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'DES-EDE3-CBC':\n dkLen = 24;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'AES-128-CBC':\n dkLen = 16;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'AES-192-CBC':\n dkLen = 24;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'AES-256-CBC':\n dkLen = 32;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'RC2-40-CBC':\n dkLen = 5;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 40);\n };\n break;\n case 'RC2-64-CBC':\n dkLen = 8;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 64);\n };\n break;\n case 'RC2-128-CBC':\n dkLen = 16;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 128);\n };\n break;\n default:\n var error = new Error('Could not decrypt private key; unsupported ' +\n 'encryption algorithm \"' + msg.dekInfo.algorithm + '\".');\n error.algorithm = msg.dekInfo.algorithm;\n throw error;\n }\n\n // use OpenSSL legacy key derivation\n var iv = forge.util.hexToBytes(msg.dekInfo.parameters);\n var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(forge.util.createBuffer(msg.body));\n if(cipher.finish()) {\n rval = cipher.output.getBytes();\n } else {\n return rval;\n }\n } else {\n rval = msg.body;\n }\n\n if(msg.type === 'ENCRYPTED PRIVATE KEY') {\n rval = pki.decryptPrivateKeyInfo(asn1.fromDer(rval), password);\n } else {\n // decryption already performed above\n rval = asn1.fromDer(rval);\n }\n\n if(rval !== null) {\n rval = pki.privateKeyFromAsn1(rval);\n }\n\n return rval;\n};\n\n/**\n * Derives a PKCS#12 key.\n *\n * @param password the password to derive the key material from, null or\n * undefined for none.\n * @param salt the salt, as a ByteBuffer, to use.\n * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).\n * @param iter the iteration count.\n * @param n the number of bytes to derive from the password.\n * @param md the message digest to use, defaults to SHA-1.\n *\n * @return a ByteBuffer with the bytes derived from the password.\n */\npki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {\n var j, l;\n\n if(typeof md === 'undefined' || md === null) {\n if(!('sha1' in forge.md)) {\n throw new Error('\"sha1\" hash algorithm unavailable.');\n }\n md = forge.md.sha1.create();\n }\n\n var u = md.digestLength;\n var v = md.blockLength;\n var result = new forge.util.ByteBuffer();\n\n /* Convert password to Unicode byte buffer + trailing 0-byte. */\n var passBuf = new forge.util.ByteBuffer();\n if(password !== null && password !== undefined) {\n for(l = 0; l < password.length; l++) {\n passBuf.putInt16(password.charCodeAt(l));\n }\n passBuf.putInt16(0);\n }\n\n /* Length of salt and password in BYTES. */\n var p = passBuf.length();\n var s = salt.length();\n\n /* 1. Construct a string, D (the \"diversifier\"), by concatenating\n v copies of ID. */\n var D = new forge.util.ByteBuffer();\n D.fillWithByte(id, v);\n\n /* 2. Concatenate copies of the salt together to create a string S of length\n v * ceil(s / v) bytes (the final copy of the salt may be trunacted\n to create S).\n Note that if the salt is the empty string, then so is S. */\n var Slen = v * Math.ceil(s / v);\n var S = new forge.util.ByteBuffer();\n for(l = 0; l < Slen; l++) {\n S.putByte(salt.at(l % s));\n }\n\n /* 3. Concatenate copies of the password together to create a string P of\n length v * ceil(p / v) bytes (the final copy of the password may be\n truncated to create P).\n Note that if the password is the empty string, then so is P. */\n var Plen = v * Math.ceil(p / v);\n var P = new forge.util.ByteBuffer();\n for(l = 0; l < Plen; l++) {\n P.putByte(passBuf.at(l % p));\n }\n\n /* 4. Set I=S||P to be the concatenation of S and P. */\n var I = S;\n I.putBuffer(P);\n\n /* 5. Set c=ceil(n / u). */\n var c = Math.ceil(n / u);\n\n /* 6. For i=1, 2, ..., c, do the following: */\n for(var i = 1; i <= c; i++) {\n /* a) Set Ai=H^r(D||I). (l.e. the rth hash of D||I, H(H(H(...H(D||I)))) */\n var buf = new forge.util.ByteBuffer();\n buf.putBytes(D.bytes());\n buf.putBytes(I.bytes());\n for(var round = 0; round < iter; round++) {\n md.start();\n md.update(buf.getBytes());\n buf = md.digest();\n }\n\n /* b) Concatenate copies of Ai to create a string B of length v bytes (the\n final copy of Ai may be truncated to create B). */\n var B = new forge.util.ByteBuffer();\n for(l = 0; l < v; l++) {\n B.putByte(buf.at(l % u));\n }\n\n /* c) Treating I as a concatenation I0, I1, ..., Ik-1 of v-byte blocks,\n where k=ceil(s / v) + ceil(p / v), modify I by setting\n Ij=(Ij+B+1) mod 2v for each j. */\n var k = Math.ceil(s / v) + Math.ceil(p / v);\n var Inew = new forge.util.ByteBuffer();\n for(j = 0; j < k; j++) {\n var chunk = new forge.util.ByteBuffer(I.getBytes(v));\n var x = 0x1ff;\n for(l = B.length() - 1; l >= 0; l--) {\n x = x >> 8;\n x += B.at(l) + chunk.at(l);\n chunk.setAt(l, x & 0xff);\n }\n Inew.putBuffer(chunk);\n }\n I = Inew;\n\n /* Add Ai to A. */\n result.putBuffer(buf);\n }\n\n result.truncate(result.length() - n);\n return result;\n};\n\n/**\n * Get new Forge cipher object instance.\n *\n * @param oid the OID (in string notation).\n * @param params the ASN.1 params object.\n * @param password the password to decrypt with.\n *\n * @return new cipher object instance.\n */\npki.pbe.getCipher = function(oid, params, password) {\n switch(oid) {\n case pki.oids['pkcs5PBES2']:\n return pki.pbe.getCipherForPBES2(oid, params, password);\n\n case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:\n case pki.oids['pbewithSHAAnd40BitRC2-CBC']:\n return pki.pbe.getCipherForPKCS12PBE(oid, params, password);\n\n default:\n var error = new Error('Cannot read encrypted PBE data block. Unsupported OID.');\n error.oid = oid;\n error.supportedOids = [\n 'pkcs5PBES2',\n 'pbeWithSHAAnd3-KeyTripleDES-CBC',\n 'pbewithSHAAnd40BitRC2-CBC'\n ];\n throw error;\n }\n};\n\n/**\n * Get new Forge cipher object instance according to PBES2 params block.\n *\n * The returned cipher instance is already started using the IV\n * from PBES2 parameter block.\n *\n * @param oid the PKCS#5 PBKDF2 OID (in string notation).\n * @param params the ASN.1 PBES2-params object.\n * @param password the password to decrypt with.\n *\n * @return new cipher object instance.\n */\npki.pbe.getCipherForPBES2 = function(oid, params, password) {\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(params, PBES2AlgorithmsValidator, capture, errors)) {\n var error = new Error('Cannot read password-based-encryption algorithm ' +\n 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n // check oids\n oid = asn1.derToOid(capture.kdfOid);\n if(oid !== pki.oids['pkcs5PBKDF2']) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'Unsupported key derivation function OID.');\n error.oid = oid;\n error.supportedOids = ['pkcs5PBKDF2'];\n throw error;\n }\n oid = asn1.derToOid(capture.encOid);\n if(oid !== pki.oids['aes128-CBC'] &&\n oid !== pki.oids['aes192-CBC'] &&\n oid !== pki.oids['aes256-CBC'] &&\n oid !== pki.oids['des-EDE3-CBC'] &&\n oid !== pki.oids['desCBC']) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'Unsupported encryption scheme OID.');\n error.oid = oid;\n error.supportedOids = [\n 'aes128-CBC', 'aes192-CBC', 'aes256-CBC', 'des-EDE3-CBC', 'desCBC'];\n throw error;\n }\n\n // set PBE params\n var salt = capture.kdfSalt;\n var count = forge.util.createBuffer(capture.kdfIterationCount);\n count = count.getInt(count.length() << 3);\n var dkLen;\n var cipherFn;\n switch(pki.oids[oid]) {\n case 'aes128-CBC':\n dkLen = 16;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'aes192-CBC':\n dkLen = 24;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'aes256-CBC':\n dkLen = 32;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'des-EDE3-CBC':\n dkLen = 24;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'desCBC':\n dkLen = 8;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n }\n\n // get PRF message digest\n var md = prfOidToMessageDigest(capture.prfOid);\n\n // decrypt private key using pbe with chosen PRF and AES/DES\n var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md);\n var iv = capture.encIv;\n var cipher = cipherFn(dk);\n cipher.start(iv);\n\n return cipher;\n};\n\n/**\n * Get new Forge cipher object instance for PKCS#12 PBE.\n *\n * The returned cipher instance is already started using the key & IV\n * derived from the provided password and PKCS#12 PBE salt.\n *\n * @param oid The PKCS#12 PBE OID (in string notation).\n * @param params The ASN.1 PKCS#12 PBE-params object.\n * @param password The password to decrypt with.\n *\n * @return the new cipher object instance.\n */\npki.pbe.getCipherForPKCS12PBE = function(oid, params, password) {\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(params, pkcs12PbeParamsValidator, capture, errors)) {\n var error = new Error('Cannot read password-based-encryption algorithm ' +\n 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n var salt = forge.util.createBuffer(capture.salt);\n var count = forge.util.createBuffer(capture.iterations);\n count = count.getInt(count.length() << 3);\n\n var dkLen, dIvLen, cipherFn;\n switch(oid) {\n case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:\n dkLen = 24;\n dIvLen = 8;\n cipherFn = forge.des.startDecrypting;\n break;\n\n case pki.oids['pbewithSHAAnd40BitRC2-CBC']:\n dkLen = 5;\n dIvLen = 8;\n cipherFn = function(key, iv) {\n var cipher = forge.rc2.createDecryptionCipher(key, 40);\n cipher.start(iv, null);\n return cipher;\n };\n break;\n\n default:\n var error = new Error('Cannot read PKCS #12 PBE data block. Unsupported OID.');\n error.oid = oid;\n throw error;\n }\n\n // get PRF message digest\n var md = prfOidToMessageDigest(capture.prfOid);\n var key = pki.pbe.generatePkcs12Key(password, salt, 1, count, dkLen, md);\n md.start();\n var iv = pki.pbe.generatePkcs12Key(password, salt, 2, count, dIvLen, md);\n\n return cipherFn(key, iv);\n};\n\n/**\n * OpenSSL's legacy key derivation function.\n *\n * See: http://www.openssl.org/docs/crypto/EVP_BytesToKey.html\n *\n * @param password the password to derive the key from.\n * @param salt the salt to use, null for none.\n * @param dkLen the number of bytes needed for the derived key.\n * @param [options] the options to use:\n * [md] an optional message digest object to use.\n */\npki.pbe.opensslDeriveBytes = function(password, salt, dkLen, md) {\n if(typeof md === 'undefined' || md === null) {\n if(!('md5' in forge.md)) {\n throw new Error('\"md5\" hash algorithm unavailable.');\n }\n md = forge.md.md5.create();\n }\n if(salt === null) {\n salt = '';\n }\n var digests = [hash(md, password + salt)];\n for(var length = 16, i = 1; length < dkLen; ++i, length += 16) {\n digests.push(hash(md, digests[i - 1] + password + salt));\n }\n return digests.join('').substr(0, dkLen);\n};\n\nfunction hash(md, bytes) {\n return md.start().update(bytes).digest().getBytes();\n}\n\nfunction prfOidToMessageDigest(prfOid) {\n // get PRF algorithm, default to SHA-1\n var prfAlgorithm;\n if(!prfOid) {\n prfAlgorithm = 'hmacWithSHA1';\n } else {\n prfAlgorithm = pki.oids[asn1.derToOid(prfOid)];\n if(!prfAlgorithm) {\n var error = new Error('Unsupported PRF OID.');\n error.oid = prfOid;\n error.supported = [\n 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',\n 'hmacWithSHA512'];\n throw error;\n }\n }\n return prfAlgorithmToMessageDigest(prfAlgorithm);\n}\n\nfunction prfAlgorithmToMessageDigest(prfAlgorithm) {\n var factory = forge.md;\n switch(prfAlgorithm) {\n case 'hmacWithSHA224':\n factory = forge.md.sha512;\n case 'hmacWithSHA1':\n case 'hmacWithSHA256':\n case 'hmacWithSHA384':\n case 'hmacWithSHA512':\n prfAlgorithm = prfAlgorithm.substr(8).toLowerCase();\n break;\n default:\n var error = new Error('Unsupported PRF algorithm.');\n error.algorithm = prfAlgorithm;\n error.supported = [\n 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',\n 'hmacWithSHA512'];\n throw error;\n }\n if(!factory || !(prfAlgorithm in factory)) {\n throw new Error('Unknown hash algorithm: ' + prfAlgorithm);\n }\n return factory[prfAlgorithm].create();\n}\n\nfunction createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm) {\n var params = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // salt\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt),\n // iteration count\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n countBytes.getBytes())\n ]);\n // when PRF algorithm is not SHA-1 default, add key length and PRF algorithm\n if(prfAlgorithm !== 'hmacWithSHA1') {\n params.value.push(\n // key length\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(dkLen.toString(16))),\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids[prfAlgorithm]).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n }\n return params;\n}\n","/**\n * Cipher base API.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nmodule.exports = forge.cipher = forge.cipher || {};\n\n// registered algorithms\nforge.cipher.algorithms = forge.cipher.algorithms || {};\n\n/**\n * Creates a cipher object that can be used to encrypt data using the given\n * algorithm and key. The algorithm may be provided as a string value for a\n * previously registered algorithm or it may be given as a cipher algorithm\n * API object.\n *\n * @param algorithm the algorithm to use, either a string or an algorithm API\n * object.\n * @param key the key to use, as a binary-encoded string of bytes or a\n * byte buffer.\n *\n * @return the cipher.\n */\nforge.cipher.createCipher = function(algorithm, key) {\n var api = algorithm;\n if(typeof api === 'string') {\n api = forge.cipher.getAlgorithm(api);\n if(api) {\n api = api();\n }\n }\n if(!api) {\n throw new Error('Unsupported algorithm: ' + algorithm);\n }\n\n // assume block cipher\n return new forge.cipher.BlockCipher({\n algorithm: api,\n key: key,\n decrypt: false\n });\n};\n\n/**\n * Creates a decipher object that can be used to decrypt data using the given\n * algorithm and key. The algorithm may be provided as a string value for a\n * previously registered algorithm or it may be given as a cipher algorithm\n * API object.\n *\n * @param algorithm the algorithm to use, either a string or an algorithm API\n * object.\n * @param key the key to use, as a binary-encoded string of bytes or a\n * byte buffer.\n *\n * @return the cipher.\n */\nforge.cipher.createDecipher = function(algorithm, key) {\n var api = algorithm;\n if(typeof api === 'string') {\n api = forge.cipher.getAlgorithm(api);\n if(api) {\n api = api();\n }\n }\n if(!api) {\n throw new Error('Unsupported algorithm: ' + algorithm);\n }\n\n // assume block cipher\n return new forge.cipher.BlockCipher({\n algorithm: api,\n key: key,\n decrypt: true\n });\n};\n\n/**\n * Registers an algorithm by name. If the name was already registered, the\n * algorithm API object will be overwritten.\n *\n * @param name the name of the algorithm.\n * @param algorithm the algorithm API object.\n */\nforge.cipher.registerAlgorithm = function(name, algorithm) {\n name = name.toUpperCase();\n forge.cipher.algorithms[name] = algorithm;\n};\n\n/**\n * Gets a registered algorithm by name.\n *\n * @param name the name of the algorithm.\n *\n * @return the algorithm, if found, null if not.\n */\nforge.cipher.getAlgorithm = function(name) {\n name = name.toUpperCase();\n if(name in forge.cipher.algorithms) {\n return forge.cipher.algorithms[name];\n }\n return null;\n};\n\nvar BlockCipher = forge.cipher.BlockCipher = function(options) {\n this.algorithm = options.algorithm;\n this.mode = this.algorithm.mode;\n this.blockSize = this.mode.blockSize;\n this._finish = false;\n this._input = null;\n this.output = null;\n this._op = options.decrypt ? this.mode.decrypt : this.mode.encrypt;\n this._decrypt = options.decrypt;\n this.algorithm.initialize(options);\n};\n\n/**\n * Starts or restarts the encryption or decryption process, whichever\n * was previously configured.\n *\n * For non-GCM mode, the IV may be a binary-encoded string of bytes, an array\n * of bytes, a byte buffer, or an array of 32-bit integers. If the IV is in\n * bytes, then it must be Nb (16) bytes in length. If the IV is given in as\n * 32-bit integers, then it must be 4 integers long.\n *\n * Note: an IV is not required or used in ECB mode.\n *\n * For GCM-mode, the IV must be given as a binary-encoded string of bytes or\n * a byte buffer. The number of bytes should be 12 (96 bits) as recommended\n * by NIST SP-800-38D but another length may be given.\n *\n * @param options the options to use:\n * iv the initialization vector to use as a binary-encoded string of\n * bytes, null to reuse the last ciphered block from a previous\n * update() (this \"residue\" method is for legacy support only).\n * additionalData additional authentication data as a binary-encoded\n * string of bytes, for 'GCM' mode, (default: none).\n * tagLength desired length of authentication tag, in bits, for\n * 'GCM' mode (0-128, default: 128).\n * tag the authentication tag to check if decrypting, as a\n * binary-encoded string of bytes.\n * output the output the buffer to write to, null to create one.\n */\nBlockCipher.prototype.start = function(options) {\n options = options || {};\n var opts = {};\n for(var key in options) {\n opts[key] = options[key];\n }\n opts.decrypt = this._decrypt;\n this._finish = false;\n this._input = forge.util.createBuffer();\n this.output = options.output || forge.util.createBuffer();\n this.mode.start(opts);\n};\n\n/**\n * Updates the next block according to the cipher mode.\n *\n * @param input the buffer to read from.\n */\nBlockCipher.prototype.update = function(input) {\n if(input) {\n // input given, so empty it into the input buffer\n this._input.putBuffer(input);\n }\n\n // do cipher operation until it needs more input and not finished\n while(!this._op.call(this.mode, this._input, this.output, this._finish) &&\n !this._finish) {}\n\n // free consumed memory from input buffer\n this._input.compact();\n};\n\n/**\n * Finishes encrypting or decrypting.\n *\n * @param pad a padding function to use in CBC mode, null for default,\n * signature(blockSize, buffer, decrypt).\n *\n * @return true if successful, false on error.\n */\nBlockCipher.prototype.finish = function(pad) {\n // backwards-compatibility w/deprecated padding API\n // Note: will overwrite padding functions even after another start() call\n if(pad && (this.mode.name === 'ECB' || this.mode.name === 'CBC')) {\n this.mode.pad = function(input) {\n return pad(this.blockSize, input, false);\n };\n this.mode.unpad = function(output) {\n return pad(this.blockSize, output, true);\n };\n }\n\n // build options for padding and afterFinish functions\n var options = {};\n options.decrypt = this._decrypt;\n\n // get # of bytes that won't fill a block\n options.overflow = this._input.length() % this.blockSize;\n\n if(!this._decrypt && this.mode.pad) {\n if(!this.mode.pad(this._input, options)) {\n return false;\n }\n }\n\n // do final update\n this._finish = true;\n this.update();\n\n if(this._decrypt && this.mode.unpad) {\n if(!this.mode.unpad(this.output, options)) {\n return false;\n }\n }\n\n if(this.mode.afterFinish) {\n if(!this.mode.afterFinish(this.output, options)) {\n return false;\n }\n }\n\n return true;\n};\n","/**\n * Supported cipher modes.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nforge.cipher = forge.cipher || {};\n\n// supported cipher modes\nvar modes = module.exports = forge.cipher.modes = forge.cipher.modes || {};\n\n/** Electronic codebook (ECB) (Don't use this; it's not secure) **/\n\nmodes.ecb = function(options) {\n options = options || {};\n this.name = 'ECB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n};\n\nmodes.ecb.prototype.start = function(options) {};\n\nmodes.ecb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodes.ecb.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodes.ecb.prototype.pad = function(input, options) {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (input.length() === this.blockSize ?\n this.blockSize : (this.blockSize - input.length()));\n input.fillWithByte(padding, padding);\n return true;\n};\n\nmodes.ecb.prototype.unpad = function(output, options) {\n // check for error: input data not a multiple of blockSize\n if(options.overflow > 0) {\n return false;\n }\n\n // ensure padding byte count is valid\n var len = output.length();\n var count = output.at(len - 1);\n if(count > (this.blockSize << 2)) {\n return false;\n }\n\n // trim off padding bytes\n output.truncate(count);\n return true;\n};\n\n/** Cipher-block Chaining (CBC) **/\n\nmodes.cbc = function(options) {\n options = options || {};\n this.name = 'CBC';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n};\n\nmodes.cbc.prototype.start = function(options) {\n // Note: legacy support for using IV residue (has security flaws)\n // if IV is null, reuse block from previous processing\n if(options.iv === null) {\n // must have a previous block\n if(!this._prev) {\n throw new Error('Invalid IV parameter.');\n }\n this._iv = this._prev.slice(0);\n } else if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n } else {\n // save IV as \"previous\" block\n this._iv = transformIV(options.iv, this.blockSize);\n this._prev = this._iv.slice(0);\n }\n};\n\nmodes.cbc.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n // CBC XOR's IV (or previous block) with plaintext\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._prev[i] ^ input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output, save previous block\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n this._prev = this._outBlock;\n};\n\nmodes.cbc.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output, save previous ciphered block\n // CBC XOR's IV (or previous block) with ciphertext\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._prev[i] ^ this._outBlock[i]);\n }\n this._prev = this._inBlock.slice(0);\n};\n\nmodes.cbc.prototype.pad = function(input, options) {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (input.length() === this.blockSize ?\n this.blockSize : (this.blockSize - input.length()));\n input.fillWithByte(padding, padding);\n return true;\n};\n\nmodes.cbc.prototype.unpad = function(output, options) {\n // check for error: input data not a multiple of blockSize\n if(options.overflow > 0) {\n return false;\n }\n\n // ensure padding byte count is valid\n var len = output.length();\n var count = output.at(len - 1);\n if(count > (this.blockSize << 2)) {\n return false;\n }\n\n // trim off padding bytes\n output.truncate(count);\n return true;\n};\n\n/** Cipher feedback (CFB) **/\n\nmodes.cfb = function(options) {\n options = options || {};\n this.name = 'CFB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output, write input as output\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32() ^ this._outBlock[i];\n output.putInt32(this._inBlock[i]);\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output, write input as partial output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialBlock[i] = input.getInt32() ^ this._outBlock[i];\n this._partialOutput.putInt32(this._partialBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._partialBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block (CFB always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output, write input as output\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n output.putInt32(this._inBlock[i] ^ this._outBlock[i]);\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output, write input as partial output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialBlock[i] = input.getInt32();\n this._partialOutput.putInt32(this._partialBlock[i] ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._partialBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\n/** Output feedback (OFB) **/\n\nmodes.ofb = function(options) {\n options = options || {};\n this.name = 'OFB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(input.length() === 0) {\n return true;\n }\n\n // encrypt block (OFB always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output and update next input\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(input.getInt32() ^ this._outBlock[i]);\n this._inBlock[i] = this._outBlock[i];\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._outBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.decrypt = modes.ofb.prototype.encrypt;\n\n/** Counter (CTR) **/\n\nmodes.ctr = function(options) {\n options = options || {};\n this.name = 'CTR';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.ctr.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.ctr.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block (CTR always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n } else {\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n }\n\n // block complete, increment counter (input block)\n inc32(this._inBlock);\n};\n\nmodes.ctr.prototype.decrypt = modes.ctr.prototype.encrypt;\n\n/** Galois/Counter Mode (GCM) **/\n\nmodes.gcm = function(options) {\n options = options || {};\n this.name = 'GCM';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n\n // R is actually this value concatenated with 120 more zero bits, but\n // we only XOR against R so the other zeros have no effect -- we just\n // apply this value to the first integer in a block\n this._R = 0xE1000000;\n};\n\nmodes.gcm.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // ensure IV is a byte buffer\n var iv = forge.util.createBuffer(options.iv);\n\n // no ciphered data processed yet\n this._cipherLength = 0;\n\n // default additional data is none\n var additionalData;\n if('additionalData' in options) {\n additionalData = forge.util.createBuffer(options.additionalData);\n } else {\n additionalData = forge.util.createBuffer();\n }\n\n // default tag length is 128 bits\n if('tagLength' in options) {\n this._tagLength = options.tagLength;\n } else {\n this._tagLength = 128;\n }\n\n // if tag is given, ensure tag matches tag length\n this._tag = null;\n if(options.decrypt) {\n // save tag to check later\n this._tag = forge.util.createBuffer(options.tag).getBytes();\n if(this._tag.length !== (this._tagLength / 8)) {\n throw new Error('Authentication tag does not match tag length.');\n }\n }\n\n // create tmp storage for hash calculation\n this._hashBlock = new Array(this._ints);\n\n // no tag generated yet\n this.tag = null;\n\n // generate hash subkey\n // (apply block cipher to \"zero\" block)\n this._hashSubkey = new Array(this._ints);\n this.cipher.encrypt([0, 0, 0, 0], this._hashSubkey);\n\n // generate table M\n // use 4-bit tables (32 component decomposition of a 16 byte value)\n // 8-bit tables take more space and are known to have security\n // vulnerabilities (in native implementations)\n this.componentBits = 4;\n this._m = this.generateHashTable(this._hashSubkey, this.componentBits);\n\n // Note: support IV length different from 96 bits? (only supporting\n // 96 bits is recommended by NIST SP-800-38D)\n // generate J_0\n var ivLength = iv.length();\n if(ivLength === 12) {\n // 96-bit IV\n this._j0 = [iv.getInt32(), iv.getInt32(), iv.getInt32(), 1];\n } else {\n // IV is NOT 96-bits\n this._j0 = [0, 0, 0, 0];\n while(iv.length() > 0) {\n this._j0 = this.ghash(\n this._hashSubkey, this._j0,\n [iv.getInt32(), iv.getInt32(), iv.getInt32(), iv.getInt32()]);\n }\n this._j0 = this.ghash(\n this._hashSubkey, this._j0, [0, 0].concat(from64To32(ivLength * 8)));\n }\n\n // generate ICB (initial counter block)\n this._inBlock = this._j0.slice(0);\n inc32(this._inBlock);\n this._partialBytes = 0;\n\n // consume authentication data\n additionalData = forge.util.createBuffer(additionalData);\n // save additional data length as a BE 64-bit number\n this._aDataLength = from64To32(additionalData.length() * 8);\n // pad additional data to 128 bit (16 byte) block size\n var overflow = additionalData.length() % this.blockSize;\n if(overflow) {\n additionalData.fillWithByte(0, this.blockSize - overflow);\n }\n this._s = [0, 0, 0, 0];\n while(additionalData.length() > 0) {\n this._s = this.ghash(this._hashSubkey, this._s, [\n additionalData.getInt32(),\n additionalData.getInt32(),\n additionalData.getInt32(),\n additionalData.getInt32()\n ]);\n }\n};\n\nmodes.gcm.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i] ^= input.getInt32());\n }\n this._cipherLength += this.blockSize;\n } else {\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes <= 0 || finish) {\n // handle overflow prior to hashing\n if(finish) {\n // get block overflow\n var overflow = inputLength % this.blockSize;\n this._cipherLength += overflow;\n // truncate for hash function\n this._partialOutput.truncate(this.blockSize - overflow);\n } else {\n this._cipherLength += this.blockSize;\n }\n\n // get output block for hashing\n for(var i = 0; i < this._ints; ++i) {\n this._outBlock[i] = this._partialOutput.getInt32();\n }\n this._partialOutput.read -= this.blockSize;\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n // block still incomplete, restore input buffer, get partial output,\n // and return early\n input.read -= this.blockSize;\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n }\n\n // update hash block S\n this._s = this.ghash(this._hashSubkey, this._s, this._outBlock);\n\n // increment counter (input block)\n inc32(this._inBlock);\n};\n\nmodes.gcm.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n var inputLength = input.length();\n if(inputLength < this.blockSize && !(finish && inputLength > 0)) {\n return true;\n }\n\n // encrypt block (GCM always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // increment counter (input block)\n inc32(this._inBlock);\n\n // update hash block S\n this._hashBlock[0] = input.getInt32();\n this._hashBlock[1] = input.getInt32();\n this._hashBlock[2] = input.getInt32();\n this._hashBlock[3] = input.getInt32();\n this._s = this.ghash(this._hashSubkey, this._s, this._hashBlock);\n\n // XOR hash input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i] ^ this._hashBlock[i]);\n }\n\n // increment cipher data length\n if(inputLength < this.blockSize) {\n this._cipherLength += inputLength % this.blockSize;\n } else {\n this._cipherLength += this.blockSize;\n }\n};\n\nmodes.gcm.prototype.afterFinish = function(output, options) {\n var rval = true;\n\n // handle overflow\n if(options.decrypt && options.overflow) {\n output.truncate(this.blockSize - options.overflow);\n }\n\n // handle authentication tag\n this.tag = forge.util.createBuffer();\n\n // concatenate additional data length with cipher length\n var lengths = this._aDataLength.concat(from64To32(this._cipherLength * 8));\n\n // include lengths in hash\n this._s = this.ghash(this._hashSubkey, this._s, lengths);\n\n // do GCTR(J_0, S)\n var tag = [];\n this.cipher.encrypt(this._j0, tag);\n for(var i = 0; i < this._ints; ++i) {\n this.tag.putInt32(this._s[i] ^ tag[i]);\n }\n\n // trim tag to length\n this.tag.truncate(this.tag.length() % (this._tagLength / 8));\n\n // check authentication tag\n if(options.decrypt && this.tag.bytes() !== this._tag) {\n rval = false;\n }\n\n return rval;\n};\n\n/**\n * See NIST SP-800-38D 6.3 (Algorithm 1). This function performs Galois\n * field multiplication. The field, GF(2^128), is defined by the polynomial:\n *\n * x^128 + x^7 + x^2 + x + 1\n *\n * Which is represented in little-endian binary form as: 11100001 (0xe1). When\n * the value of a coefficient is 1, a bit is set. The value R, is the\n * concatenation of this value and 120 zero bits, yielding a 128-bit value\n * which matches the block size.\n *\n * This function will multiply two elements (vectors of bytes), X and Y, in\n * the field GF(2^128). The result is initialized to zero. For each bit of\n * X (out of 128), x_i, if x_i is set, then the result is multiplied (XOR'd)\n * by the current value of Y. For each bit, the value of Y will be raised by\n * a power of x (multiplied by the polynomial x). This can be achieved by\n * shifting Y once to the right. If the current value of Y, prior to being\n * multiplied by x, has 0 as its LSB, then it is a 127th degree polynomial.\n * Otherwise, we must divide by R after shifting to find the remainder.\n *\n * @param x the first block to multiply by the second.\n * @param y the second block to multiply by the first.\n *\n * @return the block result of the multiplication.\n */\nmodes.gcm.prototype.multiply = function(x, y) {\n var z_i = [0, 0, 0, 0];\n var v_i = y.slice(0);\n\n // calculate Z_128 (block has 128 bits)\n for(var i = 0; i < 128; ++i) {\n // if x_i is 0, Z_{i+1} = Z_i (unchanged)\n // else Z_{i+1} = Z_i ^ V_i\n // get x_i by finding 32-bit int position, then left shift 1 by remainder\n var x_i = x[(i / 32) | 0] & (1 << (31 - i % 32));\n if(x_i) {\n z_i[0] ^= v_i[0];\n z_i[1] ^= v_i[1];\n z_i[2] ^= v_i[2];\n z_i[3] ^= v_i[3];\n }\n\n // if LSB(V_i) is 1, V_i = V_i >> 1\n // else V_i = (V_i >> 1) ^ R\n this.pow(v_i, v_i);\n }\n\n return z_i;\n};\n\nmodes.gcm.prototype.pow = function(x, out) {\n // if LSB(x) is 1, x = x >>> 1\n // else x = (x >>> 1) ^ R\n var lsb = x[3] & 1;\n\n // always do x >>> 1:\n // starting with the rightmost integer, shift each integer to the right\n // one bit, pulling in the bit from the integer to the left as its top\n // most bit (do this for the last 3 integers)\n for(var i = 3; i > 0; --i) {\n out[i] = (x[i] >>> 1) | ((x[i - 1] & 1) << 31);\n }\n // shift the first integer normally\n out[0] = x[0] >>> 1;\n\n // if lsb was not set, then polynomial had a degree of 127 and doesn't\n // need to divided; otherwise, XOR with R to find the remainder; we only\n // need to XOR the first integer since R technically ends w/120 zero bits\n if(lsb) {\n out[0] ^= this._R;\n }\n};\n\nmodes.gcm.prototype.tableMultiply = function(x) {\n // assumes 4-bit tables are used\n var z = [0, 0, 0, 0];\n for(var i = 0; i < 32; ++i) {\n var idx = (i / 8) | 0;\n var x_i = (x[idx] >>> ((7 - (i % 8)) * 4)) & 0xF;\n var ah = this._m[i][x_i];\n z[0] ^= ah[0];\n z[1] ^= ah[1];\n z[2] ^= ah[2];\n z[3] ^= ah[3];\n }\n return z;\n};\n\n/**\n * A continuing version of the GHASH algorithm that operates on a single\n * block. The hash block, last hash value (Ym) and the new block to hash\n * are given.\n *\n * @param h the hash block.\n * @param y the previous value for Ym, use [0, 0, 0, 0] for a new hash.\n * @param x the block to hash.\n *\n * @return the hashed value (Ym).\n */\nmodes.gcm.prototype.ghash = function(h, y, x) {\n y[0] ^= x[0];\n y[1] ^= x[1];\n y[2] ^= x[2];\n y[3] ^= x[3];\n return this.tableMultiply(y);\n //return this.multiply(y, h);\n};\n\n/**\n * Precomputes a table for multiplying against the hash subkey. This\n * mechanism provides a substantial speed increase over multiplication\n * performed without a table. The table-based multiplication this table is\n * for solves X * H by multiplying each component of X by H and then\n * composing the results together using XOR.\n *\n * This function can be used to generate tables with different bit sizes\n * for the components, however, this implementation assumes there are\n * 32 components of X (which is a 16 byte vector), therefore each component\n * takes 4-bits (so the table is constructed with bits=4).\n *\n * @param h the hash subkey.\n * @param bits the bit size for a component.\n */\nmodes.gcm.prototype.generateHashTable = function(h, bits) {\n // TODO: There are further optimizations that would use only the\n // first table M_0 (or some variant) along with a remainder table;\n // this can be explored in the future\n var multiplier = 8 / bits;\n var perInt = 4 * multiplier;\n var size = 16 * multiplier;\n var m = new Array(size);\n for(var i = 0; i < size; ++i) {\n var tmp = [0, 0, 0, 0];\n var idx = (i / perInt) | 0;\n var shft = ((perInt - 1 - (i % perInt)) * bits);\n tmp[idx] = (1 << (bits - 1)) << shft;\n m[i] = this.generateSubHashTable(this.multiply(tmp, h), bits);\n }\n return m;\n};\n\n/**\n * Generates a table for multiplying against the hash subkey for one\n * particular component (out of all possible component values).\n *\n * @param mid the pre-multiplied value for the middle key of the table.\n * @param bits the bit size for a component.\n */\nmodes.gcm.prototype.generateSubHashTable = function(mid, bits) {\n // compute the table quickly by minimizing the number of\n // POW operations -- they only need to be performed for powers of 2,\n // all other entries can be composed from those powers using XOR\n var size = 1 << bits;\n var half = size >>> 1;\n var m = new Array(size);\n m[half] = mid.slice(0);\n var i = half >>> 1;\n while(i > 0) {\n // raise m0[2 * i] and store in m0[i]\n this.pow(m[2 * i], m[i] = []);\n i >>= 1;\n }\n i = 2;\n while(i < half) {\n for(var j = 1; j < i; ++j) {\n var m_i = m[i];\n var m_j = m[j];\n m[i + j] = [\n m_i[0] ^ m_j[0],\n m_i[1] ^ m_j[1],\n m_i[2] ^ m_j[2],\n m_i[3] ^ m_j[3]\n ];\n }\n i *= 2;\n }\n m[0] = [0, 0, 0, 0];\n /* Note: We could avoid storing these by doing composition during multiply\n calculate top half using composition by speed is preferred. */\n for(i = half + 1; i < size; ++i) {\n var c = m[i ^ half];\n m[i] = [mid[0] ^ c[0], mid[1] ^ c[1], mid[2] ^ c[2], mid[3] ^ c[3]];\n }\n return m;\n};\n\n/** Utility functions */\n\nfunction transformIV(iv, blockSize) {\n if(typeof iv === 'string') {\n // convert iv string into byte buffer\n iv = forge.util.createBuffer(iv);\n }\n\n if(forge.util.isArray(iv) && iv.length > 4) {\n // convert iv byte array into byte buffer\n var tmp = iv;\n iv = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n iv.putByte(tmp[i]);\n }\n }\n\n if(iv.length() < blockSize) {\n throw new Error(\n 'Invalid IV length; got ' + iv.length() +\n ' bytes and expected ' + blockSize + ' bytes.');\n }\n\n if(!forge.util.isArray(iv)) {\n // convert iv byte buffer into 32-bit integer array\n var ints = [];\n var blocks = blockSize / 4;\n for(var i = 0; i < blocks; ++i) {\n ints.push(iv.getInt32());\n }\n iv = ints;\n }\n\n return iv;\n}\n\nfunction inc32(block) {\n // increment last 32 bits of block only\n block[block.length - 1] = (block[block.length - 1] + 1) & 0xFFFFFFFF;\n}\n\nfunction from64To32(num) {\n // convert 64-bit number to two BE Int32s\n return [(num / 0x100000000) | 0, num & 0xFFFFFFFF];\n}\n","/**\n * Password-Based Key-Derivation Function #2 implementation.\n *\n * See RFC 2898 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./hmac');\nrequire('./md');\nrequire('./util');\n\nvar pkcs5 = forge.pkcs5 = forge.pkcs5 || {};\n\nvar crypto;\nif(forge.util.isNodejs && !forge.options.usePureJavaScript) {\n crypto = require('crypto');\n}\n\n/**\n * Derives a key from a password.\n *\n * @param p the password as a binary-encoded string of bytes.\n * @param s the salt as a binary-encoded string of bytes.\n * @param c the iteration count, a positive integer.\n * @param dkLen the intended length, in bytes, of the derived key,\n * (max: 2^32 - 1) * hash length of the PRF.\n * @param [md] the message digest (or algorithm identifier as a string) to use\n * in the PRF, defaults to SHA-1.\n * @param [callback(err, key)] presence triggers asynchronous version, called\n * once the operation completes.\n *\n * @return the derived key, as a binary-encoded string of bytes, for the\n * synchronous version (if no callback is specified).\n */\nmodule.exports = forge.pbkdf2 = pkcs5.pbkdf2 = function(\n p, s, c, dkLen, md, callback) {\n if(typeof md === 'function') {\n callback = md;\n md = null;\n }\n\n // use native implementation if possible and not disabled, note that\n // some node versions only support SHA-1, others allow digest to be changed\n if(forge.util.isNodejs && !forge.options.usePureJavaScript &&\n crypto.pbkdf2 && (md === null || typeof md !== 'object') &&\n (crypto.pbkdf2Sync.length > 4 || (!md || md === 'sha1'))) {\n if(typeof md !== 'string') {\n // default prf to SHA-1\n md = 'sha1';\n }\n p = Buffer.from(p, 'binary');\n s = Buffer.from(s, 'binary');\n if(!callback) {\n if(crypto.pbkdf2Sync.length === 4) {\n return crypto.pbkdf2Sync(p, s, c, dkLen).toString('binary');\n }\n return crypto.pbkdf2Sync(p, s, c, dkLen, md).toString('binary');\n }\n if(crypto.pbkdf2Sync.length === 4) {\n return crypto.pbkdf2(p, s, c, dkLen, function(err, key) {\n if(err) {\n return callback(err);\n }\n callback(null, key.toString('binary'));\n });\n }\n return crypto.pbkdf2(p, s, c, dkLen, md, function(err, key) {\n if(err) {\n return callback(err);\n }\n callback(null, key.toString('binary'));\n });\n }\n\n if(typeof md === 'undefined' || md === null) {\n // default prf to SHA-1\n md = 'sha1';\n }\n if(typeof md === 'string') {\n if(!(md in forge.md.algorithms)) {\n throw new Error('Unknown hash algorithm: ' + md);\n }\n md = forge.md[md].create();\n }\n\n var hLen = md.digestLength;\n\n /* 1. If dkLen > (2^32 - 1) * hLen, output \"derived key too long\" and\n stop. */\n if(dkLen > (0xFFFFFFFF * hLen)) {\n var err = new Error('Derived key is too long.');\n if(callback) {\n return callback(err);\n }\n throw err;\n }\n\n /* 2. Let len be the number of hLen-octet blocks in the derived key,\n rounding up, and let r be the number of octets in the last\n block:\n\n len = CEIL(dkLen / hLen),\n r = dkLen - (len - 1) * hLen. */\n var len = Math.ceil(dkLen / hLen);\n var r = dkLen - (len - 1) * hLen;\n\n /* 3. For each block of the derived key apply the function F defined\n below to the password P, the salt S, the iteration count c, and\n the block index to compute the block:\n\n T_1 = F(P, S, c, 1),\n T_2 = F(P, S, c, 2),\n ...\n T_len = F(P, S, c, len),\n\n where the function F is defined as the exclusive-or sum of the\n first c iterates of the underlying pseudorandom function PRF\n applied to the password P and the concatenation of the salt S\n and the block index i:\n\n F(P, S, c, i) = u_1 XOR u_2 XOR ... XOR u_c\n\n where\n\n u_1 = PRF(P, S || INT(i)),\n u_2 = PRF(P, u_1),\n ...\n u_c = PRF(P, u_{c-1}).\n\n Here, INT(i) is a four-octet encoding of the integer i, most\n significant octet first. */\n var prf = forge.hmac.create();\n prf.start(md, p);\n var dk = '';\n var xor, u_c, u_c1;\n\n // sync version\n if(!callback) {\n for(var i = 1; i <= len; ++i) {\n // PRF(P, S || INT(i)) (first iteration)\n prf.start(null, null);\n prf.update(s);\n prf.update(forge.util.int32ToBytes(i));\n xor = u_c1 = prf.digest().getBytes();\n\n // PRF(P, u_{c-1}) (other iterations)\n for(var j = 2; j <= c; ++j) {\n prf.start(null, null);\n prf.update(u_c1);\n u_c = prf.digest().getBytes();\n // F(p, s, c, i)\n xor = forge.util.xorBytes(xor, u_c, hLen);\n u_c1 = u_c;\n }\n\n /* 4. Concatenate the blocks and extract the first dkLen octets to\n produce a derived key DK:\n\n DK = T_1 || T_2 || ... || T_len<0..r-1> */\n dk += (i < len) ? xor : xor.substr(0, r);\n }\n /* 5. Output the derived key DK. */\n return dk;\n }\n\n // async version\n var i = 1, j;\n function outer() {\n if(i > len) {\n // done\n return callback(null, dk);\n }\n\n // PRF(P, S || INT(i)) (first iteration)\n prf.start(null, null);\n prf.update(s);\n prf.update(forge.util.int32ToBytes(i));\n xor = u_c1 = prf.digest().getBytes();\n\n // PRF(P, u_{c-1}) (other iterations)\n j = 2;\n inner();\n }\n\n function inner() {\n if(j <= c) {\n prf.start(null, null);\n prf.update(u_c1);\n u_c = prf.digest().getBytes();\n // F(p, s, c, i)\n xor = forge.util.xorBytes(xor, u_c, hLen);\n u_c1 = u_c;\n ++j;\n return forge.util.setImmediate(inner);\n }\n\n /* 4. Concatenate the blocks and extract the first dkLen octets to\n produce a derived key DK:\n\n DK = T_1 || T_2 || ... || T_len<0..r-1> */\n dk += (i < len) ? xor : xor.substr(0, r);\n\n ++i;\n outer();\n }\n\n outer();\n};\n","'use strict'\n\nconst { concat } = require('uint8arrays/concat')\nconst { fromString } = require('uint8arrays/from-string')\n\nconst webcrypto = require('../webcrypto')\n\n// Based off of code from https://github.com/luke-park/SecureCompatibleEncryptionExamples\n\n/**\n *\n * @param {object} [options]\n * @param {string} [options.algorithm=AES-GCM]\n * @param {number} [options.nonceLength=12]\n * @param {number} [options.keyLength=16]\n * @param {string} [options.digest=sha256]\n * @param {number} [options.saltLength=16]\n * @param {number} [options.iterations=32767]\n * @returns {*}\n */\nfunction create ({\n algorithm = 'AES-GCM',\n nonceLength = 12,\n keyLength = 16,\n digest = 'SHA-256',\n saltLength = 16,\n iterations = 32767\n} = {}) {\n const crypto = webcrypto.get()\n keyLength *= 8 // Browser crypto uses bits instead of bytes\n\n /**\n * Uses the provided password to derive a pbkdf2 key. The key\n * will then be used to encrypt the data.\n *\n * @param {Uint8Array} data - The data to decrypt\n * @param {string} password - A plain password\n * @returns {Promise}\n */\n async function encrypt (data, password) { // eslint-disable-line require-await\n const salt = crypto.getRandomValues(new Uint8Array(saltLength))\n const nonce = crypto.getRandomValues(new Uint8Array(nonceLength))\n const aesGcm = { name: algorithm, iv: nonce }\n\n // Derive a key using PBKDF2.\n const deriveParams = { name: 'PBKDF2', salt, iterations, hash: { name: digest } }\n const rawKey = await crypto.subtle.importKey('raw', fromString(password), { name: 'PBKDF2' }, false, ['deriveKey', 'deriveBits'])\n const cryptoKey = await crypto.subtle.deriveKey(deriveParams, rawKey, { name: algorithm, length: keyLength }, true, ['encrypt'])\n\n // Encrypt the string.\n const ciphertext = await crypto.subtle.encrypt(aesGcm, cryptoKey, data)\n return concat([salt, aesGcm.iv, new Uint8Array(ciphertext)])\n }\n\n /**\n * Uses the provided password to derive a pbkdf2 key. The key\n * will then be used to decrypt the data. The options used to create\n * this decryption cipher must be the same as those used to create\n * the encryption cipher.\n *\n * @param {Uint8Array} data - The data to decrypt\n * @param {string} password - A plain password\n * @returns {Promise}\n */\n async function decrypt (data, password) {\n const salt = data.slice(0, saltLength)\n const nonce = data.slice(saltLength, saltLength + nonceLength)\n const ciphertext = data.slice(saltLength + nonceLength)\n const aesGcm = { name: algorithm, iv: nonce }\n\n // Derive the key using PBKDF2.\n const deriveParams = { name: 'PBKDF2', salt, iterations, hash: { name: digest } }\n const rawKey = await crypto.subtle.importKey('raw', fromString(password), { name: 'PBKDF2' }, false, ['deriveKey', 'deriveBits'])\n const cryptoKey = await crypto.subtle.deriveKey(deriveParams, rawKey, { name: algorithm, length: keyLength }, true, ['decrypt'])\n\n // Decrypt the string.\n const plaintext = await crypto.subtle.decrypt(aesGcm, cryptoKey, ciphertext)\n return new Uint8Array(plaintext)\n }\n\n return {\n encrypt,\n decrypt\n }\n}\n\nmodule.exports = {\n create\n}\n","/**\n * Secure Hash Algorithm with a 1024-bit block size implementation.\n *\n * This includes: SHA-512, SHA-384, SHA-512/224, and SHA-512/256. For\n * SHA-256 (block size 512 bits), see sha256.js.\n *\n * See FIPS 180-4 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2014-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha512 = module.exports = forge.sha512 = forge.sha512 || {};\n\n// SHA-512\nforge.md.sha512 = forge.md.algorithms.sha512 = sha512;\n\n// SHA-384\nvar sha384 = forge.sha384 = forge.sha512.sha384 = forge.sha512.sha384 || {};\nsha384.create = function() {\n return sha512.create('SHA-384');\n};\nforge.md.sha384 = forge.md.algorithms.sha384 = sha384;\n\n// SHA-512/256\nforge.sha512.sha256 = forge.sha512.sha256 || {\n create: function() {\n return sha512.create('SHA-512/256');\n }\n};\nforge.md['sha512/256'] = forge.md.algorithms['sha512/256'] =\n forge.sha512.sha256;\n\n// SHA-512/224\nforge.sha512.sha224 = forge.sha512.sha224 || {\n create: function() {\n return sha512.create('SHA-512/224');\n }\n};\nforge.md['sha512/224'] = forge.md.algorithms['sha512/224'] =\n forge.sha512.sha224;\n\n/**\n * Creates a SHA-2 message digest object.\n *\n * @param algorithm the algorithm to use (SHA-512, SHA-384, SHA-512/224,\n * SHA-512/256).\n *\n * @return a message digest object.\n */\nsha512.create = function(algorithm) {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n if(typeof algorithm === 'undefined') {\n algorithm = 'SHA-512';\n }\n\n if(!(algorithm in _states)) {\n throw new Error('Invalid SHA-512 algorithm: ' + algorithm);\n }\n\n // SHA-512 state contains eight 64-bit integers (each as two 32-bit ints)\n var _state = _states[algorithm];\n var _h = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for 64-bit word storage\n var _w = new Array(80);\n for(var wi = 0; wi < 80; ++wi) {\n _w[wi] = new Array(2);\n }\n\n // determine digest length by algorithm name (default)\n var digestLength = 64;\n switch(algorithm) {\n case 'SHA-384':\n digestLength = 48;\n break;\n case 'SHA-512/256':\n digestLength = 32;\n break;\n case 'SHA-512/224':\n digestLength = 28;\n break;\n }\n\n // message digest object\n var md = {\n // SHA-512 => sha512\n algorithm: algorithm.replace('-', '').toLowerCase(),\n blockLength: 128,\n digestLength: digestLength,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 16\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength128 for backwards-compatibility)\n md.fullMessageLength = md.messageLength128 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _h = new Array(_state.length);\n for(var i = 0; i < _state.length; ++i) {\n _h[i] = _state[i].slice(0);\n }\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_h, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-512 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 896 mod 1024. In other words,\n the data to be digested must be a multiple of 1024 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 16 bytes (128\n bits), that means that the last segment of the data must have 112 bytes\n (896 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 896 mod 1024 because\n 1024 - 128 = 896.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 896 mod 1024, then 1024 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var h = new Array(_h.length);\n for(var i = 0; i < _h.length; ++i) {\n h[i] = _h[i].slice(0);\n }\n _update(h, _w, finalBlock);\n var rval = forge.util.createBuffer();\n var hlen;\n if(algorithm === 'SHA-512') {\n hlen = h.length;\n } else if(algorithm === 'SHA-384') {\n hlen = h.length - 2;\n } else {\n hlen = h.length - 4;\n }\n for(var i = 0; i < hlen; ++i) {\n rval.putInt32(h[i][0]);\n if(i !== hlen - 1 || algorithm !== 'SHA-512/224') {\n rval.putInt32(h[i][1]);\n }\n }\n return rval;\n };\n\n return md;\n};\n\n// sha-512 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n// table of constants\nvar _k = null;\n\n// initial hash states\nvar _states = null;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 128);\n\n // create K table for SHA-512\n _k = [\n [0x428a2f98, 0xd728ae22], [0x71374491, 0x23ef65cd],\n [0xb5c0fbcf, 0xec4d3b2f], [0xe9b5dba5, 0x8189dbbc],\n [0x3956c25b, 0xf348b538], [0x59f111f1, 0xb605d019],\n [0x923f82a4, 0xaf194f9b], [0xab1c5ed5, 0xda6d8118],\n [0xd807aa98, 0xa3030242], [0x12835b01, 0x45706fbe],\n [0x243185be, 0x4ee4b28c], [0x550c7dc3, 0xd5ffb4e2],\n [0x72be5d74, 0xf27b896f], [0x80deb1fe, 0x3b1696b1],\n [0x9bdc06a7, 0x25c71235], [0xc19bf174, 0xcf692694],\n [0xe49b69c1, 0x9ef14ad2], [0xefbe4786, 0x384f25e3],\n [0x0fc19dc6, 0x8b8cd5b5], [0x240ca1cc, 0x77ac9c65],\n [0x2de92c6f, 0x592b0275], [0x4a7484aa, 0x6ea6e483],\n [0x5cb0a9dc, 0xbd41fbd4], [0x76f988da, 0x831153b5],\n [0x983e5152, 0xee66dfab], [0xa831c66d, 0x2db43210],\n [0xb00327c8, 0x98fb213f], [0xbf597fc7, 0xbeef0ee4],\n [0xc6e00bf3, 0x3da88fc2], [0xd5a79147, 0x930aa725],\n [0x06ca6351, 0xe003826f], [0x14292967, 0x0a0e6e70],\n [0x27b70a85, 0x46d22ffc], [0x2e1b2138, 0x5c26c926],\n [0x4d2c6dfc, 0x5ac42aed], [0x53380d13, 0x9d95b3df],\n [0x650a7354, 0x8baf63de], [0x766a0abb, 0x3c77b2a8],\n [0x81c2c92e, 0x47edaee6], [0x92722c85, 0x1482353b],\n [0xa2bfe8a1, 0x4cf10364], [0xa81a664b, 0xbc423001],\n [0xc24b8b70, 0xd0f89791], [0xc76c51a3, 0x0654be30],\n [0xd192e819, 0xd6ef5218], [0xd6990624, 0x5565a910],\n [0xf40e3585, 0x5771202a], [0x106aa070, 0x32bbd1b8],\n [0x19a4c116, 0xb8d2d0c8], [0x1e376c08, 0x5141ab53],\n [0x2748774c, 0xdf8eeb99], [0x34b0bcb5, 0xe19b48a8],\n [0x391c0cb3, 0xc5c95a63], [0x4ed8aa4a, 0xe3418acb],\n [0x5b9cca4f, 0x7763e373], [0x682e6ff3, 0xd6b2b8a3],\n [0x748f82ee, 0x5defb2fc], [0x78a5636f, 0x43172f60],\n [0x84c87814, 0xa1f0ab72], [0x8cc70208, 0x1a6439ec],\n [0x90befffa, 0x23631e28], [0xa4506ceb, 0xde82bde9],\n [0xbef9a3f7, 0xb2c67915], [0xc67178f2, 0xe372532b],\n [0xca273ece, 0xea26619c], [0xd186b8c7, 0x21c0c207],\n [0xeada7dd6, 0xcde0eb1e], [0xf57d4f7f, 0xee6ed178],\n [0x06f067aa, 0x72176fba], [0x0a637dc5, 0xa2c898a6],\n [0x113f9804, 0xbef90dae], [0x1b710b35, 0x131c471b],\n [0x28db77f5, 0x23047d84], [0x32caab7b, 0x40c72493],\n [0x3c9ebe0a, 0x15c9bebc], [0x431d67c4, 0x9c100d4c],\n [0x4cc5d4be, 0xcb3e42b6], [0x597f299c, 0xfc657e2a],\n [0x5fcb6fab, 0x3ad6faec], [0x6c44198c, 0x4a475817]\n ];\n\n // initial hash states\n _states = {};\n _states['SHA-512'] = [\n [0x6a09e667, 0xf3bcc908],\n [0xbb67ae85, 0x84caa73b],\n [0x3c6ef372, 0xfe94f82b],\n [0xa54ff53a, 0x5f1d36f1],\n [0x510e527f, 0xade682d1],\n [0x9b05688c, 0x2b3e6c1f],\n [0x1f83d9ab, 0xfb41bd6b],\n [0x5be0cd19, 0x137e2179]\n ];\n _states['SHA-384'] = [\n [0xcbbb9d5d, 0xc1059ed8],\n [0x629a292a, 0x367cd507],\n [0x9159015a, 0x3070dd17],\n [0x152fecd8, 0xf70e5939],\n [0x67332667, 0xffc00b31],\n [0x8eb44a87, 0x68581511],\n [0xdb0c2e0d, 0x64f98fa7],\n [0x47b5481d, 0xbefa4fa4]\n ];\n _states['SHA-512/256'] = [\n [0x22312194, 0xFC2BF72C],\n [0x9F555FA3, 0xC84C64C2],\n [0x2393B86B, 0x6F53B151],\n [0x96387719, 0x5940EABD],\n [0x96283EE2, 0xA88EFFE3],\n [0xBE5E1E25, 0x53863992],\n [0x2B0199FC, 0x2C85B8AA],\n [0x0EB72DDC, 0x81C52CA2]\n ];\n _states['SHA-512/224'] = [\n [0x8C3D37C8, 0x19544DA2],\n [0x73E19966, 0x89DCD4D6],\n [0x1DFAB7AE, 0x32FF9C82],\n [0x679DD514, 0x582F9FCF],\n [0x0F6D2B69, 0x7BD44DA8],\n [0x77E36F73, 0x04C48942],\n [0x3F9D85A8, 0x6A1D36C8],\n [0x1112E6AD, 0x91D692A1]\n ];\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-512 state with the given byte buffer.\n *\n * @param s the SHA-512 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (128 byte) chunks\n var t1_hi, t1_lo;\n var t2_hi, t2_lo;\n var s0_hi, s0_lo;\n var s1_hi, s1_lo;\n var ch_hi, ch_lo;\n var maj_hi, maj_lo;\n var a_hi, a_lo;\n var b_hi, b_lo;\n var c_hi, c_lo;\n var d_hi, d_lo;\n var e_hi, e_lo;\n var f_hi, f_lo;\n var g_hi, g_lo;\n var h_hi, h_lo;\n var i, hi, lo, w2, w7, w15, w16;\n var len = bytes.length();\n while(len >= 128) {\n // the w array will be populated with sixteen 64-bit big-endian words\n // and then extended into 64 64-bit words according to SHA-512\n for(i = 0; i < 16; ++i) {\n w[i][0] = bytes.getInt32() >>> 0;\n w[i][1] = bytes.getInt32() >>> 0;\n }\n for(; i < 80; ++i) {\n // for word 2 words ago: ROTR 19(x) ^ ROTR 61(x) ^ SHR 6(x)\n w2 = w[i - 2];\n hi = w2[0];\n lo = w2[1];\n\n // high bits\n t1_hi = (\n ((hi >>> 19) | (lo << 13)) ^ // ROTR 19\n ((lo >>> 29) | (hi << 3)) ^ // ROTR 61/(swap + ROTR 29)\n (hi >>> 6)) >>> 0; // SHR 6\n // low bits\n t1_lo = (\n ((hi << 13) | (lo >>> 19)) ^ // ROTR 19\n ((lo << 3) | (hi >>> 29)) ^ // ROTR 61/(swap + ROTR 29)\n ((hi << 26) | (lo >>> 6))) >>> 0; // SHR 6\n\n // for word 15 words ago: ROTR 1(x) ^ ROTR 8(x) ^ SHR 7(x)\n w15 = w[i - 15];\n hi = w15[0];\n lo = w15[1];\n\n // high bits\n t2_hi = (\n ((hi >>> 1) | (lo << 31)) ^ // ROTR 1\n ((hi >>> 8) | (lo << 24)) ^ // ROTR 8\n (hi >>> 7)) >>> 0; // SHR 7\n // low bits\n t2_lo = (\n ((hi << 31) | (lo >>> 1)) ^ // ROTR 1\n ((hi << 24) | (lo >>> 8)) ^ // ROTR 8\n ((hi << 25) | (lo >>> 7))) >>> 0; // SHR 7\n\n // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^64 (carry lo overflow)\n w7 = w[i - 7];\n w16 = w[i - 16];\n lo = (t1_lo + w7[1] + t2_lo + w16[1]);\n w[i][0] = (t1_hi + w7[0] + t2_hi + w16[0] +\n ((lo / 0x100000000) >>> 0)) >>> 0;\n w[i][1] = lo >>> 0;\n }\n\n // initialize hash value for this chunk\n a_hi = s[0][0];\n a_lo = s[0][1];\n b_hi = s[1][0];\n b_lo = s[1][1];\n c_hi = s[2][0];\n c_lo = s[2][1];\n d_hi = s[3][0];\n d_lo = s[3][1];\n e_hi = s[4][0];\n e_lo = s[4][1];\n f_hi = s[5][0];\n f_lo = s[5][1];\n g_hi = s[6][0];\n g_lo = s[6][1];\n h_hi = s[7][0];\n h_lo = s[7][1];\n\n // round function\n for(i = 0; i < 80; ++i) {\n // Sum1(e) = ROTR 14(e) ^ ROTR 18(e) ^ ROTR 41(e)\n s1_hi = (\n ((e_hi >>> 14) | (e_lo << 18)) ^ // ROTR 14\n ((e_hi >>> 18) | (e_lo << 14)) ^ // ROTR 18\n ((e_lo >>> 9) | (e_hi << 23))) >>> 0; // ROTR 41/(swap + ROTR 9)\n s1_lo = (\n ((e_hi << 18) | (e_lo >>> 14)) ^ // ROTR 14\n ((e_hi << 14) | (e_lo >>> 18)) ^ // ROTR 18\n ((e_lo << 23) | (e_hi >>> 9))) >>> 0; // ROTR 41/(swap + ROTR 9)\n\n // Ch(e, f, g) (optimized the same way as SHA-1)\n ch_hi = (g_hi ^ (e_hi & (f_hi ^ g_hi))) >>> 0;\n ch_lo = (g_lo ^ (e_lo & (f_lo ^ g_lo))) >>> 0;\n\n // Sum0(a) = ROTR 28(a) ^ ROTR 34(a) ^ ROTR 39(a)\n s0_hi = (\n ((a_hi >>> 28) | (a_lo << 4)) ^ // ROTR 28\n ((a_lo >>> 2) | (a_hi << 30)) ^ // ROTR 34/(swap + ROTR 2)\n ((a_lo >>> 7) | (a_hi << 25))) >>> 0; // ROTR 39/(swap + ROTR 7)\n s0_lo = (\n ((a_hi << 4) | (a_lo >>> 28)) ^ // ROTR 28\n ((a_lo << 30) | (a_hi >>> 2)) ^ // ROTR 34/(swap + ROTR 2)\n ((a_lo << 25) | (a_hi >>> 7))) >>> 0; // ROTR 39/(swap + ROTR 7)\n\n // Maj(a, b, c) (optimized the same way as SHA-1)\n maj_hi = ((a_hi & b_hi) | (c_hi & (a_hi ^ b_hi))) >>> 0;\n maj_lo = ((a_lo & b_lo) | (c_lo & (a_lo ^ b_lo))) >>> 0;\n\n // main algorithm\n // t1 = (h + s1 + ch + _k[i] + _w[i]) modulo 2^64 (carry lo overflow)\n lo = (h_lo + s1_lo + ch_lo + _k[i][1] + w[i][1]);\n t1_hi = (h_hi + s1_hi + ch_hi + _k[i][0] + w[i][0] +\n ((lo / 0x100000000) >>> 0)) >>> 0;\n t1_lo = lo >>> 0;\n\n // t2 = s0 + maj modulo 2^64 (carry lo overflow)\n lo = s0_lo + maj_lo;\n t2_hi = (s0_hi + maj_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n t2_lo = lo >>> 0;\n\n h_hi = g_hi;\n h_lo = g_lo;\n\n g_hi = f_hi;\n g_lo = f_lo;\n\n f_hi = e_hi;\n f_lo = e_lo;\n\n // e = (d + t1) modulo 2^64 (carry lo overflow)\n lo = d_lo + t1_lo;\n e_hi = (d_hi + t1_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n e_lo = lo >>> 0;\n\n d_hi = c_hi;\n d_lo = c_lo;\n\n c_hi = b_hi;\n c_lo = b_lo;\n\n b_hi = a_hi;\n b_lo = a_lo;\n\n // a = (t1 + t2) modulo 2^64 (carry lo overflow)\n lo = t1_lo + t2_lo;\n a_hi = (t1_hi + t2_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n a_lo = lo >>> 0;\n }\n\n // update hash state (additional modulo 2^64)\n lo = s[0][1] + a_lo;\n s[0][0] = (s[0][0] + a_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[0][1] = lo >>> 0;\n\n lo = s[1][1] + b_lo;\n s[1][0] = (s[1][0] + b_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[1][1] = lo >>> 0;\n\n lo = s[2][1] + c_lo;\n s[2][0] = (s[2][0] + c_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[2][1] = lo >>> 0;\n\n lo = s[3][1] + d_lo;\n s[3][0] = (s[3][0] + d_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[3][1] = lo >>> 0;\n\n lo = s[4][1] + e_lo;\n s[4][0] = (s[4][0] + e_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[4][1] = lo >>> 0;\n\n lo = s[5][1] + f_lo;\n s[5][0] = (s[5][0] + f_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[5][1] = lo >>> 0;\n\n lo = s[6][1] + g_lo;\n s[6][0] = (s[6][0] + g_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[6][1] = lo >>> 0;\n\n lo = s[7][1] + h_lo;\n s[7][0] = (s[7][0] + h_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[7][1] = lo >>> 0;\n\n len -= 128;\n }\n}\n","'use strict'\n\nconst webcrypto = require('../webcrypto')\nconst lengths = require('./lengths')\n\nconst hashTypes = {\n SHA1: 'SHA-1',\n SHA256: 'SHA-256',\n SHA512: 'SHA-512'\n}\n\nconst sign = async (key, data) => {\n const buf = await webcrypto.get().subtle.sign({ name: 'HMAC' }, key, data)\n return new Uint8Array(buf, buf.byteOffset, buf.byteLength)\n}\n\nexports.create = async function (hashType, secret) {\n const hash = hashTypes[hashType]\n\n const key = await webcrypto.get().subtle.importKey(\n 'raw',\n secret,\n {\n name: 'HMAC',\n hash: { name: hash }\n },\n false,\n ['sign']\n )\n\n return {\n async digest (data) { // eslint-disable-line require-await\n return sign(key, data)\n },\n length: lengths[hashType]\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.js');\nvar errors = require('./errors.js');\nvar debug = require('debug');\nvar pushable = require('it-pushable');\nvar drain = require('it-drain');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar pushable__default = /*#__PURE__*/_interopDefaultLegacy(pushable);\nvar drain__default = /*#__PURE__*/_interopDefaultLegacy(drain);\n\nconst log = debug__default['default']('datastore:core:tiered');\nclass TieredDatastore extends base.BaseDatastore {\n constructor(stores) {\n super();\n this.stores = stores.slice();\n }\n async open() {\n try {\n await Promise.all(this.stores.map(store => store.open()));\n } catch (err) {\n throw errors.dbOpenFailedError();\n }\n }\n async put(key, value) {\n try {\n await Promise.all(this.stores.map(store => store.put(key, value)));\n } catch (err) {\n throw errors.dbWriteFailedError();\n }\n }\n async get(key, options) {\n for (const store of this.stores) {\n try {\n const res = await store.get(key, options);\n if (res)\n return res;\n } catch (err) {\n log(err);\n }\n }\n throw errors.notFoundError();\n }\n async has(key, options) {\n for (const s of this.stores) {\n if (await s.has(key, options)) {\n return true;\n }\n }\n return false;\n }\n async delete(key, options) {\n try {\n await Promise.all(this.stores.map(store => store.delete(key, options)));\n } catch (err) {\n throw errors.dbDeleteFailedError();\n }\n }\n async *putMany(source, options = {}) {\n let error;\n const pushables = this.stores.map(store => {\n const source = pushable__default['default']();\n drain__default['default'](store.putMany(source, options)).catch(err => {\n error = err;\n });\n return source;\n });\n try {\n for await (const pair of source) {\n if (error) {\n throw error;\n }\n pushables.forEach(p => p.push(pair));\n yield pair;\n }\n } finally {\n pushables.forEach(p => p.end());\n }\n }\n async *deleteMany(source, options = {}) {\n let error;\n const pushables = this.stores.map(store => {\n const source = pushable__default['default']();\n drain__default['default'](store.deleteMany(source, options)).catch(err => {\n error = err;\n });\n return source;\n });\n try {\n for await (const key of source) {\n if (error) {\n throw error;\n }\n pushables.forEach(p => p.push(key));\n yield key;\n }\n } finally {\n pushables.forEach(p => p.end());\n }\n }\n async close() {\n await Promise.all(this.stores.map(store => store.close()));\n }\n batch() {\n const batches = this.stores.map(store => store.batch());\n return {\n put: (key, value) => {\n batches.forEach(b => b.put(key, value));\n },\n delete: key => {\n batches.forEach(b => b.delete(key));\n },\n commit: async options => {\n for (const batch of batches) {\n await batch.commit(options);\n }\n }\n };\n }\n query(q, options) {\n return this.stores[this.stores.length - 1].query(q, options);\n }\n queryKeys(q, options) {\n return this.stores[this.stores.length - 1].queryKeys(q, options);\n }\n}\n\nexports.TieredDatastore = TieredDatastore;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar all = require('it-all');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar all__default = /*#__PURE__*/_interopDefaultLegacy(all);\n\nconst sortAll = (iterable, sorter) => {\n return async function* () {\n const values = await all__default['default'](iterable);\n yield* values.sort(sorter);\n }();\n};\nconst replaceStartWith = (s, r) => {\n const matcher = new RegExp('^' + r);\n return s.replace(matcher, '');\n};\n\nexports.replaceStartWith = replaceStartWith;\nexports.sortAll = sortAll;\n","const FixedFIFO = require('./fixed-size')\n\nmodule.exports = class FastFIFO {\n constructor (hwm) {\n this.hwm = hwm || 16\n this.head = new FixedFIFO(this.hwm)\n this.tail = this.head\n }\n\n push (val) {\n if (!this.head.push(val)) {\n const prev = this.head\n this.head = prev.next = new FixedFIFO(2 * this.head.buffer.length)\n this.head.push(val)\n }\n }\n\n shift () {\n const val = this.tail.shift()\n if (val === undefined && this.tail.next) {\n const next = this.tail.next\n this.tail.next = null\n this.tail = next\n return this.tail.shift()\n }\n return val\n }\n\n isEmpty () {\n return this.head.isEmpty()\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar ipns = require('ipns');\nvar base58 = require('multiformats/bases/base58');\nvar datastorePubsub = require('datastore-pubsub');\nvar fromString = require('uint8arrays/from-string');\nvar toString = require('uint8arrays/to-string');\nvar errCode = require('err-code');\nvar debug = require('debug');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar ipns__namespace = /*#__PURE__*/_interopNamespace(ipns);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\n\nconst log = Object.assign(debug__default[\"default\"]('ipfs:ipns:pubsub'), { error: debug__default[\"default\"]('ipfs:ipns:pubsub:error') });\nclass IpnsPubsubDatastore {\n constructor(pubsub, localDatastore, peerId) {\n this._subscriptions = {};\n this._handleSubscriptionKey = this._handleSubscriptionKey.bind(this);\n this._pubsubDs = new datastorePubsub.PubsubDatastore(pubsub, localDatastore, peerId, ipns__namespace.validator, this._handleSubscriptionKey);\n }\n async put(key, value) {\n try {\n await this._pubsubDs.put(key, value);\n } catch (err) {\n log.error(err);\n throw err;\n }\n }\n async get(key) {\n let res;\n let err;\n try {\n res = await this._pubsubDs.get(key);\n } catch (e) {\n err = e;\n }\n const ns = key.slice(0, ipns__namespace.namespaceLength);\n if (toString.toString(ns) === ipns__namespace.namespace) {\n const stringifiedTopic = base58.base58btc.encode(key).substring(1);\n const id = base58.base58btc.encode(key.slice(ipns__namespace.namespaceLength)).substring(1);\n this._subscriptions[stringifiedTopic] = id;\n log(`subscribed to pubsub topic ${ stringifiedTopic }, id ${ id }`);\n }\n if (err) {\n throw err;\n }\n return res;\n }\n _handleSubscriptionKey(key) {\n if (key instanceof Uint8Array) {\n key = toString.toString(key, 'base58btc');\n }\n const subscriber = this._subscriptions[key];\n if (!subscriber) {\n throw errCode__default[\"default\"](new Error(`key ${ key } does not correspond to a subscription`), 'ERR_INVALID_KEY');\n }\n let keys;\n try {\n keys = ipns__namespace.getIdKeys(fromString.fromString(subscriber, 'base58btc'));\n } catch (err) {\n log.error(err);\n throw err;\n }\n return keys.routingKey.uint8Array();\n }\n getSubscriptions() {\n const subscriptions = Object.values(this._subscriptions).filter(Boolean);\n return subscriptions.map(sub => `${ ipns__namespace.namespace }${ sub }`);\n }\n async cancel(name) {\n if (typeof name !== 'string') {\n throw errCode__default[\"default\"](new Error('invalid subscription name'), 'ERR_INVALID_SUBSCRIPTION_NAME');\n }\n if (name.startsWith(ipns__namespace.namespace)) {\n name = name.substring(ipns__namespace.namespaceLength);\n }\n const stringifiedTopic = Object.keys(this._subscriptions).find(key => this._subscriptions[key] === name);\n if (!stringifiedTopic) {\n return { canceled: false };\n }\n const bufTopic = fromString.fromString(stringifiedTopic);\n this._pubsubDs.unsubscribe(bufTopic);\n delete this._subscriptions[stringifiedTopic];\n log(`unsubscribed pubsub ${ stringifiedTopic }: ${ name }`);\n return { canceled: true };\n }\n}\n\nexports.IpnsPubsubDatastore = IpnsPubsubDatastore;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar key = require('interface-datastore/key');\nvar shardReadme = require('./shard-readme.js');\n\nconst PREFIX = '/repo/flatfs/shard/';\nconst SHARDING_FN = 'SHARDING';\nconst README_FN = '_README';\nclass ShardBase {\n constructor(param) {\n this.param = param;\n this.name = 'base';\n this._padding = '';\n }\n fun(s) {\n return 'implement me';\n }\n toString() {\n return `${ PREFIX }v1/${ this.name }/${ this.param }`;\n }\n}\nclass Prefix extends ShardBase {\n constructor(prefixLen) {\n super(prefixLen);\n this._padding = ''.padStart(prefixLen, '_');\n this.name = 'prefix';\n }\n fun(noslash) {\n return (noslash + this._padding).slice(0, this.param);\n }\n}\nclass Suffix extends ShardBase {\n constructor(suffixLen) {\n super(suffixLen);\n this._padding = ''.padStart(suffixLen, '_');\n this.name = 'suffix';\n }\n fun(noslash) {\n const s = this._padding + noslash;\n return s.slice(s.length - this.param);\n }\n}\nclass NextToLast extends ShardBase {\n constructor(suffixLen) {\n super(suffixLen);\n this._padding = ''.padStart(suffixLen + 1, '_');\n this.name = 'next-to-last';\n }\n fun(noslash) {\n const s = this._padding + noslash;\n const offset = s.length - this.param - 1;\n return s.slice(offset, offset + this.param);\n }\n}\nfunction parseShardFun(str) {\n str = str.trim();\n if (str.length === 0) {\n throw new Error('empty shard string');\n }\n if (!str.startsWith(PREFIX)) {\n throw new Error(`invalid or no path prefix: ${ str }`);\n }\n const parts = str.slice(PREFIX.length).split('/');\n const version = parts[0];\n if (version !== 'v1') {\n throw new Error(`expect 'v1' version, got '${ version }'`);\n }\n const name = parts[1];\n if (!parts[2]) {\n throw new Error('missing param');\n }\n const param = parseInt(parts[2], 10);\n switch (name) {\n case 'prefix':\n return new Prefix(param);\n case 'suffix':\n return new Suffix(param);\n case 'next-to-last':\n return new NextToLast(param);\n default:\n throw new Error(`unkown sharding function: ${ name }`);\n }\n}\nconst readShardFun = async (path, store) => {\n const key$1 = new key.Key(path).child(new key.Key(SHARDING_FN));\n const get = typeof store.getRaw === 'function' ? store.getRaw.bind(store) : store.get.bind(store);\n const res = await get(key$1);\n return parseShardFun(new TextDecoder().decode(res || '').trim());\n};\n\nexports.readme = shardReadme;\nexports.NextToLast = NextToLast;\nexports.PREFIX = PREFIX;\nexports.Prefix = Prefix;\nexports.README_FN = README_FN;\nexports.SHARDING_FN = SHARDING_FN;\nexports.ShardBase = ShardBase;\nexports.Suffix = Suffix;\nexports.parseShardFun = parseShardFun;\nexports.readShardFun = readShardFun;\n","'use strict';\n\nvar readme = `This is a repository of IPLD objects. Each IPLD object is in a single file,\nnamed .data. Where is the\n\"base32\" encoding of the CID (as specified in\nhttps://github.com/multiformats/multibase) without the 'B' prefix.\nAll the object files are placed in a tree of directories, based on a\nfunction of the CID. This is a form of sharding similar to\nthe objects directory in git repositories. Previously, we used\nprefixes, we now use the next-to-last two charters.\n func NextToLast(base32cid string) {\n nextToLastLen := 2\n offset := len(base32cid) - nextToLastLen - 1\n return str[offset : offset+nextToLastLen]\n }\nFor example, an object with a base58 CIDv1 of\n zb2rhYSxw4ZjuzgCnWSt19Q94ERaeFhu9uSqRgjSdx9bsgM6f\nhas a base32 CIDv1 of\n BAFKREIA22FLID5AJ2KU7URG47MDLROZIH6YF2KALU2PWEFPVI37YLKRSCA\nand will be placed at\n SC/AFKREIA22FLID5AJ2KU7URG47MDLROZIH6YF2KALU2PWEFPVI37YLKRSCA.data\nwith 'SC' being the last-to-next two characters and the 'B' at the\nbeginning of the CIDv1 string is the multibase prefix that is not\nstored in the filename.\n`;\n\nmodule.exports = readme;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.js');\nvar key = require('interface-datastore/key');\nvar errors = require('./errors.js');\n\nclass MemoryDatastore extends base.BaseDatastore {\n constructor() {\n super();\n this.data = {};\n }\n open() {\n return Promise.resolve();\n }\n close() {\n return Promise.resolve();\n }\n async put(key, val) {\n this.data[key.toString()] = val;\n }\n async get(key) {\n const exists = await this.has(key);\n if (!exists)\n throw errors.notFoundError();\n return this.data[key.toString()];\n }\n async has(key) {\n return this.data[key.toString()] !== undefined;\n }\n async delete(key) {\n delete this.data[key.toString()];\n }\n async *_all() {\n yield* Object.entries(this.data).map(([key$1, value]) => ({\n key: new key.Key(key$1),\n value\n }));\n }\n async *_allKeys() {\n yield* Object.entries(this.data).map(([key$1]) => new key.Key(key$1));\n }\n}\n\nexports.MemoryDatastore = MemoryDatastore;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar key = require('interface-datastore/key');\nvar libp2pRecord = require('libp2p-record');\nvar errCode = require('err-code');\nvar debug = require('debug');\nvar toString = require('uint8arrays/to-string');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\n\nconst log = Object.assign(debug__default[\"default\"]('ipfs:ipns:offline-datastore'), { error: debug__default[\"default\"]('ipfs:ipns:offline-datastore:error') });\nclass OfflineDatastore {\n constructor(repo) {\n this._repo = repo;\n this.stores = [];\n }\n async put(key, value) {\n if (!(key instanceof Uint8Array)) {\n throw errCode__default[\"default\"](new Error('Offline datastore key must be a Uint8Array'), 'ERR_INVALID_KEY');\n }\n if (!(value instanceof Uint8Array)) {\n throw errCode__default[\"default\"](new Error('Offline datastore value must be a Uint8Array'), 'ERR_INVALID_VALUE');\n }\n let routingKey;\n try {\n routingKey = this._routingKey(key);\n } catch (err) {\n log.error(err);\n throw errCode__default[\"default\"](new Error('Not possible to generate the routing key'), 'ERR_GENERATING_ROUTING_KEY');\n }\n const record = new libp2pRecord.Record(key, value);\n return this._repo.datastore.put(routingKey, record.serialize());\n }\n async get(key) {\n if (!(key instanceof Uint8Array)) {\n throw errCode__default[\"default\"](new Error('Offline datastore key must be a Uint8Array'), 'ERR_INVALID_KEY');\n }\n let routingKey;\n try {\n routingKey = this._routingKey(key);\n } catch (err) {\n log.error(err);\n throw errCode__default[\"default\"](new Error('Not possible to generate the routing key'), 'ERR_GENERATING_ROUTING_KEY');\n }\n const res = await this._repo.datastore.get(routingKey);\n let record;\n try {\n record = libp2pRecord.Record.deserialize(res);\n } catch (err) {\n log.error(err);\n throw err;\n }\n return record.value;\n }\n _routingKey(key$1) {\n return new key.Key('/dht/record/' + toString.toString(key$1, 'base32'), false);\n }\n}\n\nexports.OfflineDatastore = OfflineDatastore;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\n\nfunction createStat({network}) {\n async function stat(options = {}) {\n const bitswap = (await network.use(options)).bitswap;\n const snapshot = bitswap.stat().snapshot;\n return {\n provideBufLen: parseInt(snapshot.providesBufferLength.toString()),\n blocksReceived: BigInt(snapshot.blocksReceived.toString()),\n wantlist: Array.from(bitswap.getWantlist()).map(e => e[1].cid),\n peers: bitswap.peers().map(id => id.toB58String()),\n dupBlksReceived: BigInt(snapshot.dupBlksReceived.toString()),\n dupDataReceived: BigInt(snapshot.dupDataReceived.toString()),\n dataReceived: BigInt(snapshot.dataReceived.toString()),\n blocksSent: BigInt(snapshot.blocksSent.toString()),\n dataSent: BigInt(snapshot.dataSent.toString())\n };\n }\n return withTimeoutOption.withTimeoutOption(stat);\n}\n\nexports.createStat = createStat;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar mafmt = require('mafmt');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar mafmt__default = /*#__PURE__*/_interopDefaultLegacy(mafmt);\n\nfunction isValidMultiaddr(ma) {\n try {\n return mafmt__default[\"default\"].IPFS.matches(ma);\n } catch (err) {\n return false;\n }\n}\n\nexports.isValidMultiaddr = isValidMultiaddr;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\n\nfunction cleanCid(cid$1) {\n if (cid$1 instanceof Uint8Array) {\n return cid.CID.decode(cid$1);\n }\n return cid.CID.parse(cid$1.toString());\n}\n\nexports.cleanCid = cleanCid;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar normaliseContent = require('./normalise-content.js');\nvar normaliseCandidateSingle = require('./normalise-candidate-single.js');\n\nfunction normaliseInput(input) {\n return normaliseCandidateSingle.normaliseCandidateSingle(input, normaliseContent.normaliseContent);\n}\n\nexports.normaliseInput = normaliseInput;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\nvar fromString = require('uint8arrays/from-string');\nvar browserStreamToIt = require('browser-readablestream-to-it');\nvar blobToIt = require('blob-to-it');\nvar itPeekable = require('it-peekable');\nvar all = require('it-all');\nvar map = require('it-map');\nvar utils = require('./utils.js');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar browserStreamToIt__default = /*#__PURE__*/_interopDefaultLegacy(browserStreamToIt);\nvar blobToIt__default = /*#__PURE__*/_interopDefaultLegacy(blobToIt);\nvar itPeekable__default = /*#__PURE__*/_interopDefaultLegacy(itPeekable);\nvar all__default = /*#__PURE__*/_interopDefaultLegacy(all);\nvar map__default = /*#__PURE__*/_interopDefaultLegacy(map);\n\nasync function* toAsyncIterable(thing) {\n yield thing;\n}\nasync function normaliseContent(input) {\n if (utils.isBytes(input)) {\n return toAsyncIterable(toBytes(input));\n }\n if (typeof input === 'string' || input instanceof String) {\n return toAsyncIterable(toBytes(input.toString()));\n }\n if (utils.isBlob(input)) {\n return blobToIt__default[\"default\"](input);\n }\n if (utils.isReadableStream(input)) {\n input = browserStreamToIt__default[\"default\"](input);\n }\n if (Symbol.iterator in input || Symbol.asyncIterator in input) {\n const peekable = itPeekable__default[\"default\"](input);\n const {value, done} = await peekable.peek();\n if (done) {\n return toAsyncIterable(new Uint8Array(0));\n }\n peekable.push(value);\n if (Number.isInteger(value)) {\n return toAsyncIterable(Uint8Array.from(await all__default[\"default\"](peekable)));\n }\n if (utils.isBytes(value) || typeof value === 'string' || value instanceof String) {\n return map__default[\"default\"](peekable, toBytes);\n }\n }\n throw errCode__default[\"default\"](new Error(`Unexpected input: ${ input }`), 'ERR_UNEXPECTED_INPUT');\n}\nfunction toBytes(chunk) {\n if (chunk instanceof Uint8Array) {\n return chunk;\n }\n if (ArrayBuffer.isView(chunk)) {\n return new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n if (chunk instanceof ArrayBuffer) {\n return new Uint8Array(chunk);\n }\n if (Array.isArray(chunk)) {\n return Uint8Array.from(chunk);\n }\n return fromString.fromString(chunk.toString());\n}\n\nexports.normaliseContent = normaliseContent;\n","'use strict';\n\nvar dagPb = require('@ipld/dag-pb');\nvar ipfsUnixfs = require('ipfs-unixfs');\nvar dir = require('./dir.js');\nvar persist = require('./utils/persist.js');\n\nclass DirFlat extends dir {\n constructor(props, options) {\n super(props, options);\n this._children = {};\n }\n async put(name, value) {\n this.cid = undefined;\n this.size = undefined;\n this._children[name] = value;\n }\n get(name) {\n return Promise.resolve(this._children[name]);\n }\n childCount() {\n return Object.keys(this._children).length;\n }\n directChildrenCount() {\n return this.childCount();\n }\n onlyChild() {\n return this._children[Object.keys(this._children)[0]];\n }\n async *eachChildSeries() {\n const keys = Object.keys(this._children);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n yield {\n key: key,\n child: this._children[key]\n };\n }\n }\n async *flush(block) {\n const children = Object.keys(this._children);\n const links = [];\n for (let i = 0; i < children.length; i++) {\n let child = this._children[children[i]];\n if (child instanceof dir) {\n for await (const entry of child.flush(block)) {\n child = entry;\n yield child;\n }\n }\n if (child.size != null && child.cid) {\n links.push({\n Name: children[i],\n Tsize: child.size,\n Hash: child.cid\n });\n }\n }\n const unixfs = new ipfsUnixfs.UnixFS({\n type: 'directory',\n mtime: this.mtime,\n mode: this.mode\n });\n const node = {\n Data: unixfs.marshal(),\n Links: links\n };\n const buffer = dagPb.encode(dagPb.prepare(node));\n const cid = await persist(buffer, block, this.options);\n const size = buffer.length + node.Links.reduce((acc, curr) => acc + (curr.Tsize == null ? 0 : curr.Tsize), 0);\n this.cid = cid;\n this.size = size;\n yield {\n cid,\n unixfs,\n path: this.path,\n size\n };\n }\n}\n\nmodule.exports = DirFlat;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\nvar browserStreamToIt = require('browser-readablestream-to-it');\nvar itPeekable = require('it-peekable');\nvar map = require('it-map');\nvar utils = require('./utils.js');\nvar ipfsUnixfs = require('ipfs-unixfs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar browserStreamToIt__default = /*#__PURE__*/_interopDefaultLegacy(browserStreamToIt);\nvar itPeekable__default = /*#__PURE__*/_interopDefaultLegacy(itPeekable);\nvar map__default = /*#__PURE__*/_interopDefaultLegacy(map);\n\nasync function* normaliseCandidateMultiple(input, normaliseContent) {\n if (typeof input === 'string' || input instanceof String || utils.isBytes(input) || utils.isBlob(input) || input._readableState) {\n throw errCode__default[\"default\"](new Error('Unexpected input: single item passed - if you are using ipfs.addAll, please use ipfs.add instead'), 'ERR_UNEXPECTED_INPUT');\n }\n if (utils.isReadableStream(input)) {\n input = browserStreamToIt__default[\"default\"](input);\n }\n if (Symbol.iterator in input || Symbol.asyncIterator in input) {\n const peekable = itPeekable__default[\"default\"](input);\n const {value, done} = await peekable.peek();\n if (done) {\n yield* [];\n return;\n }\n peekable.push(value);\n if (Number.isInteger(value)) {\n throw errCode__default[\"default\"](new Error('Unexpected input: single item passed - if you are using ipfs.addAll, please use ipfs.add instead'), 'ERR_UNEXPECTED_INPUT');\n }\n if (value._readableState) {\n yield* map__default[\"default\"](peekable, value => toFileObject({ content: value }, normaliseContent));\n return;\n }\n if (utils.isBytes(value)) {\n yield toFileObject({ content: peekable }, normaliseContent);\n return;\n }\n if (utils.isFileObject(value) || value[Symbol.iterator] || value[Symbol.asyncIterator] || utils.isReadableStream(value) || utils.isBlob(value)) {\n yield* map__default[\"default\"](peekable, value => toFileObject(value, normaliseContent));\n return;\n }\n }\n if (utils.isFileObject(input)) {\n throw errCode__default[\"default\"](new Error('Unexpected input: single item passed - if you are using ipfs.addAll, please use ipfs.add instead'), 'ERR_UNEXPECTED_INPUT');\n }\n throw errCode__default[\"default\"](new Error('Unexpected input: ' + typeof input), 'ERR_UNEXPECTED_INPUT');\n}\nasync function toFileObject(input, normaliseContent) {\n const {path, mode, mtime, content} = input;\n const file = {\n path: path || '',\n mode: ipfsUnixfs.parseMode(mode),\n mtime: ipfsUnixfs.parseMtime(mtime)\n };\n if (content) {\n file.content = await normaliseContent(content);\n } else if (!path) {\n file.content = await normaliseContent(input);\n }\n return file;\n}\n\nexports.normaliseCandidateMultiple = normaliseCandidateMultiple;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar set = require('just-safe-set');\nvar getDefaultConfig = require('ipfs-core-config/config');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar set__default = /*#__PURE__*/_interopDefaultLegacy(set);\nvar getDefaultConfig__default = /*#__PURE__*/_interopDefaultLegacy(getDefaultConfig);\n\nconst profiles = {\n server: {\n description: 'Recommended for nodes with public IPv4 address (servers, VPSes, etc.), disables host and content discovery and UPnP in local networks.',\n transform: config => {\n set__default[\"default\"](config, 'Discovery.MDNS.Enabled', false);\n set__default[\"default\"](config, 'Discovery.webRTCStar.Enabled', false);\n config.Swarm = {\n ...config.Swarm || {},\n DisableNatPortMap: true\n };\n return config;\n }\n },\n 'local-discovery': {\n description: 'Sets default values to fields affected by `server` profile, enables discovery and UPnP in local networks.',\n transform: config => {\n set__default[\"default\"](config, 'Discovery.MDNS.Enabled', true);\n set__default[\"default\"](config, 'Discovery.webRTCStar.Enabled', true);\n set__default[\"default\"](config, 'Swarm', {\n ...config.Swarm || {},\n DisableNatPortMap: false\n });\n return config;\n }\n },\n test: {\n description: 'Reduces external interference, useful for running ipfs in test environments. Note that with these settings node won\\'t be able to talk to the rest of the network without manual bootstrap.',\n transform: config => {\n const defaultConfig = getDefaultConfig__default[\"default\"]();\n set__default[\"default\"](config, 'Addresses.API', defaultConfig.Addresses.API ? '/ip4/127.0.0.1/tcp/0' : '');\n set__default[\"default\"](config, 'Addresses.Gateway', defaultConfig.Addresses.Gateway ? '/ip4/127.0.0.1/tcp/0' : '');\n set__default[\"default\"](config, 'Addresses.Swarm', defaultConfig.Addresses.Swarm.length ? ['/ip4/127.0.0.1/tcp/0'] : []);\n set__default[\"default\"](config, 'Addresses.Delegates', []);\n set__default[\"default\"](config, 'Bootstrap', []);\n set__default[\"default\"](config, 'Discovery.MDNS.Enabled', false);\n set__default[\"default\"](config, 'Discovery.webRTCStar.Enabled', false);\n set__default[\"default\"](config, 'Swarm', {\n ...config.Swarm || {},\n DisableNatPortMap: true\n });\n return config;\n }\n },\n 'default-networking': {\n description: 'Restores default network settings. Inverse profile of the `test` profile.',\n transform: config => {\n const defaultConfig = getDefaultConfig__default[\"default\"]();\n set__default[\"default\"](config, 'Addresses.API', defaultConfig.Addresses.API);\n set__default[\"default\"](config, 'Addresses.Gateway', defaultConfig.Addresses.Gateway);\n set__default[\"default\"](config, 'Addresses.Swarm', defaultConfig.Addresses.Swarm);\n set__default[\"default\"](config, 'Addresses.Delegates', defaultConfig.Addresses.Delegates);\n set__default[\"default\"](config, 'Bootstrap', defaultConfig.Bootstrap);\n set__default[\"default\"](config, 'Discovery.MDNS.Enabled', defaultConfig.Discovery.MDNS.Enabled);\n set__default[\"default\"](config, 'Discovery.webRTCStar.Enabled', defaultConfig.Discovery.webRTCStar.Enabled);\n set__default[\"default\"](config, 'Swarm', {\n ...config.Swarm || {},\n DisableNatPortMap: false\n });\n return config;\n }\n },\n lowpower: {\n description: 'Reduces daemon overhead on the system. May affect node functionality,performance of content discovery and data fetching may be degraded. Recommended for low power systems.',\n transform: config => {\n const Swarm = config.Swarm || {};\n const ConnMgr = Swarm.ConnMgr || {};\n ConnMgr.LowWater = 20;\n ConnMgr.HighWater = 40;\n Swarm.ConnMgr = ConnMgr;\n config.Swarm = Swarm;\n return config;\n }\n },\n 'default-power': {\n description: 'Inverse of \"lowpower\" profile.',\n transform: config => {\n const defaultConfig = getDefaultConfig__default[\"default\"]();\n config.Swarm = defaultConfig.Swarm;\n return config;\n }\n }\n};\n\nexports.profiles = profiles;\n","module.exports = set;\n\n/*\n var obj1 = {};\n set(obj1, 'a.aa.aaa', 4); // true\n obj1; // {a: {aa: {aaa: 4}}}\n\n var obj2 = {};\n set(obj2, ['a', 'aa', 'aaa'], 4); // true\n obj2; // {a: {aa: {aaa: 4}}}\n\n var obj3 = {a: {aa: {aaa: 2}}};\n set(obj3, 'a.aa.aaa', 3); // true\n obj3; // {a: {aa: {aaa: 3}}}\n\n // don't clobber existing\n var obj4 = {a: {aa: {aaa: 2}}};\n set(obj4, 'a.aa', {bbb: 7}); // false\n\n const obj5 = {a: {}};\n const sym = Symbol();\n set(obj5.a, sym, 7); // true\n obj5; // {a: {Symbol(): 7}}\n*/\n\nfunction set(obj, propsArg, value) {\n var props, lastProp;\n if (Array.isArray(propsArg)) {\n props = propsArg.slice(0);\n }\n if (typeof propsArg == 'string') {\n props = propsArg.split('.');\n }\n if (typeof propsArg == 'symbol') {\n props = [propsArg];\n }\n if (!Array.isArray(props)) {\n throw new Error('props arg must be an array, a string or a symbol');\n }\n lastProp = props.pop();\n if (!lastProp) {\n return false;\n }\n prototypeCheck(lastProp);\n var thisProp;\n while ((thisProp = props.shift())) {\n prototypeCheck(thisProp);\n if (typeof obj[thisProp] == 'undefined') {\n obj[thisProp] = {};\n }\n obj = obj[thisProp];\n if (!obj || typeof obj != 'object') {\n return false;\n }\n }\n obj[lastProp] = value;\n return true;\n}\n\nfunction prototypeCheck(prop) {\n if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') {\n throw new Error('setting of prototype values not supported');\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar varint = require('varint');\nvar cid = require('multiformats/cid');\nvar Digest = require('multiformats/hashes/digest');\nvar dagCbor = require('@ipld/dag-cbor');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar varint__default = /*#__PURE__*/_interopDefaultLegacy(varint);\nvar Digest__namespace = /*#__PURE__*/_interopNamespace(Digest);\n\nconst CIDV0_BYTES = {\n SHA2_256: 18,\n LENGTH: 32,\n DAG_PB: 112\n};\nasync function readVarint(reader) {\n const bytes = await reader.upTo(8);\n const i = varint__default[\"default\"].decode(bytes);\n reader.seek(varint__default[\"default\"].decode.bytes);\n return i;\n}\nasync function readHeader(reader) {\n const length = await readVarint(reader);\n if (length === 0) {\n throw new Error('Invalid CAR header (zero length)');\n }\n const header = await reader.exactly(length);\n reader.seek(length);\n const block = dagCbor.decode(header);\n if (block == null || Array.isArray(block) || typeof block !== 'object') {\n throw new Error('Invalid CAR header format');\n }\n if (block.version !== 1) {\n if (typeof block.version === 'string') {\n throw new Error(`Invalid CAR version: \"${ block.version }\"`);\n }\n throw new Error(`Invalid CAR version: ${ block.version }`);\n }\n if (!Array.isArray(block.roots)) {\n throw new Error('Invalid CAR header format');\n }\n if (Object.keys(block).filter(p => p !== 'roots' && p !== 'version').length) {\n throw new Error('Invalid CAR header format');\n }\n return block;\n}\nasync function readMultihash(reader) {\n const bytes = await reader.upTo(8);\n varint__default[\"default\"].decode(bytes);\n const codeLength = varint__default[\"default\"].decode.bytes;\n const length = varint__default[\"default\"].decode(bytes.subarray(varint__default[\"default\"].decode.bytes));\n const lengthLength = varint__default[\"default\"].decode.bytes;\n const mhLength = codeLength + lengthLength + length;\n const multihash = await reader.exactly(mhLength);\n reader.seek(mhLength);\n return multihash;\n}\nasync function readCid(reader) {\n const first = await reader.exactly(2);\n if (first[0] === CIDV0_BYTES.SHA2_256 && first[1] === CIDV0_BYTES.LENGTH) {\n const bytes = await reader.exactly(34);\n reader.seek(34);\n const multihash = Digest__namespace.decode(bytes);\n return cid.CID.create(0, CIDV0_BYTES.DAG_PB, multihash);\n }\n const version = await readVarint(reader);\n if (version !== 1) {\n throw new Error(`Unexpected CID version (${ version })`);\n }\n const codec = await readVarint(reader);\n const bytes = await readMultihash(reader);\n const multihash = Digest__namespace.decode(bytes);\n return cid.CID.create(version, codec, multihash);\n}\nasync function readBlockHead(reader) {\n const start = reader.pos;\n let length = await readVarint(reader);\n if (length === 0) {\n throw new Error('Invalid CAR section (zero length)');\n }\n length += reader.pos - start;\n const cid = await readCid(reader);\n const blockLength = length - (reader.pos - start);\n return {\n cid,\n length,\n blockLength\n };\n}\nasync function readBlock(reader) {\n const {cid, blockLength} = await readBlockHead(reader);\n const bytes = await reader.exactly(blockLength);\n reader.seek(blockLength);\n return {\n bytes,\n cid\n };\n}\nasync function readBlockIndex(reader) {\n const offset = reader.pos;\n const {cid, length, blockLength} = await readBlockHead(reader);\n const index = {\n cid,\n length,\n blockLength,\n offset,\n blockOffset: reader.pos\n };\n reader.seek(index.blockLength);\n return index;\n}\nfunction createDecoder(reader) {\n const headerPromise = readHeader(reader);\n return {\n header: () => headerPromise,\n async *blocks() {\n await headerPromise;\n while ((await reader.upTo(8)).length > 0) {\n yield await readBlock(reader);\n }\n },\n async *blocksIndex() {\n await headerPromise;\n while ((await reader.upTo(8)).length > 0) {\n yield await readBlockIndex(reader);\n }\n }\n };\n}\nfunction bytesReader(bytes) {\n let pos = 0;\n return {\n async upTo(length) {\n return bytes.subarray(pos, pos + Math.min(length, bytes.length - pos));\n },\n async exactly(length) {\n if (length > bytes.length - pos) {\n throw new Error('Unexpected end of data');\n }\n return bytes.subarray(pos, pos + length);\n },\n seek(length) {\n pos += length;\n },\n get pos() {\n return pos;\n }\n };\n}\nfunction chunkReader(readChunk) {\n let pos = 0;\n let have = 0;\n let offset = 0;\n let currentChunk = new Uint8Array(0);\n const read = async length => {\n have = currentChunk.length - offset;\n const bufa = [currentChunk.subarray(offset)];\n while (have < length) {\n const chunk = await readChunk();\n if (chunk == null) {\n break;\n }\n if (have < 0) {\n if (chunk.length > have) {\n bufa.push(chunk.subarray(-have));\n }\n } else {\n bufa.push(chunk);\n }\n have += chunk.length;\n }\n currentChunk = new Uint8Array(bufa.reduce((p, c) => p + c.length, 0));\n let off = 0;\n for (const b of bufa) {\n currentChunk.set(b, off);\n off += b.length;\n }\n offset = 0;\n };\n return {\n async upTo(length) {\n if (currentChunk.length - offset < length) {\n await read(length);\n }\n return currentChunk.subarray(offset, offset + Math.min(currentChunk.length - offset, length));\n },\n async exactly(length) {\n if (currentChunk.length - offset < length) {\n await read(length);\n }\n if (currentChunk.length - offset < length) {\n throw new Error('Unexpected end of data');\n }\n return currentChunk.subarray(offset, offset + length);\n },\n seek(length) {\n pos += length;\n offset += length;\n },\n get pos() {\n return pos;\n }\n };\n}\nfunction asyncIterableReader(asyncIterable) {\n const iterator = asyncIterable[Symbol.asyncIterator]();\n async function readChunk() {\n const next = await iterator.next();\n if (next.done) {\n return null;\n }\n return next.value;\n }\n return chunkReader(readChunk);\n}\n\nexports.asyncIterableReader = asyncIterableReader;\nexports.bytesReader = bytesReader;\nexports.chunkReader = chunkReader;\nexports.createDecoder = createDecoder;\nexports.readBlockHead = readBlockHead;\nexports.readHeader = readHeader;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar mortice = require('mortice');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar mortice__default = /*#__PURE__*/_interopDefaultLegacy(mortice);\n\nlet lock;\nfunction createLock(repoOwner = false) {\n if (lock) {\n return lock;\n }\n const mutex = mortice__default[\"default\"]({ singleProcess: repoOwner });\n lock = {\n readLock: func => {\n return async (...args) => {\n const releaseLock = await mutex.readLock();\n try {\n return await func.apply(null, args);\n } finally {\n releaseLock();\n }\n };\n },\n writeLock: func => {\n return async (...args) => {\n const releaseLock = await mutex.writeLock();\n try {\n return await func.apply(null, args);\n } finally {\n releaseLock();\n }\n };\n }\n };\n return lock;\n}\n\nexports.createLock = createLock;\n","const node = require('./node')\nconst browser = require('./browser')\nconst { default: Queue } = require('p-queue')\nconst { timeout } = require('promise-timeout')\nconst observe = require('observable-webworkers')\n\nconst mutexes = {}\nlet implementation\n\nfunction createReleaseable (queue, options) {\n let res\n\n const p = new Promise((resolve) => {\n res = resolve\n })\n\n queue.add(() => timeout((() => {\n return new Promise((resolve) => {\n res(() => {\n resolve()\n })\n })\n })(), options.timeout))\n\n return p\n}\n\nconst createMutex = (name, options) => {\n if (implementation.isWorker) {\n return {\n readLock: implementation.readLock(name, options),\n writeLock: implementation.writeLock(name, options)\n }\n }\n\n const masterQueue = new Queue({ concurrency: 1 })\n let readQueue = null\n\n return {\n readLock: () => {\n // If there's already a read queue, just add the task to it\n if (readQueue) {\n return createReleaseable(readQueue, options)\n }\n\n // Create a new read queue\n readQueue = new Queue({\n concurrency: options.concurrency,\n autoStart: false\n })\n const localReadQueue = readQueue\n\n // Add the task to the read queue\n const readPromise = createReleaseable(readQueue, options)\n\n masterQueue.add(() => {\n // Start the task only once the master queue has completed processing\n // any previous tasks\n localReadQueue.start()\n\n // Once all the tasks in the read queue have completed, remove it so\n // that the next read lock will occur after any write locks that were\n // started in the interim\n return localReadQueue.onIdle()\n .then(() => {\n if (readQueue === localReadQueue) {\n readQueue = null\n }\n })\n })\n\n return readPromise\n },\n writeLock: () => {\n // Remove the read queue reference, so that any later read locks will be\n // added to a new queue that starts after this write lock has been\n // released\n readQueue = null\n\n return createReleaseable(masterQueue, options)\n }\n }\n}\n\nconst defaultOptions = {\n concurrency: Infinity,\n timeout: 84600000,\n global: global,\n singleProcess: false\n}\n\nmodule.exports = (name, options) => {\n if (!options) {\n options = {}\n }\n\n if (typeof name === 'object') {\n options = name\n name = 'lock'\n }\n\n if (!name) {\n name = 'lock'\n }\n\n options = Object.assign({}, defaultOptions, options)\n\n if (!implementation) {\n implementation = node(options) || browser(options)\n\n if (!implementation.isWorker) {\n // we are master, set up worker requests\n implementation.on('requestReadLock', (name, fn) => {\n if (!mutexes[name]) {\n return\n }\n\n mutexes[name].readLock()\n .then(release => fn().finally(() => release()))\n })\n\n implementation.on('requestWriteLock', async (name, fn) => {\n if (!mutexes[name]) {\n return\n }\n\n mutexes[name].writeLock()\n .then(release => fn().finally(() => release()))\n })\n }\n }\n\n if (!mutexes[name]) {\n mutexes[name] = createMutex(name, options)\n }\n\n return mutexes[name]\n}\n\nmodule.exports.Worker = function (script, Impl) {\n Impl = Impl || global.Worker\n let worker\n\n try {\n worker = new Impl(script)\n } catch (error) {\n if (error.message.includes('not a constructor')) {\n worker = Impl(script)\n }\n }\n\n if (!worker) {\n throw new Error('Could not create Worker from', Impl)\n }\n\n observe(worker)\n\n return worker\n}\n","\nmodule.exports = {\n WORKER_REQUEST_READ_LOCK: 'lock:worker:request-read',\n WORKER_RELEASE_READ_LOCK: 'lock:worker:release-read',\n MASTER_GRANT_READ_LOCK: 'lock:master:grant-read',\n\n WORKER_REQUEST_WRITE_LOCK: 'lock:worker:request-write',\n WORKER_RELEASE_WRITE_LOCK: 'lock:worker:release-write',\n MASTER_GRANT_WRITE_LOCK: 'lock:master:grant-write'\n}\n","const events = {}\n\nconst observable = (worker) => {\n worker.addEventListener('message', (event) => {\n observable.dispatchEvent('message', worker, event)\n })\n\n if (worker.port) {\n worker.port.addEventListener('message', (event) => {\n observable.dispatchEvent('message', worker, event)\n })\n }\n}\n\nobservable.addEventListener = (type, fn) => {\n if (!events[type]) {\n events[type] = []\n }\n\n events[type].push(fn)\n}\n\nobservable.removeEventListener = (type, fn) => {\n if (!events[type]) {\n return\n }\n\n events[type] = events[type]\n .filter(listener => listener === fn)\n}\n\nobservable.dispatchEvent = function () {\n const args = Array.prototype.slice.call(arguments)\n const type = args.shift()\n\n if (!events[type]) {\n return\n }\n\n events[type].forEach(fn => fn.apply(null, args))\n}\n\nmodule.exports = observable\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar dagPB = require('@ipld/dag-pb');\nvar ipfsUnixfs = require('ipfs-unixfs');\nvar persist = require('./persist.js');\nvar hamtSharding = require('hamt-sharding');\nvar hamtConstants = require('./hamt-constants.js');\n\nclass Dir {\n constructor(props, options) {\n this.options = options || {};\n this.root = props.root;\n this.dir = props.dir;\n this.path = props.path;\n this.dirty = props.dirty;\n this.flat = props.flat;\n this.parent = props.parent;\n this.parentKey = props.parentKey;\n this.unixfs = props.unixfs;\n this.mode = props.mode;\n this.mtime = props.mtime;\n this.cid = undefined;\n this.size = undefined;\n }\n async put(name, value) {\n }\n get(name) {\n return Promise.resolve(this);\n }\n async *eachChildSeries() {\n }\n async *flush(blockstore) {\n }\n}\nclass DirSharded extends Dir {\n constructor(props, options) {\n super(props, options);\n this._bucket = hamtSharding.createHAMT({\n hashFn: hamtConstants.hamtHashFn,\n bits: hamtConstants.hamtBucketBits\n });\n }\n async put(name, value) {\n await this._bucket.put(name, value);\n }\n get(name) {\n return this._bucket.get(name);\n }\n childCount() {\n return this._bucket.leafCount();\n }\n directChildrenCount() {\n return this._bucket.childrenCount();\n }\n onlyChild() {\n return this._bucket.onlyChild();\n }\n async *eachChildSeries() {\n for await (const {key, value} of this._bucket.eachLeafSeries()) {\n yield {\n key,\n child: value\n };\n }\n }\n async *flush(blockstore) {\n yield* flush(this._bucket, blockstore, this, this.options);\n }\n}\nasync function* flush(bucket, blockstore, shardRoot, options) {\n const children = bucket._children;\n const links = [];\n let childrenSize = 0;\n for (let i = 0; i < children.length; i++) {\n const child = children.get(i);\n if (!child) {\n continue;\n }\n const labelPrefix = i.toString(16).toUpperCase().padStart(2, '0');\n if (child instanceof hamtSharding.Bucket) {\n let shard;\n for await (const subShard of await flush(child, blockstore, null, options)) {\n shard = subShard;\n }\n if (!shard) {\n throw new Error('Could not flush sharded directory, no subshard found');\n }\n links.push({\n Name: labelPrefix,\n Tsize: shard.size,\n Hash: shard.cid\n });\n childrenSize += shard.size;\n } else if (typeof child.value.flush === 'function') {\n const dir = child.value;\n let flushedDir;\n for await (const entry of dir.flush(blockstore)) {\n flushedDir = entry;\n yield flushedDir;\n }\n const label = labelPrefix + child.key;\n links.push({\n Name: label,\n Tsize: flushedDir.size,\n Hash: flushedDir.cid\n });\n childrenSize += flushedDir.size;\n } else {\n const value = child.value;\n if (!value.cid) {\n continue;\n }\n const label = labelPrefix + child.key;\n const size = value.size;\n links.push({\n Name: label,\n Tsize: size,\n Hash: value.cid\n });\n childrenSize += size;\n }\n }\n const data = Uint8Array.from(children.bitField().reverse());\n const dir = new ipfsUnixfs.UnixFS({\n type: 'hamt-sharded-directory',\n data,\n fanout: bucket.tableSize(),\n hashType: hamtConstants.hamtHashCode,\n mtime: shardRoot && shardRoot.mtime,\n mode: shardRoot && shardRoot.mode\n });\n const node = {\n Data: dir.marshal(),\n Links: links\n };\n const buffer = dagPB.encode(dagPB.prepare(node));\n const cid = await persist.persist(buffer, blockstore, options);\n const size = buffer.length + childrenSize;\n yield {\n cid,\n node,\n size\n };\n}\n\nexports.Dir = Dir;\nexports.DirSharded = DirSharded;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar dagPB = require('@ipld/dag-pb');\nvar sha2 = require('multiformats/hashes/sha2');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar dagPB__namespace = /*#__PURE__*/_interopNamespace(dagPB);\n\nconst persist = async (buffer, blockstore, options) => {\n if (!options.codec) {\n options.codec = dagPB__namespace;\n }\n if (!options.hasher) {\n options.hasher = sha2.sha256;\n }\n if (options.cidVersion === undefined) {\n options.cidVersion = 1;\n }\n if (options.codec === dagPB__namespace && options.hasher !== sha2.sha256) {\n options.cidVersion = 1;\n }\n const multihash = await options.hasher.digest(buffer);\n const cid$1 = cid.CID.create(options.cidVersion, options.codec.code, multihash);\n if (!options.onlyHash) {\n await blockstore.put(cid$1, buffer, { signal: options.signal });\n }\n return cid$1;\n};\n\nexports.persist = persist;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar murmur3 = require('@multiformats/murmur3');\n\nconst hamtHashCode = murmur3.murmur3128.code;\nconst hamtBucketBits = 8;\nasync function hamtHashFn(buf) {\n return (await murmur3.murmur3128.encode(buf)).slice(0, 8).reverse();\n}\n\nexports.hamtBucketBits = hamtBucketBits;\nexports.hamtHashCode = hamtHashCode;\nexports.hamtHashFn = hamtHashFn;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar dagPB = require('@ipld/dag-pb');\nvar hamtSharding = require('hamt-sharding');\nvar dirSharded = require('./dir-sharded.js');\nvar debug = require('debug');\nvar ipfsUnixfs = require('ipfs-unixfs');\nvar last = require('it-last');\nvar cid = require('multiformats/cid');\nvar hamtConstants = require('./hamt-constants.js');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar dagPB__namespace = /*#__PURE__*/_interopNamespace(dagPB);\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\nvar last__default = /*#__PURE__*/_interopDefaultLegacy(last);\n\nconst log = debug__default[\"default\"]('ipfs:mfs:core:utils:hamt-utils');\nconst updateHamtDirectory = async (context, links, bucket, options) => {\n if (!options.parent.Data) {\n throw new Error('Could not update HAMT directory because parent had no data');\n }\n const data = Uint8Array.from(bucket._children.bitField().reverse());\n const node = ipfsUnixfs.UnixFS.unmarshal(options.parent.Data);\n const dir = new ipfsUnixfs.UnixFS({\n type: 'hamt-sharded-directory',\n data,\n fanout: bucket.tableSize(),\n hashType: hamtConstants.hamtHashCode,\n mode: node.mode,\n mtime: node.mtime\n });\n const hasher = await context.hashers.getHasher(options.hashAlg);\n const parent = {\n Data: dir.marshal(),\n Links: links.sort((a, b) => (a.Name || '').localeCompare(b.Name || ''))\n };\n const buf = dagPB__namespace.encode(parent);\n const hash = await hasher.digest(buf);\n const cid$1 = cid.CID.create(options.cidVersion, dagPB__namespace.code, hash);\n if (options.flush) {\n await context.repo.blocks.put(cid$1, buf);\n }\n return {\n node: parent,\n cid: cid$1,\n size: links.reduce((sum, link) => sum + (link.Tsize || 0), buf.length)\n };\n};\nconst recreateHamtLevel = async (context, links, rootBucket, parentBucket, positionAtParent) => {\n const bucket = new hamtSharding.Bucket({\n hash: rootBucket._options.hash,\n bits: rootBucket._options.bits\n }, parentBucket, positionAtParent);\n parentBucket._putObjectAt(positionAtParent, bucket);\n await addLinksToHamtBucket(context, links, bucket, rootBucket);\n return bucket;\n};\nconst recreateInitialHamtLevel = async links => {\n const bucket = hamtSharding.createHAMT({\n hashFn: hamtConstants.hamtHashFn,\n bits: hamtConstants.hamtBucketBits\n });\n await Promise.all(links.map(async link => {\n const linkName = link.Name || '';\n if (linkName.length === 2) {\n const pos = parseInt(linkName, 16);\n const subBucket = new hamtSharding.Bucket({\n hash: bucket._options.hash,\n bits: bucket._options.bits\n }, bucket, pos);\n bucket._putObjectAt(pos, subBucket);\n return Promise.resolve();\n }\n return bucket.put(linkName.substring(2), {\n size: link.Tsize,\n cid: link.Hash\n });\n }));\n return bucket;\n};\nconst addLinksToHamtBucket = async (context, links, bucket, rootBucket) => {\n await Promise.all(links.map(async link => {\n const linkName = link.Name || '';\n if (linkName.length === 2) {\n log('Populating sub bucket', linkName);\n const pos = parseInt(linkName, 16);\n const block = await context.repo.blocks.get(link.Hash);\n const node = dagPB__namespace.decode(block);\n const subBucket = new hamtSharding.Bucket({\n hash: rootBucket._options.hash,\n bits: rootBucket._options.bits\n }, bucket, pos);\n bucket._putObjectAt(pos, subBucket);\n await addLinksToHamtBucket(context, node.Links, subBucket, rootBucket);\n return Promise.resolve();\n }\n return rootBucket.put(linkName.substring(2), {\n size: link.Tsize,\n cid: link.Hash\n });\n }));\n};\nconst toPrefix = position => {\n return position.toString(16).toUpperCase().padStart(2, '0').substring(0, 2);\n};\nconst generatePath = async (context, fileName, rootNode) => {\n const rootBucket = await recreateInitialHamtLevel(rootNode.Links);\n const position = await rootBucket._findNewBucketAndPos(fileName);\n const path = [{\n bucket: position.bucket,\n prefix: toPrefix(position.pos)\n }];\n let currentBucket = position.bucket;\n while (currentBucket !== rootBucket) {\n path.push({\n bucket: currentBucket,\n prefix: toPrefix(currentBucket._posAtParent)\n });\n currentBucket = currentBucket._parent;\n }\n path.reverse();\n path[0].node = rootNode;\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n if (!segment.node) {\n throw new Error('Could not generate HAMT path');\n }\n const link = segment.node.Links.filter(link => (link.Name || '').substring(0, 2) === segment.prefix).pop();\n if (!link) {\n log(`Link ${ segment.prefix }${ fileName } will be added`);\n continue;\n }\n if (link.Name === `${ segment.prefix }${ fileName }`) {\n log(`Link ${ segment.prefix }${ fileName } will be replaced`);\n continue;\n }\n log(`Found subshard ${ segment.prefix }`);\n const block = await context.repo.blocks.get(link.Hash);\n const node = dagPB__namespace.decode(block);\n if (!path[i + 1]) {\n log(`Loaded new subshard ${ segment.prefix }`);\n await recreateHamtLevel(context, node.Links, rootBucket, segment.bucket, parseInt(segment.prefix, 16));\n const position = await rootBucket._findNewBucketAndPos(fileName);\n path.push({\n bucket: position.bucket,\n prefix: toPrefix(position.pos),\n node: node\n });\n continue;\n }\n const nextSegment = path[i + 1];\n await addLinksToHamtBucket(context, node.Links, nextSegment.bucket, rootBucket);\n nextSegment.node = node;\n }\n await rootBucket.put(fileName, true);\n path.reverse();\n return {\n rootBucket,\n path\n };\n};\nconst createShard = async (context, contents, options = {}) => {\n const shard = new dirSharded.DirSharded({\n root: true,\n dir: true,\n parent: undefined,\n parentKey: undefined,\n path: '',\n dirty: true,\n flat: false,\n mtime: options.mtime,\n mode: options.mode\n }, options);\n for (let i = 0; i < contents.length; i++) {\n await shard._bucket.put(contents[i].name, {\n size: contents[i].size,\n cid: contents[i].cid\n });\n }\n const res = await last__default[\"default\"](shard.flush(context.repo.blocks));\n if (!res) {\n throw new Error('Flushing shard yielded no result');\n }\n return res;\n};\n\nexports.addLinksToHamtBucket = addLinksToHamtBucket;\nexports.createShard = createShard;\nexports.generatePath = generatePath;\nexports.recreateHamtLevel = recreateHamtLevel;\nexports.recreateInitialHamtLevel = recreateInitialHamtLevel;\nexports.toPrefix = toPrefix;\nexports.updateHamtDirectory = updateHamtDirectory;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar withTimeoutOption = require('ipfs-core-utils/with-timeout-option');\n\nfunction createStat({repo}) {\n async function stat(options = {}) {\n const stats = await repo.stat();\n return {\n numObjects: BigInt(stats.numObjects.toString()),\n repoSize: BigInt(stats.repoSize.toString()),\n repoPath: stats.repoPath,\n version: `${ stats.version }`,\n storageMax: BigInt(stats.storageMax.toString())\n };\n }\n return withTimeoutOption.withTimeoutOption(stat);\n}\n\nexports.createStat = createStat;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst repoVersion = 11;\n\nexports.repoVersion = repoVersion;\n","module.exports = get;\n\n/*\n const obj = {a: {aa: {aaa: 2}}, b: 4};\n\n get(obj, 'a.aa.aaa'); // 2\n get(obj, ['a', 'aa', 'aaa']); // 2\n\n get(obj, 'b.bb.bbb'); // undefined\n get(obj, ['b', 'bb', 'bbb']); // undefined\n\n get(obj.a, 'aa.aaa'); // 2\n get(obj.a, ['aa', 'aaa']); // 2\n\n get(obj.b, 'bb.bbb'); // undefined\n get(obj.b, ['bb', 'bbb']); // undefined\n\n get(obj.b, 'bb.bbb', 42); // 42\n get(obj.b, ['bb', 'bbb'], 42); // 42\n\n get(null, 'a'); // undefined\n get(undefined, ['a']); // undefined\n\n get(null, 'a', 42); // 42\n get(undefined, ['a'], 42); // 42\n\n const obj = {a: {}};\n const sym = Symbol();\n obj.a[sym] = 4;\n get(obj.a, sym); // 4\n*/\n\nfunction get(obj, propsArg, defaultValue) {\n if (!obj) {\n return defaultValue;\n }\n var props, prop;\n if (Array.isArray(propsArg)) {\n props = propsArg.slice(0);\n }\n if (typeof propsArg == 'string') {\n props = propsArg.split('.');\n }\n if (typeof propsArg == 'symbol') {\n props = [propsArg];\n }\n if (!Array.isArray(props)) {\n throw new Error('props arg must be an array, a string or a symbol');\n }\n while (props.length) {\n prop = props.shift();\n if (!obj) {\n return defaultValue;\n }\n obj = obj[prop];\n if (obj === undefined) {\n return defaultValue;\n }\n }\n return obj;\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar key = require('interface-datastore/key');\nvar base32 = require('multiformats/bases/base32');\nvar cid = require('multiformats/cid');\n\nconst PIN_DS_KEY = new key.Key('/local/pins');\nconst DEFAULT_FANOUT = 256;\nconst MAX_ITEMS = 8192;\nconst EMPTY_KEY = cid.CID.parse('QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n');\nconst PinTypes = {\n direct: 'direct',\n recursive: 'recursive'\n};\nfunction cidToKey(cid) {\n return new key.Key(`/${ base32.base32.encode(cid.multihash.bytes).toUpperCase().substring(1) }`);\n}\n\nexports.DEFAULT_FANOUT = DEFAULT_FANOUT;\nexports.EMPTY_KEY = EMPTY_KEY;\nexports.MAX_ITEMS = MAX_ITEMS;\nexports.PIN_DS_KEY = PIN_DS_KEY;\nexports.PinTypes = PinTypes;\nexports.cidToKey = cidToKey;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction compare(a, b) {\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] < b[i]) {\n return -1;\n }\n if (a[i] > b[i]) {\n return 1;\n }\n }\n if (a.byteLength > b.byteLength) {\n return 1;\n }\n if (a.byteLength < b.byteLength) {\n return -1;\n }\n return 0;\n}\n\nexports.compare = compare;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errors = require('../errors.js');\n\nasync function hasWithFallback(key, has, store) {\n const result = await has(key);\n if (result) {\n return result;\n }\n const levelJs = findLevelJs(store);\n if (!levelJs) {\n return false;\n }\n return new Promise((resolve, reject) => {\n const req = levelJs.store('readonly').get(key.toString());\n req.transaction.onabort = () => {\n reject(req.transaction.error);\n };\n req.transaction.oncomplete = () => {\n resolve(Boolean(req.result));\n };\n });\n}\nasync function getWithFallback(key, get, has, store) {\n if (await has(key)) {\n return get(key);\n }\n const levelJs = findLevelJs(store);\n if (!levelJs) {\n throw new errors.NotFoundError();\n }\n return new Promise((resolve, reject) => {\n const req = levelJs.store('readonly').get(key.toString());\n req.transaction.onabort = () => {\n reject(req.transaction.error);\n };\n req.transaction.oncomplete = () => {\n if (req.result) {\n return resolve(req.result);\n }\n reject(new errors.NotFoundError());\n };\n });\n}\nfunction findLevelJs(store) {\n let db = store;\n while (db.db || db.child) {\n db = db.db || db.child;\n if (db.type === 'level-js' || db.constructor.name === 'Level') {\n return db;\n }\n }\n}\n\nexports.getWithFallback = getWithFallback;\nexports.hasWithFallback = hasWithFallback;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errors = require('../errors.js');\nvar debug = require('debug');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\n\nconst log = debug__default[\"default\"]('ipfs:repo:lock:memory');\nconst lockFile = 'repo.lock';\nconst LOCKS = {};\nasync function lock(dir) {\n const file = dir + '/' + lockFile;\n log('locking %s', file);\n if (LOCKS[file] === true) {\n throw new errors.LockExistsError(`Lock already being held for file: ${ file }`);\n }\n LOCKS[file] = true;\n const closer = {\n async close() {\n if (LOCKS[file]) {\n delete LOCKS[file];\n }\n }\n };\n return closer;\n}\nasync function locked(dir) {\n const file = dir + '/' + lockFile;\n log(`checking lock: ${ file }`);\n return Boolean(LOCKS[file]);\n}\nconst MemoryLock = {\n lock,\n locked\n};\n\nexports.MemoryLock = MemoryLock;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar debug = require('debug');\nvar block = require('multiformats/block');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar debug__default = /*#__PURE__*/_interopDefaultLegacy(debug);\n\nconst log = debug__default[\"default\"]('ipfs:repo:utils:walk-dag');\nasync function* walkDag(cid, blockstore, loadCodec, options) {\n try {\n const bytes = await blockstore.get(cid, options);\n const codec = await loadCodec(cid.code);\n const block$1 = block.createUnsafe({\n bytes,\n cid,\n codec\n });\n for (const [, childCid] of block$1.links()) {\n yield childCid;\n yield* walkDag(childCid, blockstore, loadCodec, options);\n }\n } catch (err) {\n log('Could not walk DAG for CID', cid.toString(), err);\n throw err;\n }\n}\n\nexports.walkDag = walkDag;\n","'use strict'\n\nfunction AbstractIterator (db) {\n if (typeof db !== 'object' || db === null) {\n throw new TypeError('First argument must be an abstract-leveldown compliant store')\n }\n\n this.db = db\n this._ended = false\n this._nexting = false\n}\n\nAbstractIterator.prototype.next = function (callback) {\n // In callback mode, we return `this`\n let ret = this\n\n if (callback === undefined) {\n ret = new Promise(function (resolve, reject) {\n callback = function (err, key, value) {\n if (err) reject(err)\n else if (key === undefined && value === undefined) resolve()\n else resolve([key, value])\n }\n })\n } else if (typeof callback !== 'function') {\n throw new Error('next() requires a callback argument')\n }\n\n if (this._ended) {\n this._nextTick(callback, new Error('cannot call next() after end()'))\n return ret\n }\n\n if (this._nexting) {\n this._nextTick(callback, new Error('cannot call next() before previous next() has completed'))\n return ret\n }\n\n this._nexting = true\n this._next((err, ...rest) => {\n this._nexting = false\n callback(err, ...rest)\n })\n\n return ret\n}\n\nAbstractIterator.prototype._next = function (callback) {\n this._nextTick(callback)\n}\n\nAbstractIterator.prototype.seek = function (target) {\n if (this._ended) {\n throw new Error('cannot call seek() after end()')\n }\n if (this._nexting) {\n throw new Error('cannot call seek() before next() has completed')\n }\n\n target = this.db._serializeKey(target)\n this._seek(target)\n}\n\nAbstractIterator.prototype._seek = function (target) {}\n\nAbstractIterator.prototype.end = function (callback) {\n let promise\n\n if (callback === undefined) {\n promise = new Promise(function (resolve, reject) {\n callback = function (err) {\n if (err) reject(err)\n else resolve()\n }\n })\n } else if (typeof callback !== 'function') {\n throw new Error('end() requires a callback argument')\n }\n\n if (this._ended) {\n this._nextTick(callback, new Error('end() already called on iterator'))\n return promise\n }\n\n this._ended = true\n this._end(callback)\n\n return promise\n}\n\nAbstractIterator.prototype._end = function (callback) {\n this._nextTick(callback)\n}\n\nAbstractIterator.prototype[Symbol.asyncIterator] = async function * () {\n try {\n let kv\n\n while ((kv = (await this.next())) !== undefined) {\n yield kv\n }\n } finally {\n if (!this._ended) await this.end()\n }\n}\n\n// Expose browser-compatible nextTick for dependents\nAbstractIterator.prototype._nextTick = require('./next-tick')\n\nmodule.exports = AbstractIterator\n","'use strict'\n\nconst emptyOptions = Object.freeze({})\n\nfunction AbstractChainedBatch (db) {\n if (typeof db !== 'object' || db === null) {\n throw new TypeError('First argument must be an abstract-leveldown compliant store')\n }\n\n this.db = db\n this._operations = []\n this._written = false\n}\n\nAbstractChainedBatch.prototype._checkWritten = function () {\n if (this._written) {\n throw new Error('write() already called on this batch')\n }\n}\n\nAbstractChainedBatch.prototype.put = function (key, value, options) {\n this._checkWritten()\n\n const err = this.db._checkKey(key) || this.db._checkValue(value)\n if (err) throw err\n\n key = this.db._serializeKey(key)\n value = this.db._serializeValue(value)\n\n this._put(key, value, options != null ? options : emptyOptions)\n\n return this\n}\n\nAbstractChainedBatch.prototype._put = function (key, value, options) {\n this._operations.push({ ...options, type: 'put', key, value })\n}\n\nAbstractChainedBatch.prototype.del = function (key, options) {\n this._checkWritten()\n\n const err = this.db._checkKey(key)\n if (err) throw err\n\n key = this.db._serializeKey(key)\n this._del(key, options != null ? options : emptyOptions)\n\n return this\n}\n\nAbstractChainedBatch.prototype._del = function (key, options) {\n this._operations.push({ ...options, type: 'del', key })\n}\n\nAbstractChainedBatch.prototype.clear = function () {\n this._checkWritten()\n this._clear()\n\n return this\n}\n\nAbstractChainedBatch.prototype._clear = function () {\n this._operations = []\n}\n\nAbstractChainedBatch.prototype.write = function (options, callback) {\n this._checkWritten()\n\n if (typeof options === 'function') {\n callback = options\n }\n if (typeof callback !== 'function') {\n throw new Error('write() requires a callback argument')\n }\n if (typeof options !== 'object' || options === null) {\n options = {}\n }\n\n this._written = true\n this._write(options, callback)\n}\n\nAbstractChainedBatch.prototype._write = function (options, callback) {\n this.db._batch(this._operations, options, callback)\n}\n\n// Expose browser-compatible nextTick for dependents\nAbstractChainedBatch.prototype._nextTick = require('./next-tick')\n\nmodule.exports = AbstractChainedBatch\n","'use strict'\n\nexports.getCallback = function (options, callback) {\n return typeof options === 'function' ? options : callback\n}\n\nexports.getOptions = function (options) {\n return typeof options === 'object' && options !== null ? options : {}\n}\n","'use strict'\n\nexports.getCallback = function (args, symbol, map) {\n let callback = args[args.length - 1]\n\n if (typeof callback !== 'function') {\n const promise = new Promise((resolve, reject) => {\n args.push(callback = function (err, ...results) {\n if (err) reject(err)\n else resolve(map ? map(...results) : results[0])\n })\n })\n\n callback[symbol] = promise\n }\n\n return callback\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","'use strict'\n\nfunction createError (type, Proto) {\n const Err = function (message, cause) {\n if (typeof message === 'object' && message !== null) {\n // Can be passed just a cause\n cause = cause || message\n message = message.message || message.name\n }\n\n message = message || ''\n cause = cause || undefined\n\n // If input is already of type, return as-is to keep its stack trace.\n // Avoid instanceof, for when node_modules has multiple copies of level-errors.\n if (typeof cause === 'object' && cause.type === type && cause.message === message) {\n return cause\n }\n\n Object.defineProperty(this, 'type', { value: type, enumerable: false, writable: true, configurable: true })\n Object.defineProperty(this, 'name', { value: type, enumerable: false, writable: true, configurable: true })\n Object.defineProperty(this, 'cause', { value: cause, enumerable: false, writable: true, configurable: true })\n Object.defineProperty(this, 'message', { value: message, enumerable: false, writable: true, configurable: true })\n\n Error.call(this)\n\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, Err)\n }\n }\n\n Err.prototype = new Proto()\n return Err\n}\n\nconst LevelUPError = createError('LevelUPError', Error)\n\nmodule.exports = {\n LevelUPError: LevelUPError,\n InitializationError: createError('InitializationError', LevelUPError),\n OpenError: createError('OpenError', LevelUPError),\n ReadError: createError('ReadError', LevelUPError),\n WriteError: createError('WriteError', LevelUPError),\n NotFoundError: createError('NotFoundError', LevelUPError),\n EncodingError: createError('EncodingError', LevelUPError)\n}\n\nmodule.exports.NotFoundError.prototype.notFound = true\nmodule.exports.NotFoundError.prototype.status = 404\n","'use strict'\n\nfunction AbstractIterator (db) {\n if (typeof db !== 'object' || db === null) {\n throw new TypeError('First argument must be an abstract-leveldown compliant store')\n }\n\n this.db = db\n this._ended = false\n this._nexting = false\n}\n\nAbstractIterator.prototype.next = function (callback) {\n // In callback mode, we return `this`\n let ret = this\n\n if (callback === undefined) {\n ret = new Promise(function (resolve, reject) {\n callback = function (err, key, value) {\n if (err) reject(err)\n else if (key === undefined && value === undefined) resolve()\n else resolve([key, value])\n }\n })\n } else if (typeof callback !== 'function') {\n throw new Error('next() requires a callback argument')\n }\n\n if (this._ended) {\n this._nextTick(callback, new Error('cannot call next() after end()'))\n return ret\n }\n\n if (this._nexting) {\n this._nextTick(callback, new Error('cannot call next() before previous next() has completed'))\n return ret\n }\n\n this._nexting = true\n this._next((err, ...rest) => {\n this._nexting = false\n callback(err, ...rest)\n })\n\n return ret\n}\n\nAbstractIterator.prototype._next = function (callback) {\n this._nextTick(callback)\n}\n\nAbstractIterator.prototype.seek = function (target) {\n if (this._ended) {\n throw new Error('cannot call seek() after end()')\n }\n if (this._nexting) {\n throw new Error('cannot call seek() before next() has completed')\n }\n\n target = this.db._serializeKey(target)\n this._seek(target)\n}\n\nAbstractIterator.prototype._seek = function (target) {}\n\nAbstractIterator.prototype.end = function (callback) {\n let promise\n\n if (callback === undefined) {\n promise = new Promise(function (resolve, reject) {\n callback = function (err) {\n if (err) reject(err)\n else resolve()\n }\n })\n } else if (typeof callback !== 'function') {\n throw new Error('end() requires a callback argument')\n }\n\n if (this._ended) {\n this._nextTick(callback, new Error('end() already called on iterator'))\n return promise\n }\n\n this._ended = true\n this._end(callback)\n\n return promise\n}\n\nAbstractIterator.prototype._end = function (callback) {\n this._nextTick(callback)\n}\n\nAbstractIterator.prototype[Symbol.asyncIterator] = async function * () {\n try {\n let kv\n\n while ((kv = (await this.next())) !== undefined) {\n yield kv\n }\n } finally {\n if (!this._ended) await this.end()\n }\n}\n\n// Expose browser-compatible nextTick for dependents\nAbstractIterator.prototype._nextTick = require('./next-tick')\n\nmodule.exports = AbstractIterator\n","'use strict'\n\nconst emptyOptions = Object.freeze({})\n\nfunction AbstractChainedBatch (db) {\n if (typeof db !== 'object' || db === null) {\n throw new TypeError('First argument must be an abstract-leveldown compliant store')\n }\n\n this.db = db\n this._operations = []\n this._written = false\n}\n\nAbstractChainedBatch.prototype._checkWritten = function () {\n if (this._written) {\n throw new Error('write() already called on this batch')\n }\n}\n\nAbstractChainedBatch.prototype.put = function (key, value, options) {\n this._checkWritten()\n\n const err = this.db._checkKey(key) || this.db._checkValue(value)\n if (err) throw err\n\n key = this.db._serializeKey(key)\n value = this.db._serializeValue(value)\n\n this._put(key, value, options != null ? options : emptyOptions)\n\n return this\n}\n\nAbstractChainedBatch.prototype._put = function (key, value, options) {\n this._operations.push({ ...options, type: 'put', key, value })\n}\n\nAbstractChainedBatch.prototype.del = function (key, options) {\n this._checkWritten()\n\n const err = this.db._checkKey(key)\n if (err) throw err\n\n key = this.db._serializeKey(key)\n this._del(key, options != null ? options : emptyOptions)\n\n return this\n}\n\nAbstractChainedBatch.prototype._del = function (key, options) {\n this._operations.push({ ...options, type: 'del', key })\n}\n\nAbstractChainedBatch.prototype.clear = function () {\n this._checkWritten()\n this._clear()\n\n return this\n}\n\nAbstractChainedBatch.prototype._clear = function () {\n this._operations = []\n}\n\nAbstractChainedBatch.prototype.write = function (options, callback) {\n this._checkWritten()\n\n if (typeof options === 'function') {\n callback = options\n }\n if (typeof callback !== 'function') {\n throw new Error('write() requires a callback argument')\n }\n if (typeof options !== 'object' || options === null) {\n options = {}\n }\n\n this._written = true\n this._write(options, callback)\n}\n\nAbstractChainedBatch.prototype._write = function (options, callback) {\n this.db._batch(this._operations, options, callback)\n}\n\n// Expose browser-compatible nextTick for dependents\nAbstractChainedBatch.prototype._nextTick = require('./next-tick')\n\nmodule.exports = AbstractChainedBatch\n","'use strict'\n\nexports.getCallback = function (options, callback) {\n return typeof options === 'function' ? options : callback\n}\n\nexports.getOptions = function (options) {\n return typeof options === 'object' && options !== null ? options : {}\n}\n","'use strict'\n\nexports.AbstractLevelDOWN = require('./abstract-leveldown')\nexports.AbstractIterator = require('./abstract-iterator')\nexports.AbstractChainedBatch = require('./abstract-chained-batch')\n","'use strict'\n\nfunction AbstractIterator (db) {\n if (typeof db !== 'object' || db === null) {\n throw new TypeError('First argument must be an abstract-leveldown compliant store')\n }\n\n this.db = db\n this._ended = false\n this._nexting = false\n}\n\nAbstractIterator.prototype.next = function (callback) {\n // In callback mode, we return `this`\n let ret = this\n\n if (callback === undefined) {\n ret = new Promise(function (resolve, reject) {\n callback = function (err, key, value) {\n if (err) reject(err)\n else if (key === undefined && value === undefined) resolve()\n else resolve([key, value])\n }\n })\n } else if (typeof callback !== 'function') {\n throw new Error('next() requires a callback argument')\n }\n\n if (this._ended) {\n this._nextTick(callback, new Error('cannot call next() after end()'))\n return ret\n }\n\n if (this._nexting) {\n this._nextTick(callback, new Error('cannot call next() before previous next() has completed'))\n return ret\n }\n\n this._nexting = true\n this._next((err, ...rest) => {\n this._nexting = false\n callback(err, ...rest)\n })\n\n return ret\n}\n\nAbstractIterator.prototype._next = function (callback) {\n this._nextTick(callback)\n}\n\nAbstractIterator.prototype.seek = function (target) {\n if (this._ended) {\n throw new Error('cannot call seek() after end()')\n }\n if (this._nexting) {\n throw new Error('cannot call seek() before next() has completed')\n }\n\n target = this.db._serializeKey(target)\n this._seek(target)\n}\n\nAbstractIterator.prototype._seek = function (target) {}\n\nAbstractIterator.prototype.end = function (callback) {\n let promise\n\n if (callback === undefined) {\n promise = new Promise(function (resolve, reject) {\n callback = function (err) {\n if (err) reject(err)\n else resolve()\n }\n })\n } else if (typeof callback !== 'function') {\n throw new Error('end() requires a callback argument')\n }\n\n if (this._ended) {\n this._nextTick(callback, new Error('end() already called on iterator'))\n return promise\n }\n\n this._ended = true\n this._end(callback)\n\n return promise\n}\n\nAbstractIterator.prototype._end = function (callback) {\n this._nextTick(callback)\n}\n\nAbstractIterator.prototype[Symbol.asyncIterator] = async function * () {\n try {\n let kv\n\n while ((kv = (await this.next())) !== undefined) {\n yield kv\n }\n } finally {\n if (!this._ended) await this.end()\n }\n}\n\n// Expose browser-compatible nextTick for dependents\nAbstractIterator.prototype._nextTick = require('./next-tick')\n\nmodule.exports = AbstractIterator\n","'use strict'\n\nconst emptyOptions = Object.freeze({})\n\nfunction AbstractChainedBatch (db) {\n if (typeof db !== 'object' || db === null) {\n throw new TypeError('First argument must be an abstract-leveldown compliant store')\n }\n\n this.db = db\n this._operations = []\n this._written = false\n}\n\nAbstractChainedBatch.prototype._checkWritten = function () {\n if (this._written) {\n throw new Error('write() already called on this batch')\n }\n}\n\nAbstractChainedBatch.prototype.put = function (key, value, options) {\n this._checkWritten()\n\n const err = this.db._checkKey(key) || this.db._checkValue(value)\n if (err) throw err\n\n key = this.db._serializeKey(key)\n value = this.db._serializeValue(value)\n\n this._put(key, value, options != null ? options : emptyOptions)\n\n return this\n}\n\nAbstractChainedBatch.prototype._put = function (key, value, options) {\n this._operations.push({ ...options, type: 'put', key, value })\n}\n\nAbstractChainedBatch.prototype.del = function (key, options) {\n this._checkWritten()\n\n const err = this.db._checkKey(key)\n if (err) throw err\n\n key = this.db._serializeKey(key)\n this._del(key, options != null ? options : emptyOptions)\n\n return this\n}\n\nAbstractChainedBatch.prototype._del = function (key, options) {\n this._operations.push({ ...options, type: 'del', key })\n}\n\nAbstractChainedBatch.prototype.clear = function () {\n this._checkWritten()\n this._clear()\n\n return this\n}\n\nAbstractChainedBatch.prototype._clear = function () {\n this._operations = []\n}\n\nAbstractChainedBatch.prototype.write = function (options, callback) {\n this._checkWritten()\n\n if (typeof options === 'function') {\n callback = options\n }\n if (typeof callback !== 'function') {\n throw new Error('write() requires a callback argument')\n }\n if (typeof options !== 'object' || options === null) {\n options = {}\n }\n\n this._written = true\n this._write(options, callback)\n}\n\nAbstractChainedBatch.prototype._write = function (options, callback) {\n this.db._batch(this._operations, options, callback)\n}\n\n// Expose browser-compatible nextTick for dependents\nAbstractChainedBatch.prototype._nextTick = require('./next-tick')\n\nmodule.exports = AbstractChainedBatch\n","'use strict'\n\nexports.getCallback = function (options, callback) {\n return typeof options === 'function' ? options : callback\n}\n\nexports.getOptions = function (options) {\n return typeof options === 'object' && options !== null ? options : {}\n}\n","/* global IDBKeyRange */\n\n'use strict'\n\nconst ltgt = require('ltgt')\nconst NONE = Symbol('none')\n\nmodule.exports = function createKeyRange (options) {\n const lower = ltgt.lowerBound(options, NONE)\n const upper = ltgt.upperBound(options, NONE)\n const lowerOpen = ltgt.lowerBoundExclusive(options, NONE)\n const upperOpen = ltgt.upperBoundExclusive(options, NONE)\n\n if (lower !== NONE && upper !== NONE) {\n return IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen)\n } else if (lower !== NONE) {\n return IDBKeyRange.lowerBound(lower, lowerOpen)\n } else if (upper !== NONE) {\n return IDBKeyRange.upperBound(upper, upperOpen)\n } else {\n return null\n }\n}\n","'use strict'\n\nconst Buffer = require('buffer').Buffer\nconst ta2str = (function () {\n if (global.TextDecoder) {\n const decoder = new TextDecoder('utf-8')\n return decoder.decode.bind(decoder)\n } else {\n return function ta2str (ta) {\n return ta2buf(ta).toString()\n }\n }\n})()\n\nconst ab2str = (function () {\n if (global.TextDecoder) {\n const decoder = new TextDecoder('utf-8')\n return decoder.decode.bind(decoder)\n } else {\n return function ab2str (ab) {\n return Buffer.from(ab).toString()\n }\n }\n})()\n\nfunction ta2buf (ta) {\n const buf = Buffer.from(ta.buffer)\n\n if (ta.byteLength === ta.buffer.byteLength) {\n return buf\n } else {\n return buf.slice(ta.byteOffset, ta.byteOffset + ta.byteLength)\n }\n}\n\nmodule.exports = function (data, asBuffer) {\n if (data instanceof Uint8Array) {\n return asBuffer ? ta2buf(data) : ta2str(data)\n } else if (data instanceof ArrayBuffer) {\n return asBuffer ? Buffer.from(data) : ab2str(data)\n } else {\n return asBuffer ? Buffer.from(String(data)) : String(data)\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar get = require('dlv');\nvar mergeOpts = require('merge-options');\nvar errCode = require('err-code');\nvar libp2pPubsubRouters = require('ipfs-core-config/libp2p-pubsub-routers');\nvar DelegatedPeerRouter = require('libp2p-delegated-peer-routing');\nvar DelegatedContentRouter = require('libp2p-delegated-content-routing');\nvar ipfsHttpClient = require('ipfs-http-client');\nvar multiaddr = require('multiaddr');\nvar version = require('../version.js');\nvar libp2p = require('ipfs-core-config/libp2p');\nvar bootstrap = require('libp2p-bootstrap');\nvar Libp2p = require('libp2p');\nvar ipns = require('ipns');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar get__default = /*#__PURE__*/_interopDefaultLegacy(get);\nvar mergeOpts__default = /*#__PURE__*/_interopDefaultLegacy(mergeOpts);\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\nvar DelegatedPeerRouter__default = /*#__PURE__*/_interopDefaultLegacy(DelegatedPeerRouter);\nvar DelegatedContentRouter__default = /*#__PURE__*/_interopDefaultLegacy(DelegatedContentRouter);\nvar bootstrap__default = /*#__PURE__*/_interopDefaultLegacy(bootstrap);\nvar Libp2p__default = /*#__PURE__*/_interopDefaultLegacy(Libp2p);\nvar ipns__namespace = /*#__PURE__*/_interopNamespace(ipns);\n\nconst mergeOptions = mergeOpts__default[\"default\"].bind({ ignoreUndefined: true });\nfunction createLibp2p({options = {}, peerId, multiaddrs = [], repo, keychainConfig = {}, config = {}}) {\n const {datastore, keys} = repo;\n const libp2pOptions = getLibp2pOptions({\n options,\n config,\n datastore,\n keys,\n keychainConfig,\n peerId,\n multiaddrs\n });\n if (typeof options.libp2p === 'function') {\n return options.libp2p({\n libp2pOptions,\n options,\n config,\n datastore,\n peerId\n });\n }\n return Libp2p__default[\"default\"].create(libp2pOptions);\n}\nfunction getLibp2pOptions({options, config, datastore, keys, keychainConfig, peerId, multiaddrs}) {\n const getPubsubRouter = () => {\n const router = get__default[\"default\"](config, 'Pubsub.Router') || 'gossipsub';\n if (!libp2pPubsubRouters.routers[router]) {\n throw errCode__default[\"default\"](new Error(`Router unavailable. Configure libp2p.modules.pubsub to use the ${ router } router.`), 'ERR_NOT_SUPPORTED');\n }\n return libp2pPubsubRouters.routers[router];\n };\n const libp2pDefaults = {\n datastore,\n peerId: peerId,\n modules: {}\n };\n const libp2pOptions = {\n modules: {\n pubsub: getPubsubRouter(),\n contentRouting: [],\n peerRouting: []\n },\n config: {\n peerDiscovery: {\n mdns: { enabled: get__default[\"default\"](options, 'config.Discovery.MDNS.Enabled', get__default[\"default\"](config, 'Discovery.MDNS.Enabled', true)) },\n webRTCStar: { enabled: get__default[\"default\"](options, 'config.Discovery.webRTCStar.Enabled', get__default[\"default\"](config, 'Discovery.webRTCStar.Enabled', true)) },\n bootstrap: { list: get__default[\"default\"](options, 'config.Bootstrap', get__default[\"default\"](config, 'Bootstrap', [])) }\n },\n relay: {\n enabled: get__default[\"default\"](options, 'relay.enabled', get__default[\"default\"](config, 'relay.enabled', true)),\n hop: {\n enabled: get__default[\"default\"](options, 'relay.hop.enabled', get__default[\"default\"](config, 'relay.hop.enabled', false)),\n active: get__default[\"default\"](options, 'relay.hop.active', get__default[\"default\"](config, 'relay.hop.active', false))\n }\n },\n dht: {\n enabled: get__default[\"default\"](config, 'Routing.Type', 'none') !== 'none',\n clientMode: get__default[\"default\"](config, 'Routing.Type', 'dht') !== 'dhtserver',\n kBucketSize: get__default[\"default\"](options, 'dht.kBucketSize', 20),\n validators: { ipns: ipns__namespace.validator }\n },\n pubsub: { enabled: get__default[\"default\"](options, 'config.Pubsub.Enabled', get__default[\"default\"](config, 'Pubsub.Enabled', true)) },\n nat: { enabled: !get__default[\"default\"](config, 'Swarm.DisableNatPortMap', false) }\n },\n addresses: {\n listen: multiaddrs.map(ma => ma.toString()),\n announce: get__default[\"default\"](options, 'addresses.announce', get__default[\"default\"](config, 'Addresses.Announce', [])),\n noAnnounce: get__default[\"default\"](options, 'addresses.noAnnounce', get__default[\"default\"](config, 'Addresses.NoAnnounce', []))\n },\n connectionManager: get__default[\"default\"](options, 'connectionManager', {\n maxConnections: get__default[\"default\"](options, 'config.Swarm.ConnMgr.HighWater', get__default[\"default\"](config, 'Swarm.ConnMgr.HighWater')),\n minConnections: get__default[\"default\"](options, 'config.Swarm.ConnMgr.LowWater', get__default[\"default\"](config, 'Swarm.ConnMgr.LowWater'))\n }),\n keychain: {\n datastore: keys,\n ...keychainConfig\n },\n host: { agentVersion: `js-ipfs/${ version.ipfsCore }` }\n };\n let constructorOptions = get__default[\"default\"](options, 'libp2p', undefined);\n if (typeof constructorOptions === 'function') {\n constructorOptions = undefined;\n }\n const libp2pConfig = mergeOptions(libp2pDefaults, libp2p.libp2pConfig(), libp2pOptions, constructorOptions);\n const bootstrapList = get__default[\"default\"](libp2pConfig, 'config.peerDiscovery.bootstrap.list', []);\n if (bootstrapList.length > 0) {\n libp2pConfig.modules.peerDiscovery.push(bootstrap__default[\"default\"]);\n }\n const delegateHosts = get__default[\"default\"](options, 'config.Addresses.Delegates', get__default[\"default\"](config, 'Addresses.Delegates', []));\n if (delegateHosts.length > 0) {\n const delegateString = delegateHosts[Math.floor(Math.random() * delegateHosts.length)];\n const delegateAddr = new multiaddr.Multiaddr(delegateString).toOptions();\n const delegateApiOptions = {\n host: delegateAddr.host,\n protocol: parseInt(delegateAddr.port) === 443 ? 'https' : 'http',\n port: delegateAddr.port\n };\n const delegateHttpClient = ipfsHttpClient.create(delegateApiOptions);\n libp2pOptions.modules.contentRouting = libp2pOptions.modules.contentRouting || [];\n libp2pOptions.modules.contentRouting.push(new DelegatedContentRouter__default[\"default\"](peerId, delegateHttpClient));\n libp2pOptions.modules.peerRouting = libp2pOptions.modules.peerRouting || [];\n libp2pOptions.modules.peerRouting.push(new DelegatedPeerRouter__default[\"default\"](delegateHttpClient));\n }\n return libp2pConfig;\n}\n\nexports.createLibp2p = createLibp2p;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst pubsub_1 = __importStar(require(\"libp2p-interfaces/src/pubsub\"));\nconst message_cache_1 = require(\"./message-cache\");\nconst rpc_1 = require(\"./message/rpc\");\nconst constants = __importStar(require(\"./constants\"));\nconst heartbeat_1 = require(\"./heartbeat\");\nconst get_gossip_peers_1 = require(\"./get-gossip-peers\");\nconst utils_1 = require(\"./utils\");\nconst score_1 = require(\"./score\");\nconst tracer_1 = require(\"./tracer\");\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst TimeCache = require(\"time-cache\");\nconst PeerId = require(\"peer-id\");\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst Envelope = require(\"libp2p/src/record/envelope\");\nclass Gossipsub extends pubsub_1.default {\n // TODO: add remaining props\n /**\n * @param {Libp2p} libp2p\n * @param {Object} [options]\n * @param {boolean} [options.emitSelf = false] if publish should emit to self, if subscribed\n * @param {boolean} [options.canRelayMessage = false] - if can relay messages not subscribed\n * @param {boolean} [options.gossipIncoming = true] if incoming messages on a subscribed topic should be automatically gossiped\n * @param {boolean} [options.fallbackToFloodsub = true] if dial should fallback to floodsub\n * @param {boolean} [options.floodPublish = true] if self-published messages should be sent to all peers\n * @param {boolean} [options.doPX = false] whether PX is enabled; this should be enabled in bootstrappers and other well connected/trusted nodes.\n * @param {Object} [options.messageCache] override the default MessageCache\n * @param {string} [options.globalSignaturePolicy = \"StrictSign\"] signing policy to apply across all messages\n * @param {Object} [options.scoreParams] peer score parameters\n * @param {Object} [options.scoreThresholds] peer score thresholds\n * @param {AddrInfo[]} [options.directPeers] peers with which we will maintain direct connections\n * @constructor\n */\n constructor(libp2p, options = {}) {\n const multicodecs = [constants.GossipsubIDv11, constants.GossipsubIDv10];\n const opts = Object.assign(Object.assign({ gossipIncoming: true, fallbackToFloodsub: true, floodPublish: true, doPX: false, directPeers: [], D: constants.GossipsubD, Dlo: constants.GossipsubDlo, Dhi: constants.GossipsubDhi, Dscore: constants.GossipsubDscore, Dout: constants.GossipsubDout, Dlazy: constants.GossipsubDlazy, heartbeatInterval: constants.GossipsubHeartbeatInterval, fanoutTTL: constants.GossipsubFanoutTTL, mcacheLength: constants.GossipsubHistoryLength, mcacheGossip: constants.GossipsubHistoryGossip, seenTTL: constants.GossipsubSeenTTL }, options), { scoreParams: score_1.createPeerScoreParams(options.scoreParams), scoreThresholds: score_1.createPeerScoreThresholds(options.scoreThresholds) });\n // Also wants to get notified of peers connected using floodsub\n if (opts.fallbackToFloodsub) {\n multicodecs.push(constants.FloodsubID);\n }\n super(Object.assign({ debugName: 'libp2p:gossipsub', multicodecs,\n libp2p }, opts));\n this._options = opts;\n /**\n * Direct peers\n * @type {Set}\n */\n this.direct = new Set(opts.directPeers.map(p => p.id.toB58String()));\n // set direct peer addresses in the address book\n opts.directPeers.forEach(p => {\n libp2p.peerStore.addressBook.add(p.id, p.addrs);\n });\n /**\n * Cache of seen messages\n *\n * @type {TimeCache}\n */\n this.seenCache = new TimeCache({ validity: opts.seenTTL / 1000 });\n /**\n * Map of topic meshes\n * topic => peer id set\n *\n * @type {Map>}\n */\n this.mesh = new Map();\n /**\n * Map of topics to set of peers. These mesh peers are the ones to which we are publishing without a topic membership\n * topic => peer id set\n *\n * @type {Map>}\n */\n this.fanout = new Map();\n /**\n * Map of last publish time for fanout topics\n * topic => last publish time\n *\n * @type {Map}\n */\n this.lastpub = new Map();\n /**\n * Map of pending messages to gossip\n * peer id => control messages\n *\n * @type {Map> }\n */\n this.gossip = new Map();\n /**\n * Map of control messages\n * peer id => control message\n *\n * @type {Map}\n */\n this.control = new Map();\n /**\n * Number of IHAVEs received from peer in the last heartbeat\n * @type {Map}\n */\n this.peerhave = new Map();\n /**\n * Number of messages we have asked from peer in the last heartbeat\n * @type {Map}\n */\n this.iasked = new Map();\n /**\n * Prune backoff map\n */\n this.backoff = new Map();\n /**\n * Connection direction cache, marks peers with outbound connections\n * peer id => direction\n *\n * @type {Map}\n */\n this.outbound = new Map();\n /**\n * A message cache that contains the messages for last few hearbeat ticks\n *\n */\n this.messageCache = options.messageCache || new message_cache_1.MessageCache(opts.mcacheGossip, opts.mcacheLength, this.getMsgId.bind(this));\n /**\n * A heartbeat timer that maintains the mesh\n */\n this.heartbeat = new heartbeat_1.Heartbeat(this);\n /**\n * Number of heartbeats since the beginning of time\n * This allows us to amortize some resource cleanup -- eg: backoff cleanup\n */\n this.heartbeatTicks = 0;\n /**\n * Tracks IHAVE/IWANT promises broken by peers\n */\n this.gossipTracer = new tracer_1.IWantTracer(this.getMsgId.bind(this));\n /**\n * libp2p\n */\n this._libp2p = libp2p;\n /**\n * Peer score tracking\n */\n this.score = new score_1.PeerScore(this._options.scoreParams, libp2p.connectionManager, this.getMsgId.bind(this));\n }\n /**\n * Decode a Uint8Array into an RPC object\n * Overrided to use an extended protocol-specific protobuf decoder\n * @override\n * @param {Uint8Array} bytes\n * @returns {RPC}\n */\n _decodeRpc(bytes) {\n return rpc_1.RPC.decode(bytes);\n }\n /**\n * Encode an RPC object into a Uint8Array\n * Overrided to use an extended protocol-specific protobuf encoder\n * @override\n * @param {RPC} rpc\n * @returns {Uint8Array}\n */\n _encodeRpc(rpc) {\n return rpc_1.RPC.encode(rpc).finish();\n }\n /**\n * Add a peer to the router\n * @override\n * @param {PeerId} peerId\n * @param {string} protocol\n * @returns {PeerStreams}\n */\n _addPeer(peerId, protocol) {\n const p = super._addPeer(peerId, protocol);\n // Add to peer scoring\n this.score.addPeer(peerId.toB58String());\n // track the connection direction\n let outbound = false;\n for (const c of this._libp2p.connectionManager.getAll(peerId)) {\n if (c.stat.direction === 'outbound') {\n if (Array.from(c.registry.values()).some(rvalue => protocol === rvalue.protocol)) {\n outbound = true;\n break;\n }\n }\n }\n this.outbound.set(p.id.toB58String(), outbound);\n return p;\n }\n /**\n * Removes a peer from the router\n * @override\n * @param {PeerId} peer\n * @returns {PeerStreams | undefined}\n */\n _removePeer(peerId) {\n const peerStreams = super._removePeer(peerId);\n const id = peerId.toB58String();\n // Remove this peer from the mesh\n // eslint-disable-next-line no-unused-vars\n for (const peers of this.mesh.values()) {\n peers.delete(id);\n }\n // Remove this peer from the fanout\n // eslint-disable-next-line no-unused-vars\n for (const peers of this.fanout.values()) {\n peers.delete(id);\n }\n // Remove from gossip mapping\n this.gossip.delete(id);\n // Remove from control mapping\n this.control.delete(id);\n // Remove from backoff mapping\n this.outbound.delete(id);\n // Remove from peer scoring\n this.score.removePeer(id);\n return peerStreams;\n }\n /**\n * Handles an rpc request from a peer\n *\n * @override\n * @param {String} idB58Str\n * @param {PeerStreams} peerStreams\n * @param {RPC} rpc\n * @returns {Promise}\n */\n _processRpc(id, peerStreams, rpc) {\n const _super = Object.create(null, {\n _processRpc: { get: () => super._processRpc }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (yield _super._processRpc.call(this, id, peerStreams, rpc)) {\n if (rpc.control) {\n this._processRpcControlMessage(id, rpc.control);\n }\n return true;\n }\n return false;\n });\n }\n /**\n * Handles an rpc control message from a peer\n * @param {string} id peer id\n * @param {RPC.IControlMessage} controlMsg\n * @returns {void}\n */\n _processRpcControlMessage(id, controlMsg) {\n if (!controlMsg) {\n return;\n }\n const iwant = controlMsg.ihave ? this._handleIHave(id, controlMsg.ihave) : [];\n const ihave = controlMsg.iwant ? this._handleIWant(id, controlMsg.iwant) : [];\n const prune = controlMsg.graft ? this._handleGraft(id, controlMsg.graft) : [];\n controlMsg.prune && this._handlePrune(id, controlMsg.prune);\n if (!iwant.length && !ihave.length && !prune.length) {\n return;\n }\n const outRpc = utils_1.createGossipRpc(ihave, { iwant, prune });\n this._sendRpc(id, outRpc);\n }\n /**\n * Process incoming message,\n * emitting locally and forwarding on to relevant floodsub and gossipsub peers\n * @override\n * @param {InMessage} msg\n * @returns {Promise}\n */\n _processRpcMessage(msg) {\n const _super = Object.create(null, {\n _processRpcMessage: { get: () => super._processRpcMessage }\n });\n return __awaiter(this, void 0, void 0, function* () {\n const msgID = yield this.getMsgId(msg);\n const msgIdStr = utils_1.messageIdToString(msgID);\n // Ignore if we've already seen the message\n if (this.seenCache.has(msgIdStr)) {\n this.score.duplicateMessage(msg);\n return;\n }\n this.seenCache.put(msgIdStr);\n yield this.score.validateMessage(msg);\n yield _super._processRpcMessage.call(this, msg);\n });\n }\n /**\n * Whether to accept a message from a peer\n * @override\n * @param {string} id\n * @returns {boolean}\n */\n _acceptFrom(id) {\n return this.direct.has(id) || this.score.score(id) >= this._options.scoreThresholds.graylistThreshold;\n }\n /**\n * Validate incoming message\n * @override\n * @param {InMessage} message\n * @returns {Promise}\n */\n validate(message) {\n const _super = Object.create(null, {\n validate: { get: () => super.validate }\n });\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield _super.validate.call(this, message);\n }\n catch (e) {\n this.score.rejectMessage(message, e.code);\n this.gossipTracer.rejectMessage(message, e.code);\n throw e;\n }\n });\n }\n /**\n * Handles IHAVE messages\n * @param {string} id peer id\n * @param {Array} ihave\n * @returns {RPC.IControlIWant}\n */\n _handleIHave(id, ihave) {\n if (!ihave.length) {\n return [];\n }\n // we ignore IHAVE gossip from any peer whose score is below the gossips threshold\n const score = this.score.score(id);\n if (score < this._options.scoreThresholds.gossipThreshold) {\n this.log('IHAVE: ignoring peer %s with score below threshold [ score = %d ]', id, score);\n return [];\n }\n // IHAVE flood protection\n const peerhave = (this.peerhave.get(id) || 0) + 1;\n this.peerhave.set(id, peerhave);\n if (peerhave > constants.GossipsubMaxIHaveMessages) {\n this.log('IHAVE: peer %s has advertised too many times (%d) within this heartbeat interval; ignoring', id, peerhave);\n return [];\n }\n const iasked = this.iasked.get(id) || 0;\n if (iasked >= constants.GossipsubMaxIHaveLength) {\n this.log('IHAVE: peer %s has already advertised too many messages (%d); ignoring', id, iasked);\n return [];\n }\n // string msgId => msgId\n const iwant = new Map();\n ihave.forEach(({ topicID, messageIDs }) => {\n if (!topicID || !messageIDs || !this.mesh.has(topicID)) {\n return;\n }\n messageIDs.forEach((msgID) => {\n const msgIdStr = utils_1.messageIdToString(msgID);\n if (this.seenCache.has(msgIdStr)) {\n return;\n }\n iwant.set(msgIdStr, msgID);\n });\n });\n if (!iwant.size) {\n return [];\n }\n let iask = iwant.size;\n if (iask + iasked > constants.GossipsubMaxIHaveLength) {\n iask = constants.GossipsubMaxIHaveLength - iasked;\n }\n this.log('IHAVE: Asking for %d out of %d messages from %s', iask, iwant.size, id);\n let iwantList = Array.from(iwant.values());\n // ask in random order\n utils_1.shuffle(iwantList);\n // truncate to the messages we are actually asking for and update the iasked counter\n iwantList = iwantList.slice(0, iask);\n this.iasked.set(id, iasked + iask);\n this.gossipTracer.addPromise(id, iwantList);\n return [{\n messageIDs: iwantList\n }];\n }\n /**\n * Handles IWANT messages\n * Returns messages to send back to peer\n * @param {string} id peer id\n * @param {Array} iwant\n * @returns {Array}\n */\n _handleIWant(id, iwant) {\n if (!iwant.length) {\n return [];\n }\n // we don't respond to IWANT requests from any per whose score is below the gossip threshold\n const score = this.score.score(id);\n if (score < this._options.scoreThresholds.gossipThreshold) {\n this.log('IWANT: ignoring peer %s with score below threshold [score = %d]', id, score);\n return [];\n }\n // @type {Map}\n const ihave = new Map();\n iwant.forEach(({ messageIDs }) => {\n messageIDs && messageIDs.forEach((msgID) => {\n const [msg, count] = this.messageCache.getForPeer(msgID, id);\n if (!msg) {\n return;\n }\n if (count > constants.GossipsubGossipRetransmission) {\n this.log('IWANT: Peer %s has asked for message %s too many times: ignoring request', id, msgID);\n return;\n }\n ihave.set(utils_1.messageIdToString(msgID), msg);\n });\n });\n if (!ihave.size) {\n return [];\n }\n this.log('IWANT: Sending %d messages to %s', ihave.size, id);\n return Array.from(ihave.values()).map(pubsub_1.utils.normalizeOutRpcMessage);\n }\n /**\n * Handles Graft messages\n * @param {string} id peer id\n * @param {Array} graft\n * @return {Array}\n */\n _handleGraft(id, graft) {\n const prune = [];\n const score = this.score.score(id);\n const now = this._now();\n let doPX = this._options.doPX;\n graft.forEach(({ topicID }) => {\n var _a;\n if (!topicID) {\n return;\n }\n const peersInMesh = this.mesh.get(topicID);\n if (!peersInMesh) {\n // don't do PX when there is an unknown topic to avoid leaking our peers\n doPX = false;\n // spam hardening: ignore GRAFTs for unknown topics\n return;\n }\n // check if peer is already in the mesh; if so do nothing\n if (peersInMesh.has(id)) {\n return;\n }\n // we don't GRAFT to/from direct peers; complain loudly if this happens\n if (this.direct.has(id)) {\n this.log('GRAFT: ignoring request from direct peer %s', id);\n // this is possibly a bug from a non-reciprical configuration; send a PRUNE\n prune.push(topicID);\n // but don't px\n doPX = false;\n return;\n }\n // make sure we are not backing off that peer\n const expire = (_a = this.backoff.get(topicID)) === null || _a === void 0 ? void 0 : _a.get(id);\n if (typeof expire === 'number' && now < expire) {\n this.log('GRAFT: ignoring backed off peer %s', id);\n // add behavioral penalty\n this.score.addPenalty(id, 1);\n // no PX\n doPX = false;\n // check the flood cutoff -- is the GRAFT coming too fast?\n const floodCutoff = expire + constants.GossipsubGraftFloodThreshold - constants.GossipsubPruneBackoff;\n if (now < floodCutoff) {\n // extra penalty\n this.score.addPenalty(id, 1);\n }\n // refresh the backoff\n this._addBackoff(id, topicID);\n prune.push(topicID);\n return;\n }\n // check the score\n if (score < 0) {\n // we don't GRAFT peers with negative score\n this.log('GRAFT: ignoring peer %s with negative score: score=%d, topic=%s', id, score, topicID);\n // we do send them PRUNE however, because it's a matter of protocol correctness\n prune.push(topicID);\n // but we won't PX to them\n doPX = false;\n // add/refresh backoff so that we don't reGRAFT too early even if the score decays\n this._addBackoff(id, topicID);\n return;\n }\n // check the number of mesh peers; if it is at (or over) Dhi, we only accept grafts\n // from peers with outbound connections; this is a defensive check to restrict potential\n // mesh takeover attacks combined with love bombing\n if (peersInMesh.size >= this._options.Dhi && !this.outbound.get(id)) {\n prune.push(topicID);\n this._addBackoff(id, topicID);\n return;\n }\n this.log('GRAFT: Add mesh link from %s in %s', id, topicID);\n this.score.graft(id, topicID);\n peersInMesh.add(id);\n });\n if (!prune.length) {\n return [];\n }\n return prune.map(topic => this._makePrune(id, topic, doPX));\n }\n /**\n * Handles Prune messages\n * @param {string} id peer id\n * @param {Array} prune\n * @returns {void}\n */\n _handlePrune(id, prune) {\n const score = this.score.score(id);\n prune.forEach(({ topicID, backoff, peers }) => {\n if (!topicID) {\n return;\n }\n const peersInMesh = this.mesh.get(topicID);\n if (!peersInMesh) {\n return;\n }\n this.log('PRUNE: Remove mesh link to %s in %s', id, topicID);\n this.score.prune(id, topicID);\n peersInMesh.delete(id);\n // is there a backoff specified by the peer? if so obey it\n if (typeof backoff === 'number' && backoff > 0) {\n this._doAddBackoff(id, topicID, backoff * 1000);\n }\n else {\n this._addBackoff(id, topicID);\n }\n // PX\n if (peers && peers.length) {\n // we ignore PX from peers with insufficient scores\n if (score < this._options.scoreThresholds.acceptPXThreshold) {\n this.log('PRUNE: ignoring PX from peer %s with insufficient score [score = %d, topic = %s]', id, score, topicID);\n return;\n }\n this._pxConnect(peers);\n }\n });\n }\n /**\n * Add standard backoff log for a peer in a topic\n * @param {string} id\n * @param {string} topic\n * @returns {void}\n */\n _addBackoff(id, topic) {\n this._doAddBackoff(id, topic, constants.GossipsubPruneBackoff);\n }\n /**\n * Add backoff expiry interval for a peer in a topic\n * @param {string} id\n * @param {string} topic\n * @param {number} interval backoff duration in milliseconds\n * @returns {void}\n */\n _doAddBackoff(id, topic, interval) {\n let backoff = this.backoff.get(topic);\n if (!backoff) {\n backoff = new Map();\n this.backoff.set(topic, backoff);\n }\n const expire = this._now() + interval;\n const existingExpire = backoff.get(id) || 0;\n if (existingExpire < expire) {\n backoff.set(id, expire);\n }\n }\n /**\n * Apply penalties from broken IHAVE/IWANT promises\n * @returns {void}\n */\n _applyIwantPenalties() {\n this.gossipTracer.getBrokenPromises().forEach((count, p) => {\n this.log('peer %s didn\\'t follow up in %d IWANT requests; adding penalty', p, count);\n this.score.addPenalty(p, count);\n });\n }\n /**\n * Clear expired backoff expiries\n * @returns {void}\n */\n _clearBackoff() {\n // we only clear once every GossipsubPruneBackoffTicks ticks to avoid iterating over the maps too much\n if (this.heartbeatTicks % constants.GossipsubPruneBackoffTicks !== 0) {\n return;\n }\n const now = this._now();\n this.backoff.forEach((backoff, topic) => {\n backoff.forEach((expire, id) => {\n if (expire < now) {\n backoff.delete(id);\n }\n });\n if (backoff.size === 0) {\n this.backoff.delete(topic);\n }\n });\n }\n /**\n * Maybe reconnect to direct peers\n * @returns {void}\n */\n _directConnect() {\n // we only do this every few ticks to allow pending connections to complete and account for\n // restarts/downtime\n if (this.heartbeatTicks % constants.GossipsubDirectConnectTicks !== 0) {\n return;\n }\n const toconnect = [];\n this.direct.forEach(id => {\n const peer = this.peers.get(id);\n if (!peer || !peer.isWritable) {\n toconnect.push(id);\n }\n });\n if (toconnect.length) {\n toconnect.forEach(id => {\n this._connect(id);\n });\n }\n }\n /**\n * Maybe attempt connection given signed peer records\n * @param {RPC.IPeerInfo[]} peers\n * @returns {Promise}\n */\n _pxConnect(peers) {\n return __awaiter(this, void 0, void 0, function* () {\n if (peers.length > constants.GossipsubPrunePeers) {\n utils_1.shuffle(peers);\n peers = peers.slice(0, constants.GossipsubPrunePeers);\n }\n const toconnect = [];\n yield Promise.all(peers.map((pi) => __awaiter(this, void 0, void 0, function* () {\n if (!pi.peerID) {\n return;\n }\n const p = PeerId.createFromBytes(pi.peerID);\n const id = p.toB58String();\n if (this.peers.has(id)) {\n return;\n }\n if (!pi.signedPeerRecord) {\n toconnect.push(id);\n return;\n }\n // The peer sent us a signed record\n // This is not a record from the peer who sent the record, but another peer who is connected with it\n // Ensure that it is valid\n try {\n const envelope = yield Envelope.openAndCertify(pi.signedPeerRecord, 'libp2p-peer-record');\n const eid = envelope.peerId.toB58String();\n if (id !== eid) {\n this.log('bogus peer record obtained through px: peer ID %s doesn\\'t match expected peer %s', eid, id);\n return;\n }\n if (!this._libp2p.peerStore.addressBook.consumePeerRecord(envelope)) {\n this.log('bogus peer record obtained through px: could not add peer record to address book');\n return;\n }\n toconnect.push(id);\n }\n catch (e) {\n this.log('bogus peer record obtained through px: invalid signature or not a peer record');\n }\n })));\n if (!toconnect.length) {\n return;\n }\n toconnect.forEach(id => this._connect(id));\n });\n }\n /**\n * Mounts the gossipsub protocol onto the libp2p node and sends our\n * our subscriptions to every peer connected\n * @override\n * @returns {void}\n */\n start() {\n super.start();\n this.heartbeat.start();\n this.score.start();\n // connect to direct peers\n this._directPeerInitial = setTimeout(() => {\n this.direct.forEach(id => {\n this._connect(id);\n });\n }, constants.GossipsubDirectConnectInitialDelay);\n }\n /**\n * Unmounts the gossipsub protocol and shuts down every connection\n * @override\n * @returns {void}\n */\n stop() {\n super.stop();\n this.heartbeat.stop();\n this.score.stop();\n this.mesh = new Map();\n this.fanout = new Map();\n this.lastpub = new Map();\n this.gossip = new Map();\n this.control = new Map();\n this.peerhave = new Map();\n this.iasked = new Map();\n this.backoff = new Map();\n this.outbound = new Map();\n this.gossipTracer.clear();\n clearTimeout(this._directPeerInitial);\n }\n /**\n * Connect to a peer using the gossipsub protocol\n * @param {string} id\n * @returns {void}\n */\n _connect(id) {\n this.log('Initiating connection with %s', id);\n this._libp2p.dialProtocol(PeerId.createFromB58String(id), this.multicodecs);\n }\n /**\n * Subscribes to a topic\n * @override\n * @param {string} topic\n * @returns {void}\n */\n subscribe(topic) {\n super.subscribe(topic);\n this.join(topic);\n }\n /**\n * Unsubscribe to a topic\n * @override\n * @param {string} topic\n * @returns {void}\n */\n unsubscribe(topic) {\n super.unsubscribe(topic);\n this.leave(topic);\n }\n /**\n * Join topic\n * @param {string} topic\n * @returns {void}\n */\n join(topic) {\n if (!this.started) {\n throw new Error('Gossipsub has not started');\n }\n this.log('JOIN %s', topic);\n const fanoutPeers = this.fanout.get(topic);\n if (fanoutPeers) {\n // these peers have a score above the publish threshold, which may be negative\n // so drop the ones with a negative score\n fanoutPeers.forEach(id => {\n if (this.score.score(id) < 0) {\n fanoutPeers.delete(id);\n }\n });\n if (fanoutPeers.size < this._options.D) {\n // we need more peers; eager, as this would get fixed in the next heartbeat\n get_gossip_peers_1.getGossipPeers(this, topic, this._options.D - fanoutPeers.size, (id) => {\n // filter our current peers, direct peers, and peers with negative scores\n return !fanoutPeers.has(id) && !this.direct.has(id) && this.score.score(id) >= 0;\n }).forEach(id => fanoutPeers.add(id));\n }\n this.mesh.set(topic, fanoutPeers);\n this.fanout.delete(topic);\n this.lastpub.delete(topic);\n }\n else {\n const peers = get_gossip_peers_1.getGossipPeers(this, topic, this._options.D, (id) => {\n // filter direct peers and peers with negative score\n return !this.direct.has(id) && this.score.score(id) >= 0;\n });\n this.mesh.set(topic, peers);\n }\n this.mesh.get(topic).forEach((id) => {\n this.log('JOIN: Add mesh link to %s in %s', id, topic);\n this._sendGraft(id, topic);\n });\n }\n /**\n * Leave topic\n * @param {string} topic\n * @returns {void}\n */\n leave(topic) {\n if (!this.started) {\n throw new Error('Gossipsub has not started');\n }\n this.log('LEAVE %s', topic);\n // Send PRUNE to mesh peers\n const meshPeers = this.mesh.get(topic);\n if (meshPeers) {\n meshPeers.forEach((id) => {\n this.log('LEAVE: Remove mesh link to %s in %s', id, topic);\n this._sendPrune(id, topic);\n });\n this.mesh.delete(topic);\n }\n }\n /**\n * Publish messages\n *\n * @override\n * @param {InMessage} msg\n * @returns {void}\n */\n _publish(msg) {\n return __awaiter(this, void 0, void 0, function* () {\n if (msg.receivedFrom !== this.peerId.toB58String()) {\n this.score.deliverMessage(msg);\n this.gossipTracer.deliverMessage(msg);\n }\n const msgID = yield this.getMsgId(msg);\n const msgIdStr = utils_1.messageIdToString(msgID);\n // put in seen cache\n this.seenCache.put(msgIdStr);\n this.messageCache.put(msg);\n const tosend = new Set();\n msg.topicIDs.forEach((topic) => {\n const peersInTopic = this.topics.get(topic);\n if (!peersInTopic) {\n return;\n }\n if (this._options.floodPublish && msg.from === this.peerId.toB58String()) {\n // flood-publish behavior\n // send to direct peers and _all_ peers meeting the publishThreshold\n peersInTopic.forEach(id => {\n if (this.direct.has(id) || this.score.score(id) >= this._options.scoreThresholds.publishThreshold) {\n tosend.add(id);\n }\n });\n }\n else {\n // non-flood-publish behavior\n // send to direct peers, subscribed floodsub peers\n // and some mesh peers above publishThreshold\n // direct peers\n this.direct.forEach(id => {\n tosend.add(id);\n });\n // floodsub peers\n peersInTopic.forEach((id) => {\n const score = this.score.score(id);\n const peerStreams = this.peers.get(id);\n if (!peerStreams) {\n return;\n }\n if (peerStreams.protocol === constants.FloodsubID && score >= this._options.scoreThresholds.publishThreshold) {\n tosend.add(id);\n }\n });\n // Gossipsub peers handling\n let meshPeers = this.mesh.get(topic);\n if (!meshPeers || !meshPeers.size) {\n // We are not in the mesh for topic, use fanout peers\n meshPeers = this.fanout.get(topic);\n if (!meshPeers) {\n // If we are not in the fanout, then pick peers in topic above the publishThreshold\n const peers = get_gossip_peers_1.getGossipPeers(this, topic, this._options.D, id => {\n return this.score.score(id) >= this._options.scoreThresholds.publishThreshold;\n });\n if (peers.size > 0) {\n meshPeers = peers;\n this.fanout.set(topic, peers);\n }\n else {\n meshPeers = new Set();\n }\n }\n // Store the latest publishing time\n this.lastpub.set(topic, this._now());\n }\n meshPeers.forEach((peer) => {\n tosend.add(peer);\n });\n }\n });\n // Publish messages to peers\n const rpc = utils_1.createGossipRpc([\n pubsub_1.utils.normalizeOutRpcMessage(msg)\n ]);\n tosend.forEach((id) => {\n if (id === msg.from) {\n return;\n }\n this._sendRpc(id, rpc);\n });\n });\n }\n /**\n * Sends a GRAFT message to a peer\n * @param {string} id peer id\n * @param {string} topic\n * @returns {void}\n */\n _sendGraft(id, topic) {\n const graft = [{\n topicID: topic\n }];\n const out = utils_1.createGossipRpc([], { graft });\n this._sendRpc(id, out);\n }\n /**\n * Sends a PRUNE message to a peer\n * @param {string} id peer id\n * @param {string} topic\n * @returns {void}\n */\n _sendPrune(id, topic) {\n const prune = [\n this._makePrune(id, topic, this._options.doPX)\n ];\n const out = utils_1.createGossipRpc([], { prune });\n this._sendRpc(id, out);\n }\n /**\n * @override\n */\n _sendRpc(id, outRpc) {\n const peerStreams = this.peers.get(id);\n if (!peerStreams || !peerStreams.isWritable) {\n return;\n }\n // piggyback control message retries\n const ctrl = this.control.get(id);\n if (ctrl) {\n this._piggybackControl(id, outRpc, ctrl);\n this.control.delete(id);\n }\n // piggyback gossip\n const ihave = this.gossip.get(id);\n if (ihave) {\n this._piggybackGossip(id, outRpc, ihave);\n this.gossip.delete(id);\n }\n peerStreams.write(rpc_1.RPC.encode(outRpc).finish());\n }\n _piggybackControl(id, outRpc, ctrl) {\n const tograft = (ctrl.graft || [])\n .filter(({ topicID }) => (topicID && this.mesh.get(topicID) || new Set()).has(id));\n const toprune = (ctrl.prune || [])\n .filter(({ topicID }) => !(topicID && this.mesh.get(topicID) || new Set()).has(id));\n if (!tograft.length && !toprune.length) {\n return;\n }\n if (outRpc.control) {\n outRpc.control.graft = outRpc.control.graft && outRpc.control.graft.concat(tograft);\n outRpc.control.prune = outRpc.control.prune && outRpc.control.prune.concat(toprune);\n }\n else {\n outRpc.control = { ihave: [], iwant: [], graft: tograft, prune: toprune };\n }\n }\n _piggybackGossip(id, outRpc, ihave) {\n if (!outRpc.control) {\n outRpc.control = { ihave: [], iwant: [], graft: [], prune: [] };\n }\n outRpc.control.ihave = ihave;\n }\n /**\n * Send graft and prune messages\n * @param {Map>} tograft peer id => topic[]\n * @param {Map>} toprune peer id => topic[]\n */\n _sendGraftPrune(tograft, toprune, noPX) {\n const doPX = this._options.doPX;\n for (const [id, topics] of tograft) {\n const graft = topics.map((topicID) => ({ topicID }));\n let prune = [];\n // If a peer also has prunes, process them now\n const pruning = toprune.get(id);\n if (pruning) {\n prune = pruning.map((topicID) => this._makePrune(id, topicID, doPX && !noPX.get(id)));\n toprune.delete(id);\n }\n const outRpc = utils_1.createGossipRpc([], { graft, prune });\n this._sendRpc(id, outRpc);\n }\n for (const [id, topics] of toprune) {\n const prune = topics.map((topicID) => this._makePrune(id, topicID, doPX && !noPX.get(id)));\n const outRpc = utils_1.createGossipRpc([], { prune });\n this._sendRpc(id, outRpc);\n }\n }\n /**\n * Emits gossip to peers in a particular topic\n * @param {string} topic\n * @param {Set} exclude peers to exclude\n * @returns {void}\n */\n _emitGossip(topic, exclude) {\n const messageIDs = this.messageCache.getGossipIDs(topic);\n if (!messageIDs.length) {\n return;\n }\n // shuffle to emit in random order\n utils_1.shuffle(messageIDs);\n // if we are emitting more than GossipsubMaxIHaveLength ids, truncate the list\n if (messageIDs.length > constants.GossipsubMaxIHaveLength) {\n // we do the truncation (with shuffling) per peer below\n this.log('too many messages for gossip; will truncate IHAVE list (%d messages)', messageIDs.length);\n }\n // Send gossip to GossipFactor peers above threshold with a minimum of D_lazy\n // First we collect the peers above gossipThreshold that are not in the exclude set\n // and then randomly select from that set\n // We also exclude direct peers, as there is no reason to emit gossip to them\n const peersToGossip = [];\n const topicPeers = this.topics.get(topic);\n if (!topicPeers) {\n // no topic peers, no gossip\n return;\n }\n topicPeers.forEach(id => {\n const peerStreams = this.peers.get(id);\n if (!peerStreams) {\n return;\n }\n if (!exclude.has(id) &&\n !this.direct.has(id) &&\n utils_1.hasGossipProtocol(peerStreams.protocol) &&\n this.score.score(id) >= this._options.scoreThresholds.gossipThreshold) {\n peersToGossip.push(id);\n }\n });\n let target = this._options.Dlazy;\n const factor = constants.GossipsubGossipFactor * peersToGossip.length;\n if (factor > target) {\n target = factor;\n }\n if (target > peersToGossip.length) {\n target = peersToGossip.length;\n }\n else {\n utils_1.shuffle(peersToGossip);\n }\n // Emit the IHAVE gossip to the selected peers up to the target\n peersToGossip.slice(0, target).forEach(id => {\n let peerMessageIDs = messageIDs;\n if (messageIDs.length > constants.GossipsubMaxIHaveLength) {\n // shuffle and slice message IDs per peer so that we emit a different set for each peer\n // we have enough reduncancy in the system that this will significantly increase the message\n // coverage when we do truncate\n peerMessageIDs = utils_1.shuffle(peerMessageIDs.slice()).slice(0, constants.GossipsubMaxIHaveLength);\n }\n this._pushGossip(id, {\n topicID: topic,\n messageIDs: peerMessageIDs\n });\n });\n }\n /**\n * Flush gossip and control messages\n */\n _flush() {\n // send gossip first, which will also piggyback control\n for (const [peer, ihave] of this.gossip.entries()) {\n this.gossip.delete(peer);\n const out = utils_1.createGossipRpc([], { ihave });\n this._sendRpc(peer, out);\n }\n // send the remaining control messages\n for (const [peer, control] of this.control.entries()) {\n this.control.delete(peer);\n const out = utils_1.createGossipRpc([], { graft: control.graft, prune: control.prune });\n this._sendRpc(peer, out);\n }\n }\n /**\n * Adds new IHAVE messages to pending gossip\n * @param {PeerStreams} peerStreams\n * @param {Array} controlIHaveMsgs\n * @returns {void}\n */\n _pushGossip(id, controlIHaveMsgs) {\n this.log('Add gossip to %s', id);\n const gossip = this.gossip.get(id) || [];\n this.gossip.set(id, gossip.concat(controlIHaveMsgs));\n }\n /**\n * Returns the current time in milliseconds\n * @returns {number}\n */\n _now() {\n return Date.now();\n }\n /**\n * Make a PRUNE control message for a peer in a topic\n * @param {string} id\n * @param {string} topic\n * @param {boolean} doPX\n * @returns {RPC.IControlPrune}\n */\n _makePrune(id, topic, doPX) {\n if (this.peers.get(id).protocol === constants.GossipsubIDv10) {\n // Gossipsub v1.0 -- no backoff, the peer won't be able to parse it anyway\n return {\n topicID: topic,\n peers: []\n };\n }\n // backoff is measured in seconds\n // GossipsubPruneBackoff is measured in milliseconds\n const backoff = constants.GossipsubPruneBackoff / 1000;\n const px = [];\n if (doPX) {\n // select peers for Peer eXchange\n const peers = get_gossip_peers_1.getGossipPeers(this, topic, constants.GossipsubPrunePeers, (xid) => {\n return xid !== id && this.score.score(xid) >= 0;\n });\n peers.forEach(p => {\n // see if we have a signed record to send back; if we don't, just send\n // the peer ID and let the pruned peer find them in the DHT -- we can't trust\n // unsigned address records through PX anyways\n // Finding signed records in the DHT is not supported at the time of writing in js-libp2p\n const peerId = PeerId.createFromB58String(p);\n px.push({\n peerID: peerId.toBytes(),\n signedPeerRecord: this._libp2p.peerStore.addressBook.getRawEnvelope(peerId)\n });\n });\n }\n return {\n topicID: topic,\n peers: px,\n backoff: backoff\n };\n }\n}\nGossipsub.multicodec = constants.GossipsubIDv11;\nmodule.exports = Gossipsub;\n","'use strict'\n\nconst noop = () => {}\nconst topologySymbol = Symbol.for('@libp2p/js-interfaces/topology')\n\n/**\n * @typedef {import('peer-id')} PeerId\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [min=0] - minimum needed connections.\n * @property {number} [max=Infinity] - maximum needed connections.\n * @property {Handlers} [handlers]\n *\n * @typedef {Object} Handlers\n * @property {(peerId: PeerId, conn: Connection) => void} [onConnect] - protocol \"onConnect\" handler\n * @property {(peerId: PeerId, error?:Error) => void} [onDisconnect] - protocol \"onDisconnect\" handler\n *\n * @typedef {import('../connection/connection')} Connection\n */\n\nclass Topology {\n /**\n * @param {Options} options\n */\n constructor ({\n min = 0,\n max = Infinity,\n handlers = {}\n }) {\n this.min = min\n this.max = max\n\n // Handlers\n this._onConnect = handlers.onConnect || noop\n this._onDisconnect = handlers.onDisconnect || noop\n\n /**\n * Set of peers that support the protocol.\n *\n * @type {Set}\n */\n this.peers = new Set()\n }\n\n get [Symbol.toStringTag] () {\n return 'Topology'\n }\n\n get [topologySymbol] () {\n return true\n }\n\n /**\n * Checks if the given value is a Topology instance.\n *\n * @param {any} other\n * @returns {other is Topology}\n */\n static isTopology (other) {\n return Boolean(other && other[topologySymbol])\n }\n\n /**\n * @param {any} registrar\n */\n set registrar (registrar) { // eslint-disable-line\n this._registrar = registrar\n }\n\n /**\n * Notify about peer disconnected event.\n *\n * @param {PeerId} peerId\n * @returns {void}\n */\n disconnect (peerId) {\n this._onDisconnect(peerId)\n }\n}\n\nmodule.exports = Topology\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-pubsub-rpc\"] || ($protobuf.roots[\"libp2p-pubsub-rpc\"] = {});\n\n$root.RPC = (function() {\n\n /**\n * Properties of a RPC.\n * @exports IRPC\n * @interface IRPC\n * @property {Array.|null} [subscriptions] RPC subscriptions\n * @property {Array.|null} [msgs] RPC msgs\n */\n\n /**\n * Constructs a new RPC.\n * @exports RPC\n * @classdesc Represents a RPC.\n * @implements IRPC\n * @constructor\n * @param {IRPC=} [p] Properties to set\n */\n function RPC(p) {\n this.subscriptions = [];\n this.msgs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * RPC subscriptions.\n * @member {Array.} subscriptions\n * @memberof RPC\n * @instance\n */\n RPC.prototype.subscriptions = $util.emptyArray;\n\n /**\n * RPC msgs.\n * @member {Array.} msgs\n * @memberof RPC\n * @instance\n */\n RPC.prototype.msgs = $util.emptyArray;\n\n /**\n * Encodes the specified RPC message. Does not implicitly {@link RPC.verify|verify} messages.\n * @function encode\n * @memberof RPC\n * @static\n * @param {IRPC} m RPC message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n RPC.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.subscriptions != null && m.subscriptions.length) {\n for (var i = 0; i < m.subscriptions.length; ++i)\n $root.RPC.SubOpts.encode(m.subscriptions[i], w.uint32(10).fork()).ldelim();\n }\n if (m.msgs != null && m.msgs.length) {\n for (var i = 0; i < m.msgs.length; ++i)\n $root.RPC.Message.encode(m.msgs[i], w.uint32(18).fork()).ldelim();\n }\n return w;\n };\n\n /**\n * Decodes a RPC message from the specified reader or buffer.\n * @function decode\n * @memberof RPC\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC} RPC\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n RPC.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n if (!(m.subscriptions && m.subscriptions.length))\n m.subscriptions = [];\n m.subscriptions.push($root.RPC.SubOpts.decode(r, r.uint32()));\n break;\n case 2:\n if (!(m.msgs && m.msgs.length))\n m.msgs = [];\n m.msgs.push($root.RPC.Message.decode(r, r.uint32()));\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a RPC message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC\n * @static\n * @param {Object.} d Plain object\n * @returns {RPC} RPC\n */\n RPC.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC)\n return d;\n var m = new $root.RPC();\n if (d.subscriptions) {\n if (!Array.isArray(d.subscriptions))\n throw TypeError(\".RPC.subscriptions: array expected\");\n m.subscriptions = [];\n for (var i = 0; i < d.subscriptions.length; ++i) {\n if (typeof d.subscriptions[i] !== \"object\")\n throw TypeError(\".RPC.subscriptions: object expected\");\n m.subscriptions[i] = $root.RPC.SubOpts.fromObject(d.subscriptions[i]);\n }\n }\n if (d.msgs) {\n if (!Array.isArray(d.msgs))\n throw TypeError(\".RPC.msgs: array expected\");\n m.msgs = [];\n for (var i = 0; i < d.msgs.length; ++i) {\n if (typeof d.msgs[i] !== \"object\")\n throw TypeError(\".RPC.msgs: object expected\");\n m.msgs[i] = $root.RPC.Message.fromObject(d.msgs[i]);\n }\n }\n return m;\n };\n\n /**\n * Creates a plain object from a RPC message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC\n * @static\n * @param {RPC} m RPC\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n RPC.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.subscriptions = [];\n d.msgs = [];\n }\n if (m.subscriptions && m.subscriptions.length) {\n d.subscriptions = [];\n for (var j = 0; j < m.subscriptions.length; ++j) {\n d.subscriptions[j] = $root.RPC.SubOpts.toObject(m.subscriptions[j], o);\n }\n }\n if (m.msgs && m.msgs.length) {\n d.msgs = [];\n for (var j = 0; j < m.msgs.length; ++j) {\n d.msgs[j] = $root.RPC.Message.toObject(m.msgs[j], o);\n }\n }\n return d;\n };\n\n /**\n * Converts this RPC to JSON.\n * @function toJSON\n * @memberof RPC\n * @instance\n * @returns {Object.} JSON object\n */\n RPC.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n RPC.SubOpts = (function() {\n\n /**\n * Properties of a SubOpts.\n * @memberof RPC\n * @interface ISubOpts\n * @property {boolean|null} [subscribe] SubOpts subscribe\n * @property {string|null} [topicID] SubOpts topicID\n */\n\n /**\n * Constructs a new SubOpts.\n * @memberof RPC\n * @classdesc Represents a SubOpts.\n * @implements ISubOpts\n * @constructor\n * @param {RPC.ISubOpts=} [p] Properties to set\n */\n function SubOpts(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * SubOpts subscribe.\n * @member {boolean|null|undefined} subscribe\n * @memberof RPC.SubOpts\n * @instance\n */\n SubOpts.prototype.subscribe = null;\n\n /**\n * SubOpts topicID.\n * @member {string|null|undefined} topicID\n * @memberof RPC.SubOpts\n * @instance\n */\n SubOpts.prototype.topicID = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * SubOpts _subscribe.\n * @member {\"subscribe\"|undefined} _subscribe\n * @memberof RPC.SubOpts\n * @instance\n */\n Object.defineProperty(SubOpts.prototype, \"_subscribe\", {\n get: $util.oneOfGetter($oneOfFields = [\"subscribe\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * SubOpts _topicID.\n * @member {\"topicID\"|undefined} _topicID\n * @memberof RPC.SubOpts\n * @instance\n */\n Object.defineProperty(SubOpts.prototype, \"_topicID\", {\n get: $util.oneOfGetter($oneOfFields = [\"topicID\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified SubOpts message. Does not implicitly {@link RPC.SubOpts.verify|verify} messages.\n * @function encode\n * @memberof RPC.SubOpts\n * @static\n * @param {RPC.ISubOpts} m SubOpts message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SubOpts.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.subscribe != null && Object.hasOwnProperty.call(m, \"subscribe\"))\n w.uint32(8).bool(m.subscribe);\n if (m.topicID != null && Object.hasOwnProperty.call(m, \"topicID\"))\n w.uint32(18).string(m.topicID);\n return w;\n };\n\n /**\n * Decodes a SubOpts message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.SubOpts\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.SubOpts} SubOpts\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SubOpts.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.SubOpts();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.subscribe = r.bool();\n break;\n case 2:\n m.topicID = r.string();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a SubOpts message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.SubOpts\n * @static\n * @param {Object.} d Plain object\n * @returns {RPC.SubOpts} SubOpts\n */\n SubOpts.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.SubOpts)\n return d;\n var m = new $root.RPC.SubOpts();\n if (d.subscribe != null) {\n m.subscribe = Boolean(d.subscribe);\n }\n if (d.topicID != null) {\n m.topicID = String(d.topicID);\n }\n return m;\n };\n\n /**\n * Creates a plain object from a SubOpts message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.SubOpts\n * @static\n * @param {RPC.SubOpts} m SubOpts\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n SubOpts.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (m.subscribe != null && m.hasOwnProperty(\"subscribe\")) {\n d.subscribe = m.subscribe;\n if (o.oneofs)\n d._subscribe = \"subscribe\";\n }\n if (m.topicID != null && m.hasOwnProperty(\"topicID\")) {\n d.topicID = m.topicID;\n if (o.oneofs)\n d._topicID = \"topicID\";\n }\n return d;\n };\n\n /**\n * Converts this SubOpts to JSON.\n * @function toJSON\n * @memberof RPC.SubOpts\n * @instance\n * @returns {Object.} JSON object\n */\n SubOpts.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return SubOpts;\n })();\n\n RPC.Message = (function() {\n\n /**\n * Properties of a Message.\n * @memberof RPC\n * @interface IMessage\n * @property {Uint8Array|null} [from] Message from\n * @property {Uint8Array|null} [data] Message data\n * @property {Uint8Array|null} [seqno] Message seqno\n * @property {Array.|null} [topicIDs] Message topicIDs\n * @property {Uint8Array|null} [signature] Message signature\n * @property {Uint8Array|null} [key] Message key\n */\n\n /**\n * Constructs a new Message.\n * @memberof RPC\n * @classdesc Represents a Message.\n * @implements IMessage\n * @constructor\n * @param {RPC.IMessage=} [p] Properties to set\n */\n function Message(p) {\n this.topicIDs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Message from.\n * @member {Uint8Array|null|undefined} from\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.from = null;\n\n /**\n * Message data.\n * @member {Uint8Array|null|undefined} data\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.data = null;\n\n /**\n * Message seqno.\n * @member {Uint8Array|null|undefined} seqno\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.seqno = null;\n\n /**\n * Message topicIDs.\n * @member {Array.} topicIDs\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.topicIDs = $util.emptyArray;\n\n /**\n * Message signature.\n * @member {Uint8Array|null|undefined} signature\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.signature = null;\n\n /**\n * Message key.\n * @member {Uint8Array|null|undefined} key\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.key = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * Message _from.\n * @member {\"from\"|undefined} _from\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_from\", {\n get: $util.oneOfGetter($oneOfFields = [\"from\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _data.\n * @member {\"data\"|undefined} _data\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_data\", {\n get: $util.oneOfGetter($oneOfFields = [\"data\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _seqno.\n * @member {\"seqno\"|undefined} _seqno\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_seqno\", {\n get: $util.oneOfGetter($oneOfFields = [\"seqno\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _signature.\n * @member {\"signature\"|undefined} _signature\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_signature\", {\n get: $util.oneOfGetter($oneOfFields = [\"signature\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _key.\n * @member {\"key\"|undefined} _key\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_key\", {\n get: $util.oneOfGetter($oneOfFields = [\"key\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified Message message. Does not implicitly {@link RPC.Message.verify|verify} messages.\n * @function encode\n * @memberof RPC.Message\n * @static\n * @param {RPC.IMessage} m Message message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Message.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.from != null && Object.hasOwnProperty.call(m, \"from\"))\n w.uint32(10).bytes(m.from);\n if (m.data != null && Object.hasOwnProperty.call(m, \"data\"))\n w.uint32(18).bytes(m.data);\n if (m.seqno != null && Object.hasOwnProperty.call(m, \"seqno\"))\n w.uint32(26).bytes(m.seqno);\n if (m.topicIDs != null && m.topicIDs.length) {\n for (var i = 0; i < m.topicIDs.length; ++i)\n w.uint32(34).string(m.topicIDs[i]);\n }\n if (m.signature != null && Object.hasOwnProperty.call(m, \"signature\"))\n w.uint32(42).bytes(m.signature);\n if (m.key != null && Object.hasOwnProperty.call(m, \"key\"))\n w.uint32(50).bytes(m.key);\n return w;\n };\n\n /**\n * Decodes a Message message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.Message} Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Message.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.Message();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.from = r.bytes();\n break;\n case 2:\n m.data = r.bytes();\n break;\n case 3:\n m.seqno = r.bytes();\n break;\n case 4:\n if (!(m.topicIDs && m.topicIDs.length))\n m.topicIDs = [];\n m.topicIDs.push(r.string());\n break;\n case 5:\n m.signature = r.bytes();\n break;\n case 6:\n m.key = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a Message message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.Message\n * @static\n * @param {Object.} d Plain object\n * @returns {RPC.Message} Message\n */\n Message.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.Message)\n return d;\n var m = new $root.RPC.Message();\n if (d.from != null) {\n if (typeof d.from === \"string\")\n $util.base64.decode(d.from, m.from = $util.newBuffer($util.base64.length(d.from)), 0);\n else if (d.from.length)\n m.from = d.from;\n }\n if (d.data != null) {\n if (typeof d.data === \"string\")\n $util.base64.decode(d.data, m.data = $util.newBuffer($util.base64.length(d.data)), 0);\n else if (d.data.length)\n m.data = d.data;\n }\n if (d.seqno != null) {\n if (typeof d.seqno === \"string\")\n $util.base64.decode(d.seqno, m.seqno = $util.newBuffer($util.base64.length(d.seqno)), 0);\n else if (d.seqno.length)\n m.seqno = d.seqno;\n }\n if (d.topicIDs) {\n if (!Array.isArray(d.topicIDs))\n throw TypeError(\".RPC.Message.topicIDs: array expected\");\n m.topicIDs = [];\n for (var i = 0; i < d.topicIDs.length; ++i) {\n m.topicIDs[i] = String(d.topicIDs[i]);\n }\n }\n if (d.signature != null) {\n if (typeof d.signature === \"string\")\n $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0);\n else if (d.signature.length)\n m.signature = d.signature;\n }\n if (d.key != null) {\n if (typeof d.key === \"string\")\n $util.base64.decode(d.key, m.key = $util.newBuffer($util.base64.length(d.key)), 0);\n else if (d.key.length)\n m.key = d.key;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Message message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.Message\n * @static\n * @param {RPC.Message} m Message\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n Message.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.topicIDs = [];\n }\n if (m.from != null && m.hasOwnProperty(\"from\")) {\n d.from = o.bytes === String ? $util.base64.encode(m.from, 0, m.from.length) : o.bytes === Array ? Array.prototype.slice.call(m.from) : m.from;\n if (o.oneofs)\n d._from = \"from\";\n }\n if (m.data != null && m.hasOwnProperty(\"data\")) {\n d.data = o.bytes === String ? $util.base64.encode(m.data, 0, m.data.length) : o.bytes === Array ? Array.prototype.slice.call(m.data) : m.data;\n if (o.oneofs)\n d._data = \"data\";\n }\n if (m.seqno != null && m.hasOwnProperty(\"seqno\")) {\n d.seqno = o.bytes === String ? $util.base64.encode(m.seqno, 0, m.seqno.length) : o.bytes === Array ? Array.prototype.slice.call(m.seqno) : m.seqno;\n if (o.oneofs)\n d._seqno = \"seqno\";\n }\n if (m.topicIDs && m.topicIDs.length) {\n d.topicIDs = [];\n for (var j = 0; j < m.topicIDs.length; ++j) {\n d.topicIDs[j] = m.topicIDs[j];\n }\n }\n if (m.signature != null && m.hasOwnProperty(\"signature\")) {\n d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature;\n if (o.oneofs)\n d._signature = \"signature\";\n }\n if (m.key != null && m.hasOwnProperty(\"key\")) {\n d.key = o.bytes === String ? $util.base64.encode(m.key, 0, m.key.length) : o.bytes === Array ? Array.prototype.slice.call(m.key) : m.key;\n if (o.oneofs)\n d._key = \"key\";\n }\n return d;\n };\n\n /**\n * Converts this Message to JSON.\n * @function toJSON\n * @memberof RPC.Message\n * @instance\n * @returns {Object.} JSON object\n */\n Message.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Message;\n })();\n\n return RPC;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\n// @ts-ignore no types\nconst Varint = require('varint')\nconst { Buffer } = require('buffer')\n\n/**\n * Encode the passed length `value` to the `target` buffer at the given `offset`\n *\n * @type {import('./types').LengthEncoderFunction}\n */\n// @ts-ignore cannot declare expected bytes property\nconst varintEncode = (value, target, offset) => {\n const ret = Varint.encode(value, target, offset)\n varintEncode.bytes = Varint.encode.bytes\n // If no target, create Buffer from returned array\n return target || Buffer.from(ret)\n}\n\nmodule.exports = varintEncode\n","'use strict'\n\n// @ts-ignore no types\nconst Varint = require('varint')\nconst { Buffer } = require('buffer')\n\n/**\n * @param {any} bl\n */\nconst toBufferProxy = bl => new Proxy({}, {\n get: (_, prop) => {\n // @ts-ignore magic\n return prop[0] === 'l' ? bl[prop] : bl.get(parseInt(prop))\n }\n})\n\n/**\n * @type {import('./types').LengthDecoderFunction}\n */\n// @ts-ignore cannot declare expected bytes property\nconst varintDecode = data => {\n const len = Varint.decode(Buffer.isBuffer(data) ? data : toBufferProxy(data))\n varintDecode.bytes = Varint.decode.bytes\n return len\n}\n\nmodule.exports = varintDecode\n","'use strict'\n\n// @ts-ignore libp2p crypto has no types\nconst randomBytes = require('libp2p-crypto/src/random-bytes')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst PeerId = require('peer-id')\nconst { sha256 } = require('multiformats/hashes/sha2')\n\n/**\n * @typedef {import('./message/rpc').RPC.IMessage} IMessage\n * @typedef {import('./message/rpc').RPC.Message} Message\n * @typedef {import('.').InMessage} NormalizedIMessage\n */\n\n/**\n * Generatea random sequence number.\n *\n * @returns {Uint8Array}\n * @private\n */\nconst randomSeqno = () => {\n return randomBytes(8)\n}\n\n/**\n * Generate a message id, based on the `from` and `seqno`.\n *\n * @param {Uint8Array|string} from\n * @param {Uint8Array} seqno\n * @returns {Uint8Array}\n * @private\n */\nconst msgId = (from, seqno) => {\n let fromBytes\n\n if (from instanceof Uint8Array) {\n fromBytes = PeerId.createFromBytes(from).id\n } else {\n fromBytes = PeerId.parse(from).id\n }\n\n const msgId = new Uint8Array(fromBytes.length + seqno.length)\n msgId.set(fromBytes, 0)\n msgId.set(seqno, fromBytes.length)\n return msgId\n}\n\n/**\n * Generate a message id, based on message `data`.\n *\n * @param {Uint8Array} data\n * @private\n */\nconst noSignMsgId = (data) => sha256.encode(data)\n\n/**\n * Check if any member of the first set is also a member\n * of the second set.\n *\n * @param {Set|Array} a\n * @param {Set|Array} b\n * @returns {boolean}\n * @private\n */\nconst anyMatch = (a, b) => {\n let bHas\n if (Array.isArray(b)) {\n /**\n * @param {number} val\n */\n bHas = (val) => b.indexOf(val) > -1\n } else {\n /**\n * @param {number} val\n */\n bHas = (val) => b.has(val)\n }\n\n for (const val of a) {\n if (bHas(val)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Make everything an array.\n *\n * @template T\n * @param {T|T[]} maybeArray\n * @returns {T[]}\n * @private\n */\nconst ensureArray = (maybeArray) => {\n if (!Array.isArray(maybeArray)) {\n return [maybeArray]\n }\n\n return maybeArray\n}\n\n/**\n * Ensures `message.from` is base58 encoded\n *\n * @template {{from?:any}} T\n * @param {T & IMessage} message\n * @param {string} [peerId]\n * @returns {NormalizedIMessage}\n */\nconst normalizeInRpcMessage = (message, peerId) => {\n /** @type {NormalizedIMessage} */\n // @ts-ignore receivedFrom not yet defined\n const m = Object.assign({}, message)\n if (message.from instanceof Uint8Array) {\n m.from = uint8ArrayToString(message.from, 'base58btc')\n }\n if (peerId) {\n m.receivedFrom = peerId\n }\n return m\n}\n\n/**\n * @template {{from?:any, data?:any}} T\n *\n * @param {T & NormalizedIMessage} message\n * @returns {Message}\n */\nconst normalizeOutRpcMessage = (message) => {\n /** @type {Message} */\n // @ts-ignore from not yet defined\n const m = Object.assign({}, message)\n if (typeof message.from === 'string') {\n m.from = uint8ArrayFromString(message.from, 'base58btc')\n }\n if (typeof message.data === 'string') {\n m.data = uint8ArrayFromString(message.data)\n }\n return m\n}\n\nmodule.exports = {\n randomSeqno,\n msgId,\n noSignMsgId,\n anyMatch,\n ensureArray,\n normalizeInRpcMessage,\n normalizeOutRpcMessage\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getGossipPeers = void 0;\nconst utils_1 = require(\"./utils\");\n/**\n * Given a topic, returns up to count peers subscribed to that topic\n * that pass an optional filter function\n *\n * @param {Gossipsub} router\n * @param {String} topic\n * @param {Number} count\n * @param {Function} [filter] a function to filter acceptable peers\n * @returns {Set}\n *\n */\nfunction getGossipPeers(router, topic, count, filter = () => true) {\n const peersInTopic = router.topics.get(topic);\n if (!peersInTopic) {\n return new Set();\n }\n // Adds all peers using our protocol\n // that also pass the filter function\n let peers = [];\n peersInTopic.forEach((id) => {\n const peerStreams = router.peers.get(id);\n if (!peerStreams) {\n return;\n }\n if (utils_1.hasGossipProtocol(peerStreams.protocol) &&\n filter(id)) {\n peers.push(id);\n }\n });\n // Pseudo-randomly shuffles peers\n peers = utils_1.shuffle(peers);\n if (count > 0 && peers.length > count) {\n peers = peers.slice(0, count);\n }\n return new Set(peers);\n}\nexports.getGossipPeers = getGossipPeers;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTopicScoreParams = exports.validatePeerScoreParams = exports.createTopicScoreParams = exports.createPeerScoreParams = exports.defaultTopicScoreParams = exports.defaultPeerScoreParams = void 0;\nconst constants_1 = require(\"./constants\");\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst errcode = require(\"err-code\");\nexports.defaultPeerScoreParams = {\n topics: {},\n topicScoreCap: 10,\n appSpecificScore: () => 0,\n appSpecificWeight: 10,\n IPColocationFactorWeight: -5,\n IPColocationFactorThreshold: 10,\n IPColocationFactorWhitelist: new Set(),\n behaviourPenaltyWeight: -10,\n behaviourPenaltyDecay: 0.2,\n decayInterval: 1000,\n decayToZero: 0.1,\n retainScore: 3600 * 1000\n};\nexports.defaultTopicScoreParams = {\n topicWeight: 0.5,\n timeInMeshWeight: 1,\n timeInMeshQuantum: 1,\n timeInMeshCap: 3600,\n firstMessageDeliveriesWeight: 1,\n firstMessageDeliveriesDecay: 0.5,\n firstMessageDeliveriesCap: 2000,\n meshMessageDeliveriesWeight: -1,\n meshMessageDeliveriesDecay: 0.5,\n meshMessageDeliveriesCap: 100,\n meshMessageDeliveriesThreshold: 20,\n meshMessageDeliveriesWindow: 10,\n meshMessageDeliveriesActivation: 5000,\n meshFailurePenaltyWeight: -1,\n meshFailurePenaltyDecay: 0.5,\n invalidMessageDeliveriesWeight: -1,\n invalidMessageDeliveriesDecay: 0.3\n};\nfunction createPeerScoreParams(p = {}) {\n return Object.assign(Object.assign(Object.assign({}, exports.defaultPeerScoreParams), p), { topics: p.topics\n ? Object.entries(p.topics)\n .reduce((topics, [topic, topicScoreParams]) => {\n topics[topic] = createTopicScoreParams(topicScoreParams);\n return topics;\n }, {})\n : {} });\n}\nexports.createPeerScoreParams = createPeerScoreParams;\nfunction createTopicScoreParams(p = {}) {\n return Object.assign(Object.assign({}, exports.defaultTopicScoreParams), p);\n}\nexports.createTopicScoreParams = createTopicScoreParams;\n// peer score parameter validation\nfunction validatePeerScoreParams(p) {\n for (const [topic, params] of Object.entries(p.topics)) {\n try {\n validateTopicScoreParams(params);\n }\n catch (e) {\n throw errcode(new Error(`invalid score parameters for topic ${topic}: ${e.message}`), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n }\n // check that the topic score is 0 or something positive\n if (p.topicScoreCap < 0) {\n throw errcode(new Error('invalid topic score cap; must be positive (or 0 for no cap)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check that we have an app specific score; the weight can be anything (but expected positive)\n if (p.appSpecificScore === null || p.appSpecificScore === undefined) {\n throw errcode(new Error('missing application specific score function'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the IP colocation factor\n if (p.IPColocationFactorWeight > 0) {\n throw errcode(new Error('invalid IPColocationFactorWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.IPColocationFactorWeight !== 0 && p.IPColocationFactorThreshold < 1) {\n throw errcode(new Error('invalid IPColocationFactorThreshold; must be at least 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the behaviour penalty\n if (p.behaviourPenaltyWeight > 0) {\n throw errcode(new Error('invalid BehaviourPenaltyWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.behaviourPenaltyWeight !== 0 && (p.behaviourPenaltyDecay <= 0 || p.behaviourPenaltyDecay >= 1)) {\n throw errcode(new Error('invalid BehaviourPenaltyDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the decay parameters\n if (p.decayInterval < 1000) {\n throw errcode(new Error('invalid DecayInterval; must be at least 1s'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.decayToZero <= 0 || p.decayToZero >= 1) {\n throw errcode(new Error('invalid DecayToZero; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // no need to check the score retention; a value of 0 means that we don't retain scores\n}\nexports.validatePeerScoreParams = validatePeerScoreParams;\nfunction validateTopicScoreParams(p) {\n // make sure we have a sane topic weight\n if (p.topicWeight < 0) {\n throw errcode(new Error('invalid topic weight; must be >= 0'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P1\n if (p.timeInMeshQuantum === 0) {\n throw errcode(new Error('invalid TimeInMeshQuantum; must be non zero'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight < 0) {\n throw errcode(new Error('invalid TimeInMeshWeight; must be positive (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight !== 0 && p.timeInMeshQuantum <= 0) {\n throw errcode(new Error('invalid TimeInMeshQuantum; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight !== 0 && p.timeInMeshCap <= 0) {\n throw errcode(new Error('invalid TimeInMeshCap; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P2\n if (p.firstMessageDeliveriesWeight < 0) {\n throw errcode(new Error('invallid FirstMessageDeliveriesWeight; must be positive (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.firstMessageDeliveriesWeight !== 0 && (p.firstMessageDeliveriesDecay <= 0 || p.firstMessageDeliveriesDecay >= 1)) {\n throw errcode(new Error('invalid FirstMessageDeliveriesDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.firstMessageDeliveriesWeight !== 0 && p.firstMessageDeliveriesCap <= 0) {\n throw errcode(new Error('invalid FirstMessageDeliveriesCap; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P3\n if (p.meshMessageDeliveriesWeight > 0) {\n throw errcode(new Error('invalid MeshMessageDeliveriesWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && (p.meshMessageDeliveriesDecay <= 0 || p.meshMessageDeliveriesDecay >= 1)) {\n throw errcode(new Error('invalid MeshMessageDeliveriesDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesCap <= 0) {\n throw errcode(new Error('invalid MeshMessageDeliveriesCap; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesThreshold <= 0) {\n throw errcode(new Error('invalid MeshMessageDeliveriesThreshold; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWindow < 0) {\n throw errcode(new Error('invalid MeshMessageDeliveriesWindow; must be non-negative'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesActivation < 1000) {\n throw errcode(new Error('invalid MeshMessageDeliveriesActivation; must be at least 1s'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P3b\n if (p.meshFailurePenaltyWeight > 0) {\n throw errcode(new Error('invalid MeshFailurePenaltyWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshFailurePenaltyWeight !== 0 && (p.meshFailurePenaltyDecay <= 0 || p.meshFailurePenaltyDecay >= 1)) {\n throw errcode(new Error('invalid MeshFailurePenaltyDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P4\n if (p.invalidMessageDeliveriesWeight > 0) {\n throw errcode(new Error('invalid InvalidMessageDeliveriesWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.invalidMessageDeliveriesDecay <= 0 || p.invalidMessageDeliveriesDecay >= 1) {\n throw errcode(new Error('invalid InvalidMessageDeliveriesDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n}\nexports.validateTopicScoreParams = validateTopicScoreParams;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERR_INVALID_PEER_SCORE_THRESHOLDS = exports.ERR_INVALID_PEER_SCORE_PARAMS = void 0;\nexports.ERR_INVALID_PEER_SCORE_PARAMS = 'ERR_INVALID_PEER_SCORE_PARAMS';\nexports.ERR_INVALID_PEER_SCORE_THRESHOLDS = 'ERR_INVALID_PEER_SCORE_THRESHOLDS';\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst LOAD_BASE = name => Promise.reject(new Error(`No base found for \"${ name }\"`));\nclass Multibases {\n constructor(options) {\n this._basesByName = {};\n this._basesByPrefix = {};\n this._loadBase = options.loadBase || LOAD_BASE;\n for (const base of options.bases) {\n this.addBase(base);\n }\n }\n addBase(base) {\n if (this._basesByName[base.name] || this._basesByPrefix[base.prefix]) {\n throw new Error(`Codec already exists for codec \"${ base.name }\"`);\n }\n this._basesByName[base.name] = base;\n this._basesByPrefix[base.prefix] = base;\n }\n removeBase(base) {\n delete this._basesByName[base.name];\n delete this._basesByPrefix[base.prefix];\n }\n async getBase(nameOrPrefix) {\n if (this._basesByName[nameOrPrefix]) {\n return this._basesByName[nameOrPrefix];\n }\n if (this._basesByPrefix[nameOrPrefix]) {\n return this._basesByPrefix[nameOrPrefix];\n }\n const base = await this._loadBase(nameOrPrefix);\n if (this._basesByName[base.name] == null && this._basesByPrefix[base.prefix] == null) {\n this.addBase(base);\n }\n return base;\n }\n listBases() {\n return Object.values(this._basesByName);\n }\n}\n\nexports.Multibases = Multibases;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst LOAD_CODEC = codeOrName => Promise.reject(new Error(`No codec found for \"${ codeOrName }\"`));\nclass Multicodecs {\n constructor(options) {\n this._codecsByName = {};\n this._codecsByCode = {};\n this._loadCodec = options.loadCodec || LOAD_CODEC;\n for (const codec of options.codecs) {\n this.addCodec(codec);\n }\n }\n addCodec(codec) {\n if (this._codecsByName[codec.name] || this._codecsByCode[codec.code]) {\n throw new Error(`Resolver already exists for codec \"${ codec.name }\"`);\n }\n this._codecsByName[codec.name] = codec;\n this._codecsByCode[codec.code] = codec;\n }\n removeCodec(codec) {\n delete this._codecsByName[codec.name];\n delete this._codecsByCode[codec.code];\n }\n async getCodec(code) {\n const table = typeof code === 'string' ? this._codecsByName : this._codecsByCode;\n if (table[code]) {\n return table[code];\n }\n const codec = await this._loadCodec(code);\n if (table[code] == null) {\n this.addCodec(codec);\n }\n return codec;\n }\n listCodecs() {\n return Object.values(this._codecsByName);\n }\n}\n\nexports.Multicodecs = Multicodecs;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst LOAD_HASHER = codeOrName => Promise.reject(new Error(`No hasher found for \"${ codeOrName }\"`));\nclass Multihashes {\n constructor(options) {\n this._hashersByName = {};\n this._hashersByCode = {};\n this._loadHasher = options.loadHasher || LOAD_HASHER;\n for (const hasher of options.hashers) {\n this.addHasher(hasher);\n }\n }\n addHasher(hasher) {\n if (this._hashersByName[hasher.name] || this._hashersByCode[hasher.code]) {\n throw new Error(`Resolver already exists for codec \"${ hasher.name }\"`);\n }\n this._hashersByName[hasher.name] = hasher;\n this._hashersByCode[hasher.code] = hasher;\n }\n removeHasher(hasher) {\n delete this._hashersByName[hasher.name];\n delete this._hashersByCode[hasher.code];\n }\n async getHasher(code) {\n const table = typeof code === 'string' ? this._hashersByName : this._hashersByCode;\n if (table[code]) {\n return table[code];\n }\n const hasher = await this._loadHasher(code);\n if (table[code] == null) {\n this.addHasher(hasher);\n }\n return hasher;\n }\n listHashers() {\n return Object.values(this._hashersByName);\n }\n}\n\nexports.Multihashes = Multihashes;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction modeToString(mode) {\n if (mode == null) {\n return undefined;\n }\n if (typeof mode === 'string') {\n return mode;\n }\n return mode.toString(8).padStart(4, '0');\n}\n\nexports.modeToString = modeToString;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nfunction parseMtime(input) {\n if (input == null) {\n return undefined;\n }\n let mtime;\n if (input.secs != null) {\n mtime = {\n secs: input.secs,\n nsecs: input.nsecs\n };\n }\n if (input.Seconds != null) {\n mtime = {\n secs: input.Seconds,\n nsecs: input.FractionalNanoseconds\n };\n }\n if (Array.isArray(input)) {\n mtime = {\n secs: input[0],\n nsecs: input[1]\n };\n }\n if (input instanceof Date) {\n const ms = input.getTime();\n const secs = Math.floor(ms / 1000);\n mtime = {\n secs: secs,\n nsecs: (ms - secs * 1000) * 1000\n };\n }\n if (!Object.prototype.hasOwnProperty.call(mtime, 'secs')) {\n return undefined;\n }\n if (mtime != null && mtime.nsecs != null && (mtime.nsecs < 0 || mtime.nsecs > 999999999)) {\n throw errCode__default[\"default\"](new Error('mtime-nsecs must be within the range [0,999999999]'), 'ERR_INVALID_MTIME_NSECS');\n }\n return mtime;\n}\n\nexports.parseMtime = parseMtime;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar configure = require('../lib/configure.js');\nvar toUrlSearchParams = require('../lib/to-url-search-params.js');\n\nconst createStat = configure.configure(api => {\n async function stat(options = {}) {\n const res = await api.post('bitswap/stat', {\n searchParams: toUrlSearchParams.toUrlSearchParams(options),\n signal: options.signal,\n headers: options.headers\n });\n return toCoreInterface(await res.json());\n }\n return stat;\n});\nfunction toCoreInterface(res) {\n return {\n provideBufLen: res.ProvideBufLen,\n wantlist: (res.Wantlist || []).map(k => cid.CID.parse(k['/'])),\n peers: res.Peers || [],\n blocksReceived: BigInt(res.BlocksReceived),\n dataReceived: BigInt(res.DataReceived),\n blocksSent: BigInt(res.BlocksSent),\n dataSent: BigInt(res.DataSent),\n dupBlksReceived: BigInt(res.DupBlksReceived),\n dupDataReceived: BigInt(res.DupDataReceived)\n };\n}\n\nexports.createStat = createStat;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar configure = require('../lib/configure.js');\nvar toUrlSearchParams = require('../lib/to-url-search-params.js');\n\nconst createGet = configure.configure(api => {\n async function get(cid, options = {}) {\n const res = await api.post('block/get', {\n signal: options.signal,\n searchParams: toUrlSearchParams.toUrlSearchParams({\n arg: cid.toString(),\n ...options\n }),\n headers: options.headers\n });\n return new Uint8Array(await res.arrayBuffer());\n }\n return get;\n});\n\nexports.createGet = createGet;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar configure = require('../lib/configure.js');\nvar multipartRequest = require('ipfs-core-utils/multipart-request');\nvar toUrlSearchParams = require('../lib/to-url-search-params.js');\nvar abortSignal = require('../lib/abort-signal.js');\nvar nativeAbortController = require('native-abort-controller');\n\nconst createPut = (codecs, options) => {\n const fn = configure.configure(api => {\n const put = async (dagNode, options = {}) => {\n const settings = {\n storeCodec: 'dag-cbor',\n hashAlg: 'sha2-256',\n ...options\n };\n let serialized;\n if (settings.inputCodec) {\n if (!(dagNode instanceof Uint8Array)) {\n throw new Error('Can only inputCodec on raw bytes that can be decoded');\n }\n serialized = dagNode;\n } else {\n const storeCodec = await codecs.getCodec(settings.storeCodec);\n serialized = storeCodec.encode(dagNode);\n settings.inputCodec = settings.storeCodec;\n }\n const controller = new nativeAbortController.AbortController();\n const signal = abortSignal.abortSignal(controller.signal, settings.signal);\n const res = await api.post('dag/put', {\n timeout: settings.timeout,\n signal,\n searchParams: toUrlSearchParams.toUrlSearchParams(settings),\n ...await multipartRequest.multipartRequest([serialized], controller, settings.headers)\n });\n const data = await res.json();\n return cid.CID.parse(data.Cid['/']);\n };\n return put;\n });\n return fn(options);\n};\n\nexports.createPut = createPut;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar objectToCamel = require('./object-to-camel.js');\n\nfunction objectToCamelWithMetadata(entry) {\n const file = objectToCamel.objectToCamel(entry);\n if (Object.prototype.hasOwnProperty.call(file, 'mode')) {\n file.mode = parseInt(file.mode, 8);\n }\n if (Object.prototype.hasOwnProperty.call(file, 'mtime')) {\n file.mtime = {\n secs: file.mtime,\n nsecs: file.mtimeNsecs || 0\n };\n delete file.mtimeNsecs;\n }\n return file;\n}\n\nexports.objectToCamelWithMetadata = objectToCamelWithMetadata;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar objectToCamelWithMetadata = require('../lib/object-to-camel-with-metadata.js');\nvar configure = require('../lib/configure.js');\nvar toUrlSearchParams = require('../lib/to-url-search-params.js');\n\nconst createStat = configure.configure(api => {\n async function stat(path, options = {}) {\n const res = await api.post('files/stat', {\n signal: options.signal,\n searchParams: toUrlSearchParams.toUrlSearchParams({\n arg: path,\n ...options\n }),\n headers: options.headers\n });\n const data = await res.json();\n data.WithLocality = data.WithLocality || false;\n return toCoreInterface(objectToCamelWithMetadata.objectToCamelWithMetadata(data));\n }\n return stat;\n});\nfunction toCoreInterface(entry) {\n entry.cid = cid.CID.parse(entry.hash);\n delete entry.hash;\n return entry;\n}\n\nexports.createStat = createStat;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar configure = require('../lib/configure.js');\nvar normaliseInput = require('ipfs-core-utils/pins/normalise-input');\nvar toUrlSearchParams = require('../lib/to-url-search-params.js');\n\nconst createAddAll = configure.configure(api => {\n async function* addAll(source, options = {}) {\n for await (const {path, recursive, metadata} of normaliseInput.normaliseInput(source)) {\n const res = await api.post('pin/add', {\n signal: options.signal,\n searchParams: toUrlSearchParams.toUrlSearchParams({\n ...options,\n arg: path,\n recursive,\n metadata: metadata ? JSON.stringify(metadata) : undefined,\n stream: true\n }),\n headers: options.headers\n });\n for await (const pin of res.ndjson()) {\n if (pin.Pins) {\n for (const cid$1 of pin.Pins) {\n yield cid.CID.parse(cid$1);\n }\n continue;\n }\n yield cid.CID.parse(pin);\n }\n }\n }\n return addAll;\n});\n\nexports.createAddAll = createAddAll;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar configure = require('../lib/configure.js');\nvar normaliseInput = require('ipfs-core-utils/pins/normalise-input');\nvar toUrlSearchParams = require('../lib/to-url-search-params.js');\n\nconst createRmAll = configure.configure(api => {\n async function* rmAll(source, options = {}) {\n for await (const {path, recursive} of normaliseInput.normaliseInput(source)) {\n const searchParams = new URLSearchParams(options.searchParams);\n searchParams.append('arg', `${ path }`);\n if (recursive != null)\n searchParams.set('recursive', String(recursive));\n const res = await api.post('pin/rm', {\n signal: options.signal,\n headers: options.headers,\n searchParams: toUrlSearchParams.toUrlSearchParams({\n ...options,\n arg: `${ path }`,\n recursive\n })\n });\n for await (const pin of res.ndjson()) {\n if (pin.Pins) {\n yield* pin.Pins.map(cid$1 => cid.CID.parse(cid$1));\n continue;\n }\n yield cid.CID.parse(pin);\n }\n }\n }\n return rmAll;\n});\n\nexports.createRmAll = createRmAll;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction encodeEndpoint(url) {\n const href = String(url);\n if (href === 'undefined') {\n throw Error('endpoint is required');\n }\n return href[href.length - 1] === '/' ? href.slice(0, -1) : href;\n}\nfunction decodeRemoteService(json) {\n return {\n service: json.Service,\n endpoint: new URL(json.ApiEndpoint),\n ...json.Stat && { stat: decodeStat(json.Stat) }\n };\n}\nfunction decodeStat(json) {\n switch (json.Status) {\n case 'valid': {\n const {Pinning, Pinned, Queued, Failed} = json.PinCount;\n return {\n status: 'valid',\n pinCount: {\n queued: Queued,\n pinning: Pinning,\n pinned: Pinned,\n failed: Failed\n }\n };\n }\n case 'invalid': {\n return { status: 'invalid' };\n }\n default: {\n return { status: json.Status };\n }\n }\n}\n\nexports.decodeRemoteService = decodeRemoteService;\nexports.decodeStat = decodeStat;\nexports.encodeEndpoint = encodeEndpoint;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar configure = require('../lib/configure.js');\nvar toUrlSearchParams = require('../lib/to-url-search-params.js');\n\nconst createStat = configure.configure(api => {\n async function stat(options = {}) {\n const res = await api.post('repo/stat', {\n signal: options.signal,\n searchParams: toUrlSearchParams.toUrlSearchParams(options),\n headers: options.headers\n });\n const data = await res.json();\n return {\n numObjects: BigInt(data.NumObjects),\n repoSize: BigInt(data.RepoSize),\n repoPath: data.RepoPath,\n version: data.Version,\n storageMax: BigInt(data.StorageMax)\n };\n }\n return stat;\n});\n\nexports.createStat = createStat;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cid = require('multiformats/cid');\nvar objectToCamel = require('./lib/object-to-camel.js');\nvar configure = require('./lib/configure.js');\nvar multipartRequest = require('ipfs-core-utils/multipart-request');\nvar toUrlSearchParams = require('./lib/to-url-search-params.js');\nvar abortSignal = require('./lib/abort-signal.js');\nvar nativeAbortController = require('native-abort-controller');\n\nconst createAddAll = configure.configure(api => {\n async function* addAll(source, options = {}) {\n const controller = new nativeAbortController.AbortController();\n const signal = abortSignal.abortSignal(controller.signal, options.signal);\n const {headers, body, total, parts} = await multipartRequest.multipartRequest(source, controller, options.headers);\n const [progressFn, onUploadProgress] = typeof options.progress === 'function' ? createProgressHandler(total, parts, options.progress) : [\n undefined,\n undefined\n ];\n const res = await api.post('add', {\n searchParams: toUrlSearchParams.toUrlSearchParams({\n 'stream-channels': true,\n ...options,\n progress: Boolean(progressFn)\n }),\n onUploadProgress,\n signal,\n headers,\n body\n });\n for await (let file of res.ndjson()) {\n file = objectToCamel.objectToCamel(file);\n if (file.hash !== undefined) {\n yield toCoreInterface(file);\n } else if (progressFn) {\n progressFn(file.bytes || 0, file.name);\n }\n }\n }\n return addAll;\n});\nconst createProgressHandler = (total, parts, progress) => parts ? [\n undefined,\n createOnUploadProgress(total, parts, progress)\n] : [\n progress,\n undefined\n];\nconst createOnUploadProgress = (size, parts, progress) => {\n let index = 0;\n const count = parts.length;\n return ({loaded, total}) => {\n const position = Math.floor(loaded / total * size);\n while (index < count) {\n const {start, end, name} = parts[index];\n if (position < end) {\n progress(position - start, name);\n break;\n } else {\n progress(end - start, name);\n index += 1;\n }\n }\n };\n};\nfunction toCoreInterface({name, hash, size, mode, mtime, mtimeNsecs}) {\n const output = {\n path: name,\n cid: cid.CID.parse(hash),\n size: parseInt(size)\n };\n if (mode != null) {\n output.mode = parseInt(mode, 8);\n }\n if (mtime != null) {\n output.mtime = {\n secs: mtime,\n nsecs: mtimeNsecs || 0\n };\n }\n return output;\n}\n\nexports.createAddAll = createAddAll;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar objectToCamel = require('./lib/object-to-camel.js');\nvar multiaddr = require('multiaddr');\nvar configure = require('./lib/configure.js');\nvar toUrlSearchParams = require('./lib/to-url-search-params.js');\n\nconst createId = configure.configure(api => {\n async function id(options = {}) {\n const res = await api.post('id', {\n signal: options.signal,\n searchParams: toUrlSearchParams.toUrlSearchParams({\n arg: options.peerId ? options.peerId.toString() : undefined,\n ...options\n }),\n headers: options.headers\n });\n const data = await res.json();\n const output = { ...objectToCamel.objectToCamel(data) };\n if (output.addresses) {\n output.addresses = output.addresses.map(ma => new multiaddr.Multiaddr(ma));\n }\n return output;\n }\n return id;\n});\n\nexports.createId = createId;\n","'use strict'\n\nconst HTTP = require('../http')\n\n/**\n *\n * @param {string} url\n * @param {import(\"../types\").HTTPOptions} [options]\n * @returns {{ path: string; content?: AsyncIterable }}\n */\nconst urlSource = (url, options) => {\n return {\n path: decodeURIComponent(new URL(url).pathname.split('/').pop() || ''),\n content: readURLContent(url, options)\n }\n}\n\n/**\n *\n * @param {string} url\n * @param {import(\"../types\").HTTPOptions} [options]\n * @returns {AsyncIterable}\n */\nasync function * readURLContent (url, options) {\n const http = new HTTP()\n const response = await http.get(url, options)\n\n yield * response.iterator()\n}\n\nmodule.exports = urlSource\n","'use strict'\n\n// p2p multi-address code\nexports.CODE_P2P = 421\nexports.CODE_CIRCUIT = 290\n\nexports.CODE_TCP = 6\nexports.CODE_WS = 477\nexports.CODE_WSS = 478\n\n// Time to wait for a connection to close gracefully before destroying it manually\nexports.CLOSE_TIMEOUT = 2000\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:ip-port-to-multiaddr'), {\n error: debug('libp2p:ip-port-to-multiaddr:err')\n})\nconst { Multiaddr } = require('multiaddr')\nconst errCode = require('err-code')\nconst { Address4, Address6 } = require('ip-address')\n\nconst errors = {\n ERR_INVALID_IP_PARAMETER: 'ERR_INVALID_IP_PARAMETER',\n ERR_INVALID_PORT_PARAMETER: 'ERR_INVALID_PORT_PARAMETER',\n ERR_INVALID_IP: 'ERR_INVALID_IP'\n}\n\n/**\n * Transform an IP, Port pair into a multiaddr\n *\n * @param {string} ip\n * @param {number|string} port\n */\nfunction ipPortToMultiaddr (ip, port) {\n if (typeof ip !== 'string') {\n throw errCode(new Error(`invalid ip provided: ${ip}`), errors.ERR_INVALID_IP_PARAMETER)\n }\n\n if (typeof port === 'string') {\n port = parseInt(port)\n }\n\n if (isNaN(port)) {\n throw errCode(new Error(`invalid port provided: ${port}`), errors.ERR_INVALID_PORT_PARAMETER)\n }\n\n try {\n // Test valid IPv4\n new Address4(ip) // eslint-disable-line no-new\n return new Multiaddr(`/ip4/${ip}/tcp/${port}`)\n } catch {}\n\n try {\n // Test valid IPv6\n const ip6 = new Address6(ip)\n return ip6.is4()\n ? new Multiaddr(`/ip4/${ip6.to4().correctForm()}/tcp/${port}`)\n : new Multiaddr(`/ip6/${ip}/tcp/${port}`)\n } catch (err) {\n const errMsg = `invalid ip:port for creating a multiaddr: ${ip}:${port}`\n log.error(errMsg)\n throw errCode(new Error(errMsg), errors.ERR_INVALID_IP)\n }\n}\n\nmodule.exports = ipPortToMultiaddr\n\nmodule.exports.Errors = errors\n","/*! simple-peer. MIT License. Feross Aboukhadijeh */\nvar debug = require('debug')('simple-peer')\nvar getBrowserRTC = require('get-browser-rtc')\nvar randombytes = require('randombytes')\nvar stream = require('readable-stream')\nvar queueMicrotask = require('queue-microtask') // TODO: remove when Node 10 is not supported\nvar errCode = require('err-code')\n\nvar MAX_BUFFERED_AMOUNT = 64 * 1024\nvar ICECOMPLETE_TIMEOUT = 5 * 1000\nvar CHANNEL_CLOSING_TIMEOUT = 5 * 1000\n\n// HACK: Filter trickle lines when trickle is disabled #354\nfunction filterTrickle (sdp) {\n return sdp.replace(/a=ice-options:trickle\\s\\n/g, '')\n}\n\nfunction warn (message) {\n console.warn(message)\n}\n\n/**\n * WebRTC peer connection. Same API as node core `net.Socket`, plus a few extra methods.\n * Duplex stream.\n * @param {Object} opts\n */\nclass Peer extends stream.Duplex {\n constructor (opts) {\n opts = Object.assign({\n allowHalfOpen: false\n }, opts)\n\n super(opts)\n\n this._id = randombytes(4).toString('hex').slice(0, 7)\n this._debug('new peer %o', opts)\n\n this.channelName = opts.initiator\n ? opts.channelName || randombytes(20).toString('hex')\n : null\n\n this.initiator = opts.initiator || false\n this.channelConfig = opts.channelConfig || Peer.channelConfig\n this.negotiated = this.channelConfig.negotiated\n this.config = Object.assign({}, Peer.config, opts.config)\n this.offerOptions = opts.offerOptions || {}\n this.answerOptions = opts.answerOptions || {}\n this.sdpTransform = opts.sdpTransform || (sdp => sdp)\n this.streams = opts.streams || (opts.stream ? [opts.stream] : []) // support old \"stream\" option\n this.trickle = opts.trickle !== undefined ? opts.trickle : true\n this.allowHalfTrickle = opts.allowHalfTrickle !== undefined ? opts.allowHalfTrickle : false\n this.iceCompleteTimeout = opts.iceCompleteTimeout || ICECOMPLETE_TIMEOUT\n\n this._connected = false\n\n this.remoteAddress = undefined\n this.remoteFamily = undefined\n this.remotePort = undefined\n this.localAddress = undefined\n this.localFamily = undefined\n this.localPort = undefined\n\n this._wrtc = (opts.wrtc && typeof opts.wrtc === 'object')\n ? opts.wrtc\n : getBrowserRTC()\n\n if (!this._wrtc) {\n if (typeof window === 'undefined') {\n throw errCode(new Error('No WebRTC support: Specify `opts.wrtc` option in this environment'), 'ERR_WEBRTC_SUPPORT')\n } else {\n throw errCode(new Error('No WebRTC support: Not a supported browser'), 'ERR_WEBRTC_SUPPORT')\n }\n }\n\n this._pcReady = false\n this._channelReady = false\n this._iceComplete = false // ice candidate trickle done (got null candidate)\n this._iceCompleteTimer = null // send an offer/answer anyway after some timeout\n this._channel = null\n this._pendingCandidates = []\n\n this._isNegotiating = this.negotiated ? false : !this.initiator // is this peer waiting for negotiation to complete?\n this._batchedNegotiation = false // batch synchronous negotiations\n this._queuedNegotiation = false // is there a queued negotiation request?\n this._sendersAwaitingStable = []\n this._senderMap = new Map()\n this._firstStable = true\n this._closingInterval = null\n\n this._remoteTracks = []\n this._remoteStreams = []\n\n this._chunk = null\n this._cb = null\n this._interval = null\n\n try {\n this._pc = new (this._wrtc.RTCPeerConnection)(this.config)\n } catch (err) {\n queueMicrotask(() => this.destroy(errCode(err, 'ERR_PC_CONSTRUCTOR')))\n return\n }\n\n // We prefer feature detection whenever possible, but sometimes that's not\n // possible for certain implementations.\n this._isReactNativeWebrtc = typeof this._pc._peerConnectionId === 'number'\n\n this._pc.oniceconnectionstatechange = () => {\n this._onIceStateChange()\n }\n this._pc.onicegatheringstatechange = () => {\n this._onIceStateChange()\n }\n this._pc.onconnectionstatechange = () => {\n this._onConnectionStateChange()\n }\n this._pc.onsignalingstatechange = () => {\n this._onSignalingStateChange()\n }\n this._pc.onicecandidate = event => {\n this._onIceCandidate(event)\n }\n\n // Other spec events, unused by this implementation:\n // - onconnectionstatechange\n // - onicecandidateerror\n // - onfingerprintfailure\n // - onnegotiationneeded\n\n if (this.initiator || this.negotiated) {\n this._setupData({\n channel: this._pc.createDataChannel(this.channelName, this.channelConfig)\n })\n } else {\n this._pc.ondatachannel = event => {\n this._setupData(event)\n }\n }\n\n if (this.streams) {\n this.streams.forEach(stream => {\n this.addStream(stream)\n })\n }\n this._pc.ontrack = event => {\n this._onTrack(event)\n }\n\n if (this.initiator) {\n this._needsNegotiation()\n }\n\n this._onFinishBound = () => {\n this._onFinish()\n }\n this.once('finish', this._onFinishBound)\n }\n\n get bufferSize () {\n return (this._channel && this._channel.bufferedAmount) || 0\n }\n\n // HACK: it's possible channel.readyState is \"closing\" before peer.destroy() fires\n // https://bugs.chromium.org/p/chromium/issues/detail?id=882743\n get connected () {\n return (this._connected && this._channel.readyState === 'open')\n }\n\n address () {\n return { port: this.localPort, family: this.localFamily, address: this.localAddress }\n }\n\n signal (data) {\n if (this.destroyed) throw errCode(new Error('cannot signal after peer is destroyed'), 'ERR_SIGNALING')\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data)\n } catch (err) {\n data = {}\n }\n }\n this._debug('signal()')\n\n if (data.renegotiate && this.initiator) {\n this._debug('got request to renegotiate')\n this._needsNegotiation()\n }\n if (data.transceiverRequest && this.initiator) {\n this._debug('got request for transceiver')\n this.addTransceiver(data.transceiverRequest.kind, data.transceiverRequest.init)\n }\n if (data.candidate) {\n if (this._pc.remoteDescription && this._pc.remoteDescription.type) {\n this._addIceCandidate(data.candidate)\n } else {\n this._pendingCandidates.push(data.candidate)\n }\n }\n if (data.sdp) {\n this._pc.setRemoteDescription(new (this._wrtc.RTCSessionDescription)(data))\n .then(() => {\n if (this.destroyed) return\n\n this._pendingCandidates.forEach(candidate => {\n this._addIceCandidate(candidate)\n })\n this._pendingCandidates = []\n\n if (this._pc.remoteDescription.type === 'offer') this._createAnswer()\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_SET_REMOTE_DESCRIPTION'))\n })\n }\n if (!data.sdp && !data.candidate && !data.renegotiate && !data.transceiverRequest) {\n this.destroy(errCode(new Error('signal() called with invalid signal data'), 'ERR_SIGNALING'))\n }\n }\n\n _addIceCandidate (candidate) {\n var iceCandidateObj = new this._wrtc.RTCIceCandidate(candidate)\n this._pc.addIceCandidate(iceCandidateObj)\n .catch(err => {\n if (!iceCandidateObj.address || iceCandidateObj.address.endsWith('.local')) {\n warn('Ignoring unsupported ICE candidate.')\n } else {\n this.destroy(errCode(err, 'ERR_ADD_ICE_CANDIDATE'))\n }\n })\n }\n\n /**\n * Send text/binary data to the remote peer.\n * @param {ArrayBufferView|ArrayBuffer|Buffer|string|Blob} chunk\n */\n send (chunk) {\n this._channel.send(chunk)\n }\n\n /**\n * Add a Transceiver to the connection.\n * @param {String} kind\n * @param {Object} init\n */\n addTransceiver (kind, init) {\n this._debug('addTransceiver()')\n\n if (this.initiator) {\n try {\n this._pc.addTransceiver(kind, init)\n this._needsNegotiation()\n } catch (err) {\n this.destroy(errCode(err, 'ERR_ADD_TRANSCEIVER'))\n }\n } else {\n this.emit('signal', { // request initiator to renegotiate\n transceiverRequest: { kind, init }\n })\n }\n }\n\n /**\n * Add a MediaStream to the connection.\n * @param {MediaStream} stream\n */\n addStream (stream) {\n this._debug('addStream()')\n\n stream.getTracks().forEach(track => {\n this.addTrack(track, stream)\n })\n }\n\n /**\n * Add a MediaStreamTrack to the connection.\n * @param {MediaStreamTrack} track\n * @param {MediaStream} stream\n */\n addTrack (track, stream) {\n this._debug('addTrack()')\n\n var submap = this._senderMap.get(track) || new Map() // nested Maps map [track, stream] to sender\n var sender = submap.get(stream)\n if (!sender) {\n sender = this._pc.addTrack(track, stream)\n submap.set(stream, sender)\n this._senderMap.set(track, submap)\n this._needsNegotiation()\n } else if (sender.removed) {\n throw errCode(new Error('Track has been removed. You should enable/disable tracks that you want to re-add.'), 'ERR_SENDER_REMOVED')\n } else {\n throw errCode(new Error('Track has already been added to that stream.'), 'ERR_SENDER_ALREADY_ADDED')\n }\n }\n\n /**\n * Replace a MediaStreamTrack by another in the connection.\n * @param {MediaStreamTrack} oldTrack\n * @param {MediaStreamTrack} newTrack\n * @param {MediaStream} stream\n */\n replaceTrack (oldTrack, newTrack, stream) {\n this._debug('replaceTrack()')\n\n var submap = this._senderMap.get(oldTrack)\n var sender = submap ? submap.get(stream) : null\n if (!sender) {\n throw errCode(new Error('Cannot replace track that was never added.'), 'ERR_TRACK_NOT_ADDED')\n }\n if (newTrack) this._senderMap.set(newTrack, submap)\n\n if (sender.replaceTrack != null) {\n sender.replaceTrack(newTrack)\n } else {\n this.destroy(errCode(new Error('replaceTrack is not supported in this browser'), 'ERR_UNSUPPORTED_REPLACETRACK'))\n }\n }\n\n /**\n * Remove a MediaStreamTrack from the connection.\n * @param {MediaStreamTrack} track\n * @param {MediaStream} stream\n */\n removeTrack (track, stream) {\n this._debug('removeSender()')\n\n var submap = this._senderMap.get(track)\n var sender = submap ? submap.get(stream) : null\n if (!sender) {\n throw errCode(new Error('Cannot remove track that was never added.'), 'ERR_TRACK_NOT_ADDED')\n }\n try {\n sender.removed = true\n this._pc.removeTrack(sender)\n } catch (err) {\n if (err.name === 'NS_ERROR_UNEXPECTED') {\n this._sendersAwaitingStable.push(sender) // HACK: Firefox must wait until (signalingState === stable) https://bugzilla.mozilla.org/show_bug.cgi?id=1133874\n } else {\n this.destroy(errCode(err, 'ERR_REMOVE_TRACK'))\n }\n }\n this._needsNegotiation()\n }\n\n /**\n * Remove a MediaStream from the connection.\n * @param {MediaStream} stream\n */\n removeStream (stream) {\n this._debug('removeSenders()')\n\n stream.getTracks().forEach(track => {\n this.removeTrack(track, stream)\n })\n }\n\n _needsNegotiation () {\n this._debug('_needsNegotiation')\n if (this._batchedNegotiation) return // batch synchronous renegotiations\n this._batchedNegotiation = true\n queueMicrotask(() => {\n this._batchedNegotiation = false\n this._debug('starting batched negotiation')\n this.negotiate()\n })\n }\n\n negotiate () {\n if (this.initiator) {\n if (this._isNegotiating) {\n this._queuedNegotiation = true\n this._debug('already negotiating, queueing')\n } else {\n this._debug('start negotiation')\n setTimeout(() => { // HACK: Chrome crashes if we immediately call createOffer\n this._createOffer()\n }, 0)\n }\n } else {\n if (this._isNegotiating) {\n this._queuedNegotiation = true\n this._debug('already negotiating, queueing')\n } else {\n this._debug('requesting negotiation from initiator')\n this.emit('signal', { // request initiator to renegotiate\n renegotiate: true\n })\n }\n }\n this._isNegotiating = true\n }\n\n _destroy (err, cb) {\n this._debug('destroy (error: %s)', err && (err.message || err))\n\n this.readable = this.writable = false\n\n if (!this._readableState.ended) this.push(null)\n if (!this._writableState.finished) this.end()\n\n this._connected = false\n this._pcReady = false\n this._channelReady = false\n this._remoteTracks = null\n this._remoteStreams = null\n this._senderMap = null\n\n clearInterval(this._closingInterval)\n this._closingInterval = null\n\n clearInterval(this._interval)\n this._interval = null\n this._chunk = null\n this._cb = null\n\n if (this._onFinishBound) this.removeListener('finish', this._onFinishBound)\n this._onFinishBound = null\n\n if (this._channel) {\n try {\n this._channel.close()\n } catch (err) {}\n\n this._channel.onmessage = null\n this._channel.onopen = null\n this._channel.onclose = null\n this._channel.onerror = null\n }\n if (this._pc) {\n try {\n this._pc.close()\n } catch (err) {}\n\n this._pc.oniceconnectionstatechange = null\n this._pc.onicegatheringstatechange = null\n this._pc.onsignalingstatechange = null\n this._pc.onicecandidate = null\n this._pc.ontrack = null\n this._pc.ondatachannel = null\n }\n this._pc = null\n this._channel = null\n\n cb(err)\n }\n\n _setupData (event) {\n if (!event.channel) {\n // In some situations `pc.createDataChannel()` returns `undefined` (in wrtc),\n // which is invalid behavior. Handle it gracefully.\n // See: https://github.com/feross/simple-peer/issues/163\n return this.destroy(errCode(new Error('Data channel event is missing `channel` property'), 'ERR_DATA_CHANNEL'))\n }\n\n this._channel = event.channel\n this._channel.binaryType = 'arraybuffer'\n\n if (typeof this._channel.bufferedAmountLowThreshold === 'number') {\n this._channel.bufferedAmountLowThreshold = MAX_BUFFERED_AMOUNT\n }\n\n this.channelName = this._channel.label\n\n this._channel.onmessage = event => {\n this._onChannelMessage(event)\n }\n this._channel.onbufferedamountlow = () => {\n this._onChannelBufferedAmountLow()\n }\n this._channel.onopen = () => {\n this._onChannelOpen()\n }\n this._channel.onclose = () => {\n this._onChannelClose()\n }\n this._channel.onerror = err => {\n this.destroy(errCode(err, 'ERR_DATA_CHANNEL'))\n }\n\n // HACK: Chrome will sometimes get stuck in readyState \"closing\", let's check for this condition\n // https://bugs.chromium.org/p/chromium/issues/detail?id=882743\n var isClosing = false\n this._closingInterval = setInterval(() => { // No \"onclosing\" event\n if (this._channel && this._channel.readyState === 'closing') {\n if (isClosing) this._onChannelClose() // closing timed out: equivalent to onclose firing\n isClosing = true\n } else {\n isClosing = false\n }\n }, CHANNEL_CLOSING_TIMEOUT)\n }\n\n _read () {}\n\n _write (chunk, encoding, cb) {\n if (this.destroyed) return cb(errCode(new Error('cannot write after peer is destroyed'), 'ERR_DATA_CHANNEL'))\n\n if (this._connected) {\n try {\n this.send(chunk)\n } catch (err) {\n return this.destroy(errCode(err, 'ERR_DATA_CHANNEL'))\n }\n if (this._channel.bufferedAmount > MAX_BUFFERED_AMOUNT) {\n this._debug('start backpressure: bufferedAmount %d', this._channel.bufferedAmount)\n this._cb = cb\n } else {\n cb(null)\n }\n } else {\n this._debug('write before connect')\n this._chunk = chunk\n this._cb = cb\n }\n }\n\n // When stream finishes writing, close socket. Half open connections are not\n // supported.\n _onFinish () {\n if (this.destroyed) return\n\n // Wait a bit before destroying so the socket flushes.\n // TODO: is there a more reliable way to accomplish this?\n const destroySoon = () => {\n setTimeout(() => this.destroy(), 1000)\n }\n\n if (this._connected) {\n destroySoon()\n } else {\n this.once('connect', destroySoon)\n }\n }\n\n _startIceCompleteTimeout () {\n if (this.destroyed) return\n if (this._iceCompleteTimer) return\n this._debug('started iceComplete timeout')\n this._iceCompleteTimer = setTimeout(() => {\n if (!this._iceComplete) {\n this._iceComplete = true\n this._debug('iceComplete timeout completed')\n this.emit('iceTimeout')\n this.emit('_iceComplete')\n }\n }, this.iceCompleteTimeout)\n }\n\n _createOffer () {\n if (this.destroyed) return\n\n this._pc.createOffer(this.offerOptions)\n .then(offer => {\n if (this.destroyed) return\n if (!this.trickle && !this.allowHalfTrickle) offer.sdp = filterTrickle(offer.sdp)\n offer.sdp = this.sdpTransform(offer.sdp)\n\n const sendOffer = () => {\n if (this.destroyed) return\n var signal = this._pc.localDescription || offer\n this._debug('signal')\n this.emit('signal', {\n type: signal.type,\n sdp: signal.sdp\n })\n }\n\n const onSuccess = () => {\n this._debug('createOffer success')\n if (this.destroyed) return\n if (this.trickle || this._iceComplete) sendOffer()\n else this.once('_iceComplete', sendOffer) // wait for candidates\n }\n\n const onError = err => {\n this.destroy(errCode(err, 'ERR_SET_LOCAL_DESCRIPTION'))\n }\n\n this._pc.setLocalDescription(offer)\n .then(onSuccess)\n .catch(onError)\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_CREATE_OFFER'))\n })\n }\n\n _requestMissingTransceivers () {\n if (this._pc.getTransceivers) {\n this._pc.getTransceivers().forEach(transceiver => {\n if (!transceiver.mid && transceiver.sender.track && !transceiver.requested) {\n transceiver.requested = true // HACK: Safari returns negotiated transceivers with a null mid\n this.addTransceiver(transceiver.sender.track.kind)\n }\n })\n }\n }\n\n _createAnswer () {\n if (this.destroyed) return\n\n this._pc.createAnswer(this.answerOptions)\n .then(answer => {\n if (this.destroyed) return\n if (!this.trickle && !this.allowHalfTrickle) answer.sdp = filterTrickle(answer.sdp)\n answer.sdp = this.sdpTransform(answer.sdp)\n\n const sendAnswer = () => {\n if (this.destroyed) return\n var signal = this._pc.localDescription || answer\n this._debug('signal')\n this.emit('signal', {\n type: signal.type,\n sdp: signal.sdp\n })\n if (!this.initiator) this._requestMissingTransceivers()\n }\n\n const onSuccess = () => {\n if (this.destroyed) return\n if (this.trickle || this._iceComplete) sendAnswer()\n else this.once('_iceComplete', sendAnswer)\n }\n\n const onError = err => {\n this.destroy(errCode(err, 'ERR_SET_LOCAL_DESCRIPTION'))\n }\n\n this._pc.setLocalDescription(answer)\n .then(onSuccess)\n .catch(onError)\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_CREATE_ANSWER'))\n })\n }\n\n _onConnectionStateChange () {\n if (this.destroyed) return\n if (this._pc.connectionState === 'failed') {\n this.destroy(errCode(new Error('Connection failed.'), 'ERR_CONNECTION_FAILURE'))\n }\n }\n\n _onIceStateChange () {\n if (this.destroyed) return\n var iceConnectionState = this._pc.iceConnectionState\n var iceGatheringState = this._pc.iceGatheringState\n\n this._debug(\n 'iceStateChange (connection: %s) (gathering: %s)',\n iceConnectionState,\n iceGatheringState\n )\n this.emit('iceStateChange', iceConnectionState, iceGatheringState)\n\n if (iceConnectionState === 'connected' || iceConnectionState === 'completed') {\n this._pcReady = true\n this._maybeReady()\n }\n if (iceConnectionState === 'failed') {\n this.destroy(errCode(new Error('Ice connection failed.'), 'ERR_ICE_CONNECTION_FAILURE'))\n }\n if (iceConnectionState === 'closed') {\n this.destroy(errCode(new Error('Ice connection closed.'), 'ERR_ICE_CONNECTION_CLOSED'))\n }\n }\n\n getStats (cb) {\n // statreports can come with a value array instead of properties\n const flattenValues = report => {\n if (Object.prototype.toString.call(report.values) === '[object Array]') {\n report.values.forEach(value => {\n Object.assign(report, value)\n })\n }\n return report\n }\n\n // Promise-based getStats() (standard)\n if (this._pc.getStats.length === 0 || this._isReactNativeWebrtc) {\n this._pc.getStats()\n .then(res => {\n var reports = []\n res.forEach(report => {\n reports.push(flattenValues(report))\n })\n cb(null, reports)\n }, err => cb(err))\n\n // Single-parameter callback-based getStats() (non-standard)\n } else if (this._pc.getStats.length > 0) {\n this._pc.getStats(res => {\n // If we destroy connection in `connect` callback this code might happen to run when actual connection is already closed\n if (this.destroyed) return\n\n var reports = []\n res.result().forEach(result => {\n var report = {}\n result.names().forEach(name => {\n report[name] = result.stat(name)\n })\n report.id = result.id\n report.type = result.type\n report.timestamp = result.timestamp\n reports.push(flattenValues(report))\n })\n cb(null, reports)\n }, err => cb(err))\n\n // Unknown browser, skip getStats() since it's anyone's guess which style of\n // getStats() they implement.\n } else {\n cb(null, [])\n }\n }\n\n _maybeReady () {\n this._debug('maybeReady pc %s channel %s', this._pcReady, this._channelReady)\n if (this._connected || this._connecting || !this._pcReady || !this._channelReady) return\n\n this._connecting = true\n\n // HACK: We can't rely on order here, for details see https://github.com/js-platform/node-webrtc/issues/339\n const findCandidatePair = () => {\n if (this.destroyed) return\n\n this.getStats((err, items) => {\n if (this.destroyed) return\n\n // Treat getStats error as non-fatal. It's not essential.\n if (err) items = []\n\n var remoteCandidates = {}\n var localCandidates = {}\n var candidatePairs = {}\n var foundSelectedCandidatePair = false\n\n items.forEach(item => {\n // TODO: Once all browsers support the hyphenated stats report types, remove\n // the non-hypenated ones\n if (item.type === 'remotecandidate' || item.type === 'remote-candidate') {\n remoteCandidates[item.id] = item\n }\n if (item.type === 'localcandidate' || item.type === 'local-candidate') {\n localCandidates[item.id] = item\n }\n if (item.type === 'candidatepair' || item.type === 'candidate-pair') {\n candidatePairs[item.id] = item\n }\n })\n\n const setSelectedCandidatePair = selectedCandidatePair => {\n foundSelectedCandidatePair = true\n\n var local = localCandidates[selectedCandidatePair.localCandidateId]\n\n if (local && (local.ip || local.address)) {\n // Spec\n this.localAddress = local.ip || local.address\n this.localPort = Number(local.port)\n } else if (local && local.ipAddress) {\n // Firefox\n this.localAddress = local.ipAddress\n this.localPort = Number(local.portNumber)\n } else if (typeof selectedCandidatePair.googLocalAddress === 'string') {\n // TODO: remove this once Chrome 58 is released\n local = selectedCandidatePair.googLocalAddress.split(':')\n this.localAddress = local[0]\n this.localPort = Number(local[1])\n }\n if (this.localAddress) {\n this.localFamily = this.localAddress.includes(':') ? 'IPv6' : 'IPv4'\n }\n\n var remote = remoteCandidates[selectedCandidatePair.remoteCandidateId]\n\n if (remote && (remote.ip || remote.address)) {\n // Spec\n this.remoteAddress = remote.ip || remote.address\n this.remotePort = Number(remote.port)\n } else if (remote && remote.ipAddress) {\n // Firefox\n this.remoteAddress = remote.ipAddress\n this.remotePort = Number(remote.portNumber)\n } else if (typeof selectedCandidatePair.googRemoteAddress === 'string') {\n // TODO: remove this once Chrome 58 is released\n remote = selectedCandidatePair.googRemoteAddress.split(':')\n this.remoteAddress = remote[0]\n this.remotePort = Number(remote[1])\n }\n if (this.remoteAddress) {\n this.remoteFamily = this.remoteAddress.includes(':') ? 'IPv6' : 'IPv4'\n }\n\n this._debug(\n 'connect local: %s:%s remote: %s:%s',\n this.localAddress, this.localPort, this.remoteAddress, this.remotePort\n )\n }\n\n items.forEach(item => {\n // Spec-compliant\n if (item.type === 'transport' && item.selectedCandidatePairId) {\n setSelectedCandidatePair(candidatePairs[item.selectedCandidatePairId])\n }\n\n // Old implementations\n if (\n (item.type === 'googCandidatePair' && item.googActiveConnection === 'true') ||\n ((item.type === 'candidatepair' || item.type === 'candidate-pair') && item.selected)\n ) {\n setSelectedCandidatePair(item)\n }\n })\n\n // Ignore candidate pair selection in browsers like Safari 11 that do not have any local or remote candidates\n // But wait until at least 1 candidate pair is available\n if (!foundSelectedCandidatePair && (!Object.keys(candidatePairs).length || Object.keys(localCandidates).length)) {\n setTimeout(findCandidatePair, 100)\n return\n } else {\n this._connecting = false\n this._connected = true\n }\n\n if (this._chunk) {\n try {\n this.send(this._chunk)\n } catch (err) {\n return this.destroy(errCode(err, 'ERR_DATA_CHANNEL'))\n }\n this._chunk = null\n this._debug('sent chunk from \"write before connect\"')\n\n var cb = this._cb\n this._cb = null\n cb(null)\n }\n\n // If `bufferedAmountLowThreshold` and 'onbufferedamountlow' are unsupported,\n // fallback to using setInterval to implement backpressure.\n if (typeof this._channel.bufferedAmountLowThreshold !== 'number') {\n this._interval = setInterval(() => this._onInterval(), 150)\n if (this._interval.unref) this._interval.unref()\n }\n\n this._debug('connect')\n this.emit('connect')\n })\n }\n findCandidatePair()\n }\n\n _onInterval () {\n if (!this._cb || !this._channel || this._channel.bufferedAmount > MAX_BUFFERED_AMOUNT) {\n return\n }\n this._onChannelBufferedAmountLow()\n }\n\n _onSignalingStateChange () {\n if (this.destroyed) return\n\n if (this._pc.signalingState === 'stable' && !this._firstStable) {\n this._isNegotiating = false\n\n // HACK: Firefox doesn't yet support removing tracks when signalingState !== 'stable'\n this._debug('flushing sender queue', this._sendersAwaitingStable)\n this._sendersAwaitingStable.forEach(sender => {\n this._pc.removeTrack(sender)\n this._queuedNegotiation = true\n })\n this._sendersAwaitingStable = []\n\n if (this._queuedNegotiation) {\n this._debug('flushing negotiation queue')\n this._queuedNegotiation = false\n this._needsNegotiation() // negotiate again\n }\n\n this._debug('negotiate')\n this.emit('negotiate')\n }\n this._firstStable = false\n\n this._debug('signalingStateChange %s', this._pc.signalingState)\n this.emit('signalingStateChange', this._pc.signalingState)\n }\n\n _onIceCandidate (event) {\n if (this.destroyed) return\n if (event.candidate && this.trickle) {\n this.emit('signal', {\n candidate: {\n candidate: event.candidate.candidate,\n sdpMLineIndex: event.candidate.sdpMLineIndex,\n sdpMid: event.candidate.sdpMid\n }\n })\n } else if (!event.candidate && !this._iceComplete) {\n this._iceComplete = true\n this.emit('_iceComplete')\n }\n // as soon as we've received one valid candidate start timeout\n if (event.candidate) {\n this._startIceCompleteTimeout()\n }\n }\n\n _onChannelMessage (event) {\n if (this.destroyed) return\n var data = event.data\n if (data instanceof ArrayBuffer) data = new Uint8Array(data)\n this.push(data)\n }\n\n _onChannelBufferedAmountLow () {\n if (this.destroyed || !this._cb) return\n this._debug('ending backpressure: bufferedAmount %d', this._channel.bufferedAmount)\n var cb = this._cb\n this._cb = null\n cb(null)\n }\n\n _onChannelOpen () {\n if (this._connected || this.destroyed) return\n this._debug('on channel open')\n this._channelReady = true\n this._maybeReady()\n }\n\n _onChannelClose () {\n if (this.destroyed) return\n this._debug('on channel close')\n this.destroy()\n }\n\n _onTrack (event) {\n if (this.destroyed) return\n\n event.streams.forEach(eventStream => {\n this._debug('on track')\n this.emit('track', event.track, eventStream)\n\n this._remoteTracks.push({\n track: event.track,\n stream: eventStream\n })\n\n if (this._remoteStreams.some(remoteStream => {\n return remoteStream.id === eventStream.id\n })) return // Only fire one 'stream' event, even though there may be multiple tracks per stream\n\n this._remoteStreams.push(eventStream)\n queueMicrotask(() => {\n this.emit('stream', eventStream) // ensure all tracks have been added\n })\n })\n }\n\n _debug () {\n var args = [].slice.call(arguments)\n args[0] = '[' + this._id + '] ' + args[0]\n debug.apply(null, args)\n }\n}\n\nPeer.WEBRTC_SUPPORT = !!getBrowserRTC()\n\n/**\n * Expose peer and data channel config for overriding all Peer\n * instances. Otherwise, just set opts.config or opts.channelConfig\n * when constructing a Peer.\n */\nPeer.config = {\n iceServers: [\n {\n urls: [\n 'stun:stun.l.google.com:19302',\n 'stun:global.stun.twilio.com:3478'\n ]\n }\n ],\n sdpSemantics: 'unified-plan'\n}\n\nPeer.channelConfig = {}\n\nmodule.exports = Peer\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","'use strict'\n\nconst abortable = require('abortable-iterator')\nconst toIterable = require('stream-to-it')\nconst { CLOSE_TIMEOUT } = require('./constants')\nconst toMultiaddr = require('libp2p-utils/src/ip-port-to-multiaddr')\n\nconst debug = require('debug')\nconst log = debug('libp2p:webrtc-star:socket')\nlog.error = debug('libp2p:webrtc-star:socket:error')\n\nconst toWebrtcMultiaddr = (address, port) => {\n if (!address || !port) return undefined\n\n try {\n return toMultiaddr(address, port)\n } catch (err) {\n log.error(err)\n // Account for mdns hostnames, just make it a local ip for now\n return toMultiaddr('0.0.0.0', port)\n }\n}\n\n// Convert a socket into a MultiaddrConnection\n// https://github.com/libp2p/js-libp2p-interfaces/tree/master/src/transport#multiaddrconnection\nmodule.exports = (socket, options = {}) => {\n const { sink, source } = toIterable.duplex(socket)\n\n // If the remote address was passed, use it - it may have the peer ID encapsulated\n const remoteAddr = options.remoteAddr || toWebrtcMultiaddr(socket.remoteAddress, socket.remotePort)\n const localAddr = toWebrtcMultiaddr(socket.localAddress, socket.localPort)\n\n const maConn = {\n async sink (source) {\n if (options.signal) {\n source = abortable(source, options.signal)\n }\n\n try {\n await sink((async function * () {\n for await (const chunk of source) {\n // Convert BufferList to Buffer\n yield chunk instanceof Uint8Array ? chunk : chunk.slice()\n }\n })())\n } catch (err) {\n // If aborted we can safely ignore\n if (err.type !== 'aborted') {\n // If the source errored the socket will already have been destroyed by\n // toIterable.duplex(). If the socket errored it will already be\n // destroyed. There's nothing to do here except log the error & return.\n log.error(err)\n }\n }\n },\n\n source: options.signal ? abortable(source, options.signal) : source,\n\n conn: socket,\n\n localAddr,\n remoteAddr,\n\n timeline: { open: Date.now() },\n\n close () {\n if (socket.destroyed) return\n\n return new Promise((resolve, reject) => {\n const start = Date.now()\n\n // Attempt to end the socket. If it takes longer to close than the\n // timeout, destroy it manually.\n const timeout = setTimeout(() => {\n if (maConn.remoteAddr) {\n const { host, port } = maConn.remoteAddr.toOptions()\n log('timeout closing socket to %s:%s after %dms, destroying it manually',\n host, port, Date.now() - start)\n }\n\n if (!socket.destroyed) {\n socket.destroy()\n }\n }, CLOSE_TIMEOUT)\n\n socket.once('close', () => {\n resolve()\n })\n\n socket.end(err => {\n clearTimeout(timeout)\n\n maConn.timeline.close = Date.now()\n if (err) return reject(err)\n })\n })\n }\n }\n\n socket.once('close', () => {\n // In instances where `close` was not explicitly called,\n // such as an iterable stream ending, ensure we have set the close\n // timeline\n if (!maConn.timeline.close) {\n maConn.timeline.close = Date.now()\n }\n })\n\n return maConn\n}\n","const getIterator = require('get-iterator')\n\nmodule.exports = writable => async source => {\n source = getIterator(source)\n\n const maybeEndSource = (source) => {\n if (typeof source.return === 'function') source.return()\n }\n\n let error = null\n let errCb = null\n const errorHandler = (err) => {\n error = err\n if (errCb) errCb(err)\n // When the writable errors, try to end the source to exit iteration early\n maybeEndSource(source)\n }\n\n let closeCb = null\n let closed = false\n const closeHandler = () => {\n closed = true\n if (closeCb) closeCb()\n }\n\n let finishCb = null\n let finished = false\n const finishHandler = () => {\n finished = true\n if (finishCb) finishCb()\n }\n\n let drainCb = null\n const drainHandler = () => {\n if (drainCb) drainCb()\n }\n\n const waitForDrainOrClose = () => {\n return new Promise((resolve, reject) => {\n closeCb = drainCb = resolve\n errCb = reject\n writable.once('drain', drainHandler)\n })\n }\n\n const waitForDone = () => {\n // Immediately try to end the source\n maybeEndSource(source)\n return new Promise((resolve, reject) => {\n if (closed || finished || error) return resolve()\n finishCb = closeCb = resolve\n errCb = reject\n })\n }\n\n const cleanup = () => {\n writable.removeListener('error', errorHandler)\n writable.removeListener('close', closeHandler)\n writable.removeListener('finish', finishHandler)\n writable.removeListener('drain', drainHandler)\n }\n\n writable.once('error', errorHandler)\n writable.once('close', closeHandler)\n writable.once('finish', finishHandler)\n\n try {\n for await (const value of source) {\n if (!writable.writable || writable.destroyed || error) break\n\n if (writable.write(value) === false) {\n await waitForDrainOrClose()\n }\n }\n } catch (err) {\n // error is set by stream error handler so only destroy stream if source threw\n if (!error) {\n writable.destroy()\n }\n\n // could we be obscuring an error here?\n error = err\n }\n\n try {\n // We're done writing, end everything (n.b. stream may be destroyed at this point but then this is a no-op)\n if (writable.writable) {\n writable.end()\n }\n\n // Wait until we close or finish. This supports halfClosed streams\n await waitForDone()\n\n // Notify the user an error occurred\n if (error) throw error\n } finally {\n // Clean up listeners\n cleanup()\n }\n}\n","const toSink = require('./sink')\nconst toSource = require('./source')\n\nmodule.exports = duplex => ({ sink: toSink(duplex), source: toSource(duplex) })\n","'use strict'\n\nconst { Multiaddr } = require('multiaddr')\n\nfunction cleanUrlSIO (ma) {\n const maStrSplit = ma.toString().split('/')\n const tcpProto = ma.protos()[1].name\n const wsProto = ma.protos()[2].name\n const tcpPort = ma.stringTuples()[1][1]\n\n if (tcpProto !== 'tcp' || (wsProto !== 'ws' && wsProto !== 'wss')) {\n throw new Error('invalid multiaddr: ' + ma.toString())\n }\n\n if (!Multiaddr.isName(ma)) {\n return 'http://' + maStrSplit[2] + ':' + maStrSplit[4]\n }\n\n if (wsProto === 'ws') {\n return 'http://' + maStrSplit[2] + (tcpPort === '80' ? '' : ':' + tcpPort)\n }\n\n if (wsProto === 'wss') {\n return 'https://' + maStrSplit[2] + (tcpPort === '443' ? '' : ':' + tcpPort)\n }\n}\n\nfunction cleanMultiaddr (maStr) {\n const legacy = '/libp2p-webrtc-star'\n\n if (maStr.indexOf(legacy) !== -1) {\n maStr = maStr.substring(legacy.length, maStr.length)\n let ma = new Multiaddr(maStr)\n const tuppleIPFS = ma.stringTuples().filter((tupple) => {\n return tupple[0] === 421 // ipfs code\n })[0]\n\n ma = ma.decapsulate('p2p')\n ma = ma.encapsulate('/p2p-webrtc-star')\n ma = ma.encapsulate(`/p2p/${tuppleIPFS[1]}`)\n maStr = ma.toString()\n }\n\n return maStr\n}\n\nmodule.exports = {\n cleanUrlSIO,\n cleanMultiaddr\n}\n","'use strict'\n\nconst MAX_MSG_SIZE = 1 << 20 // 1MB\n\n/**\n * Creates an iterable transform that restricts message sizes to\n * the given maximum size.\n *\n * @param {number} [max] - The maximum message size. Defaults to 1MB\n * @returns {*} An iterable transform.\n */\nmodule.exports = max => {\n max = max || MAX_MSG_SIZE\n\n const checkSize = msg => {\n if (msg.data && msg.data.length > max) {\n throw Object.assign(new Error('message size too large!'), { code: 'ERR_MSG_TOO_BIG' })\n }\n }\n\n return source => {\n return (async function * restrictSize () {\n for await (const msg of source) {\n if (Array.isArray(msg)) {\n msg.forEach(checkSize)\n } else {\n checkSize(msg)\n }\n yield msg\n }\n })()\n }\n}\n\nmodule.exports.MAX_MSG_SIZE = MAX_MSG_SIZE\n","'use strict'\n\nconst MessageTypes = Object.freeze({\n NEW_STREAM: 0,\n MESSAGE_RECEIVER: 1,\n MESSAGE_INITIATOR: 2,\n CLOSE_RECEIVER: 3,\n CLOSE_INITIATOR: 4,\n RESET_RECEIVER: 5,\n RESET_INITIATOR: 6\n})\n\nexports.MessageTypes = MessageTypes\n\nexports.InitiatorMessageTypes = Object.freeze({\n NEW_STREAM: MessageTypes.NEW_STREAM,\n MESSAGE: MessageTypes.MESSAGE_INITIATOR,\n CLOSE: MessageTypes.CLOSE_INITIATOR,\n RESET: MessageTypes.RESET_INITIATOR\n})\n\nexports.ReceiverMessageTypes = Object.freeze({\n MESSAGE: MessageTypes.MESSAGE_RECEIVER,\n CLOSE: MessageTypes.CLOSE_RECEIVER,\n RESET: MessageTypes.RESET_RECEIVER\n})\n\nexports.MessageTypeNames = Object.freeze(\n Object.entries(MessageTypes).reduce((obj, e) => {\n obj[e[1]] = e[0]\n return obj\n }, {})\n)\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Noise = void 0;\nconst x25519 = __importStar(require(\"@stablelib/x25519\"));\nconst buffer_1 = require(\"buffer\");\nconst it_pb_rpc_1 = __importDefault(require(\"it-pb-rpc\"));\nconst duplex_1 = __importDefault(require(\"it-pair/duplex\"));\nconst it_buffer_1 = __importDefault(require(\"it-buffer\"));\nconst it_pipe_1 = __importDefault(require(\"it-pipe\"));\nconst it_length_prefixed_1 = require(\"it-length-prefixed\");\nconst handshake_xx_1 = require(\"./handshake-xx\");\nconst handshake_ik_1 = require(\"./handshake-ik\");\nconst handshake_xx_fallback_1 = require(\"./handshake-xx-fallback\");\nconst utils_1 = require(\"./utils\");\nconst encoder_1 = require(\"./encoder\");\nconst crypto_1 = require(\"./crypto\");\nconst keycache_1 = require(\"./keycache\");\nconst logger_1 = require(\"./logger\");\nconst constants_1 = require(\"./constants\");\nclass Noise {\n /**\n *\n * @param {bytes} staticNoiseKey - x25519 private key, reuse for faster handshakes\n * @param {bytes} earlyData\n */\n constructor(staticNoiseKey, earlyData) {\n this.protocol = '/noise';\n this.prologue = buffer_1.Buffer.alloc(0);\n this.earlyData = earlyData !== null && earlyData !== void 0 ? earlyData : buffer_1.Buffer.alloc(0);\n // disabled until properly specked\n this.useNoisePipes = false;\n if (staticNoiseKey) {\n // accepts x25519 private key of length 32\n const keyPair = x25519.generateKeyPairFromSeed(staticNoiseKey);\n this.staticKeys = {\n privateKey: buffer_1.Buffer.from(keyPair.secretKey.buffer, keyPair.secretKey.byteOffset, keyPair.secretKey.length),\n publicKey: buffer_1.Buffer.from(keyPair.publicKey.buffer, keyPair.publicKey.byteOffset, keyPair.publicKey.length)\n };\n }\n else {\n this.staticKeys = utils_1.generateKeypair();\n }\n }\n /**\n * Encrypt outgoing data to the remote party (handshake as initiator)\n *\n * @param {PeerId} localPeer - PeerId of the receiving peer\n * @param {any} connection - streaming iterable duplex that will be encrypted\n * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer.\n * @returns {Promise}\n */\n async secureOutbound(localPeer, connection, remotePeer) {\n const wrappedConnection = it_pb_rpc_1.default(connection, {\n lengthEncoder: encoder_1.uint16BEEncode,\n lengthDecoder: encoder_1.uint16BEDecode,\n maxDataLength: constants_1.NOISE_MSG_MAX_LENGTH_BYTES\n });\n const handshake = await this.performHandshake({\n connection: wrappedConnection,\n isInitiator: true,\n localPeer,\n remotePeer\n });\n const conn = await this.createSecureConnection(wrappedConnection, handshake);\n return {\n conn,\n remoteEarlyData: handshake.remoteEarlyData,\n remotePeer: handshake.remotePeer\n };\n }\n /**\n * Decrypt incoming data (handshake as responder).\n *\n * @param {PeerId} localPeer - PeerId of the receiving peer.\n * @param {any} connection - streaming iterable duplex that will be encryption.\n * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades.\n * @returns {Promise}\n */\n async secureInbound(localPeer, connection, remotePeer) {\n const wrappedConnection = it_pb_rpc_1.default(connection, {\n lengthEncoder: encoder_1.uint16BEEncode,\n lengthDecoder: encoder_1.uint16BEDecode,\n maxDataLength: constants_1.NOISE_MSG_MAX_LENGTH_BYTES\n });\n const handshake = await this.performHandshake({\n connection: wrappedConnection,\n isInitiator: false,\n localPeer,\n remotePeer\n });\n const conn = await this.createSecureConnection(wrappedConnection, handshake);\n return {\n conn,\n remoteEarlyData: handshake.remoteEarlyData,\n remotePeer: handshake.remotePeer\n };\n }\n /**\n * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails.\n * If noise pipes disabled or remote peer static key is unknown, use XX.\n *\n * @param {HandshakeParams} params\n */\n async performHandshake(params) {\n var _a;\n const payload = await utils_1.getPayload(params.localPeer, this.staticKeys.publicKey, this.earlyData);\n let tryIK = this.useNoisePipes;\n if (params.isInitiator && keycache_1.KeyCache.load(params.remotePeer) === null) {\n // if we are initiator and remote static key is unknown, don't try IK\n tryIK = false;\n }\n // Try IK if acting as responder or initiator that has remote's static key.\n if (tryIK) {\n // Try IK first\n const { remotePeer, connection, isInitiator } = params;\n const ikHandshake = new handshake_ik_1.IKHandshake(isInitiator, payload, this.prologue, this.staticKeys, connection, \n // safe to cast as we did checks\n (_a = keycache_1.KeyCache.load(params.remotePeer)) !== null && _a !== void 0 ? _a : buffer_1.Buffer.alloc(32), remotePeer);\n try {\n return await this.performIKHandshake(ikHandshake);\n }\n catch (e) {\n // IK failed, go to XX fallback\n let ephemeralKeys;\n if (params.isInitiator) {\n ephemeralKeys = ikHandshake.getLocalEphemeralKeys();\n }\n return await this.performXXFallbackHandshake(params, payload, e.initialMsg, ephemeralKeys);\n }\n }\n else {\n // run XX handshake\n return await this.performXXHandshake(params, payload);\n }\n }\n async performXXFallbackHandshake(params, payload, initialMsg, ephemeralKeys) {\n const { isInitiator, remotePeer, connection } = params;\n const handshake = new handshake_xx_fallback_1.XXFallbackHandshake(isInitiator, payload, this.prologue, this.staticKeys, connection, initialMsg, remotePeer, ephemeralKeys);\n try {\n await handshake.propose();\n await handshake.exchange();\n await handshake.finish();\n }\n catch (e) {\n logger_1.logger(e);\n const err = e;\n throw new Error(`Error occurred during XX Fallback handshake: ${err.message}`);\n }\n return handshake;\n }\n async performXXHandshake(params, payload) {\n const { isInitiator, remotePeer, connection } = params;\n const handshake = new handshake_xx_1.XXHandshake(isInitiator, payload, this.prologue, this.staticKeys, connection, remotePeer);\n try {\n await handshake.propose();\n await handshake.exchange();\n await handshake.finish();\n if (this.useNoisePipes && handshake.remotePeer) {\n keycache_1.KeyCache.store(handshake.remotePeer, handshake.getRemoteStaticKey());\n }\n }\n catch (e) {\n const err = e;\n throw new Error(`Error occurred during XX handshake: ${err.message}`);\n }\n return handshake;\n }\n async performIKHandshake(handshake) {\n await handshake.stage0();\n await handshake.stage1();\n return handshake;\n }\n async createSecureConnection(connection, handshake) {\n // Create encryption box/unbox wrapper\n const [secure, user] = duplex_1.default();\n const network = connection.unwrap();\n await it_pipe_1.default(secure, // write to wrapper\n it_buffer_1.default, // ensure any type of data is converted to buffer\n crypto_1.encryptStream(handshake), // data is encrypted\n it_length_prefixed_1.encode({ lengthEncoder: encoder_1.uint16BEEncode }), // prefix with message length\n network, // send to the remote peer\n it_length_prefixed_1.decode({ lengthDecoder: encoder_1.uint16BEDecode }), // read message length prefix\n it_buffer_1.default, // ensure any type of data is converted to buffer\n crypto_1.decryptStream(handshake), // decrypt the incoming data\n secure // pipe to the wrapper\n );\n return user;\n }\n}\nexports.Noise = Noise;\n//# sourceMappingURL=noise.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XXHandshake = void 0;\nconst buffer_1 = require(\"buffer\");\nconst xx_1 = require(\"./handshakes/xx\");\nconst utils_1 = require(\"./utils\");\nconst logger_1 = require(\"./logger\");\nconst encoder_1 = require(\"./encoder\");\nclass XXHandshake {\n constructor(isInitiator, payload, prologue, staticKeypair, connection, remotePeer, handshake) {\n this.isInitiator = isInitiator;\n this.payload = payload;\n this.prologue = prologue;\n this.staticKeypair = staticKeypair;\n this.connection = connection;\n if (remotePeer) {\n this.remotePeer = remotePeer;\n }\n this.xx = handshake !== null && handshake !== void 0 ? handshake : new xx_1.XX();\n this.session = this.xx.initSession(this.isInitiator, this.prologue, this.staticKeypair);\n this.remoteEarlyData = buffer_1.Buffer.alloc(0);\n }\n // stage 0\n async propose() {\n logger_1.logLocalStaticKeys(this.session.hs.s);\n if (this.isInitiator) {\n logger_1.logger('Stage 0 - Initiator starting to send first message.');\n const messageBuffer = this.xx.sendMessage(this.session, buffer_1.Buffer.alloc(0));\n this.connection.writeLP(encoder_1.encode0(messageBuffer));\n logger_1.logger('Stage 0 - Initiator finished sending first message.');\n logger_1.logLocalEphemeralKeys(this.session.hs.e);\n }\n else {\n logger_1.logger('Stage 0 - Responder waiting to receive first message...');\n const receivedMessageBuffer = encoder_1.decode0((await this.connection.readLP()).slice());\n const { valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);\n if (!valid) {\n throw new Error('xx handshake stage 0 validation fail');\n }\n logger_1.logger('Stage 0 - Responder received first message.');\n logger_1.logRemoteEphemeralKey(this.session.hs.re);\n }\n }\n // stage 1\n async exchange() {\n if (this.isInitiator) {\n logger_1.logger('Stage 1 - Initiator waiting to receive first message from responder...');\n const receivedMessageBuffer = encoder_1.decode1((await this.connection.readLP()).slice());\n const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);\n if (!valid) {\n throw new Error('xx handshake stage 1 validation fail');\n }\n logger_1.logger('Stage 1 - Initiator received the message.');\n logger_1.logRemoteEphemeralKey(this.session.hs.re);\n logger_1.logRemoteStaticKey(this.session.hs.rs);\n logger_1.logger(\"Initiator going to check remote's signature...\");\n try {\n const decodedPayload = await utils_1.decodePayload(plaintext);\n this.remotePeer = this.remotePeer || await utils_1.getPeerIdFromPayload(decodedPayload);\n this.remotePeer = await utils_1.verifySignedPayload(receivedMessageBuffer.ns, decodedPayload, this.remotePeer);\n this.setRemoteEarlyData(decodedPayload.data);\n }\n catch (e) {\n const err = e;\n throw new Error(`Error occurred while verifying signed payload: ${err.message}`);\n }\n logger_1.logger('All good with the signature!');\n }\n else {\n logger_1.logger('Stage 1 - Responder sending out first message with signed payload and static key.');\n const messageBuffer = this.xx.sendMessage(this.session, this.payload);\n this.connection.writeLP(encoder_1.encode1(messageBuffer));\n logger_1.logger('Stage 1 - Responder sent the second handshake message with signed payload.');\n logger_1.logLocalEphemeralKeys(this.session.hs.e);\n }\n }\n // stage 2\n async finish() {\n if (this.isInitiator) {\n logger_1.logger('Stage 2 - Initiator sending third handshake message.');\n const messageBuffer = this.xx.sendMessage(this.session, this.payload);\n this.connection.writeLP(encoder_1.encode2(messageBuffer));\n logger_1.logger('Stage 2 - Initiator sent message with signed payload.');\n }\n else {\n logger_1.logger('Stage 2 - Responder waiting for third handshake message...');\n const receivedMessageBuffer = encoder_1.decode2((await this.connection.readLP()).slice());\n const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);\n if (!valid) {\n throw new Error('xx handshake stage 2 validation fail');\n }\n logger_1.logger('Stage 2 - Responder received the message, finished handshake.');\n try {\n const decodedPayload = await utils_1.decodePayload(plaintext);\n this.remotePeer = this.remotePeer || await utils_1.getPeerIdFromPayload(decodedPayload);\n await utils_1.verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer);\n this.setRemoteEarlyData(decodedPayload.data);\n }\n catch (e) {\n const err = e;\n throw new Error(`Error occurred while verifying signed payload: ${err.message}`);\n }\n }\n logger_1.logCipherState(this.session);\n }\n encrypt(plaintext, session) {\n const cs = this.getCS(session);\n return this.xx.encryptWithAd(cs, buffer_1.Buffer.alloc(0), plaintext);\n }\n decrypt(ciphertext, session) {\n const cs = this.getCS(session, false);\n return this.xx.decryptWithAd(cs, buffer_1.Buffer.alloc(0), ciphertext);\n }\n getRemoteStaticKey() {\n return this.session.hs.rs;\n }\n getCS(session, encryption = true) {\n if (!session.cs1 || !session.cs2) {\n throw new Error('Handshake not completed properly, cipher state does not exist.');\n }\n if (this.isInitiator) {\n return encryption ? session.cs1 : session.cs2;\n }\n else {\n return encryption ? session.cs2 : session.cs1;\n }\n }\n setRemoteEarlyData(data) {\n if (data) {\n this.remoteEarlyData = buffer_1.Buffer.from(data.buffer, data.byteOffset, data.length);\n }\n }\n}\nexports.XXHandshake = XXHandshake;\n//# sourceMappingURL=handshake-xx.js.map","\"use strict\";\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar binary_1 = require(\"@stablelib/binary\");\nvar wipe_1 = require(\"@stablelib/wipe\");\nexports.DIGEST_LENGTH = 32;\nexports.BLOCK_SIZE = 64;\n/**\n * SHA2-256 cryptographic hash algorithm.\n */\nvar SHA256 = /** @class */ (function () {\n function SHA256() {\n /** Length of hash output */\n this.digestLength = exports.DIGEST_LENGTH;\n /** Block size */\n this.blockSize = exports.BLOCK_SIZE;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this._state = new Int32Array(8); // hash state\n this._temp = new Int32Array(64); // temporary state\n this._buffer = new Uint8Array(128); // buffer for data to hash\n this._bufferLength = 0; // number of bytes in buffer\n this._bytesHashed = 0; // number of total bytes hashed\n this._finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n SHA256.prototype._initState = function () {\n this._state[0] = 0x6a09e667;\n this._state[1] = 0xbb67ae85;\n this._state[2] = 0x3c6ef372;\n this._state[3] = 0xa54ff53a;\n this._state[4] = 0x510e527f;\n this._state[5] = 0x9b05688c;\n this._state[6] = 0x1f83d9ab;\n this._state[7] = 0x5be0cd19;\n };\n /**\n * Resets hash state making it possible\n * to re-use this instance to hash other data.\n */\n SHA256.prototype.reset = function () {\n this._initState();\n this._bufferLength = 0;\n this._bytesHashed = 0;\n this._finished = false;\n return this;\n };\n /**\n * Cleans internal buffers and resets hash state.\n */\n SHA256.prototype.clean = function () {\n wipe_1.wipe(this._buffer);\n wipe_1.wipe(this._temp);\n this.reset();\n };\n /**\n * Updates hash state with the given data.\n *\n * Throws error when trying to update already finalized hash:\n * instance must be reset to update it again.\n */\n SHA256.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this._finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n var dataPos = 0;\n this._bytesHashed += dataLength;\n if (this._bufferLength > 0) {\n while (this._bufferLength < this.blockSize && dataLength > 0) {\n this._buffer[this._bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this._bufferLength === this.blockSize) {\n hashBlocks(this._temp, this._state, this._buffer, 0, this.blockSize);\n this._bufferLength = 0;\n }\n }\n if (dataLength >= this.blockSize) {\n dataPos = hashBlocks(this._temp, this._state, data, dataPos, dataLength);\n dataLength %= this.blockSize;\n }\n while (dataLength > 0) {\n this._buffer[this._bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n /**\n * Finalizes hash state and puts hash into out.\n * If hash was already finalized, puts the same value.\n */\n SHA256.prototype.finish = function (out) {\n if (!this._finished) {\n var bytesHashed = this._bytesHashed;\n var left = this._bufferLength;\n var bitLenHi = (bytesHashed / 0x20000000) | 0;\n var bitLenLo = bytesHashed << 3;\n var padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this._buffer[left] = 0x80;\n for (var i = left + 1; i < padLength - 8; i++) {\n this._buffer[i] = 0;\n }\n binary_1.writeUint32BE(bitLenHi, this._buffer, padLength - 8);\n binary_1.writeUint32BE(bitLenLo, this._buffer, padLength - 4);\n hashBlocks(this._temp, this._state, this._buffer, 0, padLength);\n this._finished = true;\n }\n for (var i = 0; i < this.digestLength / 4; i++) {\n binary_1.writeUint32BE(this._state[i], out, i * 4);\n }\n return this;\n };\n /**\n * Returns the final hash digest.\n */\n SHA256.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n /**\n * Function useful for HMAC/PBKDF2 optimization.\n * Returns hash state to be used with restoreState().\n * Only chain value is saved, not buffers or other\n * state variables.\n */\n SHA256.prototype.saveState = function () {\n if (this._finished) {\n throw new Error(\"SHA256: cannot save finished state\");\n }\n return {\n state: new Int32Array(this._state),\n buffer: this._bufferLength > 0 ? new Uint8Array(this._buffer) : undefined,\n bufferLength: this._bufferLength,\n bytesHashed: this._bytesHashed\n };\n };\n /**\n * Function useful for HMAC/PBKDF2 optimization.\n * Restores state saved by saveState() and sets bytesHashed\n * to the given value.\n */\n SHA256.prototype.restoreState = function (savedState) {\n this._state.set(savedState.state);\n this._bufferLength = savedState.bufferLength;\n if (savedState.buffer) {\n this._buffer.set(savedState.buffer);\n }\n this._bytesHashed = savedState.bytesHashed;\n this._finished = false;\n return this;\n };\n /**\n * Cleans state returned by saveState().\n */\n SHA256.prototype.cleanSavedState = function (savedState) {\n wipe_1.wipe(savedState.state);\n if (savedState.buffer) {\n wipe_1.wipe(savedState.buffer);\n }\n savedState.bufferLength = 0;\n savedState.bytesHashed = 0;\n };\n return SHA256;\n}());\nexports.SHA256 = SHA256;\n// Constants\nvar K = new Int32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n while (len >= 64) {\n var a = v[0];\n var b = v[1];\n var c = v[2];\n var d = v[3];\n var e = v[4];\n var f = v[5];\n var g = v[6];\n var h = v[7];\n for (var i = 0; i < 16; i++) {\n var j = pos + i * 4;\n w[i] = binary_1.readUint32BE(p, j);\n }\n for (var i = 16; i < 64; i++) {\n var u = w[i - 2];\n var t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n var t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (var i = 0; i < 64; i++) {\n var t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n var t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\nfunction hash(data) {\n var h = new SHA256();\n h.update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hash = hash;\n//# sourceMappingURL=sha256.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractHandshake = exports.MIN_NONCE = void 0;\nconst buffer_1 = require(\"buffer\");\nconst x25519 = __importStar(require(\"@stablelib/x25519\"));\nconst SHA256 = __importStar(require(\"@stablelib/sha256\"));\nconst chacha20poly1305_1 = require(\"@stablelib/chacha20poly1305\");\nconst utils_1 = require(\"../utils\");\nconst logger_1 = require(\"../logger\");\nexports.MIN_NONCE = 0;\nclass AbstractHandshake {\n encryptWithAd(cs, ad, plaintext) {\n const e = this.encrypt(cs.k, cs.n, ad, plaintext);\n this.setNonce(cs, this.incrementNonce(cs.n));\n return e;\n }\n decryptWithAd(cs, ad, ciphertext) {\n const { plaintext, valid } = this.decrypt(cs.k, cs.n, ad, ciphertext);\n this.setNonce(cs, this.incrementNonce(cs.n));\n return { plaintext, valid };\n }\n // Cipher state related\n hasKey(cs) {\n return !this.isEmptyKey(cs.k);\n }\n setNonce(cs, nonce) {\n cs.n = nonce;\n }\n createEmptyKey() {\n return buffer_1.Buffer.alloc(32);\n }\n isEmptyKey(k) {\n const emptyKey = this.createEmptyKey();\n return emptyKey.equals(k);\n }\n incrementNonce(n) {\n return n + 1;\n }\n nonceToBytes(n) {\n const nonce = buffer_1.Buffer.alloc(12);\n nonce.writeUInt32LE(n, 4);\n return nonce;\n }\n encrypt(k, n, ad, plaintext) {\n const nonce = this.nonceToBytes(n);\n const ctx = new chacha20poly1305_1.ChaCha20Poly1305(k);\n const encryptedMessage = ctx.seal(nonce, plaintext, ad);\n return buffer_1.Buffer.from(encryptedMessage.buffer, encryptedMessage.byteOffset, encryptedMessage.length);\n }\n encryptAndHash(ss, plaintext) {\n let ciphertext;\n if (this.hasKey(ss.cs)) {\n ciphertext = this.encryptWithAd(ss.cs, ss.h, plaintext);\n }\n else {\n ciphertext = plaintext;\n }\n this.mixHash(ss, ciphertext);\n return ciphertext;\n }\n decrypt(k, n, ad, ciphertext) {\n const nonce = this.nonceToBytes(n);\n const ctx = new chacha20poly1305_1.ChaCha20Poly1305(k);\n const encryptedMessage = ctx.open(nonce, ciphertext, ad);\n if (encryptedMessage) {\n return {\n plaintext: buffer_1.Buffer.from(encryptedMessage.buffer, encryptedMessage.byteOffset, encryptedMessage.length),\n valid: true\n };\n }\n else {\n return {\n plaintext: buffer_1.Buffer.from(''),\n valid: false\n };\n }\n }\n decryptAndHash(ss, ciphertext) {\n let plaintext;\n let valid = true;\n if (this.hasKey(ss.cs)) {\n ({ plaintext, valid } = this.decryptWithAd(ss.cs, ss.h, ciphertext));\n }\n else {\n plaintext = ciphertext;\n }\n this.mixHash(ss, ciphertext);\n return { plaintext, valid };\n }\n dh(privateKey, publicKey) {\n try {\n const derivedU8 = x25519.sharedKey(privateKey, publicKey);\n const derived = buffer_1.Buffer.from(derivedU8.buffer, derivedU8.byteOffset, derivedU8.length);\n const result = buffer_1.Buffer.alloc(32);\n derived.copy(result);\n return result;\n }\n catch (e) {\n logger_1.logger(e.message);\n return buffer_1.Buffer.alloc(32);\n }\n }\n mixHash(ss, data) {\n ss.h = this.getHash(ss.h, data);\n }\n getHash(a, b) {\n const hash = SHA256.hash(buffer_1.Buffer.from([...a, ...b]));\n return buffer_1.Buffer.from(hash.buffer, hash.byteOffset, hash.length);\n }\n mixKey(ss, ikm) {\n const [ck, tempK] = utils_1.getHkdf(ss.ck, ikm);\n ss.cs = this.initializeKey(tempK);\n ss.ck = ck;\n }\n initializeKey(k) {\n const n = exports.MIN_NONCE;\n return { k, n };\n }\n // Symmetric state related\n initializeSymmetric(protocolName) {\n const protocolNameBytes = buffer_1.Buffer.from(protocolName, 'utf-8');\n const h = this.hashProtocolName(protocolNameBytes);\n const ck = h;\n const key = this.createEmptyKey();\n const cs = this.initializeKey(key);\n return { cs, ck, h };\n }\n hashProtocolName(protocolName) {\n if (protocolName.length <= 32) {\n const h = buffer_1.Buffer.alloc(32);\n protocolName.copy(h);\n return h;\n }\n else {\n return this.getHash(protocolName, buffer_1.Buffer.alloc(0));\n }\n }\n split(ss) {\n const [tempk1, tempk2] = utils_1.getHkdf(ss.ck, buffer_1.Buffer.alloc(0));\n const cs1 = this.initializeKey(tempk1);\n const cs2 = this.initializeKey(tempk2);\n return { cs1, cs2 };\n }\n writeMessageRegular(cs, payload) {\n const ciphertext = this.encryptWithAd(cs, buffer_1.Buffer.alloc(0), payload);\n const ne = this.createEmptyKey();\n const ns = buffer_1.Buffer.alloc(0);\n return { ne, ns, ciphertext };\n }\n readMessageRegular(cs, message) {\n return this.decryptWithAd(cs, buffer_1.Buffer.alloc(0), message.ciphertext);\n }\n}\nexports.AbstractHandshake = AbstractHandshake;\n//# sourceMappingURL=abstract-handshake.js.map","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-dht-message\"] || ($protobuf.roots[\"libp2p-dht-message\"] = {});\n\n$root.Record = (function() {\n\n /**\n * Properties of a Record.\n * @exports IRecord\n * @interface IRecord\n * @property {Uint8Array|null} [key] Record key\n * @property {Uint8Array|null} [value] Record value\n * @property {Uint8Array|null} [author] Record author\n * @property {Uint8Array|null} [signature] Record signature\n * @property {string|null} [timeReceived] Record timeReceived\n */\n\n /**\n * Constructs a new Record.\n * @exports Record\n * @classdesc Represents a Record.\n * @implements IRecord\n * @constructor\n * @param {IRecord=} [p] Properties to set\n */\n function Record(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Record key.\n * @member {Uint8Array|null|undefined} key\n * @memberof Record\n * @instance\n */\n Record.prototype.key = null;\n\n /**\n * Record value.\n * @member {Uint8Array|null|undefined} value\n * @memberof Record\n * @instance\n */\n Record.prototype.value = null;\n\n /**\n * Record author.\n * @member {Uint8Array|null|undefined} author\n * @memberof Record\n * @instance\n */\n Record.prototype.author = null;\n\n /**\n * Record signature.\n * @member {Uint8Array|null|undefined} signature\n * @memberof Record\n * @instance\n */\n Record.prototype.signature = null;\n\n /**\n * Record timeReceived.\n * @member {string|null|undefined} timeReceived\n * @memberof Record\n * @instance\n */\n Record.prototype.timeReceived = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * Record _key.\n * @member {\"key\"|undefined} _key\n * @memberof Record\n * @instance\n */\n Object.defineProperty(Record.prototype, \"_key\", {\n get: $util.oneOfGetter($oneOfFields = [\"key\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Record _value.\n * @member {\"value\"|undefined} _value\n * @memberof Record\n * @instance\n */\n Object.defineProperty(Record.prototype, \"_value\", {\n get: $util.oneOfGetter($oneOfFields = [\"value\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Record _author.\n * @member {\"author\"|undefined} _author\n * @memberof Record\n * @instance\n */\n Object.defineProperty(Record.prototype, \"_author\", {\n get: $util.oneOfGetter($oneOfFields = [\"author\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Record _signature.\n * @member {\"signature\"|undefined} _signature\n * @memberof Record\n * @instance\n */\n Object.defineProperty(Record.prototype, \"_signature\", {\n get: $util.oneOfGetter($oneOfFields = [\"signature\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Record _timeReceived.\n * @member {\"timeReceived\"|undefined} _timeReceived\n * @memberof Record\n * @instance\n */\n Object.defineProperty(Record.prototype, \"_timeReceived\", {\n get: $util.oneOfGetter($oneOfFields = [\"timeReceived\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified Record message. Does not implicitly {@link Record.verify|verify} messages.\n * @function encode\n * @memberof Record\n * @static\n * @param {IRecord} m Record message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Record.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.key != null && Object.hasOwnProperty.call(m, \"key\"))\n w.uint32(10).bytes(m.key);\n if (m.value != null && Object.hasOwnProperty.call(m, \"value\"))\n w.uint32(18).bytes(m.value);\n if (m.author != null && Object.hasOwnProperty.call(m, \"author\"))\n w.uint32(26).bytes(m.author);\n if (m.signature != null && Object.hasOwnProperty.call(m, \"signature\"))\n w.uint32(34).bytes(m.signature);\n if (m.timeReceived != null && Object.hasOwnProperty.call(m, \"timeReceived\"))\n w.uint32(42).string(m.timeReceived);\n return w;\n };\n\n /**\n * Decodes a Record message from the specified reader or buffer.\n * @function decode\n * @memberof Record\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Record} Record\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Record.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Record();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.key = r.bytes();\n break;\n case 2:\n m.value = r.bytes();\n break;\n case 3:\n m.author = r.bytes();\n break;\n case 4:\n m.signature = r.bytes();\n break;\n case 5:\n m.timeReceived = r.string();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a Record message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Record\n * @static\n * @param {Object.} d Plain object\n * @returns {Record} Record\n */\n Record.fromObject = function fromObject(d) {\n if (d instanceof $root.Record)\n return d;\n var m = new $root.Record();\n if (d.key != null) {\n if (typeof d.key === \"string\")\n $util.base64.decode(d.key, m.key = $util.newBuffer($util.base64.length(d.key)), 0);\n else if (d.key.length)\n m.key = d.key;\n }\n if (d.value != null) {\n if (typeof d.value === \"string\")\n $util.base64.decode(d.value, m.value = $util.newBuffer($util.base64.length(d.value)), 0);\n else if (d.value.length)\n m.value = d.value;\n }\n if (d.author != null) {\n if (typeof d.author === \"string\")\n $util.base64.decode(d.author, m.author = $util.newBuffer($util.base64.length(d.author)), 0);\n else if (d.author.length)\n m.author = d.author;\n }\n if (d.signature != null) {\n if (typeof d.signature === \"string\")\n $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0);\n else if (d.signature.length)\n m.signature = d.signature;\n }\n if (d.timeReceived != null) {\n m.timeReceived = String(d.timeReceived);\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Record message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Record\n * @static\n * @param {Record} m Record\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n Record.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (m.key != null && m.hasOwnProperty(\"key\")) {\n d.key = o.bytes === String ? $util.base64.encode(m.key, 0, m.key.length) : o.bytes === Array ? Array.prototype.slice.call(m.key) : m.key;\n if (o.oneofs)\n d._key = \"key\";\n }\n if (m.value != null && m.hasOwnProperty(\"value\")) {\n d.value = o.bytes === String ? $util.base64.encode(m.value, 0, m.value.length) : o.bytes === Array ? Array.prototype.slice.call(m.value) : m.value;\n if (o.oneofs)\n d._value = \"value\";\n }\n if (m.author != null && m.hasOwnProperty(\"author\")) {\n d.author = o.bytes === String ? $util.base64.encode(m.author, 0, m.author.length) : o.bytes === Array ? Array.prototype.slice.call(m.author) : m.author;\n if (o.oneofs)\n d._author = \"author\";\n }\n if (m.signature != null && m.hasOwnProperty(\"signature\")) {\n d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature;\n if (o.oneofs)\n d._signature = \"signature\";\n }\n if (m.timeReceived != null && m.hasOwnProperty(\"timeReceived\")) {\n d.timeReceived = m.timeReceived;\n if (o.oneofs)\n d._timeReceived = \"timeReceived\";\n }\n return d;\n };\n\n /**\n * Converts this Record to JSON.\n * @function toJSON\n * @memberof Record\n * @instance\n * @returns {Object.} JSON object\n */\n Record.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Record;\n})();\n\n$root.Message = (function() {\n\n /**\n * Properties of a Message.\n * @exports IMessage\n * @interface IMessage\n * @property {Message.MessageType|null} [type] Message type\n * @property {number|null} [clusterLevelRaw] Message clusterLevelRaw\n * @property {Uint8Array|null} [key] Message key\n * @property {Uint8Array|null} [record] Message record\n * @property {Array.|null} [closerPeers] Message closerPeers\n * @property {Array.|null} [providerPeers] Message providerPeers\n */\n\n /**\n * Constructs a new Message.\n * @exports Message\n * @classdesc Represents a Message.\n * @implements IMessage\n * @constructor\n * @param {IMessage=} [p] Properties to set\n */\n function Message(p) {\n this.closerPeers = [];\n this.providerPeers = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Message type.\n * @member {Message.MessageType|null|undefined} type\n * @memberof Message\n * @instance\n */\n Message.prototype.type = null;\n\n /**\n * Message clusterLevelRaw.\n * @member {number|null|undefined} clusterLevelRaw\n * @memberof Message\n * @instance\n */\n Message.prototype.clusterLevelRaw = null;\n\n /**\n * Message key.\n * @member {Uint8Array|null|undefined} key\n * @memberof Message\n * @instance\n */\n Message.prototype.key = null;\n\n /**\n * Message record.\n * @member {Uint8Array|null|undefined} record\n * @memberof Message\n * @instance\n */\n Message.prototype.record = null;\n\n /**\n * Message closerPeers.\n * @member {Array.} closerPeers\n * @memberof Message\n * @instance\n */\n Message.prototype.closerPeers = $util.emptyArray;\n\n /**\n * Message providerPeers.\n * @member {Array.} providerPeers\n * @memberof Message\n * @instance\n */\n Message.prototype.providerPeers = $util.emptyArray;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * Message _type.\n * @member {\"type\"|undefined} _type\n * @memberof Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_type\", {\n get: $util.oneOfGetter($oneOfFields = [\"type\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _clusterLevelRaw.\n * @member {\"clusterLevelRaw\"|undefined} _clusterLevelRaw\n * @memberof Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_clusterLevelRaw\", {\n get: $util.oneOfGetter($oneOfFields = [\"clusterLevelRaw\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _key.\n * @member {\"key\"|undefined} _key\n * @memberof Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_key\", {\n get: $util.oneOfGetter($oneOfFields = [\"key\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _record.\n * @member {\"record\"|undefined} _record\n * @memberof Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_record\", {\n get: $util.oneOfGetter($oneOfFields = [\"record\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified Message message. Does not implicitly {@link Message.verify|verify} messages.\n * @function encode\n * @memberof Message\n * @static\n * @param {IMessage} m Message message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Message.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.type != null && Object.hasOwnProperty.call(m, \"type\"))\n w.uint32(8).int32(m.type);\n if (m.key != null && Object.hasOwnProperty.call(m, \"key\"))\n w.uint32(18).bytes(m.key);\n if (m.record != null && Object.hasOwnProperty.call(m, \"record\"))\n w.uint32(26).bytes(m.record);\n if (m.closerPeers != null && m.closerPeers.length) {\n for (var i = 0; i < m.closerPeers.length; ++i)\n $root.Message.Peer.encode(m.closerPeers[i], w.uint32(66).fork()).ldelim();\n }\n if (m.providerPeers != null && m.providerPeers.length) {\n for (var i = 0; i < m.providerPeers.length; ++i)\n $root.Message.Peer.encode(m.providerPeers[i], w.uint32(74).fork()).ldelim();\n }\n if (m.clusterLevelRaw != null && Object.hasOwnProperty.call(m, \"clusterLevelRaw\"))\n w.uint32(80).int32(m.clusterLevelRaw);\n return w;\n };\n\n /**\n * Decodes a Message message from the specified reader or buffer.\n * @function decode\n * @memberof Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Message} Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Message.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Message();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.type = r.int32();\n break;\n case 10:\n m.clusterLevelRaw = r.int32();\n break;\n case 2:\n m.key = r.bytes();\n break;\n case 3:\n m.record = r.bytes();\n break;\n case 8:\n if (!(m.closerPeers && m.closerPeers.length))\n m.closerPeers = [];\n m.closerPeers.push($root.Message.Peer.decode(r, r.uint32()));\n break;\n case 9:\n if (!(m.providerPeers && m.providerPeers.length))\n m.providerPeers = [];\n m.providerPeers.push($root.Message.Peer.decode(r, r.uint32()));\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a Message message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Message\n * @static\n * @param {Object.} d Plain object\n * @returns {Message} Message\n */\n Message.fromObject = function fromObject(d) {\n if (d instanceof $root.Message)\n return d;\n var m = new $root.Message();\n switch (d.type) {\n case \"PUT_VALUE\":\n case 0:\n m.type = 0;\n break;\n case \"GET_VALUE\":\n case 1:\n m.type = 1;\n break;\n case \"ADD_PROVIDER\":\n case 2:\n m.type = 2;\n break;\n case \"GET_PROVIDERS\":\n case 3:\n m.type = 3;\n break;\n case \"FIND_NODE\":\n case 4:\n m.type = 4;\n break;\n case \"PING\":\n case 5:\n m.type = 5;\n break;\n }\n if (d.clusterLevelRaw != null) {\n m.clusterLevelRaw = d.clusterLevelRaw | 0;\n }\n if (d.key != null) {\n if (typeof d.key === \"string\")\n $util.base64.decode(d.key, m.key = $util.newBuffer($util.base64.length(d.key)), 0);\n else if (d.key.length)\n m.key = d.key;\n }\n if (d.record != null) {\n if (typeof d.record === \"string\")\n $util.base64.decode(d.record, m.record = $util.newBuffer($util.base64.length(d.record)), 0);\n else if (d.record.length)\n m.record = d.record;\n }\n if (d.closerPeers) {\n if (!Array.isArray(d.closerPeers))\n throw TypeError(\".Message.closerPeers: array expected\");\n m.closerPeers = [];\n for (var i = 0; i < d.closerPeers.length; ++i) {\n if (typeof d.closerPeers[i] !== \"object\")\n throw TypeError(\".Message.closerPeers: object expected\");\n m.closerPeers[i] = $root.Message.Peer.fromObject(d.closerPeers[i]);\n }\n }\n if (d.providerPeers) {\n if (!Array.isArray(d.providerPeers))\n throw TypeError(\".Message.providerPeers: array expected\");\n m.providerPeers = [];\n for (var i = 0; i < d.providerPeers.length; ++i) {\n if (typeof d.providerPeers[i] !== \"object\")\n throw TypeError(\".Message.providerPeers: object expected\");\n m.providerPeers[i] = $root.Message.Peer.fromObject(d.providerPeers[i]);\n }\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Message message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Message\n * @static\n * @param {Message} m Message\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n Message.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.closerPeers = [];\n d.providerPeers = [];\n }\n if (m.type != null && m.hasOwnProperty(\"type\")) {\n d.type = o.enums === String ? $root.Message.MessageType[m.type] : m.type;\n if (o.oneofs)\n d._type = \"type\";\n }\n if (m.key != null && m.hasOwnProperty(\"key\")) {\n d.key = o.bytes === String ? $util.base64.encode(m.key, 0, m.key.length) : o.bytes === Array ? Array.prototype.slice.call(m.key) : m.key;\n if (o.oneofs)\n d._key = \"key\";\n }\n if (m.record != null && m.hasOwnProperty(\"record\")) {\n d.record = o.bytes === String ? $util.base64.encode(m.record, 0, m.record.length) : o.bytes === Array ? Array.prototype.slice.call(m.record) : m.record;\n if (o.oneofs)\n d._record = \"record\";\n }\n if (m.closerPeers && m.closerPeers.length) {\n d.closerPeers = [];\n for (var j = 0; j < m.closerPeers.length; ++j) {\n d.closerPeers[j] = $root.Message.Peer.toObject(m.closerPeers[j], o);\n }\n }\n if (m.providerPeers && m.providerPeers.length) {\n d.providerPeers = [];\n for (var j = 0; j < m.providerPeers.length; ++j) {\n d.providerPeers[j] = $root.Message.Peer.toObject(m.providerPeers[j], o);\n }\n }\n if (m.clusterLevelRaw != null && m.hasOwnProperty(\"clusterLevelRaw\")) {\n d.clusterLevelRaw = m.clusterLevelRaw;\n if (o.oneofs)\n d._clusterLevelRaw = \"clusterLevelRaw\";\n }\n return d;\n };\n\n /**\n * Converts this Message to JSON.\n * @function toJSON\n * @memberof Message\n * @instance\n * @returns {Object.} JSON object\n */\n Message.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * MessageType enum.\n * @name Message.MessageType\n * @enum {number}\n * @property {number} PUT_VALUE=0 PUT_VALUE value\n * @property {number} GET_VALUE=1 GET_VALUE value\n * @property {number} ADD_PROVIDER=2 ADD_PROVIDER value\n * @property {number} GET_PROVIDERS=3 GET_PROVIDERS value\n * @property {number} FIND_NODE=4 FIND_NODE value\n * @property {number} PING=5 PING value\n */\n Message.MessageType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"PUT_VALUE\"] = 0;\n values[valuesById[1] = \"GET_VALUE\"] = 1;\n values[valuesById[2] = \"ADD_PROVIDER\"] = 2;\n values[valuesById[3] = \"GET_PROVIDERS\"] = 3;\n values[valuesById[4] = \"FIND_NODE\"] = 4;\n values[valuesById[5] = \"PING\"] = 5;\n return values;\n })();\n\n /**\n * ConnectionType enum.\n * @name Message.ConnectionType\n * @enum {number}\n * @property {number} NOT_CONNECTED=0 NOT_CONNECTED value\n * @property {number} CONNECTED=1 CONNECTED value\n * @property {number} CAN_CONNECT=2 CAN_CONNECT value\n * @property {number} CANNOT_CONNECT=3 CANNOT_CONNECT value\n */\n Message.ConnectionType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"NOT_CONNECTED\"] = 0;\n values[valuesById[1] = \"CONNECTED\"] = 1;\n values[valuesById[2] = \"CAN_CONNECT\"] = 2;\n values[valuesById[3] = \"CANNOT_CONNECT\"] = 3;\n return values;\n })();\n\n Message.Peer = (function() {\n\n /**\n * Properties of a Peer.\n * @memberof Message\n * @interface IPeer\n * @property {Uint8Array|null} [id] Peer id\n * @property {Array.|null} [addrs] Peer addrs\n * @property {Message.ConnectionType|null} [connection] Peer connection\n */\n\n /**\n * Constructs a new Peer.\n * @memberof Message\n * @classdesc Represents a Peer.\n * @implements IPeer\n * @constructor\n * @param {Message.IPeer=} [p] Properties to set\n */\n function Peer(p) {\n this.addrs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Peer id.\n * @member {Uint8Array|null|undefined} id\n * @memberof Message.Peer\n * @instance\n */\n Peer.prototype.id = null;\n\n /**\n * Peer addrs.\n * @member {Array.} addrs\n * @memberof Message.Peer\n * @instance\n */\n Peer.prototype.addrs = $util.emptyArray;\n\n /**\n * Peer connection.\n * @member {Message.ConnectionType|null|undefined} connection\n * @memberof Message.Peer\n * @instance\n */\n Peer.prototype.connection = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * Peer _id.\n * @member {\"id\"|undefined} _id\n * @memberof Message.Peer\n * @instance\n */\n Object.defineProperty(Peer.prototype, \"_id\", {\n get: $util.oneOfGetter($oneOfFields = [\"id\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Peer _connection.\n * @member {\"connection\"|undefined} _connection\n * @memberof Message.Peer\n * @instance\n */\n Object.defineProperty(Peer.prototype, \"_connection\", {\n get: $util.oneOfGetter($oneOfFields = [\"connection\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified Peer message. Does not implicitly {@link Message.Peer.verify|verify} messages.\n * @function encode\n * @memberof Message.Peer\n * @static\n * @param {Message.IPeer} m Peer message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Peer.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.id != null && Object.hasOwnProperty.call(m, \"id\"))\n w.uint32(10).bytes(m.id);\n if (m.addrs != null && m.addrs.length) {\n for (var i = 0; i < m.addrs.length; ++i)\n w.uint32(18).bytes(m.addrs[i]);\n }\n if (m.connection != null && Object.hasOwnProperty.call(m, \"connection\"))\n w.uint32(24).int32(m.connection);\n return w;\n };\n\n /**\n * Decodes a Peer message from the specified reader or buffer.\n * @function decode\n * @memberof Message.Peer\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Message.Peer} Peer\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Peer.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Message.Peer();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.id = r.bytes();\n break;\n case 2:\n if (!(m.addrs && m.addrs.length))\n m.addrs = [];\n m.addrs.push(r.bytes());\n break;\n case 3:\n m.connection = r.int32();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a Peer message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Message.Peer\n * @static\n * @param {Object.} d Plain object\n * @returns {Message.Peer} Peer\n */\n Peer.fromObject = function fromObject(d) {\n if (d instanceof $root.Message.Peer)\n return d;\n var m = new $root.Message.Peer();\n if (d.id != null) {\n if (typeof d.id === \"string\")\n $util.base64.decode(d.id, m.id = $util.newBuffer($util.base64.length(d.id)), 0);\n else if (d.id.length)\n m.id = d.id;\n }\n if (d.addrs) {\n if (!Array.isArray(d.addrs))\n throw TypeError(\".Message.Peer.addrs: array expected\");\n m.addrs = [];\n for (var i = 0; i < d.addrs.length; ++i) {\n if (typeof d.addrs[i] === \"string\")\n $util.base64.decode(d.addrs[i], m.addrs[i] = $util.newBuffer($util.base64.length(d.addrs[i])), 0);\n else if (d.addrs[i].length)\n m.addrs[i] = d.addrs[i];\n }\n }\n switch (d.connection) {\n case \"NOT_CONNECTED\":\n case 0:\n m.connection = 0;\n break;\n case \"CONNECTED\":\n case 1:\n m.connection = 1;\n break;\n case \"CAN_CONNECT\":\n case 2:\n m.connection = 2;\n break;\n case \"CANNOT_CONNECT\":\n case 3:\n m.connection = 3;\n break;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Peer message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Message.Peer\n * @static\n * @param {Message.Peer} m Peer\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.} Plain object\n */\n Peer.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.addrs = [];\n }\n if (m.id != null && m.hasOwnProperty(\"id\")) {\n d.id = o.bytes === String ? $util.base64.encode(m.id, 0, m.id.length) : o.bytes === Array ? Array.prototype.slice.call(m.id) : m.id;\n if (o.oneofs)\n d._id = \"id\";\n }\n if (m.addrs && m.addrs.length) {\n d.addrs = [];\n for (var j = 0; j < m.addrs.length; ++j) {\n d.addrs[j] = o.bytes === String ? $util.base64.encode(m.addrs[j], 0, m.addrs[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.addrs[j]) : m.addrs[j];\n }\n }\n if (m.connection != null && m.hasOwnProperty(\"connection\")) {\n d.connection = o.enums === String ? $root.Message.ConnectionType[m.connection] : m.connection;\n if (o.oneofs)\n d._connection = \"connection\";\n }\n return d;\n };\n\n /**\n * Converts this Peer to JSON.\n * @function toJSON\n * @memberof Message.Peer\n * @instance\n * @returns {Object.} JSON object\n */\n Peer.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Peer;\n })();\n\n return Message;\n})();\n\nmodule.exports = $root;\n","'use strict';\nconst indentString = require('indent-string');\nconst cleanStack = require('clean-stack');\n\nconst cleanInternalStack = stack => stack.replace(/\\s+at .*aggregate-error\\/index.js:\\d+:\\d+\\)?/g, '');\n\nclass AggregateError extends Error {\n\tconstructor(errors) {\n\t\tif (!Array.isArray(errors)) {\n\t\t\tthrow new TypeError(`Expected input to be an Array, got ${typeof errors}`);\n\t\t}\n\n\t\terrors = [...errors].map(error => {\n\t\t\tif (error instanceof Error) {\n\t\t\t\treturn error;\n\t\t\t}\n\n\t\t\tif (error !== null && typeof error === 'object') {\n\t\t\t\t// Handle plain error objects with message property and/or possibly other metadata\n\t\t\t\treturn Object.assign(new Error(error.message), error);\n\t\t\t}\n\n\t\t\treturn new Error(error);\n\t\t});\n\n\t\tlet message = errors\n\t\t\t.map(error => {\n\t\t\t\t// The `stack` property is not standardized, so we can't assume it exists\n\t\t\t\treturn typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error);\n\t\t\t})\n\t\t\t.join('\\n');\n\t\tmessage = '\\n' + indentString(message, 4);\n\t\tsuper(message);\n\n\t\tthis.name = 'AggregateError';\n\n\t\tObject.defineProperty(this, '_errors', {value: errors});\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const error of this._errors) {\n\t\t\tyield error;\n\t\t}\n\t}\n}\n\nmodule.exports = AggregateError;\n","'use strict'\n\nconst errCode = require('err-code')\nconst filter = require('it-filter')\nconst map = require('it-map')\nconst take = require('it-take')\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\n/**\n * Store the multiaddrs from every peer in the passed peer store\n *\n * @param {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>} source\n * @param {import('../peer-store')} peerStore\n */\nfunction storeAddresses (source, peerStore) {\n return map(source, (peer) => {\n // ensure we have the addresses for a given peer\n peerStore.addressBook.add(peer.id, peer.multiaddrs)\n\n return peer\n })\n}\n\n/**\n * Filter peers by unique peer id\n *\n * @param {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>} source\n */\nfunction uniquePeers (source) {\n /** @type Set */\n const seen = new Set()\n\n return filter(source, (peer) => {\n // dedupe by peer id\n if (seen.has(peer.id.toString())) {\n return false\n }\n\n seen.add(peer.id.toString())\n\n return true\n })\n}\n\n/**\n * Require at least `min` peers to be yielded from `source`\n *\n * @param {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>} source\n * @param {number} min\n */\nasync function * requirePeers (source, min = 1) {\n let seen = 0\n\n for await (const peer of source) {\n seen++\n\n yield peer\n }\n\n if (seen < min) {\n throw errCode(new Error('not found'), 'NOT_FOUND')\n }\n}\n\n/**\n * If `max` is passed, only take that number of peers from the source\n * otherwise take all the peers\n *\n * @param {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>} source\n * @param {number} [max]\n */\nfunction maybeLimitSource (source, max) {\n if (max) {\n return take(source, max)\n }\n\n return source\n}\n\nmodule.exports = {\n storeAddresses,\n uniquePeers,\n requirePeers,\n maybeLimitSource\n}\n","'use strict'\n\nconst intervals = new Map()\n\nconst _generateId = () => `${Date.now()}:${Math.floor(Math.random() * 1000000)}`\n\n/**\n * Run a given task each {interval} ms\n *\n * @param {() => Promise} task\n * @param {number} interval\n * @param {string} id\n */\nasync function _runPeriodically (task, interval, id) {\n while (intervals.get(id)) {\n try {\n await task()\n } catch (err) {\n // Throw global context error if handler throws\n setTimeout(() => { throw err }, 1)\n break\n }\n\n if (!intervals.get(id)) {\n break\n }\n\n await new Promise(resolve => {\n const _timeout = setTimeout(resolve, interval)\n\n intervals.set(id, _timeout)\n })\n }\n}\n\n/**\n * Asynchronous setInterval that is properly delayed using promises and can be delayed on boot.\n *\n * @param {() => Promise} task\n * @param {number} interval\n * @param {number} [delay = interval]\n * @returns {string}\n */\nfunction setDelayedInterval (task, interval, delay) {\n delay = delay || interval\n\n const id = _generateId()\n const _timeout = setTimeout(() => {\n _runPeriodically(task, interval, id)\n }, delay)\n\n intervals.set(id, _timeout)\n\n return id\n}\n\n/**\n * Clear delayed interval.\n *\n * @param {string} id\n */\nfunction clearDelayedInterval (id) {\n const _timeout = intervals.get(id)\n\n if (_timeout) {\n clearTimeout(_timeout)\n intervals.delete(id)\n }\n}\n\nmodule.exports = {\n setDelayedInterval,\n clearDelayedInterval\n}\n","'use strict'\n\nconst PeerId = require('peer-id')\nconst { Multiaddr } = require('multiaddr')\nconst errCode = require('err-code')\n\nconst { codes } = require('./errors')\n\n/**\n * Converts the given `peer` to a `Peer` object.\n * If a multiaddr is received, the addressBook is updated.\n *\n * @param {PeerId|Multiaddr|string} peer\n * @returns {{ id: PeerId, multiaddrs: Multiaddr[]|undefined }}\n */\nfunction getPeer (peer) {\n if (typeof peer === 'string') {\n peer = new Multiaddr(peer)\n }\n\n let addr\n if (Multiaddr.isMultiaddr(peer)) {\n addr = peer\n const idStr = peer.getPeerId()\n\n if (!idStr) {\n throw errCode(\n new Error(`${peer} does not have a valid peer type`),\n codes.ERR_INVALID_MULTIADDR\n )\n }\n\n try {\n peer = PeerId.createFromB58String(idStr)\n } catch (/** @type {any} */ err) {\n throw errCode(\n new Error(`${peer} is not a valid peer type`),\n codes.ERR_INVALID_MULTIADDR\n )\n }\n }\n\n return {\n id: peer,\n multiaddrs: addr ? [addr] : undefined\n }\n}\n\nmodule.exports = getPeer\n","'use strict'\n\n// @ts-ignore file not listed within the file list of projects\nconst libp2pVersion = require('../../package.json').version\n\nmodule.exports.PROTOCOL_VERSION = 'ipfs/0.1.0' // deprecated\nmodule.exports.AGENT_VERSION = `js-libp2p/${libp2pVersion}`\nmodule.exports.MULTICODEC_IDENTIFY = '/ipfs/id/1.0.0' // deprecated\nmodule.exports.MULTICODEC_IDENTIFY_PUSH = '/ipfs/id/push/1.0.0' // deprecated\n\nmodule.exports.IDENTIFY_PROTOCOL_VERSION = '0.1.0'\nmodule.exports.MULTICODEC_IDENTIFY_PROTOCOL_NAME = 'id'\nmodule.exports.MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME = 'id/push'\nmodule.exports.MULTICODEC_IDENTIFY_PROTOCOL_VERSION = '1.0.0'\nmodule.exports.MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION = '1.0.0'\n","'use strict'\n\nconst isPrivate = require('./multiaddr/is-private')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\n/**\n * @typedef {Object} Address\n * @property {Multiaddr} multiaddr peer multiaddr.\n * @property {boolean} isCertified obtained from a signed peer record.\n */\n\n/**\n * Compare function for array.sort().\n * This sort aims to move the private adresses to the end of the array.\n * In case of equality, a certified address will come first.\n *\n * @param {Address} a\n * @param {Address} b\n * @returns {number}\n */\nfunction addressesPublicFirstCompareFunction (a, b) {\n const isAPrivate = isPrivate(a.multiaddr)\n const isBPrivate = isPrivate(b.multiaddr)\n\n if (isAPrivate && !isBPrivate) {\n return 1\n } else if (!isAPrivate && isBPrivate) {\n return -1\n }\n // Check certified?\n if (a.isCertified && !b.isCertified) {\n return -1\n } else if (!a.isCertified && b.isCertified) {\n return 1\n }\n\n return 0\n}\n\n/**\n * Sort given addresses by putting public addresses first.\n * In case of equality, a certified address will come first.\n *\n * @param {Array
} addresses\n * @returns {Array
}\n */\nfunction publicAddressesFirst (addresses) {\n return [...addresses].sort(addressesPublicFirstCompareFunction)\n}\n\nmodule.exports.publicAddressesFirst = publicAddressesFirst\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:transports'), {\n error: debug('libp2p:transports:err')\n})\n\nconst pSettle = require('p-settle')\nconst { codes } = require('./errors')\nconst errCode = require('err-code')\n\nconst { updateSelfPeerRecord } = require('./record/utils')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/transport/types').TransportFactory} TransportFactory\n * @typedef {import('libp2p-interfaces/src/transport/types').Transport} Transport\n *\n * @typedef {Object} TransportManagerProperties\n * @property {import('./')} libp2p\n * @property {import('./upgrader')} upgrader\n *\n * @typedef {Object} TransportManagerOptions\n * @property {number} [faultTolerance = FAULT_TOLERANCE.FATAL_ALL] - Address listen error tolerance.\n */\n\nclass TransportManager {\n /**\n * @class\n * @param {TransportManagerProperties & TransportManagerOptions} options\n */\n constructor ({ libp2p, upgrader, faultTolerance = FAULT_TOLERANCE.FATAL_ALL }) {\n this.libp2p = libp2p\n this.upgrader = upgrader\n /** @type {Map} */\n this._transports = new Map()\n this._listeners = new Map()\n this._listenerOptions = new Map()\n this.faultTolerance = faultTolerance\n }\n\n /**\n * Adds a `Transport` to the manager\n *\n * @param {string} key\n * @param {TransportFactory} Transport\n * @param {*} transportOptions - Additional options to pass to the transport\n * @returns {void}\n */\n add (key, Transport, transportOptions = {}) {\n log('adding %s', key)\n if (!key) {\n throw errCode(new Error(`Transport must have a valid key, was given '${key}'`), codes.ERR_INVALID_KEY)\n }\n if (this._transports.has(key)) {\n throw errCode(new Error('There is already a transport with this key'), codes.ERR_DUPLICATE_TRANSPORT)\n }\n\n const transport = new Transport({\n ...transportOptions,\n libp2p: this.libp2p,\n upgrader: this.upgrader\n })\n\n this._transports.set(key, transport)\n this._listenerOptions.set(key, transportOptions.listenerOptions || {})\n if (!this._listeners.has(key)) {\n this._listeners.set(key, [])\n }\n }\n\n /**\n * Stops all listeners\n *\n * @async\n */\n async close () {\n const tasks = []\n for (const [key, listeners] of this._listeners) {\n log('closing listeners for %s', key)\n while (listeners.length) {\n const listener = listeners.pop()\n listener.removeAllListeners('listening')\n listener.removeAllListeners('close')\n tasks.push(listener.close())\n }\n }\n\n await Promise.all(tasks)\n log('all listeners closed')\n for (const key of this._listeners.keys()) {\n this._listeners.set(key, [])\n }\n }\n\n /**\n * Dials the given Multiaddr over it's supported transport\n *\n * @param {Multiaddr} ma\n * @param {*} options\n * @returns {Promise}\n */\n async dial (ma, options) {\n const transport = this.transportForMultiaddr(ma)\n if (!transport) {\n throw errCode(new Error(`No transport available for address ${String(ma)}`), codes.ERR_TRANSPORT_UNAVAILABLE)\n }\n\n try {\n return await transport.dial(ma, options)\n } catch (/** @type {any} */ err) {\n if (!err.code) err.code = codes.ERR_TRANSPORT_DIAL_FAILED\n throw err\n }\n }\n\n /**\n * Returns all Multiaddr's the listeners are using\n *\n * @returns {Multiaddr[]}\n */\n getAddrs () {\n /** @type {Multiaddr[]} */\n let addrs = []\n for (const listeners of this._listeners.values()) {\n for (const listener of listeners) {\n addrs = [...addrs, ...listener.getAddrs()]\n }\n }\n return addrs\n }\n\n /**\n * Returns all the transports instances.\n *\n * @returns {IterableIterator}\n */\n getTransports () {\n return this._transports.values()\n }\n\n /**\n * Finds a transport that matches the given Multiaddr\n *\n * @param {Multiaddr} ma\n * @returns {Transport|null}\n */\n transportForMultiaddr (ma) {\n for (const transport of this._transports.values()) {\n const addrs = transport.filter([ma])\n if (addrs.length) return transport\n }\n return null\n }\n\n /**\n * Starts listeners for each listen Multiaddr.\n *\n * @async\n * @param {Multiaddr[]} addrs - addresses to attempt to listen on\n */\n async listen (addrs) {\n if (!addrs || addrs.length === 0) {\n log('no addresses were provided for listening, this node is dial only')\n return\n }\n\n const couldNotListen = []\n for (const [key, transport] of this._transports.entries()) {\n const supportedAddrs = transport.filter(addrs)\n const tasks = []\n\n // For each supported multiaddr, create a listener\n for (const addr of supportedAddrs) {\n log('creating listener for %s on %s', key, addr)\n const listener = transport.createListener(this._listenerOptions.get(key))\n this._listeners.get(key).push(listener)\n\n // Track listen/close events\n listener.on('listening', () => updateSelfPeerRecord(this.libp2p))\n listener.on('close', () => updateSelfPeerRecord(this.libp2p))\n\n // We need to attempt to listen on everything\n tasks.push(listener.listen(addr))\n }\n\n // Keep track of transports we had no addresses for\n if (tasks.length === 0) {\n couldNotListen.push(key)\n continue\n }\n\n const results = await pSettle(tasks)\n // If we are listening on at least 1 address, succeed.\n // TODO: we should look at adding a retry (`p-retry`) here to better support\n // listening on remote addresses as they may be offline. We could then potentially\n // just wait for any (`p-any`) listener to succeed on each transport before returning\n const isListening = results.find(r => r.isFulfilled === true)\n if (!isListening && this.faultTolerance !== FAULT_TOLERANCE.NO_FATAL) {\n throw errCode(new Error(`Transport (${key}) could not listen on any available address`), codes.ERR_NO_VALID_ADDRESSES)\n }\n }\n\n // If no transports were able to listen, throw an error. This likely\n // means we were given addresses we do not have transports for\n if (couldNotListen.length === this._transports.size) {\n const message = `no valid addresses were provided for transports [${couldNotListen}]`\n if (this.faultTolerance === FAULT_TOLERANCE.FATAL_ALL) {\n throw errCode(new Error(message), codes.ERR_NO_VALID_ADDRESSES)\n }\n log(`libp2p in dial mode only: ${message}`)\n }\n }\n\n /**\n * Removes the given transport from the manager.\n * If a transport has any running listeners, they will be closed.\n *\n * @async\n * @param {string} key\n */\n async remove (key) {\n log('removing %s', key)\n if (this._listeners.has(key)) {\n // Close any running listeners\n for (const listener of this._listeners.get(key)) {\n listener.removeAllListeners('listening')\n listener.removeAllListeners('close')\n await listener.close()\n }\n }\n\n this._transports.delete(key)\n this._listeners.delete(key)\n }\n\n /**\n * Removes all transports from the manager.\n * If any listeners are running, they will be closed.\n *\n * @async\n */\n async removeAll () {\n const tasks = []\n for (const key of this._transports.keys()) {\n tasks.push(this.remove(key))\n }\n\n await Promise.all(tasks)\n }\n}\n\n/**\n * Enum Transport Manager Fault Tolerance values.\n * FATAL_ALL should be used for failing in any listen circumstance.\n * NO_FATAL should be used for not failing when not listening.\n *\n * @readonly\n * @enum {number}\n */\nconst FAULT_TOLERANCE = {\n FATAL_ALL: 0,\n NO_FATAL: 1\n}\n\nTransportManager.FaultTolerance = FAULT_TOLERANCE\n\nmodule.exports = TransportManager\n","'use strict'\n\nconst Envelope = require('./envelope')\nconst PeerRecord = require('./peer-record')\n\n/**\n * @typedef {import('../')} Libp2p\n */\n\n/**\n * Create (or update if existing) self peer record and store it in the AddressBook.\n *\n * @param {Libp2p} libp2p\n * @returns {Promise}\n */\nasync function updateSelfPeerRecord (libp2p) {\n const peerRecord = new PeerRecord({\n peerId: libp2p.peerId,\n multiaddrs: libp2p.multiaddrs\n })\n const envelope = await Envelope.seal(peerRecord, libp2p.peerId)\n libp2p.peerStore.addressBook.consumePeerRecord(envelope)\n}\n\nmodule.exports.updateSelfPeerRecord = updateSelfPeerRecord\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:circuit:hop'), {\n error: debug('libp2p:circuit:hop:err')\n})\nconst errCode = require('err-code')\n\nconst PeerId = require('peer-id')\nconst { validateAddrs } = require('./utils')\nconst StreamHandler = require('./stream-handler')\nconst { CircuitRelay: CircuitPB } = require('../protocol')\nconst { pipe } = require('it-pipe')\nconst { codes: Errors } = require('../../errors')\n\nconst { stop } = require('./stop')\n\nconst multicodec = require('./../multicodec')\n\n/**\n * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('../transport')} Transport\n */\n\n/**\n * @typedef {Object} HopRequest\n * @property {Connection} connection\n * @property {ICircuitRelay} request\n * @property {StreamHandler} streamHandler\n * @property {Transport} circuit\n */\n\n/**\n * @param {HopRequest} options\n * @returns {Promise}\n */\nasync function handleHop ({\n connection,\n request,\n streamHandler,\n circuit\n}) {\n // Ensure hop is enabled\n if (!circuit._options.hop.enabled) {\n log('HOP request received but we are not acting as a relay')\n return streamHandler.end({\n type: CircuitPB.Type.STATUS,\n code: CircuitPB.Status.HOP_CANT_SPEAK_RELAY\n })\n }\n\n // Validate the HOP request has the required input\n try {\n validateAddrs(request, streamHandler)\n } catch (/** @type {any} */ err) {\n return log.error('invalid hop request via peer %s', connection.remotePeer.toB58String(), err)\n }\n\n if (!request.dstPeer) {\n log('HOP request received but we do not receive a dstPeer')\n return\n }\n\n // Get the connection to the destination (stop) peer\n const destinationPeer = new PeerId(request.dstPeer.id)\n\n const destinationConnection = circuit._connectionManager.get(destinationPeer)\n if (!destinationConnection && !circuit._options.hop.active) {\n log('HOP request received but we are not connected to the destination peer')\n return streamHandler.end({\n type: CircuitPB.Type.STATUS,\n code: CircuitPB.Status.HOP_NO_CONN_TO_DST\n })\n }\n\n // TODO: Handle being an active relay\n if (!destinationConnection) {\n return\n }\n\n // Handle the incoming HOP request by performing a STOP request\n const stopRequest = {\n type: CircuitPB.Type.STOP,\n dstPeer: request.dstPeer,\n srcPeer: request.srcPeer\n }\n\n let destinationStream\n try {\n destinationStream = await stop({\n connection: destinationConnection,\n request: stopRequest\n })\n } catch (/** @type {any} */ err) {\n return log.error(err)\n }\n\n log('hop request from %s is valid', connection.remotePeer.toB58String())\n streamHandler.write({\n type: CircuitPB.Type.STATUS,\n code: CircuitPB.Status.SUCCESS\n })\n const sourceStream = streamHandler.rest()\n\n // Short circuit the two streams to create the relayed connection\n return pipe(\n sourceStream,\n destinationStream,\n sourceStream\n )\n}\n\n/**\n * Performs a HOP request to a relay peer, to request a connection to another\n * peer. A new, virtual, connection will be created between the two via the relay.\n *\n * @param {object} options\n * @param {Connection} options.connection - Connection to the relay\n * @param {ICircuitRelay} options.request\n * @returns {Promise}\n */\nasync function hop ({\n connection,\n request\n}) {\n // Create a new stream to the relay\n const { stream } = await connection.newStream([multicodec.relay])\n // Send the HOP request\n const streamHandler = new StreamHandler({ stream })\n streamHandler.write(request)\n\n const response = await streamHandler.read()\n\n if (!response) {\n throw errCode(new Error('HOP request had no response'), Errors.ERR_HOP_REQUEST_FAILED)\n }\n\n if (response.code === CircuitPB.Status.SUCCESS) {\n log('hop request was successful')\n return streamHandler.rest()\n }\n\n log('hop request failed with code %d, closing stream', response.code)\n streamHandler.close()\n throw errCode(new Error(`HOP request failed with code ${response.code}`), Errors.ERR_HOP_REQUEST_FAILED)\n}\n\n/**\n * Performs a CAN_HOP request to a relay peer, in order to understand its capabilities.\n *\n * @param {object} options\n * @param {Connection} options.connection - Connection to the relay\n * @returns {Promise}\n */\nasync function canHop ({\n connection\n}) {\n // Create a new stream to the relay\n const { stream } = await connection.newStream([multicodec.relay])\n // Send the HOP request\n const streamHandler = new StreamHandler({ stream })\n streamHandler.write({\n type: CircuitPB.Type.CAN_HOP\n })\n\n const response = await streamHandler.read()\n await streamHandler.close()\n\n if (!response || response.code !== CircuitPB.Status.SUCCESS) {\n return false\n }\n\n return true\n}\n\n/**\n * Creates an unencoded CAN_HOP response based on the Circuits configuration\n *\n * @param {Object} options\n * @param {Connection} options.connection\n * @param {StreamHandler} options.streamHandler\n * @param {Transport} options.circuit\n * @private\n */\nfunction handleCanHop ({\n connection,\n streamHandler,\n circuit\n}) {\n const canHop = circuit._options.hop.enabled\n log('can hop (%s) request from %s', canHop, connection.remotePeer.toB58String())\n streamHandler.end({\n type: CircuitPB.Type.STATUS,\n code: canHop ? CircuitPB.Status.SUCCESS : CircuitPB.Status.HOP_CANT_SPEAK_RELAY\n })\n}\n\nmodule.exports = {\n handleHop,\n hop,\n canHop,\n handleCanHop\n}\n","'use strict'\n\nconst { Multiaddr } = require('multiaddr')\nconst { CircuitRelay } = require('../protocol')\n\n/**\n * @typedef {import('./stream-handler')} StreamHandler\n * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay\n */\n\n/**\n * Write a response\n *\n * @param {StreamHandler} streamHandler\n * @param {import('../protocol').CircuitRelay.Status} status\n */\nfunction writeResponse (streamHandler, status) {\n streamHandler.write({\n type: CircuitRelay.Type.STATUS,\n code: status\n })\n}\n\n/**\n * Validate incomming HOP/STOP message\n *\n * @param {ICircuitRelay} msg - A CircuitRelay unencoded protobuf message\n * @param {StreamHandler} streamHandler\n */\nfunction validateAddrs (msg, streamHandler) {\n try {\n if (msg.dstPeer && msg.dstPeer.addrs) {\n msg.dstPeer.addrs.forEach((addr) => {\n return new Multiaddr(addr)\n })\n }\n } catch (/** @type {any} */ err) {\n writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP\n ? CircuitRelay.Status.HOP_DST_MULTIADDR_INVALID\n : CircuitRelay.Status.STOP_DST_MULTIADDR_INVALID)\n throw err\n }\n\n try {\n if (msg.srcPeer && msg.srcPeer.addrs) {\n msg.srcPeer.addrs.forEach((addr) => {\n return new Multiaddr(addr)\n })\n }\n } catch (/** @type {any} */ err) {\n writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP\n ? CircuitRelay.Status.HOP_SRC_MULTIADDR_INVALID\n : CircuitRelay.Status.STOP_SRC_MULTIADDR_INVALID)\n throw err\n }\n}\n\nmodule.exports = {\n validateAddrs\n}\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:circuit:stop'), {\n error: debug('libp2p:circuit:stop:err')\n})\n\nconst { CircuitRelay: CircuitPB } = require('../protocol')\nconst multicodec = require('../multicodec')\nconst StreamHandler = require('./stream-handler')\nconst { validateAddrs } = require('./utils')\n\n/**\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay\n */\n\n/**\n * Handles incoming STOP requests\n *\n * @private\n * @param {Object} options\n * @param {Connection} options.connection\n * @param {ICircuitRelay} options.request - The CircuitRelay protobuf request (unencoded)\n * @param {StreamHandler} options.streamHandler\n * @returns {Promise|void} Resolves a duplex iterable\n */\nmodule.exports.handleStop = function handleStop ({\n connection,\n request,\n streamHandler\n}) {\n // Validate the STOP request has the required input\n try {\n validateAddrs(request, streamHandler)\n } catch (/** @type {any} */ err) {\n return log.error('invalid stop request via peer %s', connection.remotePeer.toB58String(), err)\n }\n\n // The request is valid\n log('stop request is valid')\n streamHandler.write({\n type: CircuitPB.Type.STATUS,\n code: CircuitPB.Status.SUCCESS\n })\n return streamHandler.rest()\n}\n\n/**\n * Creates a STOP request\n *\n * @private\n * @param {Object} options\n * @param {Connection} options.connection\n * @param {ICircuitRelay} options.request - The CircuitRelay protobuf request (unencoded)\n * @returns {Promise} Resolves a duplex iterable\n */\nmodule.exports.stop = async function stop ({\n connection,\n request\n}) {\n const { stream } = await connection.newStream([multicodec.relay])\n log('starting stop request to %s', connection.remotePeer.toB58String())\n const streamHandler = new StreamHandler({ stream })\n\n streamHandler.write(request)\n const response = await streamHandler.read()\n\n if (!response) {\n return streamHandler.close()\n }\n\n if (response.code === CircuitPB.Status.SUCCESS) {\n log('stop request to %s was successful', connection.remotePeer.toB58String())\n return streamHandler.rest()\n }\n\n log('stop request failed with code %d', response.code)\n streamHandler.close()\n}\n","'use strict'\n\nconst { CID } = require('multiformats/cid')\nconst { sha256 } = require('multiformats/hashes/sha2')\n\n/**\n * Convert a namespace string into a cid.\n *\n * @param {string} namespace\n * @returns {Promise}\n */\nmodule.exports.namespaceToCid = async (namespace) => {\n const bytes = new TextEncoder().encode(namespace)\n const hash = await sha256.digest(bytes)\n\n return CID.createV0(hash)\n}\n","'use strict';\n\nclass CancelError extends Error {\n\tconstructor(reason) {\n\t\tsuper(reason || 'Promise was canceled');\n\t\tthis.name = 'CancelError';\n\t}\n\n\tget isCanceled() {\n\t\treturn true;\n\t}\n}\n\nclass PCancelable {\n\tstatic fn(userFn) {\n\t\treturn (...arguments_) => {\n\t\t\treturn new PCancelable((resolve, reject, onCancel) => {\n\t\t\t\targuments_.push(onCancel);\n\t\t\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\t\t\tuserFn(...arguments_).then(resolve, reject);\n\t\t\t});\n\t\t};\n\t}\n\n\tconstructor(executor) {\n\t\tthis._cancelHandlers = [];\n\t\tthis._isPending = true;\n\t\tthis._isCanceled = false;\n\t\tthis._rejectOnCancel = true;\n\n\t\tthis._promise = new Promise((resolve, reject) => {\n\t\t\tthis._reject = reject;\n\n\t\t\tconst onResolve = value => {\n\t\t\t\tif (!this._isCanceled || !onCancel.shouldReject) {\n\t\t\t\t\tthis._isPending = false;\n\t\t\t\t\tresolve(value);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onReject = error => {\n\t\t\t\tthis._isPending = false;\n\t\t\t\treject(error);\n\t\t\t};\n\n\t\t\tconst onCancel = handler => {\n\t\t\t\tif (!this._isPending) {\n\t\t\t\t\tthrow new Error('The `onCancel` handler was attached after the promise settled.');\n\t\t\t\t}\n\n\t\t\t\tthis._cancelHandlers.push(handler);\n\t\t\t};\n\n\t\t\tObject.defineProperties(onCancel, {\n\t\t\t\tshouldReject: {\n\t\t\t\t\tget: () => this._rejectOnCancel,\n\t\t\t\t\tset: boolean => {\n\t\t\t\t\t\tthis._rejectOnCancel = boolean;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn executor(onResolve, onReject, onCancel);\n\t\t});\n\t}\n\n\tthen(onFulfilled, onRejected) {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\treturn this._promise.then(onFulfilled, onRejected);\n\t}\n\n\tcatch(onRejected) {\n\t\treturn this._promise.catch(onRejected);\n\t}\n\n\tfinally(onFinally) {\n\t\treturn this._promise.finally(onFinally);\n\t}\n\n\tcancel(reason) {\n\t\tif (!this._isPending || this._isCanceled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isCanceled = true;\n\n\t\tif (this._cancelHandlers.length > 0) {\n\t\t\ttry {\n\t\t\t\tfor (const handler of this._cancelHandlers) {\n\t\t\t\t\thandler();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis._reject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this._rejectOnCancel) {\n\t\t\tthis._reject(new CancelError(reason));\n\t\t}\n\t}\n\n\tget isCanceled() {\n\t\treturn this._isCanceled;\n\t}\n}\n\nObject.setPrototypeOf(PCancelable.prototype, Promise.prototype);\n\nmodule.exports = PCancelable;\nmodule.exports.CancelError = CancelError;\n","/**\n * Javascript implementation of X.509 and related components (such as\n * Certification Signing Requests) of a Public Key Infrastructure.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n *\n * The ASN.1 representation of an X.509v3 certificate is as follows\n * (see RFC 2459):\n *\n * Certificate ::= SEQUENCE {\n * tbsCertificate TBSCertificate,\n * signatureAlgorithm AlgorithmIdentifier,\n * signatureValue BIT STRING\n * }\n *\n * TBSCertificate ::= SEQUENCE {\n * version [0] EXPLICIT Version DEFAULT v1,\n * serialNumber CertificateSerialNumber,\n * signature AlgorithmIdentifier,\n * issuer Name,\n * validity Validity,\n * subject Name,\n * subjectPublicKeyInfo SubjectPublicKeyInfo,\n * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,\n * -- If present, version shall be v2 or v3\n * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,\n * -- If present, version shall be v2 or v3\n * extensions [3] EXPLICIT Extensions OPTIONAL\n * -- If present, version shall be v3\n * }\n *\n * Version ::= INTEGER { v1(0), v2(1), v3(2) }\n *\n * CertificateSerialNumber ::= INTEGER\n *\n * Name ::= CHOICE {\n * // only one possible choice for now\n * RDNSequence\n * }\n *\n * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName\n *\n * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue\n *\n * AttributeTypeAndValue ::= SEQUENCE {\n * type AttributeType,\n * value AttributeValue\n * }\n * AttributeType ::= OBJECT IDENTIFIER\n * AttributeValue ::= ANY DEFINED BY AttributeType\n *\n * Validity ::= SEQUENCE {\n * notBefore Time,\n * notAfter Time\n * }\n *\n * Time ::= CHOICE {\n * utcTime UTCTime,\n * generalTime GeneralizedTime\n * }\n *\n * UniqueIdentifier ::= BIT STRING\n *\n * SubjectPublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * subjectPublicKey BIT STRING\n * }\n *\n * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension\n *\n * Extension ::= SEQUENCE {\n * extnID OBJECT IDENTIFIER,\n * critical BOOLEAN DEFAULT FALSE,\n * extnValue OCTET STRING\n * }\n *\n * The only key algorithm currently supported for PKI is RSA.\n *\n * RSASSA-PSS signatures are described in RFC 3447 and RFC 4055.\n *\n * PKCS#10 v1.7 describes certificate signing requests:\n *\n * CertificationRequestInfo:\n *\n * CertificationRequestInfo ::= SEQUENCE {\n * version INTEGER { v1(0) } (v1,...),\n * subject Name,\n * subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},\n * attributes [0] Attributes{{ CRIAttributes }}\n * }\n *\n * Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}\n *\n * CRIAttributes ATTRIBUTE ::= {\n * ... -- add any locally defined attributes here -- }\n *\n * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {\n * type ATTRIBUTE.&id({IOSet}),\n * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})\n * }\n *\n * CertificationRequest ::= SEQUENCE {\n * certificationRequestInfo CertificationRequestInfo,\n * signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},\n * signature BIT STRING\n * }\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./md');\nrequire('./mgf');\nrequire('./oids');\nrequire('./pem');\nrequire('./pss');\nrequire('./rsa');\nrequire('./util');\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Public Key Infrastructure (PKI) implementation. */\nvar pki = module.exports = forge.pki = forge.pki || {};\nvar oids = pki.oids;\n\n// short name OID mappings\nvar _shortNames = {};\n_shortNames['CN'] = oids['commonName'];\n_shortNames['commonName'] = 'CN';\n_shortNames['C'] = oids['countryName'];\n_shortNames['countryName'] = 'C';\n_shortNames['L'] = oids['localityName'];\n_shortNames['localityName'] = 'L';\n_shortNames['ST'] = oids['stateOrProvinceName'];\n_shortNames['stateOrProvinceName'] = 'ST';\n_shortNames['O'] = oids['organizationName'];\n_shortNames['organizationName'] = 'O';\n_shortNames['OU'] = oids['organizationalUnitName'];\n_shortNames['organizationalUnitName'] = 'OU';\n_shortNames['E'] = oids['emailAddress'];\n_shortNames['emailAddress'] = 'E';\n\n// validator for an SubjectPublicKeyInfo structure\n// Note: Currently only works with an RSA public key\nvar publicKeyValidator = forge.pki.rsa.publicKeyValidator;\n\n// validator for an X.509v3 certificate\nvar x509CertificateValidator = {\n name: 'Certificate',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Certificate.TBSCertificate',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'tbsCertificate',\n value: [{\n name: 'Certificate.TBSCertificate.version',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.version.integer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certVersion'\n }]\n }, {\n name: 'Certificate.TBSCertificate.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certSerialNumber'\n }, {\n name: 'Certificate.TBSCertificate.signature',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Certificate.TBSCertificate.signature.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certinfoSignatureOid'\n }, {\n name: 'Certificate.TBSCertificate.signature.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'certinfoSignatureParams'\n }]\n }, {\n name: 'Certificate.TBSCertificate.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certIssuer'\n }, {\n name: 'Certificate.TBSCertificate.validity',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n // Note: UTC and generalized times may both appear so the capture\n // names are based on their detected order, the names used below\n // are only for the common case, which validity time really means\n // \"notBefore\" and which means \"notAfter\" will be determined by order\n value: [{\n // notBefore (Time) (UTC time case)\n name: 'Certificate.TBSCertificate.validity.notBefore (utc)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity1UTCTime'\n }, {\n // notBefore (Time) (generalized time case)\n name: 'Certificate.TBSCertificate.validity.notBefore (generalized)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity2GeneralizedTime'\n }, {\n // notAfter (Time) (only UTC time is supported)\n name: 'Certificate.TBSCertificate.validity.notAfter (utc)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity3UTCTime'\n }, {\n // notAfter (Time) (only UTC time is supported)\n name: 'Certificate.TBSCertificate.validity.notAfter (generalized)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity4GeneralizedTime'\n }]\n }, {\n // Name (subject) (RDNSequence)\n name: 'Certificate.TBSCertificate.subject',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certSubject'\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n // issuerUniqueID (optional)\n name: 'Certificate.TBSCertificate.issuerUniqueID',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.issuerUniqueID.id',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n // TODO: support arbitrary bit length ids\n captureBitStringValue: 'certIssuerUniqueId'\n }]\n }, {\n // subjectUniqueID (optional)\n name: 'Certificate.TBSCertificate.subjectUniqueID',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.subjectUniqueID.id',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n // TODO: support arbitrary bit length ids\n captureBitStringValue: 'certSubjectUniqueId'\n }]\n }, {\n // Extensions (optional)\n name: 'Certificate.TBSCertificate.extensions',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n constructed: true,\n captureAsn1: 'certExtensions',\n optional: true\n }]\n }, {\n // AlgorithmIdentifier (signature algorithm)\n name: 'Certificate.signatureAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // algorithm\n name: 'Certificate.signatureAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certSignatureOid'\n }, {\n name: 'Certificate.TBSCertificate.signature.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'certSignatureParams'\n }]\n }, {\n // SignatureValue\n name: 'Certificate.signatureValue',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n captureBitStringValue: 'certSignature'\n }]\n};\n\nvar rsassaPssParameterValidator = {\n name: 'rsapss',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'rsapss.hashAlgorithm',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n value: [{\n name: 'rsapss.hashAlgorithm.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'hashOid'\n /* parameter block omitted, for SHA1 NULL anyhow. */\n }]\n }]\n }, {\n name: 'rsapss.maskGenAlgorithm',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'maskGenOid'\n }, {\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'maskGenHashOid'\n /* parameter block omitted, for SHA1 NULL anyhow. */\n }]\n }]\n }]\n }, {\n name: 'rsapss.saltLength',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n optional: true,\n value: [{\n name: 'rsapss.saltLength.saltLength',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.INTEGER,\n constructed: false,\n capture: 'saltLength'\n }]\n }, {\n name: 'rsapss.trailerField',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n optional: true,\n value: [{\n name: 'rsapss.trailer.trailer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.INTEGER,\n constructed: false,\n capture: 'trailer'\n }]\n }]\n};\n\n// validator for a CertificationRequestInfo structure\nvar certificationRequestInfoValidator = {\n name: 'CertificationRequestInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certificationRequestInfo',\n value: [{\n name: 'CertificationRequestInfo.integer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certificationRequestInfoVersion'\n }, {\n // Name (subject) (RDNSequence)\n name: 'CertificationRequestInfo.subject',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certificationRequestInfoSubject'\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n name: 'CertificationRequestInfo.attributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n capture: 'certificationRequestInfoAttributes',\n value: [{\n name: 'CertificationRequestInfo.attributes',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'CertificationRequestInfo.attributes.type',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false\n }, {\n name: 'CertificationRequestInfo.attributes.value',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true\n }]\n }]\n }]\n};\n\n// validator for a CertificationRequest structure\nvar certificationRequestValidator = {\n name: 'CertificationRequest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'csr',\n value: [\n certificationRequestInfoValidator, {\n // AlgorithmIdentifier (signature algorithm)\n name: 'CertificationRequest.signatureAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // algorithm\n name: 'CertificationRequest.signatureAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'csrSignatureOid'\n }, {\n name: 'CertificationRequest.signatureAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'csrSignatureParams'\n }]\n }, {\n // signature\n name: 'CertificationRequest.signature',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n captureBitStringValue: 'csrSignature'\n }\n ]\n};\n\n/**\n * Converts an RDNSequence of ASN.1 DER-encoded RelativeDistinguishedName\n * sets into an array with objects that have type and value properties.\n *\n * @param rdn the RDNSequence to convert.\n * @param md a message digest to append type and value to if provided.\n */\npki.RDNAttributesAsArray = function(rdn, md) {\n var rval = [];\n\n // each value in 'rdn' in is a SET of RelativeDistinguishedName\n var set, attr, obj;\n for(var si = 0; si < rdn.value.length; ++si) {\n // get the RelativeDistinguishedName set\n set = rdn.value[si];\n\n // each value in the SET is an AttributeTypeAndValue sequence\n // containing first a type (an OID) and second a value (defined by\n // the OID)\n for(var i = 0; i < set.value.length; ++i) {\n obj = {};\n attr = set.value[i];\n obj.type = asn1.derToOid(attr.value[0].value);\n obj.value = attr.value[1].value;\n obj.valueTagClass = attr.value[1].type;\n // if the OID is known, get its name and short name\n if(obj.type in oids) {\n obj.name = oids[obj.type];\n if(obj.name in _shortNames) {\n obj.shortName = _shortNames[obj.name];\n }\n }\n if(md) {\n md.update(obj.type);\n md.update(obj.value);\n }\n rval.push(obj);\n }\n }\n\n return rval;\n};\n\n/**\n * Converts ASN.1 CRIAttributes into an array with objects that have type and\n * value properties.\n *\n * @param attributes the CRIAttributes to convert.\n */\npki.CRIAttributesAsArray = function(attributes) {\n var rval = [];\n\n // each value in 'attributes' in is a SEQUENCE with an OID and a SET\n for(var si = 0; si < attributes.length; ++si) {\n // get the attribute sequence\n var seq = attributes[si];\n\n // each value in the SEQUENCE containing first a type (an OID) and\n // second a set of values (defined by the OID)\n var type = asn1.derToOid(seq.value[0].value);\n var values = seq.value[1].value;\n for(var vi = 0; vi < values.length; ++vi) {\n var obj = {};\n obj.type = type;\n obj.value = values[vi].value;\n obj.valueTagClass = values[vi].type;\n // if the OID is known, get its name and short name\n if(obj.type in oids) {\n obj.name = oids[obj.type];\n if(obj.name in _shortNames) {\n obj.shortName = _shortNames[obj.name];\n }\n }\n // parse extensions\n if(obj.type === oids.extensionRequest) {\n obj.extensions = [];\n for(var ei = 0; ei < obj.value.length; ++ei) {\n obj.extensions.push(pki.certificateExtensionFromAsn1(obj.value[ei]));\n }\n }\n rval.push(obj);\n }\n }\n\n return rval;\n};\n\n/**\n * Gets an issuer or subject attribute from its name, type, or short name.\n *\n * @param obj the issuer or subject object.\n * @param options a short name string or an object with:\n * shortName the short name for the attribute.\n * name the name for the attribute.\n * type the type for the attribute.\n *\n * @return the attribute.\n */\nfunction _getAttribute(obj, options) {\n if(typeof options === 'string') {\n options = {shortName: options};\n }\n\n var rval = null;\n var attr;\n for(var i = 0; rval === null && i < obj.attributes.length; ++i) {\n attr = obj.attributes[i];\n if(options.type && options.type === attr.type) {\n rval = attr;\n } else if(options.name && options.name === attr.name) {\n rval = attr;\n } else if(options.shortName && options.shortName === attr.shortName) {\n rval = attr;\n }\n }\n return rval;\n}\n\n/**\n * Converts signature parameters from ASN.1 structure.\n *\n * Currently only RSASSA-PSS supported. The PKCS#1 v1.5 signature scheme had\n * no parameters.\n *\n * RSASSA-PSS-params ::= SEQUENCE {\n * hashAlgorithm [0] HashAlgorithm DEFAULT\n * sha1Identifier,\n * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT\n * mgf1SHA1Identifier,\n * saltLength [2] INTEGER DEFAULT 20,\n * trailerField [3] INTEGER DEFAULT 1\n * }\n *\n * HashAlgorithm ::= AlgorithmIdentifier\n *\n * MaskGenAlgorithm ::= AlgorithmIdentifier\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * @param oid The OID specifying the signature algorithm\n * @param obj The ASN.1 structure holding the parameters\n * @param fillDefaults Whether to use return default values where omitted\n * @return signature parameter object\n */\nvar _readSignatureParameters = function(oid, obj, fillDefaults) {\n var params = {};\n\n if(oid !== oids['RSASSA-PSS']) {\n return params;\n }\n\n if(fillDefaults) {\n params = {\n hash: {\n algorithmOid: oids['sha1']\n },\n mgf: {\n algorithmOid: oids['mgf1'],\n hash: {\n algorithmOid: oids['sha1']\n }\n },\n saltLength: 20\n };\n }\n\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, rsassaPssParameterValidator, capture, errors)) {\n var error = new Error('Cannot read RSASSA-PSS parameter block.');\n error.errors = errors;\n throw error;\n }\n\n if(capture.hashOid !== undefined) {\n params.hash = params.hash || {};\n params.hash.algorithmOid = asn1.derToOid(capture.hashOid);\n }\n\n if(capture.maskGenOid !== undefined) {\n params.mgf = params.mgf || {};\n params.mgf.algorithmOid = asn1.derToOid(capture.maskGenOid);\n params.mgf.hash = params.mgf.hash || {};\n params.mgf.hash.algorithmOid = asn1.derToOid(capture.maskGenHashOid);\n }\n\n if(capture.saltLength !== undefined) {\n params.saltLength = capture.saltLength.charCodeAt(0);\n }\n\n return params;\n};\n\n/**\n * Converts an X.509 certificate from PEM format.\n *\n * Note: If the certificate is to be verified then compute hash should\n * be set to true. This will scan the TBSCertificate part of the ASN.1\n * object while it is converted so it doesn't need to be converted back\n * to ASN.1-DER-encoding later.\n *\n * @param pem the PEM-formatted certificate.\n * @param computeHash true to compute the hash for verification.\n * @param strict true to be strict when checking ASN.1 value lengths, false to\n * allow truncated values (default: true).\n *\n * @return the certificate.\n */\npki.certificateFromPem = function(pem, computeHash, strict) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'CERTIFICATE' &&\n msg.type !== 'X509 CERTIFICATE' &&\n msg.type !== 'TRUSTED CERTIFICATE') {\n var error = new Error(\n 'Could not convert certificate from PEM; PEM header type ' +\n 'is not \"CERTIFICATE\", \"X509 CERTIFICATE\", or \"TRUSTED CERTIFICATE\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error(\n 'Could not convert certificate from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body, strict);\n\n return pki.certificateFromAsn1(obj, computeHash);\n};\n\n/**\n * Converts an X.509 certificate to PEM format.\n *\n * @param cert the certificate.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted certificate.\n */\npki.certificateToPem = function(cert, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'CERTIFICATE',\n body: asn1.toDer(pki.certificateToAsn1(cert)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts an RSA public key from PEM format.\n *\n * @param pem the PEM-formatted public key.\n *\n * @return the public key.\n */\npki.publicKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PUBLIC KEY' && msg.type !== 'RSA PUBLIC KEY') {\n var error = new Error('Could not convert public key from PEM; PEM header ' +\n 'type is not \"PUBLIC KEY\" or \"RSA PUBLIC KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert public key from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return pki.publicKeyFromAsn1(obj);\n};\n\n/**\n * Converts an RSA public key to PEM format (using a SubjectPublicKeyInfo).\n *\n * @param key the public key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted public key.\n */\npki.publicKeyToPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'PUBLIC KEY',\n body: asn1.toDer(pki.publicKeyToAsn1(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts an RSA public key to PEM format (using an RSAPublicKey).\n *\n * @param key the public key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted public key.\n */\npki.publicKeyToRSAPublicKeyPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'RSA PUBLIC KEY',\n body: asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Gets a fingerprint for the given public key.\n *\n * @param options the options to use.\n * [md] the message digest object to use (defaults to forge.md.sha1).\n * [type] the type of fingerprint, such as 'RSAPublicKey',\n * 'SubjectPublicKeyInfo' (defaults to 'RSAPublicKey').\n * [encoding] an alternative output encoding, such as 'hex'\n * (defaults to none, outputs a byte buffer).\n * [delimiter] the delimiter to use between bytes for 'hex' encoded\n * output, eg: ':' (defaults to none).\n *\n * @return the fingerprint as a byte buffer or other encoding based on options.\n */\npki.getPublicKeyFingerprint = function(key, options) {\n options = options || {};\n var md = options.md || forge.md.sha1.create();\n var type = options.type || 'RSAPublicKey';\n\n var bytes;\n switch(type) {\n case 'RSAPublicKey':\n bytes = asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes();\n break;\n case 'SubjectPublicKeyInfo':\n bytes = asn1.toDer(pki.publicKeyToAsn1(key)).getBytes();\n break;\n default:\n throw new Error('Unknown fingerprint type \"' + options.type + '\".');\n }\n\n // hash public key bytes\n md.start();\n md.update(bytes);\n var digest = md.digest();\n if(options.encoding === 'hex') {\n var hex = digest.toHex();\n if(options.delimiter) {\n return hex.match(/.{2}/g).join(options.delimiter);\n }\n return hex;\n } else if(options.encoding === 'binary') {\n return digest.getBytes();\n } else if(options.encoding) {\n throw new Error('Unknown encoding \"' + options.encoding + '\".');\n }\n return digest;\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) from PEM format.\n *\n * Note: If the certification request is to be verified then compute hash\n * should be set to true. This will scan the CertificationRequestInfo part of\n * the ASN.1 object while it is converted so it doesn't need to be converted\n * back to ASN.1-DER-encoding later.\n *\n * @param pem the PEM-formatted certificate.\n * @param computeHash true to compute the hash for verification.\n * @param strict true to be strict when checking ASN.1 value lengths, false to\n * allow truncated values (default: true).\n *\n * @return the certification request (CSR).\n */\npki.certificationRequestFromPem = function(pem, computeHash, strict) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'CERTIFICATE REQUEST') {\n var error = new Error('Could not convert certification request from PEM; ' +\n 'PEM header type is not \"CERTIFICATE REQUEST\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert certification request from PEM; ' +\n 'PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body, strict);\n\n return pki.certificationRequestFromAsn1(obj, computeHash);\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) to PEM format.\n *\n * @param csr the certification request.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted certification request.\n */\npki.certificationRequestToPem = function(csr, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'CERTIFICATE REQUEST',\n body: asn1.toDer(pki.certificationRequestToAsn1(csr)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Creates an empty X.509v3 RSA certificate.\n *\n * @return the certificate.\n */\npki.createCertificate = function() {\n var cert = {};\n cert.version = 0x02;\n cert.serialNumber = '00';\n cert.signatureOid = null;\n cert.signature = null;\n cert.siginfo = {};\n cert.siginfo.algorithmOid = null;\n cert.validity = {};\n cert.validity.notBefore = new Date();\n cert.validity.notAfter = new Date();\n\n cert.issuer = {};\n cert.issuer.getField = function(sn) {\n return _getAttribute(cert.issuer, sn);\n };\n cert.issuer.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.issuer.attributes.push(attr);\n };\n cert.issuer.attributes = [];\n cert.issuer.hash = null;\n\n cert.subject = {};\n cert.subject.getField = function(sn) {\n return _getAttribute(cert.subject, sn);\n };\n cert.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.subject.attributes.push(attr);\n };\n cert.subject.attributes = [];\n cert.subject.hash = null;\n\n cert.extensions = [];\n cert.publicKey = null;\n cert.md = null;\n\n /**\n * Sets the subject of this certificate.\n *\n * @param attrs the array of subject attributes to use.\n * @param uniqueId an optional a unique ID to use.\n */\n cert.setSubject = function(attrs, uniqueId) {\n // set new attributes, clear hash\n _fillMissingFields(attrs);\n cert.subject.attributes = attrs;\n delete cert.subject.uniqueId;\n if(uniqueId) {\n // TODO: support arbitrary bit length ids\n cert.subject.uniqueId = uniqueId;\n }\n cert.subject.hash = null;\n };\n\n /**\n * Sets the issuer of this certificate.\n *\n * @param attrs the array of issuer attributes to use.\n * @param uniqueId an optional a unique ID to use.\n */\n cert.setIssuer = function(attrs, uniqueId) {\n // set new attributes, clear hash\n _fillMissingFields(attrs);\n cert.issuer.attributes = attrs;\n delete cert.issuer.uniqueId;\n if(uniqueId) {\n // TODO: support arbitrary bit length ids\n cert.issuer.uniqueId = uniqueId;\n }\n cert.issuer.hash = null;\n };\n\n /**\n * Sets the extensions of this certificate.\n *\n * @param exts the array of extensions to use.\n */\n cert.setExtensions = function(exts) {\n for(var i = 0; i < exts.length; ++i) {\n _fillMissingExtensionFields(exts[i], {cert: cert});\n }\n // set new extensions\n cert.extensions = exts;\n };\n\n /**\n * Gets an extension by its name or id.\n *\n * @param options the name to use or an object with:\n * name the name to use.\n * id the id to use.\n *\n * @return the extension or null if not found.\n */\n cert.getExtension = function(options) {\n if(typeof options === 'string') {\n options = {name: options};\n }\n\n var rval = null;\n var ext;\n for(var i = 0; rval === null && i < cert.extensions.length; ++i) {\n ext = cert.extensions[i];\n if(options.id && ext.id === options.id) {\n rval = ext;\n } else if(options.name && ext.name === options.name) {\n rval = ext;\n }\n }\n return rval;\n };\n\n /**\n * Signs this certificate using the given private key.\n *\n * @param key the private key to sign with.\n * @param md the message digest object to use (defaults to forge.md.sha1).\n */\n cert.sign = function(key, md) {\n // TODO: get signature OID from private key\n cert.md = md || forge.md.sha1.create();\n var algorithmOid = oids[cert.md.algorithm + 'WithRSAEncryption'];\n if(!algorithmOid) {\n var error = new Error('Could not compute certificate digest. ' +\n 'Unknown message digest algorithm OID.');\n error.algorithm = cert.md.algorithm;\n throw error;\n }\n cert.signatureOid = cert.siginfo.algorithmOid = algorithmOid;\n\n // get TBSCertificate, convert to DER\n cert.tbsCertificate = pki.getTBSCertificate(cert);\n var bytes = asn1.toDer(cert.tbsCertificate);\n\n // digest and sign\n cert.md.update(bytes.getBytes());\n cert.signature = key.sign(cert.md);\n };\n\n /**\n * Attempts verify the signature on the passed certificate using this\n * certificate's public key.\n *\n * @param child the certificate to verify.\n *\n * @return true if verified, false if not.\n */\n cert.verify = function(child) {\n var rval = false;\n\n if(!cert.issued(child)) {\n var issuer = child.issuer;\n var subject = cert.subject;\n var error = new Error(\n 'The parent certificate did not issue the given child ' +\n 'certificate; the child certificate\\'s issuer does not match the ' +\n 'parent\\'s subject.');\n error.expectedIssuer = issuer.attributes;\n error.actualIssuer = subject.attributes;\n throw error;\n }\n\n var md = child.md;\n if(md === null) {\n // check signature OID for supported signature types\n if(child.signatureOid in oids) {\n var oid = oids[child.signatureOid];\n switch(oid) {\n case 'sha1WithRSAEncryption':\n md = forge.md.sha1.create();\n break;\n case 'md5WithRSAEncryption':\n md = forge.md.md5.create();\n break;\n case 'sha256WithRSAEncryption':\n md = forge.md.sha256.create();\n break;\n case 'sha384WithRSAEncryption':\n md = forge.md.sha384.create();\n break;\n case 'sha512WithRSAEncryption':\n md = forge.md.sha512.create();\n break;\n case 'RSASSA-PSS':\n md = forge.md.sha256.create();\n break;\n }\n }\n if(md === null) {\n var error = new Error('Could not compute certificate digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = child.signatureOid;\n throw error;\n }\n\n // produce DER formatted TBSCertificate and digest it\n var tbsCertificate = child.tbsCertificate || pki.getTBSCertificate(child);\n var bytes = asn1.toDer(tbsCertificate);\n md.update(bytes.getBytes());\n }\n\n if(md !== null) {\n var scheme;\n\n switch(child.signatureOid) {\n case oids.sha1WithRSAEncryption:\n scheme = undefined; /* use PKCS#1 v1.5 padding scheme */\n break;\n case oids['RSASSA-PSS']:\n var hash, mgf;\n\n /* initialize mgf */\n hash = oids[child.signatureParameters.mgf.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported MGF hash function.');\n error.oid = child.signatureParameters.mgf.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n mgf = oids[child.signatureParameters.mgf.algorithmOid];\n if(mgf === undefined || forge.mgf[mgf] === undefined) {\n var error = new Error('Unsupported MGF function.');\n error.oid = child.signatureParameters.mgf.algorithmOid;\n error.name = mgf;\n throw error;\n }\n\n mgf = forge.mgf[mgf].create(forge.md[hash].create());\n\n /* initialize hash function */\n hash = oids[child.signatureParameters.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n throw {\n message: 'Unsupported RSASSA-PSS hash function.',\n oid: child.signatureParameters.hash.algorithmOid,\n name: hash\n };\n }\n\n scheme = forge.pss.create(forge.md[hash].create(), mgf,\n child.signatureParameters.saltLength);\n break;\n }\n\n // verify signature on cert using public key\n rval = cert.publicKey.verify(\n md.digest().getBytes(), child.signature, scheme);\n }\n\n return rval;\n };\n\n /**\n * Returns true if this certificate's issuer matches the passed\n * certificate's subject. Note that no signature check is performed.\n *\n * @param parent the certificate to check.\n *\n * @return true if this certificate's issuer matches the passed certificate's\n * subject.\n */\n cert.isIssuer = function(parent) {\n var rval = false;\n\n var i = cert.issuer;\n var s = parent.subject;\n\n // compare hashes if present\n if(i.hash && s.hash) {\n rval = (i.hash === s.hash);\n } else if(i.attributes.length === s.attributes.length) {\n // all attributes are the same so issuer matches subject\n rval = true;\n var iattr, sattr;\n for(var n = 0; rval && n < i.attributes.length; ++n) {\n iattr = i.attributes[n];\n sattr = s.attributes[n];\n if(iattr.type !== sattr.type || iattr.value !== sattr.value) {\n // attribute mismatch\n rval = false;\n }\n }\n }\n\n return rval;\n };\n\n /**\n * Returns true if this certificate's subject matches the issuer of the\n * given certificate). Note that not signature check is performed.\n *\n * @param child the certificate to check.\n *\n * @return true if this certificate's subject matches the passed\n * certificate's issuer.\n */\n cert.issued = function(child) {\n return child.isIssuer(cert);\n };\n\n /**\n * Generates the subjectKeyIdentifier for this certificate as byte buffer.\n *\n * @return the subjectKeyIdentifier for this certificate as byte buffer.\n */\n cert.generateSubjectKeyIdentifier = function() {\n /* See: 4.2.1.2 section of the the RFC3280, keyIdentifier is either:\n\n (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the\n value of the BIT STRING subjectPublicKey (excluding the tag,\n length, and number of unused bits).\n\n (2) The keyIdentifier is composed of a four bit type field with\n the value 0100 followed by the least significant 60 bits of the\n SHA-1 hash of the value of the BIT STRING subjectPublicKey\n (excluding the tag, length, and number of unused bit string bits).\n */\n\n // skipping the tag, length, and number of unused bits is the same\n // as just using the RSAPublicKey (for RSA keys, which are the\n // only ones supported)\n return pki.getPublicKeyFingerprint(cert.publicKey, {type: 'RSAPublicKey'});\n };\n\n /**\n * Verifies the subjectKeyIdentifier extension value for this certificate\n * against its public key. If no extension is found, false will be\n * returned.\n *\n * @return true if verified, false if not.\n */\n cert.verifySubjectKeyIdentifier = function() {\n var oid = oids['subjectKeyIdentifier'];\n for(var i = 0; i < cert.extensions.length; ++i) {\n var ext = cert.extensions[i];\n if(ext.id === oid) {\n var ski = cert.generateSubjectKeyIdentifier().getBytes();\n return (forge.util.hexToBytes(ext.subjectKeyIdentifier) === ski);\n }\n }\n return false;\n };\n\n return cert;\n};\n\n/**\n * Converts an X.509v3 RSA certificate from an ASN.1 object.\n *\n * Note: If the certificate is to be verified then compute hash should\n * be set to true. There is currently no implementation for converting\n * a certificate back to ASN.1 so the TBSCertificate part of the ASN.1\n * object needs to be scanned before the cert object is created.\n *\n * @param obj the asn1 representation of an X.509v3 RSA certificate.\n * @param computeHash true to compute the hash for verification.\n *\n * @return the certificate.\n */\npki.certificateFromAsn1 = function(obj, computeHash) {\n // validate certificate and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, x509CertificateValidator, capture, errors)) {\n var error = new Error('Cannot read X.509 certificate. ' +\n 'ASN.1 object is not an X509v3 Certificate.');\n error.errors = errors;\n throw error;\n }\n\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n throw new Error('Cannot read public key. OID is not RSA.');\n }\n\n // create certificate\n var cert = pki.createCertificate();\n cert.version = capture.certVersion ?\n capture.certVersion.charCodeAt(0) : 0;\n var serial = forge.util.createBuffer(capture.certSerialNumber);\n cert.serialNumber = serial.toHex();\n cert.signatureOid = forge.asn1.derToOid(capture.certSignatureOid);\n cert.signatureParameters = _readSignatureParameters(\n cert.signatureOid, capture.certSignatureParams, true);\n cert.siginfo.algorithmOid = forge.asn1.derToOid(capture.certinfoSignatureOid);\n cert.siginfo.parameters = _readSignatureParameters(cert.siginfo.algorithmOid,\n capture.certinfoSignatureParams, false);\n cert.signature = capture.certSignature;\n\n var validity = [];\n if(capture.certValidity1UTCTime !== undefined) {\n validity.push(asn1.utcTimeToDate(capture.certValidity1UTCTime));\n }\n if(capture.certValidity2GeneralizedTime !== undefined) {\n validity.push(asn1.generalizedTimeToDate(\n capture.certValidity2GeneralizedTime));\n }\n if(capture.certValidity3UTCTime !== undefined) {\n validity.push(asn1.utcTimeToDate(capture.certValidity3UTCTime));\n }\n if(capture.certValidity4GeneralizedTime !== undefined) {\n validity.push(asn1.generalizedTimeToDate(\n capture.certValidity4GeneralizedTime));\n }\n if(validity.length > 2) {\n throw new Error('Cannot read notBefore/notAfter validity times; more ' +\n 'than two times were provided in the certificate.');\n }\n if(validity.length < 2) {\n throw new Error('Cannot read notBefore/notAfter validity times; they ' +\n 'were not provided as either UTCTime or GeneralizedTime.');\n }\n cert.validity.notBefore = validity[0];\n cert.validity.notAfter = validity[1];\n\n // keep TBSCertificate to preserve signature when exporting\n cert.tbsCertificate = capture.tbsCertificate;\n\n if(computeHash) {\n // check signature OID for supported signature types\n cert.md = null;\n if(cert.signatureOid in oids) {\n var oid = oids[cert.signatureOid];\n switch(oid) {\n case 'sha1WithRSAEncryption':\n cert.md = forge.md.sha1.create();\n break;\n case 'md5WithRSAEncryption':\n cert.md = forge.md.md5.create();\n break;\n case 'sha256WithRSAEncryption':\n cert.md = forge.md.sha256.create();\n break;\n case 'sha384WithRSAEncryption':\n cert.md = forge.md.sha384.create();\n break;\n case 'sha512WithRSAEncryption':\n cert.md = forge.md.sha512.create();\n break;\n case 'RSASSA-PSS':\n cert.md = forge.md.sha256.create();\n break;\n }\n }\n if(cert.md === null) {\n var error = new Error('Could not compute certificate digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = cert.signatureOid;\n throw error;\n }\n\n // produce DER formatted TBSCertificate and digest it\n var bytes = asn1.toDer(cert.tbsCertificate);\n cert.md.update(bytes.getBytes());\n }\n\n // handle issuer, build issuer message digest\n var imd = forge.md.sha1.create();\n cert.issuer.getField = function(sn) {\n return _getAttribute(cert.issuer, sn);\n };\n cert.issuer.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.issuer.attributes.push(attr);\n };\n cert.issuer.attributes = pki.RDNAttributesAsArray(capture.certIssuer, imd);\n if(capture.certIssuerUniqueId) {\n cert.issuer.uniqueId = capture.certIssuerUniqueId;\n }\n cert.issuer.hash = imd.digest().toHex();\n\n // handle subject, build subject message digest\n var smd = forge.md.sha1.create();\n cert.subject.getField = function(sn) {\n return _getAttribute(cert.subject, sn);\n };\n cert.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.subject.attributes.push(attr);\n };\n cert.subject.attributes = pki.RDNAttributesAsArray(capture.certSubject, smd);\n if(capture.certSubjectUniqueId) {\n cert.subject.uniqueId = capture.certSubjectUniqueId;\n }\n cert.subject.hash = smd.digest().toHex();\n\n // handle extensions\n if(capture.certExtensions) {\n cert.extensions = pki.certificateExtensionsFromAsn1(capture.certExtensions);\n } else {\n cert.extensions = [];\n }\n\n // convert RSA public key from ASN.1\n cert.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo);\n\n return cert;\n};\n\n/**\n * Converts an ASN.1 extensions object (with extension sequences as its\n * values) into an array of extension objects with types and values.\n *\n * Supported extensions:\n *\n * id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }\n * KeyUsage ::= BIT STRING {\n * digitalSignature (0),\n * nonRepudiation (1),\n * keyEncipherment (2),\n * dataEncipherment (3),\n * keyAgreement (4),\n * keyCertSign (5),\n * cRLSign (6),\n * encipherOnly (7),\n * decipherOnly (8)\n * }\n *\n * id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }\n * BasicConstraints ::= SEQUENCE {\n * cA BOOLEAN DEFAULT FALSE,\n * pathLenConstraint INTEGER (0..MAX) OPTIONAL\n * }\n *\n * subjectAltName EXTENSION ::= {\n * SYNTAX GeneralNames\n * IDENTIFIED BY id-ce-subjectAltName\n * }\n *\n * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName\n *\n * GeneralName ::= CHOICE {\n * otherName [0] INSTANCE OF OTHER-NAME,\n * rfc822Name [1] IA5String,\n * dNSName [2] IA5String,\n * x400Address [3] ORAddress,\n * directoryName [4] Name,\n * ediPartyName [5] EDIPartyName,\n * uniformResourceIdentifier [6] IA5String,\n * IPAddress [7] OCTET STRING,\n * registeredID [8] OBJECT IDENTIFIER\n * }\n *\n * OTHER-NAME ::= TYPE-IDENTIFIER\n *\n * EDIPartyName ::= SEQUENCE {\n * nameAssigner [0] DirectoryString {ub-name} OPTIONAL,\n * partyName [1] DirectoryString {ub-name}\n * }\n *\n * @param exts the extensions ASN.1 with extension sequences to parse.\n *\n * @return the array.\n */\npki.certificateExtensionsFromAsn1 = function(exts) {\n var rval = [];\n for(var i = 0; i < exts.value.length; ++i) {\n // get extension sequence\n var extseq = exts.value[i];\n for(var ei = 0; ei < extseq.value.length; ++ei) {\n rval.push(pki.certificateExtensionFromAsn1(extseq.value[ei]));\n }\n }\n\n return rval;\n};\n\n/**\n * Parses a single certificate extension from ASN.1.\n *\n * @param ext the extension in ASN.1 format.\n *\n * @return the parsed extension as an object.\n */\npki.certificateExtensionFromAsn1 = function(ext) {\n // an extension has:\n // [0] extnID OBJECT IDENTIFIER\n // [1] critical BOOLEAN DEFAULT FALSE\n // [2] extnValue OCTET STRING\n var e = {};\n e.id = asn1.derToOid(ext.value[0].value);\n e.critical = false;\n if(ext.value[1].type === asn1.Type.BOOLEAN) {\n e.critical = (ext.value[1].value.charCodeAt(0) !== 0x00);\n e.value = ext.value[2].value;\n } else {\n e.value = ext.value[1].value;\n }\n // if the oid is known, get its name\n if(e.id in oids) {\n e.name = oids[e.id];\n\n // handle key usage\n if(e.name === 'keyUsage') {\n // get value as BIT STRING\n var ev = asn1.fromDer(e.value);\n var b2 = 0x00;\n var b3 = 0x00;\n if(ev.value.length > 1) {\n // skip first byte, just indicates unused bits which\n // will be padded with 0s anyway\n // get bytes with flag bits\n b2 = ev.value.charCodeAt(1);\n b3 = ev.value.length > 2 ? ev.value.charCodeAt(2) : 0;\n }\n // set flags\n e.digitalSignature = (b2 & 0x80) === 0x80;\n e.nonRepudiation = (b2 & 0x40) === 0x40;\n e.keyEncipherment = (b2 & 0x20) === 0x20;\n e.dataEncipherment = (b2 & 0x10) === 0x10;\n e.keyAgreement = (b2 & 0x08) === 0x08;\n e.keyCertSign = (b2 & 0x04) === 0x04;\n e.cRLSign = (b2 & 0x02) === 0x02;\n e.encipherOnly = (b2 & 0x01) === 0x01;\n e.decipherOnly = (b3 & 0x80) === 0x80;\n } else if(e.name === 'basicConstraints') {\n // handle basic constraints\n // get value as SEQUENCE\n var ev = asn1.fromDer(e.value);\n // get cA BOOLEAN flag (defaults to false)\n if(ev.value.length > 0 && ev.value[0].type === asn1.Type.BOOLEAN) {\n e.cA = (ev.value[0].value.charCodeAt(0) !== 0x00);\n } else {\n e.cA = false;\n }\n // get path length constraint\n var value = null;\n if(ev.value.length > 0 && ev.value[0].type === asn1.Type.INTEGER) {\n value = ev.value[0].value;\n } else if(ev.value.length > 1) {\n value = ev.value[1].value;\n }\n if(value !== null) {\n e.pathLenConstraint = asn1.derToInteger(value);\n }\n } else if(e.name === 'extKeyUsage') {\n // handle extKeyUsage\n // value is a SEQUENCE of OIDs\n var ev = asn1.fromDer(e.value);\n for(var vi = 0; vi < ev.value.length; ++vi) {\n var oid = asn1.derToOid(ev.value[vi].value);\n if(oid in oids) {\n e[oids[oid]] = true;\n } else {\n e[oid] = true;\n }\n }\n } else if(e.name === 'nsCertType') {\n // handle nsCertType\n // get value as BIT STRING\n var ev = asn1.fromDer(e.value);\n var b2 = 0x00;\n if(ev.value.length > 1) {\n // skip first byte, just indicates unused bits which\n // will be padded with 0s anyway\n // get bytes with flag bits\n b2 = ev.value.charCodeAt(1);\n }\n // set flags\n e.client = (b2 & 0x80) === 0x80;\n e.server = (b2 & 0x40) === 0x40;\n e.email = (b2 & 0x20) === 0x20;\n e.objsign = (b2 & 0x10) === 0x10;\n e.reserved = (b2 & 0x08) === 0x08;\n e.sslCA = (b2 & 0x04) === 0x04;\n e.emailCA = (b2 & 0x02) === 0x02;\n e.objCA = (b2 & 0x01) === 0x01;\n } else if(\n e.name === 'subjectAltName' ||\n e.name === 'issuerAltName') {\n // handle subjectAltName/issuerAltName\n e.altNames = [];\n\n // ev is a SYNTAX SEQUENCE\n var gn;\n var ev = asn1.fromDer(e.value);\n for(var n = 0; n < ev.value.length; ++n) {\n // get GeneralName\n gn = ev.value[n];\n\n var altName = {\n type: gn.type,\n value: gn.value\n };\n e.altNames.push(altName);\n\n // Note: Support for types 1,2,6,7,8\n switch(gn.type) {\n // rfc822Name\n case 1:\n // dNSName\n case 2:\n // uniformResourceIdentifier (URI)\n case 6:\n break;\n // IPAddress\n case 7:\n // convert to IPv4/IPv6 string representation\n altName.ip = forge.util.bytesToIP(gn.value);\n break;\n // registeredID\n case 8:\n altName.oid = asn1.derToOid(gn.value);\n break;\n default:\n // unsupported\n }\n }\n } else if(e.name === 'subjectKeyIdentifier') {\n // value is an OCTETSTRING w/the hash of the key-type specific\n // public key structure (eg: RSAPublicKey)\n var ev = asn1.fromDer(e.value);\n e.subjectKeyIdentifier = forge.util.bytesToHex(ev.value);\n }\n }\n return e;\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) from an ASN.1 object.\n *\n * Note: If the certification request is to be verified then compute hash\n * should be set to true. There is currently no implementation for converting\n * a certificate back to ASN.1 so the CertificationRequestInfo part of the\n * ASN.1 object needs to be scanned before the csr object is created.\n *\n * @param obj the asn1 representation of a PKCS#10 certification request (CSR).\n * @param computeHash true to compute the hash for verification.\n *\n * @return the certification request (CSR).\n */\npki.certificationRequestFromAsn1 = function(obj, computeHash) {\n // validate certification request and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, certificationRequestValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#10 certificate request. ' +\n 'ASN.1 object is not a PKCS#10 CertificationRequest.');\n error.errors = errors;\n throw error;\n }\n\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n throw new Error('Cannot read public key. OID is not RSA.');\n }\n\n // create certification request\n var csr = pki.createCertificationRequest();\n csr.version = capture.csrVersion ? capture.csrVersion.charCodeAt(0) : 0;\n csr.signatureOid = forge.asn1.derToOid(capture.csrSignatureOid);\n csr.signatureParameters = _readSignatureParameters(\n csr.signatureOid, capture.csrSignatureParams, true);\n csr.siginfo.algorithmOid = forge.asn1.derToOid(capture.csrSignatureOid);\n csr.siginfo.parameters = _readSignatureParameters(\n csr.siginfo.algorithmOid, capture.csrSignatureParams, false);\n csr.signature = capture.csrSignature;\n\n // keep CertificationRequestInfo to preserve signature when exporting\n csr.certificationRequestInfo = capture.certificationRequestInfo;\n\n if(computeHash) {\n // check signature OID for supported signature types\n csr.md = null;\n if(csr.signatureOid in oids) {\n var oid = oids[csr.signatureOid];\n switch(oid) {\n case 'sha1WithRSAEncryption':\n csr.md = forge.md.sha1.create();\n break;\n case 'md5WithRSAEncryption':\n csr.md = forge.md.md5.create();\n break;\n case 'sha256WithRSAEncryption':\n csr.md = forge.md.sha256.create();\n break;\n case 'sha384WithRSAEncryption':\n csr.md = forge.md.sha384.create();\n break;\n case 'sha512WithRSAEncryption':\n csr.md = forge.md.sha512.create();\n break;\n case 'RSASSA-PSS':\n csr.md = forge.md.sha256.create();\n break;\n }\n }\n if(csr.md === null) {\n var error = new Error('Could not compute certification request digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = csr.signatureOid;\n throw error;\n }\n\n // produce DER formatted CertificationRequestInfo and digest it\n var bytes = asn1.toDer(csr.certificationRequestInfo);\n csr.md.update(bytes.getBytes());\n }\n\n // handle subject, build subject message digest\n var smd = forge.md.sha1.create();\n csr.subject.getField = function(sn) {\n return _getAttribute(csr.subject, sn);\n };\n csr.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n csr.subject.attributes.push(attr);\n };\n csr.subject.attributes = pki.RDNAttributesAsArray(\n capture.certificationRequestInfoSubject, smd);\n csr.subject.hash = smd.digest().toHex();\n\n // convert RSA public key from ASN.1\n csr.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo);\n\n // convert attributes from ASN.1\n csr.getAttribute = function(sn) {\n return _getAttribute(csr, sn);\n };\n csr.addAttribute = function(attr) {\n _fillMissingFields([attr]);\n csr.attributes.push(attr);\n };\n csr.attributes = pki.CRIAttributesAsArray(\n capture.certificationRequestInfoAttributes || []);\n\n return csr;\n};\n\n/**\n * Creates an empty certification request (a CSR or certificate signing\n * request). Once created, its public key and attributes can be set and then\n * it can be signed.\n *\n * @return the empty certification request.\n */\npki.createCertificationRequest = function() {\n var csr = {};\n csr.version = 0x00;\n csr.signatureOid = null;\n csr.signature = null;\n csr.siginfo = {};\n csr.siginfo.algorithmOid = null;\n\n csr.subject = {};\n csr.subject.getField = function(sn) {\n return _getAttribute(csr.subject, sn);\n };\n csr.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n csr.subject.attributes.push(attr);\n };\n csr.subject.attributes = [];\n csr.subject.hash = null;\n\n csr.publicKey = null;\n csr.attributes = [];\n csr.getAttribute = function(sn) {\n return _getAttribute(csr, sn);\n };\n csr.addAttribute = function(attr) {\n _fillMissingFields([attr]);\n csr.attributes.push(attr);\n };\n csr.md = null;\n\n /**\n * Sets the subject of this certification request.\n *\n * @param attrs the array of subject attributes to use.\n */\n csr.setSubject = function(attrs) {\n // set new attributes\n _fillMissingFields(attrs);\n csr.subject.attributes = attrs;\n csr.subject.hash = null;\n };\n\n /**\n * Sets the attributes of this certification request.\n *\n * @param attrs the array of attributes to use.\n */\n csr.setAttributes = function(attrs) {\n // set new attributes\n _fillMissingFields(attrs);\n csr.attributes = attrs;\n };\n\n /**\n * Signs this certification request using the given private key.\n *\n * @param key the private key to sign with.\n * @param md the message digest object to use (defaults to forge.md.sha1).\n */\n csr.sign = function(key, md) {\n // TODO: get signature OID from private key\n csr.md = md || forge.md.sha1.create();\n var algorithmOid = oids[csr.md.algorithm + 'WithRSAEncryption'];\n if(!algorithmOid) {\n var error = new Error('Could not compute certification request digest. ' +\n 'Unknown message digest algorithm OID.');\n error.algorithm = csr.md.algorithm;\n throw error;\n }\n csr.signatureOid = csr.siginfo.algorithmOid = algorithmOid;\n\n // get CertificationRequestInfo, convert to DER\n csr.certificationRequestInfo = pki.getCertificationRequestInfo(csr);\n var bytes = asn1.toDer(csr.certificationRequestInfo);\n\n // digest and sign\n csr.md.update(bytes.getBytes());\n csr.signature = key.sign(csr.md);\n };\n\n /**\n * Attempts verify the signature on the passed certification request using\n * its public key.\n *\n * A CSR that has been exported to a file in PEM format can be verified using\n * OpenSSL using this command:\n *\n * openssl req -in -verify -noout -text\n *\n * @return true if verified, false if not.\n */\n csr.verify = function() {\n var rval = false;\n\n var md = csr.md;\n if(md === null) {\n // check signature OID for supported signature types\n if(csr.signatureOid in oids) {\n // TODO: create DRY `OID to md` function\n var oid = oids[csr.signatureOid];\n switch(oid) {\n case 'sha1WithRSAEncryption':\n md = forge.md.sha1.create();\n break;\n case 'md5WithRSAEncryption':\n md = forge.md.md5.create();\n break;\n case 'sha256WithRSAEncryption':\n md = forge.md.sha256.create();\n break;\n case 'sha384WithRSAEncryption':\n md = forge.md.sha384.create();\n break;\n case 'sha512WithRSAEncryption':\n md = forge.md.sha512.create();\n break;\n case 'RSASSA-PSS':\n md = forge.md.sha256.create();\n break;\n }\n }\n if(md === null) {\n var error = new Error(\n 'Could not compute certification request digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = csr.signatureOid;\n throw error;\n }\n\n // produce DER formatted CertificationRequestInfo and digest it\n var cri = csr.certificationRequestInfo ||\n pki.getCertificationRequestInfo(csr);\n var bytes = asn1.toDer(cri);\n md.update(bytes.getBytes());\n }\n\n if(md !== null) {\n var scheme;\n\n switch(csr.signatureOid) {\n case oids.sha1WithRSAEncryption:\n /* use PKCS#1 v1.5 padding scheme */\n break;\n case oids['RSASSA-PSS']:\n var hash, mgf;\n\n /* initialize mgf */\n hash = oids[csr.signatureParameters.mgf.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported MGF hash function.');\n error.oid = csr.signatureParameters.mgf.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n mgf = oids[csr.signatureParameters.mgf.algorithmOid];\n if(mgf === undefined || forge.mgf[mgf] === undefined) {\n var error = new Error('Unsupported MGF function.');\n error.oid = csr.signatureParameters.mgf.algorithmOid;\n error.name = mgf;\n throw error;\n }\n\n mgf = forge.mgf[mgf].create(forge.md[hash].create());\n\n /* initialize hash function */\n hash = oids[csr.signatureParameters.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported RSASSA-PSS hash function.');\n error.oid = csr.signatureParameters.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n scheme = forge.pss.create(forge.md[hash].create(), mgf,\n csr.signatureParameters.saltLength);\n break;\n }\n\n // verify signature on csr using its public key\n rval = csr.publicKey.verify(\n md.digest().getBytes(), csr.signature, scheme);\n }\n\n return rval;\n };\n\n return csr;\n};\n\n/**\n * Converts an X.509 subject or issuer to an ASN.1 RDNSequence.\n *\n * @param obj the subject or issuer (distinguished name).\n *\n * @return the ASN.1 RDNSequence.\n */\nfunction _dnToAsn1(obj) {\n // create an empty RDNSequence\n var rval = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // iterate over attributes\n var attr, set;\n var attrs = obj.attributes;\n for(var i = 0; i < attrs.length; ++i) {\n attr = attrs[i];\n var value = attr.value;\n\n // reuse tag class for attribute value if available\n var valueTagClass = asn1.Type.PRINTABLESTRING;\n if('valueTagClass' in attr) {\n valueTagClass = attr.valueTagClass;\n\n if(valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(value);\n }\n // FIXME: handle more encodings\n }\n\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n set = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n // AttributeValue\n asn1.create(asn1.Class.UNIVERSAL, valueTagClass, false, value)\n ])\n ]);\n rval.value.push(set);\n }\n\n return rval;\n}\n\n/**\n * Gets all printable attributes (typically of an issuer or subject) in a\n * simplified JSON format for display.\n *\n * @param attrs the attributes.\n *\n * @return the JSON for display.\n */\nfunction _getAttributesAsJson(attrs) {\n var rval = {};\n for(var i = 0; i < attrs.length; ++i) {\n var attr = attrs[i];\n if(attr.shortName && (\n attr.valueTagClass === asn1.Type.UTF8 ||\n attr.valueTagClass === asn1.Type.PRINTABLESTRING ||\n attr.valueTagClass === asn1.Type.IA5STRING)) {\n var value = attr.value;\n if(attr.valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(attr.value);\n }\n if(!(attr.shortName in rval)) {\n rval[attr.shortName] = value;\n } else if(forge.util.isArray(rval[attr.shortName])) {\n rval[attr.shortName].push(value);\n } else {\n rval[attr.shortName] = [rval[attr.shortName], value];\n }\n }\n }\n return rval;\n}\n\n/**\n * Fills in missing fields in attributes.\n *\n * @param attrs the attributes to fill missing fields in.\n */\nfunction _fillMissingFields(attrs) {\n var attr;\n for(var i = 0; i < attrs.length; ++i) {\n attr = attrs[i];\n\n // populate missing name\n if(typeof attr.name === 'undefined') {\n if(attr.type && attr.type in pki.oids) {\n attr.name = pki.oids[attr.type];\n } else if(attr.shortName && attr.shortName in _shortNames) {\n attr.name = pki.oids[_shortNames[attr.shortName]];\n }\n }\n\n // populate missing type (OID)\n if(typeof attr.type === 'undefined') {\n if(attr.name && attr.name in pki.oids) {\n attr.type = pki.oids[attr.name];\n } else {\n var error = new Error('Attribute type not specified.');\n error.attribute = attr;\n throw error;\n }\n }\n\n // populate missing shortname\n if(typeof attr.shortName === 'undefined') {\n if(attr.name && attr.name in _shortNames) {\n attr.shortName = _shortNames[attr.name];\n }\n }\n\n // convert extensions to value\n if(attr.type === oids.extensionRequest) {\n attr.valueConstructed = true;\n attr.valueTagClass = asn1.Type.SEQUENCE;\n if(!attr.value && attr.extensions) {\n attr.value = [];\n for(var ei = 0; ei < attr.extensions.length; ++ei) {\n attr.value.push(pki.certificateExtensionToAsn1(\n _fillMissingExtensionFields(attr.extensions[ei])));\n }\n }\n }\n\n if(typeof attr.value === 'undefined') {\n var error = new Error('Attribute value not specified.');\n error.attribute = attr;\n throw error;\n }\n }\n}\n\n/**\n * Fills in missing fields in certificate extensions.\n *\n * @param e the extension.\n * @param [options] the options to use.\n * [cert] the certificate the extensions are for.\n *\n * @return the extension.\n */\nfunction _fillMissingExtensionFields(e, options) {\n options = options || {};\n\n // populate missing name\n if(typeof e.name === 'undefined') {\n if(e.id && e.id in pki.oids) {\n e.name = pki.oids[e.id];\n }\n }\n\n // populate missing id\n if(typeof e.id === 'undefined') {\n if(e.name && e.name in pki.oids) {\n e.id = pki.oids[e.name];\n } else {\n var error = new Error('Extension ID not specified.');\n error.extension = e;\n throw error;\n }\n }\n\n if(typeof e.value !== 'undefined') {\n return e;\n }\n\n // handle missing value:\n\n // value is a BIT STRING\n if(e.name === 'keyUsage') {\n // build flags\n var unused = 0;\n var b2 = 0x00;\n var b3 = 0x00;\n if(e.digitalSignature) {\n b2 |= 0x80;\n unused = 7;\n }\n if(e.nonRepudiation) {\n b2 |= 0x40;\n unused = 6;\n }\n if(e.keyEncipherment) {\n b2 |= 0x20;\n unused = 5;\n }\n if(e.dataEncipherment) {\n b2 |= 0x10;\n unused = 4;\n }\n if(e.keyAgreement) {\n b2 |= 0x08;\n unused = 3;\n }\n if(e.keyCertSign) {\n b2 |= 0x04;\n unused = 2;\n }\n if(e.cRLSign) {\n b2 |= 0x02;\n unused = 1;\n }\n if(e.encipherOnly) {\n b2 |= 0x01;\n unused = 0;\n }\n if(e.decipherOnly) {\n b3 |= 0x80;\n unused = 7;\n }\n\n // create bit string\n var value = String.fromCharCode(unused);\n if(b3 !== 0) {\n value += String.fromCharCode(b2) + String.fromCharCode(b3);\n } else if(b2 !== 0) {\n value += String.fromCharCode(b2);\n }\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value);\n } else if(e.name === 'basicConstraints') {\n // basicConstraints is a SEQUENCE\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n // cA BOOLEAN flag defaults to false\n if(e.cA) {\n e.value.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false,\n String.fromCharCode(0xFF)));\n }\n if('pathLenConstraint' in e) {\n e.value.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(e.pathLenConstraint).getBytes()));\n }\n } else if(e.name === 'extKeyUsage') {\n // extKeyUsage is a SEQUENCE of OIDs\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n for(var key in e) {\n if(e[key] !== true) {\n continue;\n }\n // key is name in OID map\n if(key in oids) {\n seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID,\n false, asn1.oidToDer(oids[key]).getBytes()));\n } else if(key.indexOf('.') !== -1) {\n // assume key is an OID\n seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID,\n false, asn1.oidToDer(key).getBytes()));\n }\n }\n } else if(e.name === 'nsCertType') {\n // nsCertType is a BIT STRING\n // build flags\n var unused = 0;\n var b2 = 0x00;\n\n if(e.client) {\n b2 |= 0x80;\n unused = 7;\n }\n if(e.server) {\n b2 |= 0x40;\n unused = 6;\n }\n if(e.email) {\n b2 |= 0x20;\n unused = 5;\n }\n if(e.objsign) {\n b2 |= 0x10;\n unused = 4;\n }\n if(e.reserved) {\n b2 |= 0x08;\n unused = 3;\n }\n if(e.sslCA) {\n b2 |= 0x04;\n unused = 2;\n }\n if(e.emailCA) {\n b2 |= 0x02;\n unused = 1;\n }\n if(e.objCA) {\n b2 |= 0x01;\n unused = 0;\n }\n\n // create bit string\n var value = String.fromCharCode(unused);\n if(b2 !== 0) {\n value += String.fromCharCode(b2);\n }\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value);\n } else if(e.name === 'subjectAltName' || e.name === 'issuerAltName') {\n // SYNTAX SEQUENCE\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n var altName;\n for(var n = 0; n < e.altNames.length; ++n) {\n altName = e.altNames[n];\n var value = altName.value;\n // handle IP\n if(altName.type === 7 && altName.ip) {\n value = forge.util.bytesFromIP(altName.ip);\n if(value === null) {\n var error = new Error(\n 'Extension \"ip\" value is not a valid IPv4 or IPv6 address.');\n error.extension = e;\n throw error;\n }\n } else if(altName.type === 8) {\n // handle OID\n if(altName.oid) {\n value = asn1.oidToDer(asn1.oidToDer(altName.oid));\n } else {\n // deprecated ... convert value to OID\n value = asn1.oidToDer(value);\n }\n }\n e.value.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, altName.type, false,\n value));\n }\n } else if(e.name === 'nsComment' && options.cert) {\n // sanity check value is ASCII (req'd) and not too big\n if(!(/^[\\x00-\\x7F]*$/.test(e.comment)) ||\n (e.comment.length < 1) || (e.comment.length > 128)) {\n throw new Error('Invalid \"nsComment\" content.');\n }\n // IA5STRING opaque comment\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.IA5STRING, false, e.comment);\n } else if(e.name === 'subjectKeyIdentifier' && options.cert) {\n var ski = options.cert.generateSubjectKeyIdentifier();\n e.subjectKeyIdentifier = ski.toHex();\n // OCTETSTRING w/digest\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, ski.getBytes());\n } else if(e.name === 'authorityKeyIdentifier' && options.cert) {\n // SYNTAX SEQUENCE\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n\n if(e.keyIdentifier) {\n var keyIdentifier = (e.keyIdentifier === true ?\n options.cert.generateSubjectKeyIdentifier().getBytes() :\n e.keyIdentifier);\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, false, keyIdentifier));\n }\n\n if(e.authorityCertIssuer) {\n var authorityCertIssuer = [\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 4, true, [\n _dnToAsn1(e.authorityCertIssuer === true ?\n options.cert.issuer : e.authorityCertIssuer)\n ])\n ];\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, authorityCertIssuer));\n }\n\n if(e.serialNumber) {\n var serialNumber = forge.util.hexToBytes(e.serialNumber === true ?\n options.cert.serialNumber : e.serialNumber);\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, false, serialNumber));\n }\n } else if(e.name === 'cRLDistributionPoints') {\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n\n // Create sub SEQUENCE of DistributionPointName\n var subSeq = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // Create fullName CHOICE\n var fullNameGeneralNames = asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n var altName;\n for(var n = 0; n < e.altNames.length; ++n) {\n altName = e.altNames[n];\n var value = altName.value;\n // handle IP\n if(altName.type === 7 && altName.ip) {\n value = forge.util.bytesFromIP(altName.ip);\n if(value === null) {\n var error = new Error(\n 'Extension \"ip\" value is not a valid IPv4 or IPv6 address.');\n error.extension = e;\n throw error;\n }\n } else if(altName.type === 8) {\n // handle OID\n if(altName.oid) {\n value = asn1.oidToDer(asn1.oidToDer(altName.oid));\n } else {\n // deprecated ... convert value to OID\n value = asn1.oidToDer(value);\n }\n }\n fullNameGeneralNames.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, altName.type, false,\n value));\n }\n\n // Add to the parent SEQUENCE\n subSeq.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, [fullNameGeneralNames]));\n seq.push(subSeq);\n }\n\n // ensure value has been defined by now\n if(typeof e.value === 'undefined') {\n var error = new Error('Extension value not specified.');\n error.extension = e;\n throw error;\n }\n\n return e;\n}\n\n/**\n * Convert signature parameters object to ASN.1\n *\n * @param {String} oid Signature algorithm OID\n * @param params The signature parametrs object\n * @return ASN.1 object representing signature parameters\n */\nfunction _signatureParametersToAsn1(oid, params) {\n switch(oid) {\n case oids['RSASSA-PSS']:\n var parts = [];\n\n if(params.hash.algorithmOid !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.hash.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ]));\n }\n\n if(params.mgf.algorithmOid !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.mgf.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.mgf.hash.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ])\n ]));\n }\n\n if(params.saltLength !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(params.saltLength).getBytes())\n ]));\n }\n\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, parts);\n\n default:\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '');\n }\n}\n\n/**\n * Converts a certification request's attributes to an ASN.1 set of\n * CRIAttributes.\n *\n * @param csr certification request.\n *\n * @return the ASN.1 set of CRIAttributes.\n */\nfunction _CRIAttributesToAsn1(csr) {\n // create an empty context-specific container\n var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n\n // no attributes, return empty container\n if(csr.attributes.length === 0) {\n return rval;\n }\n\n // each attribute has a sequence with a type and a set of values\n var attrs = csr.attributes;\n for(var i = 0; i < attrs.length; ++i) {\n var attr = attrs[i];\n var value = attr.value;\n\n // reuse tag class for attribute value if available\n var valueTagClass = asn1.Type.UTF8;\n if('valueTagClass' in attr) {\n valueTagClass = attr.valueTagClass;\n }\n if(valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(value);\n }\n var valueConstructed = false;\n if('valueConstructed' in attr) {\n valueConstructed = attr.valueConstructed;\n }\n // FIXME: handle more encodings\n\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n // AttributeValue\n asn1.create(\n asn1.Class.UNIVERSAL, valueTagClass, valueConstructed, value)\n ])\n ]);\n rval.value.push(seq);\n }\n\n return rval;\n}\n\nvar jan_1_1950 = new Date('1950-01-01T00:00:00Z');\nvar jan_1_2050 = new Date('2050-01-01T00:00:00Z');\n\n/**\n * Converts a Date object to ASN.1\n * Handles the different format before and after 1st January 2050\n *\n * @param date date object.\n *\n * @return the ASN.1 object representing the date.\n */\nfunction _dateToAsn1(date) {\n if(date >= jan_1_1950 && date < jan_1_2050) {\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false,\n asn1.dateToUtcTime(date));\n } else {\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false,\n asn1.dateToGeneralizedTime(date));\n }\n}\n\n/**\n * Gets the ASN.1 TBSCertificate part of an X.509v3 certificate.\n *\n * @param cert the certificate.\n *\n * @return the asn1 TBSCertificate.\n */\npki.getTBSCertificate = function(cert) {\n // TBSCertificate\n var notBefore = _dateToAsn1(cert.validity.notBefore);\n var notAfter = _dateToAsn1(cert.validity.notAfter);\n var tbs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // integer\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(cert.version).getBytes())\n ]),\n // serialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(cert.serialNumber)),\n // signature\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(cert.siginfo.algorithmOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(\n cert.siginfo.algorithmOid, cert.siginfo.parameters)\n ]),\n // issuer\n _dnToAsn1(cert.issuer),\n // validity\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n notBefore,\n notAfter\n ]),\n // subject\n _dnToAsn1(cert.subject),\n // SubjectPublicKeyInfo\n pki.publicKeyToAsn1(cert.publicKey)\n ]);\n\n if(cert.issuer.uniqueId) {\n // issuerUniqueID (optional)\n tbs.value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n // TODO: support arbitrary bit length ids\n String.fromCharCode(0x00) +\n cert.issuer.uniqueId\n )\n ])\n );\n }\n if(cert.subject.uniqueId) {\n // subjectUniqueID (optional)\n tbs.value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n // TODO: support arbitrary bit length ids\n String.fromCharCode(0x00) +\n cert.subject.uniqueId\n )\n ])\n );\n }\n\n if(cert.extensions.length > 0) {\n // extensions (optional)\n tbs.value.push(pki.certificateExtensionsToAsn1(cert.extensions));\n }\n\n return tbs;\n};\n\n/**\n * Gets the ASN.1 CertificationRequestInfo part of a\n * PKCS#10 CertificationRequest.\n *\n * @param csr the certification request.\n *\n * @return the asn1 CertificationRequestInfo.\n */\npki.getCertificationRequestInfo = function(csr) {\n // CertificationRequestInfo\n var cri = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(csr.version).getBytes()),\n // subject\n _dnToAsn1(csr.subject),\n // SubjectPublicKeyInfo\n pki.publicKeyToAsn1(csr.publicKey),\n // attributes\n _CRIAttributesToAsn1(csr)\n ]);\n\n return cri;\n};\n\n/**\n * Converts a DistinguishedName (subject or issuer) to an ASN.1 object.\n *\n * @param dn the DistinguishedName.\n *\n * @return the asn1 representation of a DistinguishedName.\n */\npki.distinguishedNameToAsn1 = function(dn) {\n return _dnToAsn1(dn);\n};\n\n/**\n * Converts an X.509v3 RSA certificate to an ASN.1 object.\n *\n * @param cert the certificate.\n *\n * @return the asn1 representation of an X.509v3 RSA certificate.\n */\npki.certificateToAsn1 = function(cert) {\n // prefer cached TBSCertificate over generating one\n var tbsCertificate = cert.tbsCertificate || pki.getTBSCertificate(cert);\n\n // Certificate\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // TBSCertificate\n tbsCertificate,\n // AlgorithmIdentifier (signature algorithm)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(cert.signatureOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(cert.signatureOid, cert.signatureParameters)\n ]),\n // SignatureValue\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n String.fromCharCode(0x00) + cert.signature)\n ]);\n};\n\n/**\n * Converts X.509v3 certificate extensions to ASN.1.\n *\n * @param exts the extensions to convert.\n *\n * @return the extensions in ASN.1 format.\n */\npki.certificateExtensionsToAsn1 = function(exts) {\n // create top-level extension container\n var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 3, true, []);\n\n // create extension sequence (stores a sequence for each extension)\n var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n rval.value.push(seq);\n\n for(var i = 0; i < exts.length; ++i) {\n seq.value.push(pki.certificateExtensionToAsn1(exts[i]));\n }\n\n return rval;\n};\n\n/**\n * Converts a single certificate extension to ASN.1.\n *\n * @param ext the extension to convert.\n *\n * @return the extension in ASN.1 format.\n */\npki.certificateExtensionToAsn1 = function(ext) {\n // create a sequence for each extension\n var extseq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // extnID (OID)\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(ext.id).getBytes()));\n\n // critical defaults to false\n if(ext.critical) {\n // critical BOOLEAN DEFAULT FALSE\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false,\n String.fromCharCode(0xFF)));\n }\n\n var value = ext.value;\n if(typeof ext.value !== 'string') {\n // value is asn.1\n value = asn1.toDer(value).getBytes();\n }\n\n // extnValue (OCTET STRING)\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, value));\n\n return extseq;\n};\n\n/**\n * Converts a PKCS#10 certification request to an ASN.1 object.\n *\n * @param csr the certification request.\n *\n * @return the asn1 representation of a certification request.\n */\npki.certificationRequestToAsn1 = function(csr) {\n // prefer cached CertificationRequestInfo over generating one\n var cri = csr.certificationRequestInfo ||\n pki.getCertificationRequestInfo(csr);\n\n // Certificate\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // CertificationRequestInfo\n cri,\n // AlgorithmIdentifier (signature algorithm)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(csr.signatureOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(csr.signatureOid, csr.signatureParameters)\n ]),\n // signature\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n String.fromCharCode(0x00) + csr.signature)\n ]);\n};\n\n/**\n * Creates a CA store.\n *\n * @param certs an optional array of certificate objects or PEM-formatted\n * certificate strings to add to the CA store.\n *\n * @return the CA store.\n */\npki.createCaStore = function(certs) {\n // create CA store\n var caStore = {\n // stored certificates\n certs: {}\n };\n\n /**\n * Gets the certificate that issued the passed certificate or its\n * 'parent'.\n *\n * @param cert the certificate to get the parent for.\n *\n * @return the parent certificate or null if none was found.\n */\n caStore.getIssuer = function(cert) {\n var rval = getBySubject(cert.issuer);\n\n // see if there are multiple matches\n /*if(forge.util.isArray(rval)) {\n // TODO: resolve multiple matches by checking\n // authorityKey/subjectKey/issuerUniqueID/other identifiers, etc.\n // FIXME: or alternatively do authority key mapping\n // if possible (X.509v1 certs can't work?)\n throw new Error('Resolving multiple issuer matches not implemented yet.');\n }*/\n\n return rval;\n };\n\n /**\n * Adds a trusted certificate to the store.\n *\n * @param cert the certificate to add as a trusted certificate (either a\n * pki.certificate object or a PEM-formatted certificate).\n */\n caStore.addCertificate = function(cert) {\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n\n ensureSubjectHasHash(cert.subject);\n\n if(!caStore.hasCertificate(cert)) { // avoid duplicate certificates in store\n if(cert.subject.hash in caStore.certs) {\n // subject hash already exists, append to array\n var tmp = caStore.certs[cert.subject.hash];\n if(!forge.util.isArray(tmp)) {\n tmp = [tmp];\n }\n tmp.push(cert);\n caStore.certs[cert.subject.hash] = tmp;\n } else {\n caStore.certs[cert.subject.hash] = cert;\n }\n }\n };\n\n /**\n * Checks to see if the given certificate is in the store.\n *\n * @param cert the certificate to check (either a pki.certificate or a\n * PEM-formatted certificate).\n *\n * @return true if the certificate is in the store, false if not.\n */\n caStore.hasCertificate = function(cert) {\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n\n var match = getBySubject(cert.subject);\n if(!match) {\n return false;\n }\n if(!forge.util.isArray(match)) {\n match = [match];\n }\n // compare DER-encoding of certificates\n var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();\n for(var i = 0; i < match.length; ++i) {\n var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();\n if(der1 === der2) {\n return true;\n }\n }\n return false;\n };\n\n /**\n * Lists all of the certificates kept in the store.\n *\n * @return an array of all of the pki.certificate objects in the store.\n */\n caStore.listAllCertificates = function() {\n var certList = [];\n\n for(var hash in caStore.certs) {\n if(caStore.certs.hasOwnProperty(hash)) {\n var value = caStore.certs[hash];\n if(!forge.util.isArray(value)) {\n certList.push(value);\n } else {\n for(var i = 0; i < value.length; ++i) {\n certList.push(value[i]);\n }\n }\n }\n }\n\n return certList;\n };\n\n /**\n * Removes a certificate from the store.\n *\n * @param cert the certificate to remove (either a pki.certificate or a\n * PEM-formatted certificate).\n *\n * @return the certificate that was removed or null if the certificate\n * wasn't in store.\n */\n caStore.removeCertificate = function(cert) {\n var result;\n\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n ensureSubjectHasHash(cert.subject);\n if(!caStore.hasCertificate(cert)) {\n return null;\n }\n\n var match = getBySubject(cert.subject);\n\n if(!forge.util.isArray(match)) {\n result = caStore.certs[cert.subject.hash];\n delete caStore.certs[cert.subject.hash];\n return result;\n }\n\n // compare DER-encoding of certificates\n var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();\n for(var i = 0; i < match.length; ++i) {\n var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();\n if(der1 === der2) {\n result = match[i];\n match.splice(i, 1);\n }\n }\n if(match.length === 0) {\n delete caStore.certs[cert.subject.hash];\n }\n\n return result;\n };\n\n function getBySubject(subject) {\n ensureSubjectHasHash(subject);\n return caStore.certs[subject.hash] || null;\n }\n\n function ensureSubjectHasHash(subject) {\n // produce subject hash if it doesn't exist\n if(!subject.hash) {\n var md = forge.md.sha1.create();\n subject.attributes = pki.RDNAttributesAsArray(_dnToAsn1(subject), md);\n subject.hash = md.digest().toHex();\n }\n }\n\n // auto-add passed in certs\n if(certs) {\n // parse PEM-formatted certificates as necessary\n for(var i = 0; i < certs.length; ++i) {\n var cert = certs[i];\n caStore.addCertificate(cert);\n }\n }\n\n return caStore;\n};\n\n/**\n * Certificate verification errors, based on TLS.\n */\npki.certificateError = {\n bad_certificate: 'forge.pki.BadCertificate',\n unsupported_certificate: 'forge.pki.UnsupportedCertificate',\n certificate_revoked: 'forge.pki.CertificateRevoked',\n certificate_expired: 'forge.pki.CertificateExpired',\n certificate_unknown: 'forge.pki.CertificateUnknown',\n unknown_ca: 'forge.pki.UnknownCertificateAuthority'\n};\n\n/**\n * Verifies a certificate chain against the given Certificate Authority store\n * with an optional custom verify callback.\n *\n * @param caStore a certificate store to verify against.\n * @param chain the certificate chain to verify, with the root or highest\n * authority at the end (an array of certificates).\n * @param options a callback to be called for every certificate in the chain or\n * an object with:\n * verify a callback to be called for every certificate in the\n * chain\n * validityCheckDate the date against which the certificate\n * validity period should be checked. Pass null to not check\n * the validity period. By default, the current date is used.\n *\n * The verify callback has the following signature:\n *\n * verified - Set to true if certificate was verified, otherwise the\n * pki.certificateError for why the certificate failed.\n * depth - The current index in the chain, where 0 is the end point's cert.\n * certs - The certificate chain, *NOTE* an empty chain indicates an anonymous\n * end point.\n *\n * The function returns true on success and on failure either the appropriate\n * pki.certificateError or an object with 'error' set to the appropriate\n * pki.certificateError and 'message' set to a custom error message.\n *\n * @return true if successful, error thrown if not.\n */\npki.verifyCertificateChain = function(caStore, chain, options) {\n /* From: RFC3280 - Internet X.509 Public Key Infrastructure Certificate\n Section 6: Certification Path Validation\n See inline parentheticals related to this particular implementation.\n\n The primary goal of path validation is to verify the binding between\n a subject distinguished name or a subject alternative name and subject\n public key, as represented in the end entity certificate, based on the\n public key of the trust anchor. This requires obtaining a sequence of\n certificates that support that binding. That sequence should be provided\n in the passed 'chain'. The trust anchor should be in the given CA\n store. The 'end entity' certificate is the certificate provided by the\n end point (typically a server) and is the first in the chain.\n\n To meet this goal, the path validation process verifies, among other\n things, that a prospective certification path (a sequence of n\n certificates or a 'chain') satisfies the following conditions:\n\n (a) for all x in {1, ..., n-1}, the subject of certificate x is\n the issuer of certificate x+1;\n\n (b) certificate 1 is issued by the trust anchor;\n\n (c) certificate n is the certificate to be validated; and\n\n (d) for all x in {1, ..., n}, the certificate was valid at the\n time in question.\n\n Note that here 'n' is index 0 in the chain and 1 is the last certificate\n in the chain and it must be signed by a certificate in the connection's\n CA store.\n\n The path validation process also determines the set of certificate\n policies that are valid for this path, based on the certificate policies\n extension, policy mapping extension, policy constraints extension, and\n inhibit any-policy extension.\n\n Note: Policy mapping extension not supported (Not Required).\n\n Note: If the certificate has an unsupported critical extension, then it\n must be rejected.\n\n Note: A certificate is self-issued if the DNs that appear in the subject\n and issuer fields are identical and are not empty.\n\n The path validation algorithm assumes the following seven inputs are\n provided to the path processing logic. What this specific implementation\n will use is provided parenthetically:\n\n (a) a prospective certification path of length n (the 'chain')\n (b) the current date/time: ('now').\n (c) user-initial-policy-set: A set of certificate policy identifiers\n naming the policies that are acceptable to the certificate user.\n The user-initial-policy-set contains the special value any-policy\n if the user is not concerned about certificate policy\n (Not implemented. Any policy is accepted).\n (d) trust anchor information, describing a CA that serves as a trust\n anchor for the certification path. The trust anchor information\n includes:\n\n (1) the trusted issuer name,\n (2) the trusted public key algorithm,\n (3) the trusted public key, and\n (4) optionally, the trusted public key parameters associated\n with the public key.\n\n (Trust anchors are provided via certificates in the CA store).\n\n The trust anchor information may be provided to the path processing\n procedure in the form of a self-signed certificate. The trusted anchor\n information is trusted because it was delivered to the path processing\n procedure by some trustworthy out-of-band procedure. If the trusted\n public key algorithm requires parameters, then the parameters are\n provided along with the trusted public key (No parameters used in this\n implementation).\n\n (e) initial-policy-mapping-inhibit, which indicates if policy mapping is\n allowed in the certification path.\n (Not implemented, no policy checking)\n\n (f) initial-explicit-policy, which indicates if the path must be valid\n for at least one of the certificate policies in the user-initial-\n policy-set.\n (Not implemented, no policy checking)\n\n (g) initial-any-policy-inhibit, which indicates whether the\n anyPolicy OID should be processed if it is included in a\n certificate.\n (Not implemented, so any policy is valid provided that it is\n not marked as critical) */\n\n /* Basic Path Processing:\n\n For each certificate in the 'chain', the following is checked:\n\n 1. The certificate validity period includes the current time.\n 2. The certificate was signed by its parent (where the parent is either\n the next in the chain or from the CA store). Allow processing to\n continue to the next step if no parent is found but the certificate is\n in the CA store.\n 3. TODO: The certificate has not been revoked.\n 4. The certificate issuer name matches the parent's subject name.\n 5. TODO: If the certificate is self-issued and not the final certificate\n in the chain, skip this step, otherwise verify that the subject name\n is within one of the permitted subtrees of X.500 distinguished names\n and that each of the alternative names in the subjectAltName extension\n (critical or non-critical) is within one of the permitted subtrees for\n that name type.\n 6. TODO: If the certificate is self-issued and not the final certificate\n in the chain, skip this step, otherwise verify that the subject name\n is not within one of the excluded subtrees for X.500 distinguished\n names and none of the subjectAltName extension names are excluded for\n that name type.\n 7. The other steps in the algorithm for basic path processing involve\n handling the policy extension which is not presently supported in this\n implementation. Instead, if a critical policy extension is found, the\n certificate is rejected as not supported.\n 8. If the certificate is not the first or if its the only certificate in\n the chain (having no parent from the CA store or is self-signed) and it\n has a critical key usage extension, verify that the keyCertSign bit is\n set. If the key usage extension exists, verify that the basic\n constraints extension exists. If the basic constraints extension exists,\n verify that the cA flag is set. If pathLenConstraint is set, ensure that\n the number of certificates that precede in the chain (come earlier\n in the chain as implemented below), excluding the very first in the\n chain (typically the end-entity one), isn't greater than the\n pathLenConstraint. This constraint limits the number of intermediate\n CAs that may appear below a CA before only end-entity certificates\n may be issued. */\n\n // if a verify callback is passed as the third parameter, package it within\n // the options object. This is to support a legacy function signature that\n // expected the verify callback as the third parameter.\n if(typeof options === 'function') {\n options = {verify: options};\n }\n options = options || {};\n\n // copy cert chain references to another array to protect against changes\n // in verify callback\n chain = chain.slice(0);\n var certs = chain.slice(0);\n\n var validityCheckDate = options.validityCheckDate;\n // if no validityCheckDate is specified, default to the current date. Make\n // sure to maintain the value null because it indicates that the validity\n // period should not be checked.\n if(typeof validityCheckDate === 'undefined') {\n validityCheckDate = new Date();\n }\n\n // verify each cert in the chain using its parent, where the parent\n // is either the next in the chain or from the CA store\n var first = true;\n var error = null;\n var depth = 0;\n do {\n var cert = chain.shift();\n var parent = null;\n var selfSigned = false;\n\n if(validityCheckDate) {\n // 1. check valid time\n if(validityCheckDate < cert.validity.notBefore ||\n validityCheckDate > cert.validity.notAfter) {\n error = {\n message: 'Certificate is not valid yet or has expired.',\n error: pki.certificateError.certificate_expired,\n notBefore: cert.validity.notBefore,\n notAfter: cert.validity.notAfter,\n // TODO: we might want to reconsider renaming 'now' to\n // 'validityCheckDate' should this API be changed in the future.\n now: validityCheckDate\n };\n }\n }\n\n // 2. verify with parent from chain or CA store\n if(error === null) {\n parent = chain[0] || caStore.getIssuer(cert);\n if(parent === null) {\n // check for self-signed cert\n if(cert.isIssuer(cert)) {\n selfSigned = true;\n parent = cert;\n }\n }\n\n if(parent) {\n // FIXME: current CA store implementation might have multiple\n // certificates where the issuer can't be determined from the\n // certificate (happens rarely with, eg: old certificates) so normalize\n // by always putting parents into an array\n // TODO: there's may be an extreme degenerate case currently uncovered\n // where an old intermediate certificate seems to have a matching parent\n // but none of the parents actually verify ... but the intermediate\n // is in the CA and it should pass this check; needs investigation\n var parents = parent;\n if(!forge.util.isArray(parents)) {\n parents = [parents];\n }\n\n // try to verify with each possible parent (typically only one)\n var verified = false;\n while(!verified && parents.length > 0) {\n parent = parents.shift();\n try {\n verified = parent.verify(cert);\n } catch(ex) {\n // failure to verify, don't care why, try next one\n }\n }\n\n if(!verified) {\n error = {\n message: 'Certificate signature is invalid.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n\n if(error === null && (!parent || selfSigned) &&\n !caStore.hasCertificate(cert)) {\n // no parent issuer and certificate itself is not trusted\n error = {\n message: 'Certificate is not trusted.',\n error: pki.certificateError.unknown_ca\n };\n }\n }\n\n // TODO: 3. check revoked\n\n // 4. check for matching issuer/subject\n if(error === null && parent && !cert.isIssuer(parent)) {\n // parent is not issuer\n error = {\n message: 'Certificate issuer is invalid.',\n error: pki.certificateError.bad_certificate\n };\n }\n\n // 5. TODO: check names with permitted names tree\n\n // 6. TODO: check names against excluded names tree\n\n // 7. check for unsupported critical extensions\n if(error === null) {\n // supported extensions\n var se = {\n keyUsage: true,\n basicConstraints: true\n };\n for(var i = 0; error === null && i < cert.extensions.length; ++i) {\n var ext = cert.extensions[i];\n if(ext.critical && !(ext.name in se)) {\n error = {\n message:\n 'Certificate has an unsupported critical extension.',\n error: pki.certificateError.unsupported_certificate\n };\n }\n }\n }\n\n // 8. check for CA if cert is not first or is the only certificate\n // remaining in chain with no parent or is self-signed\n if(error === null &&\n (!first || (chain.length === 0 && (!parent || selfSigned)))) {\n // first check keyUsage extension and then basic constraints\n var bcExt = cert.getExtension('basicConstraints');\n var keyUsageExt = cert.getExtension('keyUsage');\n if(keyUsageExt !== null) {\n // keyCertSign must be true and there must be a basic\n // constraints extension\n if(!keyUsageExt.keyCertSign || bcExt === null) {\n // bad certificate\n error = {\n message:\n 'Certificate keyUsage or basicConstraints conflict ' +\n 'or indicate that the certificate is not a CA. ' +\n 'If the certificate is the only one in the chain or ' +\n 'isn\\'t the first then the certificate must be a ' +\n 'valid CA.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n // basic constraints cA flag must be set\n if(error === null && bcExt !== null && !bcExt.cA) {\n // bad certificate\n error = {\n message:\n 'Certificate basicConstraints indicates the certificate ' +\n 'is not a CA.',\n error: pki.certificateError.bad_certificate\n };\n }\n // if error is not null and keyUsage is available, then we know it\n // has keyCertSign and there is a basic constraints extension too,\n // which means we can check pathLenConstraint (if it exists)\n if(error === null && keyUsageExt !== null &&\n 'pathLenConstraint' in bcExt) {\n // pathLen is the maximum # of intermediate CA certs that can be\n // found between the current certificate and the end-entity (depth 0)\n // certificate; this number does not include the end-entity (depth 0,\n // last in the chain) even if it happens to be a CA certificate itself\n var pathLen = depth - 1;\n if(pathLen > bcExt.pathLenConstraint) {\n // pathLenConstraint violated, bad certificate\n error = {\n message:\n 'Certificate basicConstraints pathLenConstraint violated.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n }\n\n // call application callback\n var vfd = (error === null) ? true : error.error;\n var ret = options.verify ? options.verify(vfd, depth, certs) : vfd;\n if(ret === true) {\n // clear any set error\n error = null;\n } else {\n // if passed basic tests, set default message and alert\n if(vfd === true) {\n error = {\n message: 'The application rejected the certificate.',\n error: pki.certificateError.bad_certificate\n };\n }\n\n // check for custom error info\n if(ret || ret === 0) {\n // set custom message and error\n if(typeof ret === 'object' && !forge.util.isArray(ret)) {\n if(ret.message) {\n error.message = ret.message;\n }\n if(ret.error) {\n error.error = ret.error;\n }\n } else if(typeof ret === 'string') {\n // set custom error\n error.error = ret;\n }\n }\n\n // throw error\n throw error;\n }\n\n // no longer first cert in chain\n first = false;\n ++depth;\n } while(chain.length > 0);\n\n return true;\n};\n","'use strict'\n\nconst exp = Math.exp\n\nexports =\nmodule.exports =\nfunction MovingAverage (timespan) {\n if (typeof timespan !== 'number') { throw new Error('must provide a timespan to the moving average constructor') }\n\n if (timespan <= 0) { throw new Error('must provide a timespan > 0 to the moving average constructor') }\n\n let ma // moving average\n let v = 0 // variance\n let d = 0 // deviation\n let f = 0 // forecast\n\n let previousTime\n\n let ret = {}\n\n function alpha (t, pt) {\n return 1 - (exp(-(t - pt) / timespan))\n }\n\n ret.push =\n function push (time, value) {\n if (previousTime) {\n // calculate moving average\n const a = alpha(time, previousTime)\n const diff = value - ma\n const incr = a * diff\n ma = a * value + (1 - a) * ma\n // calculate variance & deviation\n v = (1 - a) * (v + diff * incr)\n d = Math.sqrt(v)\n // calculate forecast\n f = ma + a * diff\n } else {\n ma = value\n }\n previousTime = time\n }\n\n // Exponential Moving Average\n\n ret.movingAverage =\n function movingAverage () {\n return ma\n }\n\n // Variance\n ret.variance =\n function variance () {\n return v\n }\n\n ret.deviation =\n function deviation () {\n return d\n }\n\n ret.forecast =\n function forecast () {\n return f\n }\n\n return ret\n}\n","'use strict'\n\nexports.PROTOCOL_ID = '/multistream/1.0.0'\n","'use strict'\n\nconst errcode = require('err-code')\n\nconst { EventEmitter } = require('events')\nconst PeerId = require('peer-id')\n\nconst AddressBook = require('./address-book')\nconst KeyBook = require('./key-book')\nconst MetadataBook = require('./metadata-book')\nconst ProtoBook = require('./proto-book')\n\nconst {\n codes: { ERR_INVALID_PARAMETERS }\n} = require('../errors')\n\n/**\n * @typedef {import('./address-book').Address} Address\n */\n\n/**\n * @extends {EventEmitter}\n *\n * @fires PeerStore#peer Emitted when a new peer is added.\n * @fires PeerStore#change:protocols Emitted when a known peer supports a different set of protocols.\n * @fires PeerStore#change:multiaddrs Emitted when a known peer has a different set of multiaddrs.\n * @fires PeerStore#change:pubkey Emitted emitted when a peer's public key is known.\n * @fires PeerStore#change:metadata Emitted when the known metadata of a peer change.\n */\nclass PeerStore extends EventEmitter {\n /**\n * Peer object\n *\n * @typedef {Object} Peer\n * @property {PeerId} id peer's peer-id instance.\n * @property {Address[]} addresses peer's addresses containing its multiaddrs and metadata.\n * @property {string[]} protocols peer's supported protocols.\n * @property {Map|undefined} metadata peer's metadata map.\n */\n\n /**\n * Responsible for managing known peers, as well as their addresses, protocols and metadata.\n *\n * @param {object} options\n * @param {PeerId} options.peerId\n * @class\n */\n constructor ({ peerId }) {\n super()\n\n this._peerId = peerId\n\n /**\n * AddressBook containing a map of peerIdStr to Address.\n */\n this.addressBook = new AddressBook(this)\n\n /**\n * KeyBook containing a map of peerIdStr to their PeerId with public keys.\n */\n this.keyBook = new KeyBook(this)\n\n /**\n * MetadataBook containing a map of peerIdStr to their metadata Map.\n */\n this.metadataBook = new MetadataBook(this)\n\n /**\n * ProtoBook containing a map of peerIdStr to supported protocols.\n */\n this.protoBook = new ProtoBook(this)\n }\n\n /**\n * Start the PeerStore.\n */\n start () {}\n\n /**\n * Stop the PeerStore.\n */\n stop () {}\n\n /**\n * Get all the stored information of every peer known.\n *\n * @returns {Map}\n */\n get peers () {\n const storedPeers = new Set([\n ...this.addressBook.data.keys(),\n ...this.keyBook.data.keys(),\n ...this.protoBook.data.keys(),\n ...this.metadataBook.data.keys()\n ])\n\n // Remove self peer if present\n this._peerId && storedPeers.delete(this._peerId.toB58String())\n\n const peersData = new Map()\n storedPeers.forEach((idStr) => {\n peersData.set(idStr, this.get(PeerId.createFromB58String(idStr)))\n })\n\n return peersData\n }\n\n /**\n * Delete the information of the given peer in every book.\n *\n * @param {PeerId} peerId\n * @returns {boolean} true if found and removed\n */\n delete (peerId) {\n const addressesDeleted = this.addressBook.delete(peerId)\n const keyDeleted = this.keyBook.delete(peerId)\n const protocolsDeleted = this.protoBook.delete(peerId)\n const metadataDeleted = this.metadataBook.delete(peerId)\n\n return addressesDeleted || keyDeleted || protocolsDeleted || metadataDeleted\n }\n\n /**\n * Get the stored information of a given peer.\n *\n * @param {PeerId} peerId\n * @returns {Peer|undefined}\n */\n get (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n throw errcode(new Error('peerId must be an instance of peer-id'), ERR_INVALID_PARAMETERS)\n }\n\n const id = this.keyBook.data.get(peerId.toB58String())\n const addresses = this.addressBook.get(peerId)\n const metadata = this.metadataBook.get(peerId)\n const protocols = this.protoBook.get(peerId)\n\n if (!id && !addresses && !metadata && !protocols) {\n return undefined\n }\n\n return {\n id: id || peerId,\n addresses: addresses || [],\n protocols: protocols || [],\n metadata: metadata\n }\n }\n}\n\nmodule.exports = PeerStore\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar index = require('../wantlist/index.js');\nvar base58 = require('multiformats/bases/base58');\n\nconst WantlistEntry = index.Wantlist.Entry;\nclass BitswapMessageEntry {\n constructor(cid, priority, wantType, cancel, sendDontHave) {\n this.entry = new WantlistEntry(cid, priority, wantType);\n this.cancel = Boolean(cancel);\n this.sendDontHave = Boolean(sendDontHave);\n }\n get cid() {\n return this.entry.cid;\n }\n set cid(cid) {\n this.entry.cid = cid;\n }\n get priority() {\n return this.entry.priority;\n }\n set priority(val) {\n this.entry.priority = val;\n }\n get wantType() {\n return this.entry.wantType;\n }\n set wantType(val) {\n this.entry.wantType = val;\n }\n get [Symbol.toStringTag]() {\n const cidStr = this.cid.toString(base58.base58btc);\n return `BitswapMessageEntry ${ cidStr } `;\n }\n equals(other) {\n return this.cancel === other.cancel && this.sendDontHave === other.sendDontHave && this.wantType === other.wantType && this.entry.equals(other.entry);\n }\n}\n\nexports.BitswapMessageEntry = BitswapMessageEntry;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar $protobuf = require('protobufjs/minimal.js');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar $protobuf__default = /*#__PURE__*/_interopDefaultLegacy($protobuf);\n\nconst $Reader = $protobuf__default[\"default\"].Reader, $Writer = $protobuf__default[\"default\"].Writer, $util = $protobuf__default[\"default\"].util;\nconst $root = $protobuf__default[\"default\"].roots['ipfs-bitswap'] || ($protobuf__default[\"default\"].roots['ipfs-bitswap'] = {});\nconst Message = $root.Message = (() => {\n function Message(p) {\n this.blocks = [];\n this.payload = [];\n this.blockPresences = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n Message.prototype.wantlist = null;\n Message.prototype.blocks = $util.emptyArray;\n Message.prototype.payload = $util.emptyArray;\n Message.prototype.blockPresences = $util.emptyArray;\n Message.prototype.pendingBytes = 0;\n Message.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.wantlist != null && Object.hasOwnProperty.call(m, 'wantlist'))\n $root.Message.Wantlist.encode(m.wantlist, w.uint32(10).fork()).ldelim();\n if (m.blocks != null && m.blocks.length) {\n for (var i = 0; i < m.blocks.length; ++i)\n w.uint32(18).bytes(m.blocks[i]);\n }\n if (m.payload != null && m.payload.length) {\n for (var i = 0; i < m.payload.length; ++i)\n $root.Message.Block.encode(m.payload[i], w.uint32(26).fork()).ldelim();\n }\n if (m.blockPresences != null && m.blockPresences.length) {\n for (var i = 0; i < m.blockPresences.length; ++i)\n $root.Message.BlockPresence.encode(m.blockPresences[i], w.uint32(34).fork()).ldelim();\n }\n if (m.pendingBytes != null && Object.hasOwnProperty.call(m, 'pendingBytes'))\n w.uint32(40).int32(m.pendingBytes);\n return w;\n };\n Message.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Message();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.wantlist = $root.Message.Wantlist.decode(r, r.uint32());\n break;\n case 2:\n if (!(m.blocks && m.blocks.length))\n m.blocks = [];\n m.blocks.push(r.bytes());\n break;\n case 3:\n if (!(m.payload && m.payload.length))\n m.payload = [];\n m.payload.push($root.Message.Block.decode(r, r.uint32()));\n break;\n case 4:\n if (!(m.blockPresences && m.blockPresences.length))\n m.blockPresences = [];\n m.blockPresences.push($root.Message.BlockPresence.decode(r, r.uint32()));\n break;\n case 5:\n m.pendingBytes = r.int32();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n Message.fromObject = function fromObject(d) {\n if (d instanceof $root.Message)\n return d;\n var m = new $root.Message();\n if (d.wantlist != null) {\n if (typeof d.wantlist !== 'object')\n throw TypeError('.Message.wantlist: object expected');\n m.wantlist = $root.Message.Wantlist.fromObject(d.wantlist);\n }\n if (d.blocks) {\n if (!Array.isArray(d.blocks))\n throw TypeError('.Message.blocks: array expected');\n m.blocks = [];\n for (var i = 0; i < d.blocks.length; ++i) {\n if (typeof d.blocks[i] === 'string')\n $util.base64.decode(d.blocks[i], m.blocks[i] = $util.newBuffer($util.base64.length(d.blocks[i])), 0);\n else if (d.blocks[i].length)\n m.blocks[i] = d.blocks[i];\n }\n }\n if (d.payload) {\n if (!Array.isArray(d.payload))\n throw TypeError('.Message.payload: array expected');\n m.payload = [];\n for (var i = 0; i < d.payload.length; ++i) {\n if (typeof d.payload[i] !== 'object')\n throw TypeError('.Message.payload: object expected');\n m.payload[i] = $root.Message.Block.fromObject(d.payload[i]);\n }\n }\n if (d.blockPresences) {\n if (!Array.isArray(d.blockPresences))\n throw TypeError('.Message.blockPresences: array expected');\n m.blockPresences = [];\n for (var i = 0; i < d.blockPresences.length; ++i) {\n if (typeof d.blockPresences[i] !== 'object')\n throw TypeError('.Message.blockPresences: object expected');\n m.blockPresences[i] = $root.Message.BlockPresence.fromObject(d.blockPresences[i]);\n }\n }\n if (d.pendingBytes != null) {\n m.pendingBytes = d.pendingBytes | 0;\n }\n return m;\n };\n Message.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.blocks = [];\n d.payload = [];\n d.blockPresences = [];\n }\n if (o.defaults) {\n d.wantlist = null;\n d.pendingBytes = 0;\n }\n if (m.wantlist != null && m.hasOwnProperty('wantlist')) {\n d.wantlist = $root.Message.Wantlist.toObject(m.wantlist, o);\n }\n if (m.blocks && m.blocks.length) {\n d.blocks = [];\n for (var j = 0; j < m.blocks.length; ++j) {\n d.blocks[j] = o.bytes === String ? $util.base64.encode(m.blocks[j], 0, m.blocks[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.blocks[j]) : m.blocks[j];\n }\n }\n if (m.payload && m.payload.length) {\n d.payload = [];\n for (var j = 0; j < m.payload.length; ++j) {\n d.payload[j] = $root.Message.Block.toObject(m.payload[j], o);\n }\n }\n if (m.blockPresences && m.blockPresences.length) {\n d.blockPresences = [];\n for (var j = 0; j < m.blockPresences.length; ++j) {\n d.blockPresences[j] = $root.Message.BlockPresence.toObject(m.blockPresences[j], o);\n }\n }\n if (m.pendingBytes != null && m.hasOwnProperty('pendingBytes')) {\n d.pendingBytes = m.pendingBytes;\n }\n return d;\n };\n Message.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf__default[\"default\"].util.toJSONOptions);\n };\n Message.Wantlist = function () {\n function Wantlist(p) {\n this.entries = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n Wantlist.prototype.entries = $util.emptyArray;\n Wantlist.prototype.full = false;\n Wantlist.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.entries != null && m.entries.length) {\n for (var i = 0; i < m.entries.length; ++i)\n $root.Message.Wantlist.Entry.encode(m.entries[i], w.uint32(10).fork()).ldelim();\n }\n if (m.full != null && Object.hasOwnProperty.call(m, 'full'))\n w.uint32(16).bool(m.full);\n return w;\n };\n Wantlist.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Message.Wantlist();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n if (!(m.entries && m.entries.length))\n m.entries = [];\n m.entries.push($root.Message.Wantlist.Entry.decode(r, r.uint32()));\n break;\n case 2:\n m.full = r.bool();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n Wantlist.fromObject = function fromObject(d) {\n if (d instanceof $root.Message.Wantlist)\n return d;\n var m = new $root.Message.Wantlist();\n if (d.entries) {\n if (!Array.isArray(d.entries))\n throw TypeError('.Message.Wantlist.entries: array expected');\n m.entries = [];\n for (var i = 0; i < d.entries.length; ++i) {\n if (typeof d.entries[i] !== 'object')\n throw TypeError('.Message.Wantlist.entries: object expected');\n m.entries[i] = $root.Message.Wantlist.Entry.fromObject(d.entries[i]);\n }\n }\n if (d.full != null) {\n m.full = Boolean(d.full);\n }\n return m;\n };\n Wantlist.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.entries = [];\n }\n if (o.defaults) {\n d.full = false;\n }\n if (m.entries && m.entries.length) {\n d.entries = [];\n for (var j = 0; j < m.entries.length; ++j) {\n d.entries[j] = $root.Message.Wantlist.Entry.toObject(m.entries[j], o);\n }\n }\n if (m.full != null && m.hasOwnProperty('full')) {\n d.full = m.full;\n }\n return d;\n };\n Wantlist.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf__default[\"default\"].util.toJSONOptions);\n };\n Wantlist.WantType = function () {\n const valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = 'Block'] = 0;\n values[valuesById[1] = 'Have'] = 1;\n return values;\n }();\n Wantlist.Entry = function () {\n function Entry(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n Entry.prototype.block = $util.newBuffer([]);\n Entry.prototype.priority = 0;\n Entry.prototype.cancel = false;\n Entry.prototype.wantType = 0;\n Entry.prototype.sendDontHave = false;\n Entry.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.block != null && Object.hasOwnProperty.call(m, 'block'))\n w.uint32(10).bytes(m.block);\n if (m.priority != null && Object.hasOwnProperty.call(m, 'priority'))\n w.uint32(16).int32(m.priority);\n if (m.cancel != null && Object.hasOwnProperty.call(m, 'cancel'))\n w.uint32(24).bool(m.cancel);\n if (m.wantType != null && Object.hasOwnProperty.call(m, 'wantType'))\n w.uint32(32).int32(m.wantType);\n if (m.sendDontHave != null && Object.hasOwnProperty.call(m, 'sendDontHave'))\n w.uint32(40).bool(m.sendDontHave);\n return w;\n };\n Entry.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Message.Wantlist.Entry();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.block = r.bytes();\n break;\n case 2:\n m.priority = r.int32();\n break;\n case 3:\n m.cancel = r.bool();\n break;\n case 4:\n m.wantType = r.int32();\n break;\n case 5:\n m.sendDontHave = r.bool();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n Entry.fromObject = function fromObject(d) {\n if (d instanceof $root.Message.Wantlist.Entry)\n return d;\n var m = new $root.Message.Wantlist.Entry();\n if (d.block != null) {\n if (typeof d.block === 'string')\n $util.base64.decode(d.block, m.block = $util.newBuffer($util.base64.length(d.block)), 0);\n else if (d.block.length)\n m.block = d.block;\n }\n if (d.priority != null) {\n m.priority = d.priority | 0;\n }\n if (d.cancel != null) {\n m.cancel = Boolean(d.cancel);\n }\n switch (d.wantType) {\n case 'Block':\n case 0:\n m.wantType = 0;\n break;\n case 'Have':\n case 1:\n m.wantType = 1;\n break;\n }\n if (d.sendDontHave != null) {\n m.sendDontHave = Boolean(d.sendDontHave);\n }\n return m;\n };\n Entry.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n if (o.bytes === String)\n d.block = '';\n else {\n d.block = [];\n if (o.bytes !== Array)\n d.block = $util.newBuffer(d.block);\n }\n d.priority = 0;\n d.cancel = false;\n d.wantType = o.enums === String ? 'Block' : 0;\n d.sendDontHave = false;\n }\n if (m.block != null && m.hasOwnProperty('block')) {\n d.block = o.bytes === String ? $util.base64.encode(m.block, 0, m.block.length) : o.bytes === Array ? Array.prototype.slice.call(m.block) : m.block;\n }\n if (m.priority != null && m.hasOwnProperty('priority')) {\n d.priority = m.priority;\n }\n if (m.cancel != null && m.hasOwnProperty('cancel')) {\n d.cancel = m.cancel;\n }\n if (m.wantType != null && m.hasOwnProperty('wantType')) {\n d.wantType = o.enums === String ? $root.Message.Wantlist.WantType[m.wantType] : m.wantType;\n }\n if (m.sendDontHave != null && m.hasOwnProperty('sendDontHave')) {\n d.sendDontHave = m.sendDontHave;\n }\n return d;\n };\n Entry.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf__default[\"default\"].util.toJSONOptions);\n };\n return Entry;\n }();\n return Wantlist;\n }();\n Message.Block = function () {\n function Block(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n Block.prototype.prefix = $util.newBuffer([]);\n Block.prototype.data = $util.newBuffer([]);\n Block.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.prefix != null && Object.hasOwnProperty.call(m, 'prefix'))\n w.uint32(10).bytes(m.prefix);\n if (m.data != null && Object.hasOwnProperty.call(m, 'data'))\n w.uint32(18).bytes(m.data);\n return w;\n };\n Block.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Message.Block();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.prefix = r.bytes();\n break;\n case 2:\n m.data = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n Block.fromObject = function fromObject(d) {\n if (d instanceof $root.Message.Block)\n return d;\n var m = new $root.Message.Block();\n if (d.prefix != null) {\n if (typeof d.prefix === 'string')\n $util.base64.decode(d.prefix, m.prefix = $util.newBuffer($util.base64.length(d.prefix)), 0);\n else if (d.prefix.length)\n m.prefix = d.prefix;\n }\n if (d.data != null) {\n if (typeof d.data === 'string')\n $util.base64.decode(d.data, m.data = $util.newBuffer($util.base64.length(d.data)), 0);\n else if (d.data.length)\n m.data = d.data;\n }\n return m;\n };\n Block.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n if (o.bytes === String)\n d.prefix = '';\n else {\n d.prefix = [];\n if (o.bytes !== Array)\n d.prefix = $util.newBuffer(d.prefix);\n }\n if (o.bytes === String)\n d.data = '';\n else {\n d.data = [];\n if (o.bytes !== Array)\n d.data = $util.newBuffer(d.data);\n }\n }\n if (m.prefix != null && m.hasOwnProperty('prefix')) {\n d.prefix = o.bytes === String ? $util.base64.encode(m.prefix, 0, m.prefix.length) : o.bytes === Array ? Array.prototype.slice.call(m.prefix) : m.prefix;\n }\n if (m.data != null && m.hasOwnProperty('data')) {\n d.data = o.bytes === String ? $util.base64.encode(m.data, 0, m.data.length) : o.bytes === Array ? Array.prototype.slice.call(m.data) : m.data;\n }\n return d;\n };\n Block.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf__default[\"default\"].util.toJSONOptions);\n };\n return Block;\n }();\n Message.BlockPresenceType = function () {\n const valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = 'Have'] = 0;\n values[valuesById[1] = 'DontHave'] = 1;\n return values;\n }();\n Message.BlockPresence = function () {\n function BlockPresence(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n BlockPresence.prototype.cid = $util.newBuffer([]);\n BlockPresence.prototype.type = 0;\n BlockPresence.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.cid != null && Object.hasOwnProperty.call(m, 'cid'))\n w.uint32(10).bytes(m.cid);\n if (m.type != null && Object.hasOwnProperty.call(m, 'type'))\n w.uint32(16).int32(m.type);\n return w;\n };\n BlockPresence.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Message.BlockPresence();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.cid = r.bytes();\n break;\n case 2:\n m.type = r.int32();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n BlockPresence.fromObject = function fromObject(d) {\n if (d instanceof $root.Message.BlockPresence)\n return d;\n var m = new $root.Message.BlockPresence();\n if (d.cid != null) {\n if (typeof d.cid === 'string')\n $util.base64.decode(d.cid, m.cid = $util.newBuffer($util.base64.length(d.cid)), 0);\n else if (d.cid.length)\n m.cid = d.cid;\n }\n switch (d.type) {\n case 'Have':\n case 0:\n m.type = 0;\n break;\n case 'DontHave':\n case 1:\n m.type = 1;\n break;\n }\n return m;\n };\n BlockPresence.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n if (o.bytes === String)\n d.cid = '';\n else {\n d.cid = [];\n if (o.bytes !== Array)\n d.cid = $util.newBuffer(d.cid);\n }\n d.type = o.enums === String ? 'Have' : 0;\n }\n if (m.cid != null && m.hasOwnProperty('cid')) {\n d.cid = o.bytes === String ? $util.base64.encode(m.cid, 0, m.cid.length) : o.bytes === Array ? Array.prototype.slice.call(m.cid) : m.cid;\n }\n if (m.type != null && m.hasOwnProperty('type')) {\n d.type = o.enums === String ? $root.Message.BlockPresenceType[m.type] : m.type;\n }\n return d;\n };\n BlockPresence.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf__default[\"default\"].util.toJSONOptions);\n };\n return BlockPresence;\n }();\n return Message;\n})();\n\nexports.Message = Message;\nexports[\"default\"] = $root;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar errCode = require('err-code');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar errCode__default = /*#__PURE__*/_interopDefaultLegacy(errCode);\n\nfunction notFoundError(err) {\n err = err || new Error('Not Found');\n return errCode__default['default'](err, 'ERR_NOT_FOUND');\n}\nfunction abortedError(err) {\n err = err || new Error('Aborted');\n return errCode__default['default'](err, 'ERR_ABORTED');\n}\n\nexports.abortedError = abortedError;\nexports.notFoundError = notFoundError;\n","var __root__ = (function (root) {\nfunction F() { this.fetch = false; }\nF.prototype = root;\nreturn new F();\n})(typeof self !== 'undefined' ? self : this);\n(function(self) {\n\n(function(self) {\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n };\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue+','+value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) { items.push(name); });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) { items.push(value); });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) { items.push([name, value]); });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'omit';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n };\n\n function decode(body) {\n var form = new FormData();\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n var xhr = new XMLHttpRequest();\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n };\n self.fetch.polyfill = true;\n})(typeof self !== 'undefined' ? self : this);\n}).call(__root__, void(0));\nvar fetch = __root__.fetch;\nvar Response = fetch.Response = __root__.Response;\nvar Request = fetch.Request = __root__.Request;\nvar Headers = fetch.Headers = __root__.Headers;\nif (typeof module === 'object' && module.exports) {\nmodule.exports = fetch;\n// Needed for TypeScript consumers without esModuleInterop.\nmodule.exports.default = fetch;\n}\n","/*! jsonpath 1.1.1 */\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.jsonpath = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o\n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/*jslint bitwise:true plusplus:true */\n/*global esprima:true, define:true, exports:true, window: true,\nthrowErrorTolerant: true,\nthrowError: true, generateStatement: true, peek: true,\nparseAssignmentExpression: true, parseBlock: true, parseExpression: true,\nparseFunctionDeclaration: true, parseFunctionExpression: true,\nparseFunctionSourceElements: true, parseVariableIdentifier: true,\nparseLeftHandSideExpression: true,\nparseUnaryExpression: true,\nparseStatement: true, parseSourceElement: true */\n\n(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,\n // Rhino, and plain browser loading.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define(['exports'], factory);\n } else if (typeof exports !== 'undefined') {\n factory(exports);\n } else {\n factory((root.esprima = {}));\n }\n}(this, function (exports) {\n 'use strict';\n\n var Token,\n TokenName,\n FnExprTokens,\n Syntax,\n PropertyKind,\n Messages,\n Regex,\n SyntaxTreeDelegate,\n source,\n strict,\n index,\n lineNumber,\n lineStart,\n length,\n delegate,\n lookahead,\n state,\n extra;\n\n Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n Punctuator: 7,\n StringLiteral: 8,\n RegularExpression: 9\n };\n\n TokenName = {};\n TokenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '';\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword] = 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.NumericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n TokenName[Token.StringLiteral] = 'String';\n TokenName[Token.RegularExpression] = 'RegularExpression';\n\n // A function following one of those tokens is an expression.\n FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',\n 'return', 'case', 'delete', 'throw', 'void',\n // assignment operators\n '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',\n '&=', '|=', '^=', ',',\n // binary/unary operators\n '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',\n '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',\n '<=', '<', '>', '!=', '!=='];\n\n Syntax = {\n AssignmentExpression: 'AssignmentExpression',\n ArrayExpression: 'ArrayExpression',\n BlockStatement: 'BlockStatement',\n BinaryExpression: 'BinaryExpression',\n BreakStatement: 'BreakStatement',\n CallExpression: 'CallExpression',\n CatchClause: 'CatchClause',\n ConditionalExpression: 'ConditionalExpression',\n ContinueStatement: 'ContinueStatement',\n DoWhileStatement: 'DoWhileStatement',\n DebuggerStatement: 'DebuggerStatement',\n EmptyStatement: 'EmptyStatement',\n ExpressionStatement: 'ExpressionStatement',\n ForStatement: 'ForStatement',\n ForInStatement: 'ForInStatement',\n FunctionDeclaration: 'FunctionDeclaration',\n FunctionExpression: 'FunctionExpression',\n Identifier: 'Identifier',\n IfStatement: 'IfStatement',\n Literal: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExpression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n NewExpression: 'NewExpression',\n ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n Property: 'Property',\n ReturnStatement: 'ReturnStatement',\n SequenceExpression: 'SequenceExpression',\n SwitchStatement: 'SwitchStatement',\n SwitchCase: 'SwitchCase',\n ThisExpression: 'ThisExpression',\n ThrowStatement: 'ThrowStatement',\n TryStatement: 'TryStatement',\n UnaryExpression: 'UnaryExpression',\n UpdateExpression: 'UpdateExpression',\n VariableDeclaration: 'VariableDeclaration',\n VariableDeclarator: 'VariableDeclarator',\n WhileStatement: 'WhileStatement',\n WithStatement: 'WithStatement'\n };\n\n PropertyKind = {\n Data: 1,\n Get: 2,\n Set: 4\n };\n\n // Error messages should be identical to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n UnexpectedNumber: 'Unexpected number',\n UnexpectedString: 'Unexpected string',\n UnexpectedIdentifier: 'Unexpected identifier',\n UnexpectedReserved: 'Unexpected reserved word',\n UnexpectedEOS: 'Unexpected end of input',\n NewlineAfterThrow: 'Illegal newline after throw',\n InvalidRegExp: 'Invalid regular expression',\n UnterminatedRegExp: 'Invalid regular expression: missing /',\n InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n NoCatchOrFinally: 'Missing catch or finally after try',\n UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\'%1\\' has already been declared',\n IllegalContinue: 'Illegal continue statement',\n IllegalBreak: 'Illegal break statement',\n IllegalReturn: 'Illegal return statement',\n StrictModeWith: 'Strict mode code may not include a with statement',\n StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode',\n AccessorDataProperty: 'Object literal may not have data and accessor property with the same name',\n AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name',\n StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n StrictReservedWord: 'Use of future reserved word in strict mode'\n };\n\n // See also tools/generate-unicode-regex.py.\n Regex = {\n NonAsciiIdentifierStart: new RegExp('[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]'),\n NonAsciiIdentifierPart: new RegExp('[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0\\u08A2-\\u08AC\\u08E4-\\u08FE\\u0900-\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1D00-\\u1DE6\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA697\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7B\\uAA80-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]')\n };\n\n // Ensure the condition is true, otherwise throw an error.\n // This is only to have a better contract semantic, i.e. another safety net\n // to catch a logic error. The condition shall be fulfilled in normal case.\n // Do NOT use this to enforce a certain condition on any user input.\n\n function assert(condition, message) {\n /* istanbul ignore if */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n }\n\n function isDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57); // 0..9\n }\n\n function isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n }\n\n function isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n }\n\n\n // 7.2 White Space\n\n function isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n }\n\n // 7.3 Line Terminators\n\n function isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // 7.6 Identifier Names and Identifiers\n\n function isIdentifierStart(ch) {\n return (ch == 0x40) || (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n }\n\n function isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n }\n\n // 7.6.1.2 Future Reserved Words\n\n function isFutureReservedWord(id) {\n switch (id) {\n case 'class':\n case 'enum':\n case 'export':\n case 'extends':\n case 'import':\n case 'super':\n return true;\n default:\n return false;\n }\n }\n\n function isStrictModeReservedWord(id) {\n switch (id) {\n case 'implements':\n case 'interface':\n case 'package':\n case 'private':\n case 'protected':\n case 'public':\n case 'static':\n case 'yield':\n case 'let':\n return true;\n default:\n return false;\n }\n }\n\n function isRestrictedWord(id) {\n return id === 'eval' || id === 'arguments';\n }\n\n // 7.6.1.1 Keywords\n\n function isKeyword(id) {\n if (strict && isStrictModeReservedWord(id)) {\n return true;\n }\n\n // 'const' is specialized as Keyword in V8.\n // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next.\n // Some others are from future reserved words.\n\n switch (id.length) {\n case 2:\n return (id === 'if') || (id === 'in') || (id === 'do');\n case 3:\n return (id === 'var') || (id === 'for') || (id === 'new') ||\n (id === 'try') || (id === 'let');\n case 4:\n return (id === 'this') || (id === 'else') || (id === 'case') ||\n (id === 'void') || (id === 'with') || (id === 'enum');\n case 5:\n return (id === 'while') || (id === 'break') || (id === 'catch') ||\n (id === 'throw') || (id === 'const') || (id === 'yield') ||\n (id === 'class') || (id === 'super');\n case 6:\n return (id === 'return') || (id === 'typeof') || (id === 'delete') ||\n (id === 'switch') || (id === 'export') || (id === 'import');\n case 7:\n return (id === 'default') || (id === 'finally') || (id === 'extends');\n case 8:\n return (id === 'function') || (id === 'continue') || (id === 'debugger');\n case 10:\n return (id === 'instanceof');\n default:\n return false;\n }\n }\n\n // 7.4 Comments\n\n function addComment(type, value, start, end, loc) {\n var comment, attacher;\n\n assert(typeof start === 'number', 'Comment must have valid position');\n\n // Because the way the actual token is scanned, often the comments\n // (if any) are skipped twice during the lexical analysis.\n // Thus, we need to skip adding a comment if the comment array already\n // handled it.\n if (state.lastCommentStart >= start) {\n return;\n }\n state.lastCommentStart = start;\n\n comment = {\n type: type,\n value: value\n };\n if (extra.range) {\n comment.range = [start, end];\n }\n if (extra.loc) {\n comment.loc = loc;\n }\n extra.comments.push(comment);\n if (extra.attachComment) {\n extra.leadingComments.push(comment);\n extra.trailingComments.push(comment);\n }\n }\n\n function skipSingleLineComment(offset) {\n var start, loc, ch, comment;\n\n start = index - offset;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - offset\n }\n };\n\n while (index < length) {\n ch = source.charCodeAt(index);\n ++index;\n if (isLineTerminator(ch)) {\n if (extra.comments) {\n comment = source.slice(start + offset, index - 1);\n loc.end = {\n line: lineNumber,\n column: index - lineStart - 1\n };\n addComment('Line', comment, start, index - 1, loc);\n }\n if (ch === 13 && source.charCodeAt(index) === 10) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n return;\n }\n }\n\n if (extra.comments) {\n comment = source.slice(start + offset, index);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Line', comment, start, index, loc);\n }\n }\n\n function skipMultiLineComment() {\n var start, loc, ch, comment;\n\n if (extra.comments) {\n start = index - 2;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart - 2\n }\n };\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (isLineTerminator(ch)) {\n if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {\n ++index;\n }\n ++lineNumber;\n ++index;\n lineStart = index;\n if (index >= length) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n } else if (ch === 0x2A) {\n // Block comment ends with '*/'.\n if (source.charCodeAt(index + 1) === 0x2F) {\n ++index;\n ++index;\n if (extra.comments) {\n comment = source.slice(start + 2, index - 2);\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n addComment('Block', comment, start, index, loc);\n }\n return;\n }\n ++index;\n } else {\n ++index;\n }\n }\n\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n function skipComment() {\n var ch, start;\n\n start = (index === 0);\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch)) {\n ++index;\n } else if (isLineTerminator(ch)) {\n ++index;\n if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {\n ++index;\n }\n ++lineNumber;\n lineStart = index;\n start = true;\n } else if (ch === 0x2F) { // U+002F is '/'\n ch = source.charCodeAt(index + 1);\n if (ch === 0x2F) {\n ++index;\n ++index;\n skipSingleLineComment(2);\n start = true;\n } else if (ch === 0x2A) { // U+002A is '*'\n ++index;\n ++index;\n skipMultiLineComment();\n } else {\n break;\n }\n } else if (start && ch === 0x2D) { // U+002D is '-'\n // U+003E is '>'\n if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {\n // '-->' is a single-line comment\n index += 3;\n skipSingleLineComment(3);\n } else {\n break;\n }\n } else if (ch === 0x3C) { // U+003C is '<'\n if (source.slice(index + 1, index + 4) === '!--') {\n ++index; // `<`\n ++index; // `!`\n ++index; // `-`\n ++index; // `-`\n skipSingleLineComment(4);\n } else {\n break;\n }\n } else {\n break;\n }\n }\n }\n\n function scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n return '';\n }\n }\n return String.fromCharCode(code);\n }\n\n function getEscapedIdentifier() {\n var ch, id;\n\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n id += ch;\n }\n }\n\n return id;\n }\n\n function getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n }\n\n function scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = Token.Identifier;\n } else if (isKeyword(id)) {\n type = Token.Keyword;\n } else if (id === 'null') {\n type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = Token.BooleanLiteral;\n } else {\n type = Token.Identifier;\n }\n\n return {\n type: type,\n value: id,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n\n // 7.7 Punctuators\n\n function scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E: // ~\n ++index;\n if (extra.tokenize) {\n if (code === 0x28) {\n extra.openParenToken = extra.tokens.length;\n } else if (code === 0x7B) {\n extra.openCurlyToken = extra.tokens.length;\n }\n }\n return {\n type: Token.Punctuator,\n value: String.fromCharCode(code),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A: // *\n index += 2;\n return {\n type: Token.Punctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n\n case 0x21: // !\n case 0x3D: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: Token.Punctuator,\n value: source.slice(start, index),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: Token.Punctuator,\n value: ch4,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: Token.Punctuator,\n value: ch3,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n\n if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n index += 2;\n return {\n type: Token.Punctuator,\n value: ch2,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: Token.Punctuator,\n value: ch1,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n // 7.8.3 Numeric Literals\n\n function scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt('0x' + number, 16),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanOctalLiteral(start) {\n var number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.NumericLiteral,\n value: parseFloat(number),\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n // 7.8.4 String Literals\n\n function scanStringLiteral() {\n var str = '', quote, start, ch, code, unescaped, restore, octal = false, startLineNumber, startLineStart;\n startLineNumber = lineNumber;\n startLineStart = lineStart;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n restore = index;\n unescaped = scanHexEscape(ch);\n if (unescaped) {\n str += unescaped;\n } else {\n index = restore;\n str += ch;\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n ++lineNumber;\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n lineStart = index;\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.StringLiteral,\n value: str,\n octal: octal,\n startLineNumber: startLineNumber,\n startLineStart: startLineStart,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n function testRegExp(pattern, flags) {\n var value;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n throwError({}, Messages.InvalidRegExp);\n }\n return value;\n }\n\n function scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, Messages.UnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, Messages.UnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, Messages.UnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n }\n\n function scanRegExpFlags() {\n var ch, str, flags, restore;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n ch = source[index];\n if (ch === 'u') {\n ++index;\n restore = index;\n ch = scanHexEscape('u');\n if (ch) {\n flags += ch;\n for (str += '\\\\u'; restore < index; ++restore) {\n str += source[restore];\n }\n } else {\n index = restore;\n flags += 'u';\n str += '\\\\u';\n }\n throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');\n } else {\n str += '\\\\';\n throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n return {\n value: flags,\n literal: str\n };\n }\n\n function scanRegExp() {\n var start, body, flags, pattern, value;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n\n if (extra.tokenize) {\n return {\n type: Token.RegularExpression,\n value: value,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: start,\n end: index\n };\n }\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n start: start,\n end: index\n };\n }\n\n function collectRegex() {\n var pos, loc, regex, token;\n\n skipComment();\n\n pos = index;\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n regex = scanRegExp();\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n /* istanbul ignore next */\n if (!extra.tokenize) {\n // Pop the previous token, which is likely '/' or '/='\n if (extra.tokens.length > 0) {\n token = extra.tokens[extra.tokens.length - 1];\n if (token.range[0] === pos && token.type === 'Punctuator') {\n if (token.value === '/' || token.value === '/=') {\n extra.tokens.pop();\n }\n }\n }\n\n extra.tokens.push({\n type: 'RegularExpression',\n value: regex.literal,\n range: [pos, index],\n loc: loc\n });\n }\n\n return regex;\n }\n\n function isIdentifierName(token) {\n return token.type === Token.Identifier ||\n token.type === Token.Keyword ||\n token.type === Token.BooleanLiteral ||\n token.type === Token.NullLiteral;\n }\n\n function advanceSlash() {\n var prevToken,\n checkToken;\n // Using the following algorithm:\n // https://github.com/mozilla/sweet.js/wiki/design\n prevToken = extra.tokens[extra.tokens.length - 1];\n if (!prevToken) {\n // Nothing before that: it cannot be a division.\n return collectRegex();\n }\n if (prevToken.type === 'Punctuator') {\n if (prevToken.value === ']') {\n return scanPunctuator();\n }\n if (prevToken.value === ')') {\n checkToken = extra.tokens[extra.openParenToken - 1];\n if (checkToken &&\n checkToken.type === 'Keyword' &&\n (checkToken.value === 'if' ||\n checkToken.value === 'while' ||\n checkToken.value === 'for' ||\n checkToken.value === 'with')) {\n return collectRegex();\n }\n return scanPunctuator();\n }\n if (prevToken.value === '}') {\n // Dividing a function by anything makes little sense,\n // but we have to check for that.\n if (extra.tokens[extra.openCurlyToken - 3] &&\n extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') {\n // Anonymous function.\n checkToken = extra.tokens[extra.openCurlyToken - 4];\n if (!checkToken) {\n return scanPunctuator();\n }\n } else if (extra.tokens[extra.openCurlyToken - 4] &&\n extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') {\n // Named function.\n checkToken = extra.tokens[extra.openCurlyToken - 5];\n if (!checkToken) {\n return collectRegex();\n }\n } else {\n return scanPunctuator();\n }\n // checkToken determines whether the function is\n // a declaration or an expression.\n if (FnExprTokens.indexOf(checkToken.value) >= 0) {\n // It is an expression.\n return scanPunctuator();\n }\n // It is a declaration.\n return collectRegex();\n }\n return collectRegex();\n }\n if (prevToken.type === 'Keyword') {\n return collectRegex();\n }\n return scanPunctuator();\n }\n\n function advance() {\n var ch;\n\n skipComment();\n\n if (index >= length) {\n return {\n type: Token.EOF,\n lineNumber: lineNumber,\n lineStart: lineStart,\n start: index,\n end: index\n };\n }\n\n ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n // Slash (/) U+002F can also start a regex.\n if (extra.tokenize && ch === 0x2F) {\n return advanceSlash();\n }\n\n return scanPunctuator();\n }\n\n function collectToken() {\n var loc, token, range, value;\n\n skipComment();\n loc = {\n start: {\n line: lineNumber,\n column: index - lineStart\n }\n };\n\n token = advance();\n loc.end = {\n line: lineNumber,\n column: index - lineStart\n };\n\n if (token.type !== Token.EOF) {\n value = source.slice(token.start, token.end);\n extra.tokens.push({\n type: TokenName[token.type],\n value: value,\n range: [token.start, token.end],\n loc: loc\n });\n }\n\n return token;\n }\n\n function lex() {\n var token;\n\n token = lookahead;\n index = token.end;\n lineNumber = token.lineNumber;\n lineStart = token.lineStart;\n\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n\n index = token.end;\n lineNumber = token.lineNumber;\n lineStart = token.lineStart;\n\n return token;\n }\n\n function peek() {\n var pos, line, start;\n\n pos = index;\n line = lineNumber;\n start = lineStart;\n lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();\n index = pos;\n lineNumber = line;\n lineStart = start;\n }\n\n function Position(line, column) {\n this.line = line;\n this.column = column;\n }\n\n function SourceLocation(startLine, startColumn, line, column) {\n this.start = new Position(startLine, startColumn);\n this.end = new Position(line, column);\n }\n\n SyntaxTreeDelegate = {\n\n name: 'SyntaxTree',\n\n processComment: function (node) {\n var lastChild, trailingComments;\n\n if (node.type === Syntax.Program) {\n if (node.body.length > 0) {\n return;\n }\n }\n\n if (extra.trailingComments.length > 0) {\n if (extra.trailingComments[0].range[0] >= node.range[1]) {\n trailingComments = extra.trailingComments;\n extra.trailingComments = [];\n } else {\n extra.trailingComments.length = 0;\n }\n } else {\n if (extra.bottomRightStack.length > 0 &&\n extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments &&\n extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments[0].range[0] >= node.range[1]) {\n trailingComments = extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;\n delete extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;\n }\n }\n\n // Eating the stack.\n while (extra.bottomRightStack.length > 0 && extra.bottomRightStack[extra.bottomRightStack.length - 1].range[0] >= node.range[0]) {\n lastChild = extra.bottomRightStack.pop();\n }\n\n if (lastChild) {\n if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) {\n node.leadingComments = lastChild.leadingComments;\n delete lastChild.leadingComments;\n }\n } else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) {\n node.leadingComments = extra.leadingComments;\n extra.leadingComments = [];\n }\n\n\n if (trailingComments) {\n node.trailingComments = trailingComments;\n }\n\n extra.bottomRightStack.push(node);\n },\n\n markEnd: function (node, startToken) {\n if (extra.range) {\n node.range = [startToken.start, index];\n }\n if (extra.loc) {\n node.loc = new SourceLocation(\n startToken.startLineNumber === undefined ? startToken.lineNumber : startToken.startLineNumber,\n startToken.start - (startToken.startLineStart === undefined ? startToken.lineStart : startToken.startLineStart),\n lineNumber,\n index - lineStart\n );\n this.postProcess(node);\n }\n\n if (extra.attachComment) {\n this.processComment(node);\n }\n return node;\n },\n\n postProcess: function (node) {\n if (extra.source) {\n node.loc.source = extra.source;\n }\n return node;\n },\n\n createArrayExpression: function (elements) {\n return {\n type: Syntax.ArrayExpression,\n elements: elements\n };\n },\n\n createAssignmentExpression: function (operator, left, right) {\n return {\n type: Syntax.AssignmentExpression,\n operator: operator,\n left: left,\n right: right\n };\n },\n\n createBinaryExpression: function (operator, left, right) {\n var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression :\n Syntax.BinaryExpression;\n return {\n type: type,\n operator: operator,\n left: left,\n right: right\n };\n },\n\n createBlockStatement: function (body) {\n return {\n type: Syntax.BlockStatement,\n body: body\n };\n },\n\n createBreakStatement: function (label) {\n return {\n type: Syntax.BreakStatement,\n label: label\n };\n },\n\n createCallExpression: function (callee, args) {\n return {\n type: Syntax.CallExpression,\n callee: callee,\n 'arguments': args\n };\n },\n\n createCatchClause: function (param, body) {\n return {\n type: Syntax.CatchClause,\n param: param,\n body: body\n };\n },\n\n createConditionalExpression: function (test, consequent, alternate) {\n return {\n type: Syntax.ConditionalExpression,\n test: test,\n consequent: consequent,\n alternate: alternate\n };\n },\n\n createContinueStatement: function (label) {\n return {\n type: Syntax.ContinueStatement,\n label: label\n };\n },\n\n createDebuggerStatement: function () {\n return {\n type: Syntax.DebuggerStatement\n };\n },\n\n createDoWhileStatement: function (body, test) {\n return {\n type: Syntax.DoWhileStatement,\n body: body,\n test: test\n };\n },\n\n createEmptyStatement: function () {\n return {\n type: Syntax.EmptyStatement\n };\n },\n\n createExpressionStatement: function (expression) {\n return {\n type: Syntax.ExpressionStatement,\n expression: expression\n };\n },\n\n createForStatement: function (init, test, update, body) {\n return {\n type: Syntax.ForStatement,\n init: init,\n test: test,\n update: update,\n body: body\n };\n },\n\n createForInStatement: function (left, right, body) {\n return {\n type: Syntax.ForInStatement,\n left: left,\n right: right,\n body: body,\n each: false\n };\n },\n\n createFunctionDeclaration: function (id, params, defaults, body) {\n return {\n type: Syntax.FunctionDeclaration,\n id: id,\n params: params,\n defaults: defaults,\n body: body,\n rest: null,\n generator: false,\n expression: false\n };\n },\n\n createFunctionExpression: function (id, params, defaults, body) {\n return {\n type: Syntax.FunctionExpression,\n id: id,\n params: params,\n defaults: defaults,\n body: body,\n rest: null,\n generator: false,\n expression: false\n };\n },\n\n createIdentifier: function (name) {\n return {\n type: Syntax.Identifier,\n name: name\n };\n },\n\n createIfStatement: function (test, consequent, alternate) {\n return {\n type: Syntax.IfStatement,\n test: test,\n consequent: consequent,\n alternate: alternate\n };\n },\n\n createLabeledStatement: function (label, body) {\n return {\n type: Syntax.LabeledStatement,\n label: label,\n body: body\n };\n },\n\n createLiteral: function (token) {\n return {\n type: Syntax.Literal,\n value: token.value,\n raw: source.slice(token.start, token.end)\n };\n },\n\n createMemberExpression: function (accessor, object, property) {\n return {\n type: Syntax.MemberExpression,\n computed: accessor === '[',\n object: object,\n property: property\n };\n },\n\n createNewExpression: function (callee, args) {\n return {\n type: Syntax.NewExpression,\n callee: callee,\n 'arguments': args\n };\n },\n\n createObjectExpression: function (properties) {\n return {\n type: Syntax.ObjectExpression,\n properties: properties\n };\n },\n\n createPostfixExpression: function (operator, argument) {\n return {\n type: Syntax.UpdateExpression,\n operator: operator,\n argument: argument,\n prefix: false\n };\n },\n\n createProgram: function (body) {\n return {\n type: Syntax.Program,\n body: body\n };\n },\n\n createProperty: function (kind, key, value) {\n return {\n type: Syntax.Property,\n key: key,\n value: value,\n kind: kind\n };\n },\n\n createReturnStatement: function (argument) {\n return {\n type: Syntax.ReturnStatement,\n argument: argument\n };\n },\n\n createSequenceExpression: function (expressions) {\n return {\n type: Syntax.SequenceExpression,\n expressions: expressions\n };\n },\n\n createSwitchCase: function (test, consequent) {\n return {\n type: Syntax.SwitchCase,\n test: test,\n consequent: consequent\n };\n },\n\n createSwitchStatement: function (discriminant, cases) {\n return {\n type: Syntax.SwitchStatement,\n discriminant: discriminant,\n cases: cases\n };\n },\n\n createThisExpression: function () {\n return {\n type: Syntax.ThisExpression\n };\n },\n\n createThrowStatement: function (argument) {\n return {\n type: Syntax.ThrowStatement,\n argument: argument\n };\n },\n\n createTryStatement: function (block, guardedHandlers, handlers, finalizer) {\n return {\n type: Syntax.TryStatement,\n block: block,\n guardedHandlers: guardedHandlers,\n handlers: handlers,\n finalizer: finalizer\n };\n },\n\n createUnaryExpression: function (operator, argument) {\n if (operator === '++' || operator === '--') {\n return {\n type: Syntax.UpdateExpression,\n operator: operator,\n argument: argument,\n prefix: true\n };\n }\n return {\n type: Syntax.UnaryExpression,\n operator: operator,\n argument: argument,\n prefix: true\n };\n },\n\n createVariableDeclaration: function (declarations, kind) {\n return {\n type: Syntax.VariableDeclaration,\n declarations: declarations,\n kind: kind\n };\n },\n\n createVariableDeclarator: function (id, init) {\n return {\n type: Syntax.VariableDeclarator,\n id: id,\n init: init\n };\n },\n\n createWhileStatement: function (test, body) {\n return {\n type: Syntax.WhileStatement,\n test: test,\n body: body\n };\n },\n\n createWithStatement: function (object, body) {\n return {\n type: Syntax.WithStatement,\n object: object,\n body: body\n };\n }\n };\n\n // Return true if there is a line terminator before the next token.\n\n function peekLineTerminator() {\n var pos, line, start, found;\n\n pos = index;\n line = lineNumber;\n start = lineStart;\n skipComment();\n found = lineNumber !== line;\n index = pos;\n lineNumber = line;\n lineStart = start;\n\n return found;\n }\n\n // Throw an exception\n\n function throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function (whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n if (typeof token.lineNumber === 'number') {\n error = new Error('Line ' + token.lineNumber + ': ' + msg);\n error.index = token.start;\n error.lineNumber = token.lineNumber;\n error.column = token.start - lineStart + 1;\n } else {\n error = new Error('Line ' + lineNumber + ': ' + msg);\n error.index = index;\n error.lineNumber = lineNumber;\n error.column = index - lineStart + 1;\n }\n\n error.description = msg;\n throw error;\n }\n\n function throwErrorTolerant() {\n try {\n throwError.apply(null, arguments);\n } catch (e) {\n if (extra.errors) {\n extra.errors.push(e);\n } else {\n throw e;\n }\n }\n }\n\n\n // Throw an exception because of the token.\n\n function throwUnexpected(token) {\n if (token.type === Token.EOF) {\n throwError(token, Messages.UnexpectedEOS);\n }\n\n if (token.type === Token.NumericLiteral) {\n throwError(token, Messages.UnexpectedNumber);\n }\n\n if (token.type === Token.StringLiteral) {\n throwError(token, Messages.UnexpectedString);\n }\n\n if (token.type === Token.Identifier) {\n throwError(token, Messages.UnexpectedIdentifier);\n }\n\n if (token.type === Token.Keyword) {\n if (isFutureReservedWord(token.value)) {\n throwError(token, Messages.UnexpectedReserved);\n } else if (strict && isStrictModeReservedWord(token.value)) {\n throwErrorTolerant(token, Messages.StrictReservedWord);\n return;\n }\n throwError(token, Messages.UnexpectedToken, token.value);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, Messages.UnexpectedToken, token.value);\n }\n\n // Expect the next token to match the specified punctuator.\n // If not, an exception will be thrown.\n\n function expect(value) {\n var token = lex();\n if (token.type !== Token.Punctuator || token.value !== value) {\n throwUnexpected(token);\n }\n }\n\n // Expect the next token to match the specified keyword.\n // If not, an exception will be thrown.\n\n function expectKeyword(keyword) {\n var token = lex();\n if (token.type !== Token.Keyword || token.value !== keyword) {\n throwUnexpected(token);\n }\n }\n\n // Return true if the next token matches the specified punctuator.\n\n function match(value) {\n return lookahead.type === Token.Punctuator && lookahead.value === value;\n }\n\n // Return true if the next token matches the specified keyword\n\n function matchKeyword(keyword) {\n return lookahead.type === Token.Keyword && lookahead.value === keyword;\n }\n\n // Return true if the next token is an assignment operator\n\n function matchAssign() {\n var op;\n\n if (lookahead.type !== Token.Punctuator) {\n return false;\n }\n op = lookahead.value;\n return op === '=' ||\n op === '*=' ||\n op === '/=' ||\n op === '%=' ||\n op === '+=' ||\n op === '-=' ||\n op === '<<=' ||\n op === '>>=' ||\n op === '>>>=' ||\n op === '&=' ||\n op === '^=' ||\n op === '|=';\n }\n\n function consumeSemicolon() {\n var line;\n\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(index) === 0x3B || match(';')) {\n lex();\n return;\n }\n\n line = lineNumber;\n skipComment();\n if (lineNumber !== line) {\n return;\n }\n\n if (lookahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahead);\n }\n }\n\n // Return true if provided expression is LeftHandSideExpression\n\n function isLeftHandSide(expr) {\n return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;\n }\n\n // 11.1.4 Array Initialiser\n\n function parseArrayInitialiser() {\n var elements = [], startToken;\n\n startToken = lookahead;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseAssignmentExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return delegate.markEnd(delegate.createArrayExpression(elements), startToken);\n }\n\n // 11.1.5 Object Initialiser\n\n function parsePropertyFunction(param, first) {\n var previousStrict, body, startToken;\n\n previousStrict = strict;\n startToken = lookahead;\n body = parseFunctionSourceElements();\n if (first && strict && isRestrictedWord(param[0].name)) {\n throwErrorTolerant(first, Messages.StrictParamName);\n }\n strict = previousStrict;\n return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body), startToken);\n }\n\n function parseObjectPropertyKey() {\n var token, startToken;\n\n startToken = lookahead;\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {\n if (strict && token.octal) {\n throwErrorTolerant(token, Messages.StrictOctalLiteral);\n }\n return delegate.markEnd(delegate.createLiteral(token), startToken);\n }\n\n return delegate.markEnd(delegate.createIdentifier(token.value), startToken);\n }\n\n function parseObjectProperty() {\n var token, key, id, value, param, startToken;\n\n token = lookahead;\n startToken = lookahead;\n\n if (token.type === Token.Identifier) {\n\n id = parseObjectPropertyKey();\n\n // Property Assignment: Getter and Setter.\n\n if (token.value === 'get' && !match(':')) {\n key = parseObjectPropertyKey();\n expect('(');\n expect(')');\n value = parsePropertyFunction([]);\n return delegate.markEnd(delegate.createProperty('get', key, value), startToken);\n }\n if (token.value === 'set' && !match(':')) {\n key = parseObjectPropertyKey();\n expect('(');\n token = lookahead;\n if (token.type !== Token.Identifier) {\n expect(')');\n throwErrorTolerant(token, Messages.UnexpectedToken, token.value);\n value = parsePropertyFunction([]);\n } else {\n param = [ parseVariableIdentifier() ];\n expect(')');\n value = parsePropertyFunction(param, token);\n }\n return delegate.markEnd(delegate.createProperty('set', key, value), startToken);\n }\n expect(':');\n value = parseAssignmentExpression();\n return delegate.markEnd(delegate.createProperty('init', id, value), startToken);\n }\n if (token.type === Token.EOF || token.type === Token.Punctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseAssignmentExpression();\n return delegate.markEnd(delegate.createProperty('init', key, value), startToken);\n }\n }\n\n function parseObjectInitialiser() {\n var properties = [], property, name, key, kind, map = {}, toString = String, startToken;\n\n startToken = lookahead;\n\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === Syntax.Identifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;\n\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n if (map[key] === PropertyKind.Data) {\n if (strict && kind === PropertyKind.Data) {\n throwErrorTolerant({}, Messages.StrictDuplicateProperty);\n } else if (kind !== PropertyKind.Data) {\n throwErrorTolerant({}, Messages.AccessorDataProperty);\n }\n } else {\n if (kind === PropertyKind.Data) {\n throwErrorTolerant({}, Messages.AccessorDataProperty);\n } else if (map[key] & kind) {\n throwErrorTolerant({}, Messages.AccessorGetSet);\n }\n }\n map[key] |= kind;\n } else {\n map[key] = kind;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return delegate.markEnd(delegate.createObjectExpression(properties), startToken);\n }\n\n // 11.1.6 The Grouping Operator\n\n function parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expressions\n\n function parsePrimaryExpression() {\n var type, token, expr, startToken;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n startToken = lookahead;\n\n if (type === Token.Identifier) {\n expr = delegate.createIdentifier(lex().value);\n } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {\n if (strict && lookahead.octal) {\n throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);\n }\n expr = delegate.createLiteral(lex());\n } else if (type === Token.Keyword) {\n if (matchKeyword('function')) {\n return parseFunctionExpression();\n }\n if (matchKeyword('this')) {\n lex();\n expr = delegate.createThisExpression();\n } else {\n throwUnexpected(lex());\n }\n } else if (type === Token.BooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = delegate.createLiteral(token);\n } else if (type === Token.NullLiteral) {\n token = lex();\n token.value = null;\n expr = delegate.createLiteral(token);\n } else if (match('/') || match('/=')) {\n if (typeof extra.tokens !== 'undefined') {\n expr = delegate.createLiteral(collectRegex());\n } else {\n expr = delegate.createLiteral(scanRegExp());\n }\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return delegate.markEnd(expr, startToken);\n }\n\n // 11.2 Left-Hand-Side Expressions\n\n function parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseAssignmentExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n }\n\n function parseNonComputedProperty() {\n var token, startToken;\n\n startToken = lookahead;\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return delegate.markEnd(delegate.createIdentifier(token.value), startToken);\n }\n\n function parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\n }\n\n function parseNewExpression() {\n var callee, args, startToken;\n\n startToken = lookahead;\n expectKeyword('new');\n callee = parseLeftHandSideExpression();\n args = match('(') ? parseArguments() : [];\n\n return delegate.markEnd(delegate.createNewExpression(callee, args), startToken);\n }\n\n function parseLeftHandSideExpressionAllowCall() {\n var previousAllowIn, expr, args, property, startToken;\n\n startToken = lookahead;\n\n previousAllowIn = state.allowIn;\n state.allowIn = true;\n expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();\n state.allowIn = previousAllowIn;\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = delegate.createMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = delegate.createCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = delegate.createMemberExpression('[', expr, property);\n } else {\n break;\n }\n delegate.markEnd(expr, startToken);\n }\n\n return expr;\n }\n\n function parseLeftHandSideExpression() {\n var previousAllowIn, expr, property, startToken;\n\n startToken = lookahead;\n\n previousAllowIn = state.allowIn;\n expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();\n state.allowIn = previousAllowIn;\n\n while (match('.') || match('[')) {\n if (match('[')) {\n property = parseComputedMember();\n expr = delegate.createMemberExpression('[', expr, property);\n } else {\n property = parseNonComputedMember();\n expr = delegate.createMemberExpression('.', expr, property);\n }\n delegate.markEnd(expr, startToken);\n }\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n function parsePostfixExpression() {\n var expr, token, startToken = lookahead;\n\n expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === Token.Punctuator) {\n if ((match('++') || match('--')) && !peekLineTerminator()) {\n // 11.3.1, 11.3.2\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n throwErrorTolerant({}, Messages.StrictLHSPostfix);\n }\n\n if (!isLeftHandSide(expr)) {\n throwErrorTolerant({}, Messages.InvalidLHSInAssignment);\n }\n\n token = lex();\n expr = delegate.markEnd(delegate.createPostfixExpression(token.value, expr), startToken);\n }\n }\n\n return expr;\n }\n\n // 11.4 Unary Operators\n\n function parseUnaryExpression() {\n var token, expr, startToken;\n\n if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n startToken = lookahead;\n token = lex();\n expr = parseUnaryExpression();\n // 11.4.4, 11.4.5\n if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {\n throwErrorTolerant({}, Messages.StrictLHSPrefix);\n }\n\n if (!isLeftHandSide(expr)) {\n throwErrorTolerant({}, Messages.InvalidLHSInAssignment);\n }\n\n expr = delegate.createUnaryExpression(token.value, expr);\n expr = delegate.markEnd(expr, startToken);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n startToken = lookahead;\n token = lex();\n expr = parseUnaryExpression();\n expr = delegate.createUnaryExpression(token.value, expr);\n expr = delegate.markEnd(expr, startToken);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n startToken = lookahead;\n token = lex();\n expr = parseUnaryExpression();\n expr = delegate.createUnaryExpression(token.value, expr);\n expr = delegate.markEnd(expr, startToken);\n if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {\n throwErrorTolerant({}, Messages.StrictDelete);\n }\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n }\n\n function binaryPrecedence(token, allowIn) {\n var prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n prec = 7;\n break;\n\n case 'in':\n prec = allowIn ? 7 : 0;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Additive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Operators\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n // 11.11 Binary Logical Operators\n\n function parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrecedence(token, state.allowIn);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n expr = delegate.createBinaryExpression(operator, left, right);\n markers.pop();\n marker = markers[markers.length - 1];\n delegate.markEnd(expr, marker);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n marker = markers.pop();\n delegate.markEnd(expr, marker);\n }\n\n return expr;\n }\n\n\n // 11.12 Conditional Operator\n\n function parseConditionalExpression() {\n var expr, previousAllowIn, consequent, alternate, startToken;\n\n startToken = lookahead;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n previousAllowIn = state.allowIn;\n state.allowIn = true;\n consequent = parseAssignmentExpression();\n state.allowIn = previousAllowIn;\n expect(':');\n alternate = parseAssignmentExpression();\n\n expr = delegate.createConditionalExpression(expr, consequent, alternate);\n delegate.markEnd(expr, startToken);\n }\n\n return expr;\n }\n\n // 11.13 Assignment Operators\n\n function parseAssignmentExpression() {\n var token, left, right, node, startToken;\n\n token = lookahead;\n startToken = lookahead;\n\n node = left = parseConditionalExpression();\n\n if (matchAssign()) {\n // LeftHandSideExpression\n if (!isLeftHandSide(left)) {\n throwErrorTolerant({}, Messages.InvalidLHSInAssignment);\n }\n\n // 11.13.1\n if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) {\n throwErrorTolerant(token, Messages.StrictLHSAssignment);\n }\n\n token = lex();\n right = parseAssignmentExpression();\n node = delegate.markEnd(delegate.createAssignmentExpression(token.value, left, right), startToken);\n }\n\n return node;\n }\n\n // 11.14 Comma Operator\n\n function parseExpression() {\n var expr, startToken = lookahead;\n\n expr = parseAssignmentExpression();\n\n if (match(',')) {\n expr = delegate.createSequenceExpression([ expr ]);\n\n while (index < length) {\n if (!match(',')) {\n break;\n }\n lex();\n expr.expressions.push(parseAssignmentExpression());\n }\n\n delegate.markEnd(expr, startToken);\n }\n\n return expr;\n }\n\n // 12.1 Block\n\n function parseStatementList() {\n var list = [],\n statement;\n\n while (index < length) {\n if (match('}')) {\n break;\n }\n statement = parseSourceElement();\n if (typeof statement === 'undefined') {\n break;\n }\n list.push(statement);\n }\n\n return list;\n }\n\n function parseBlock() {\n var block, startToken;\n\n startToken = lookahead;\n expect('{');\n\n block = parseStatementList();\n\n expect('}');\n\n return delegate.markEnd(delegate.createBlockStatement(block), startToken);\n }\n\n // 12.2 Variable Statement\n\n function parseVariableIdentifier() {\n var token, startToken;\n\n startToken = lookahead;\n token = lex();\n\n if (token.type !== Token.Identifier) {\n throwUnexpected(token);\n }\n\n return delegate.markEnd(delegate.createIdentifier(token.value), startToken);\n }\n\n function parseVariableDeclaration(kind) {\n var init = null, id, startToken;\n\n startToken = lookahead;\n id = parseVariableIdentifier();\n\n // 12.2.1\n if (strict && isRestrictedWord(id.name)) {\n throwErrorTolerant({}, Messages.StrictVarName);\n }\n\n if (kind === 'const') {\n expect('=');\n init = parseAssignmentExpression();\n } else if (match('=')) {\n lex();\n init = parseAssignmentExpression();\n }\n\n return delegate.markEnd(delegate.createVariableDeclarator(id, init), startToken);\n }\n\n function parseVariableDeclarationList(kind) {\n var list = [];\n\n do {\n list.push(parseVariableDeclaration(kind));\n if (!match(',')) {\n break;\n }\n lex();\n } while (index < length);\n\n return list;\n }\n\n function parseVariableStatement() {\n var declarations;\n\n expectKeyword('var');\n\n declarations = parseVariableDeclarationList();\n\n consumeSemicolon();\n\n return delegate.createVariableDeclaration(declarations, 'var');\n }\n\n // kind may be `const` or `let`\n // Both are experimental and not in the specification yet.\n // see http://wiki.ecmascript.org/doku.php?id=harmony:const\n // and http://wiki.ecmascript.org/doku.php?id=harmony:let\n function parseConstLetDeclaration(kind) {\n var declarations, startToken;\n\n startToken = lookahead;\n\n expectKeyword(kind);\n\n declarations = parseVariableDeclarationList(kind);\n\n consumeSemicolon();\n\n return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind), startToken);\n }\n\n // 12.3 Empty Statement\n\n function parseEmptyStatement() {\n expect(';');\n return delegate.createEmptyStatement();\n }\n\n // 12.4 Expression Statement\n\n function parseExpressionStatement() {\n var expr = parseExpression();\n consumeSemicolon();\n return delegate.createExpressionStatement(expr);\n }\n\n // 12.5 If statement\n\n function parseIfStatement() {\n var test, consequent, alternate;\n\n expectKeyword('if');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n consequent = parseStatement();\n\n if (matchKeyword('else')) {\n lex();\n alternate = parseStatement();\n } else {\n alternate = null;\n }\n\n return delegate.createIfStatement(test, consequent, alternate);\n }\n\n // 12.6 Iteration Statements\n\n function parseDoWhileStatement() {\n var body, test, oldInIteration;\n\n expectKeyword('do');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n if (match(';')) {\n lex();\n }\n\n return delegate.createDoWhileStatement(body, test);\n }\n\n function parseWhileStatement() {\n var test, body, oldInIteration;\n\n expectKeyword('while');\n\n expect('(');\n\n test = parseExpression();\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n return delegate.createWhileStatement(test, body);\n }\n\n function parseForVariableDeclaration() {\n var token, declarations, startToken;\n\n startToken = lookahead;\n token = lex();\n declarations = parseVariableDeclarationList();\n\n return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value), startToken);\n }\n\n function parseForStatement() {\n var init, test, update, left, right, body, oldInIteration;\n\n init = test = update = null;\n\n expectKeyword('for');\n\n expect('(');\n\n if (match(';')) {\n lex();\n } else {\n if (matchKeyword('var') || matchKeyword('let')) {\n state.allowIn = false;\n init = parseForVariableDeclaration();\n state.allowIn = true;\n\n if (init.declarations.length === 1 && matchKeyword('in')) {\n lex();\n left = init;\n right = parseExpression();\n init = null;\n }\n } else {\n state.allowIn = false;\n init = parseExpression();\n state.allowIn = true;\n\n if (matchKeyword('in')) {\n // LeftHandSideExpression\n if (!isLeftHandSide(init)) {\n throwErrorTolerant({}, Messages.InvalidLHSInForIn);\n }\n\n lex();\n left = init;\n right = parseExpression();\n init = null;\n }\n }\n\n if (typeof left === 'undefined') {\n expect(';');\n }\n }\n\n if (typeof left === 'undefined') {\n\n if (!match(';')) {\n test = parseExpression();\n }\n expect(';');\n\n if (!match(')')) {\n update = parseExpression();\n }\n }\n\n expect(')');\n\n oldInIteration = state.inIteration;\n state.inIteration = true;\n\n body = parseStatement();\n\n state.inIteration = oldInIteration;\n\n return (typeof left === 'undefined') ?\n delegate.createForStatement(init, test, update, body) :\n delegate.createForInStatement(left, right, body);\n }\n\n // 12.7 The continue statement\n\n function parseContinueStatement() {\n var label = null, key;\n\n expectKeyword('continue');\n\n // Optimize the most common form: 'continue;'.\n if (source.charCodeAt(index) === 0x3B) {\n lex();\n\n if (!state.inIteration) {\n throwError({}, Messages.IllegalContinue);\n }\n\n return delegate.createContinueStatement(null);\n }\n\n if (peekLineTerminator()) {\n if (!state.inIteration) {\n throwError({}, Messages.IllegalContinue);\n }\n\n return delegate.createContinueStatement(null);\n }\n\n if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError({}, Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !state.inIteration) {\n throwError({}, Messages.IllegalContinue);\n }\n\n return delegate.createContinueStatement(label);\n }\n\n // 12.8 The break statement\n\n function parseBreakStatement() {\n var label = null, key;\n\n expectKeyword('break');\n\n // Catch the very common case first: immediately a semicolon (U+003B).\n if (source.charCodeAt(index) === 0x3B) {\n lex();\n\n if (!(state.inIteration || state.inSwitch)) {\n throwError({}, Messages.IllegalBreak);\n }\n\n return delegate.createBreakStatement(null);\n }\n\n if (peekLineTerminator()) {\n if (!(state.inIteration || state.inSwitch)) {\n throwError({}, Messages.IllegalBreak);\n }\n\n return delegate.createBreakStatement(null);\n }\n\n if (lookahead.type === Token.Identifier) {\n label = parseVariableIdentifier();\n\n key = '$' + label.name;\n if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError({}, Messages.UnknownLabel, label.name);\n }\n }\n\n consumeSemicolon();\n\n if (label === null && !(state.inIteration || state.inSwitch)) {\n throwError({}, Messages.IllegalBreak);\n }\n\n return delegate.createBreakStatement(label);\n }\n\n // 12.9 The return statement\n\n function parseReturnStatement() {\n var argument = null;\n\n expectKeyword('return');\n\n if (!state.inFunctionBody) {\n throwErrorTolerant({}, Messages.IllegalReturn);\n }\n\n // 'return' followed by a space and an identifier is very common.\n if (source.charCodeAt(index) === 0x20) {\n if (isIdentifierStart(source.charCodeAt(index + 1))) {\n argument = parseExpression();\n consumeSemicolon();\n return delegate.createReturnStatement(argument);\n }\n }\n\n if (peekLineTerminator()) {\n return delegate.createReturnStatement(null);\n }\n\n if (!match(';')) {\n if (!match('}') && lookahead.type !== Token.EOF) {\n argument = parseExpression();\n }\n }\n\n consumeSemicolon();\n\n return delegate.createReturnStatement(argument);\n }\n\n // 12.10 The with statement\n\n function parseWithStatement() {\n var object, body;\n\n if (strict) {\n // TODO(ikarienator): Should we update the test cases instead?\n skipComment();\n throwErrorTolerant({}, Messages.StrictModeWith);\n }\n\n expectKeyword('with');\n\n expect('(');\n\n object = parseExpression();\n\n expect(')');\n\n body = parseStatement();\n\n return delegate.createWithStatement(object, body);\n }\n\n // 12.10 The swith statement\n\n function parseSwitchCase() {\n var test, consequent = [], statement, startToken;\n\n startToken = lookahead;\n if (matchKeyword('default')) {\n lex();\n test = null;\n } else {\n expectKeyword('case');\n test = parseExpression();\n }\n expect(':');\n\n while (index < length) {\n if (match('}') || matchKeyword('default') || matchKeyword('case')) {\n break;\n }\n statement = parseStatement();\n consequent.push(statement);\n }\n\n return delegate.markEnd(delegate.createSwitchCase(test, consequent), startToken);\n }\n\n function parseSwitchStatement() {\n var discriminant, cases, clause, oldInSwitch, defaultFound;\n\n expectKeyword('switch');\n\n expect('(');\n\n discriminant = parseExpression();\n\n expect(')');\n\n expect('{');\n\n cases = [];\n\n if (match('}')) {\n lex();\n return delegate.createSwitchStatement(discriminant, cases);\n }\n\n oldInSwitch = state.inSwitch;\n state.inSwitch = true;\n defaultFound = false;\n\n while (index < length) {\n if (match('}')) {\n break;\n }\n clause = parseSwitchCase();\n if (clause.test === null) {\n if (defaultFound) {\n throwError({}, Messages.MultipleDefaultsInSwitch);\n }\n defaultFound = true;\n }\n cases.push(clause);\n }\n\n state.inSwitch = oldInSwitch;\n\n expect('}');\n\n return delegate.createSwitchStatement(discriminant, cases);\n }\n\n // 12.13 The throw statement\n\n function parseThrowStatement() {\n var argument;\n\n expectKeyword('throw');\n\n if (peekLineTerminator()) {\n throwError({}, Messages.NewlineAfterThrow);\n }\n\n argument = parseExpression();\n\n consumeSemicolon();\n\n return delegate.createThrowStatement(argument);\n }\n\n // 12.14 The try statement\n\n function parseCatchClause() {\n var param, body, startToken;\n\n startToken = lookahead;\n expectKeyword('catch');\n\n expect('(');\n if (match(')')) {\n throwUnexpected(lookahead);\n }\n\n param = parseVariableIdentifier();\n // 12.14.1\n if (strict && isRestrictedWord(param.name)) {\n throwErrorTolerant({}, Messages.StrictCatchVariable);\n }\n\n expect(')');\n body = parseBlock();\n return delegate.markEnd(delegate.createCatchClause(param, body), startToken);\n }\n\n function parseTryStatement() {\n var block, handlers = [], finalizer = null;\n\n expectKeyword('try');\n\n block = parseBlock();\n\n if (matchKeyword('catch')) {\n handlers.push(parseCatchClause());\n }\n\n if (matchKeyword('finally')) {\n lex();\n finalizer = parseBlock();\n }\n\n if (handlers.length === 0 && !finalizer) {\n throwError({}, Messages.NoCatchOrFinally);\n }\n\n return delegate.createTryStatement(block, [], handlers, finalizer);\n }\n\n // 12.15 The debugger statement\n\n function parseDebuggerStatement() {\n expectKeyword('debugger');\n\n consumeSemicolon();\n\n return delegate.createDebuggerStatement();\n }\n\n // 12 Statements\n\n function parseStatement() {\n var type = lookahead.type,\n expr,\n labeledBody,\n key,\n startToken;\n\n if (type === Token.EOF) {\n throwUnexpected(lookahead);\n }\n\n if (type === Token.Punctuator && lookahead.value === '{') {\n return parseBlock();\n }\n\n startToken = lookahead;\n\n if (type === Token.Punctuator) {\n switch (lookahead.value) {\n case ';':\n return delegate.markEnd(parseEmptyStatement(), startToken);\n case '(':\n return delegate.markEnd(parseExpressionStatement(), startToken);\n default:\n break;\n }\n }\n\n if (type === Token.Keyword) {\n switch (lookahead.value) {\n case 'break':\n return delegate.markEnd(parseBreakStatement(), startToken);\n case 'continue':\n return delegate.markEnd(parseContinueStatement(), startToken);\n case 'debugger':\n return delegate.markEnd(parseDebuggerStatement(), startToken);\n case 'do':\n return delegate.markEnd(parseDoWhileStatement(), startToken);\n case 'for':\n return delegate.markEnd(parseForStatement(), startToken);\n case 'function':\n return delegate.markEnd(parseFunctionDeclaration(), startToken);\n case 'if':\n return delegate.markEnd(parseIfStatement(), startToken);\n case 'return':\n return delegate.markEnd(parseReturnStatement(), startToken);\n case 'switch':\n return delegate.markEnd(parseSwitchStatement(), startToken);\n case 'throw':\n return delegate.markEnd(parseThrowStatement(), startToken);\n case 'try':\n return delegate.markEnd(parseTryStatement(), startToken);\n case 'var':\n return delegate.markEnd(parseVariableStatement(), startToken);\n case 'while':\n return delegate.markEnd(parseWhileStatement(), startToken);\n case 'with':\n return delegate.markEnd(parseWithStatement(), startToken);\n default:\n break;\n }\n }\n\n expr = parseExpression();\n\n // 12.12 Labelled Statements\n if ((expr.type === Syntax.Identifier) && match(':')) {\n lex();\n\n key = '$' + expr.name;\n if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {\n throwError({}, Messages.Redeclaration, 'Label', expr.name);\n }\n\n state.labelSet[key] = true;\n labeledBody = parseStatement();\n delete state.labelSet[key];\n return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody), startToken);\n }\n\n consumeSemicolon();\n\n return delegate.markEnd(delegate.createExpressionStatement(expr), startToken);\n }\n\n // 13 Function Definition\n\n function parseFunctionSourceElements() {\n var sourceElement, sourceElements = [], token, directive, firstRestricted,\n oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, startToken;\n\n startToken = lookahead;\n expect('{');\n\n while (index < length) {\n if (lookahead.type !== Token.StringLiteral) {\n break;\n }\n token = lookahead;\n\n sourceElement = parseSourceElement();\n sourceElements.push(sourceElement);\n if (sourceElement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n oldLabelSet = state.labelSet;\n oldInIteration = state.inIteration;\n oldInSwitch = state.inSwitch;\n oldInFunctionBody = state.inFunctionBody;\n\n state.labelSet = {};\n state.inIteration = false;\n state.inSwitch = false;\n state.inFunctionBody = true;\n\n while (index < length) {\n if (match('}')) {\n break;\n }\n sourceElement = parseSourceElement();\n if (typeof sourceElement === 'undefined') {\n break;\n }\n sourceElements.push(sourceElement);\n }\n\n expect('}');\n\n state.labelSet = oldLabelSet;\n state.inIteration = oldInIteration;\n state.inSwitch = oldInSwitch;\n state.inFunctionBody = oldInFunctionBody;\n\n return delegate.markEnd(delegate.createBlockStatement(sourceElements), startToken);\n }\n\n function parseParams(firstRestricted) {\n var param, params = [], token, stricted, paramSet, key, message;\n expect('(');\n\n if (!match(')')) {\n paramSet = {};\n while (index < length) {\n token = lookahead;\n param = parseVariableIdentifier();\n key = '$' + token.value;\n if (strict) {\n if (isRestrictedWord(token.value)) {\n stricted = token;\n message = Messages.StrictParamName;\n }\n if (Object.prototype.hasOwnProperty.call(paramSet, key)) {\n stricted = token;\n message = Messages.StrictParamDupe;\n }\n } else if (!firstRestricted) {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictParamName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {\n firstRestricted = token;\n message = Messages.StrictParamDupe;\n }\n }\n params.push(param);\n paramSet[key] = true;\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return {\n params: params,\n stricted: stricted,\n firstRestricted: firstRestricted,\n message: message\n };\n }\n\n function parseFunctionDeclaration() {\n var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, startToken;\n\n startToken = lookahead;\n\n expectKeyword('function');\n token = lookahead;\n id = parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n throwErrorTolerant(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwError(firstRestricted, message);\n }\n if (strict && stricted) {\n throwErrorTolerant(stricted, message);\n }\n strict = previousStrict;\n\n return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body), startToken);\n }\n\n function parseFunctionExpression() {\n var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict, startToken;\n\n startToken = lookahead;\n expectKeyword('function');\n\n if (!match('(')) {\n token = lookahead;\n id = parseVariableIdentifier();\n if (strict) {\n if (isRestrictedWord(token.value)) {\n throwErrorTolerant(token, Messages.StrictFunctionName);\n }\n } else {\n if (isRestrictedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictFunctionName;\n } else if (isStrictModeReservedWord(token.value)) {\n firstRestricted = token;\n message = Messages.StrictReservedWord;\n }\n }\n }\n\n tmp = parseParams(firstRestricted);\n params = tmp.params;\n stricted = tmp.stricted;\n firstRestricted = tmp.firstRestricted;\n if (tmp.message) {\n message = tmp.message;\n }\n\n previousStrict = strict;\n body = parseFunctionSourceElements();\n if (strict && firstRestricted) {\n throwError(firstRestricted, message);\n }\n if (strict && stricted) {\n throwErrorTolerant(stricted, message);\n }\n strict = previousStrict;\n\n return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body), startToken);\n }\n\n // 14 Program\n\n function parseSourceElement() {\n if (lookahead.type === Token.Keyword) {\n switch (lookahead.value) {\n case 'const':\n case 'let':\n return parseConstLetDeclaration(lookahead.value);\n case 'function':\n return parseFunctionDeclaration();\n default:\n return parseStatement();\n }\n }\n\n if (lookahead.type !== Token.EOF) {\n return parseStatement();\n }\n }\n\n function parseSourceElements() {\n var sourceElement, sourceElements = [], token, directive, firstRestricted;\n\n while (index < length) {\n token = lookahead;\n if (token.type !== Token.StringLiteral) {\n break;\n }\n\n sourceElement = parseSourceElement();\n sourceElements.push(sourceElement);\n if (sourceElement.expression.type !== Syntax.Literal) {\n // this is not directive\n break;\n }\n directive = source.slice(token.start + 1, token.end - 1);\n if (directive === 'use strict') {\n strict = true;\n if (firstRestricted) {\n throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);\n }\n } else {\n if (!firstRestricted && token.octal) {\n firstRestricted = token;\n }\n }\n }\n\n while (index < length) {\n sourceElement = parseSourceElement();\n /* istanbul ignore if */\n if (typeof sourceElement === 'undefined') {\n break;\n }\n sourceElements.push(sourceElement);\n }\n return sourceElements;\n }\n\n function parseProgram() {\n var body, startToken;\n\n skipComment();\n peek();\n startToken = lookahead;\n strict = false;\n\n body = parseSourceElements();\n return delegate.markEnd(delegate.createProgram(body), startToken);\n }\n\n function filterTokenLocation() {\n var i, entry, token, tokens = [];\n\n for (i = 0; i < extra.tokens.length; ++i) {\n entry = extra.tokens[i];\n token = {\n type: entry.type,\n value: entry.value\n };\n if (extra.range) {\n token.range = entry.range;\n }\n if (extra.loc) {\n token.loc = entry.loc;\n }\n tokens.push(token);\n }\n\n extra.tokens = tokens;\n }\n\n function tokenize(code, options) {\n var toString,\n token,\n tokens;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n delegate = SyntaxTreeDelegate;\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1\n };\n\n extra = {};\n\n // Options matching.\n options = options || {};\n\n // Of course we collect tokens here.\n options.tokens = true;\n extra.tokens = [];\n extra.tokenize = true;\n // The following two fields are necessary to compute the Regex tokens.\n extra.openParenToken = -1;\n extra.openCurlyToken = -1;\n\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n\n try {\n peek();\n if (lookahead.type === Token.EOF) {\n return extra.tokens;\n }\n\n token = lex();\n while (lookahead.type !== Token.EOF) {\n try {\n token = lex();\n } catch (lexError) {\n token = lookahead;\n if (extra.errors) {\n extra.errors.push(lexError);\n // We have to break on the first error\n // to avoid infinite loops.\n break;\n } else {\n throw lexError;\n }\n }\n }\n\n filterTokenLocation();\n tokens = extra.tokens;\n if (typeof extra.comments !== 'undefined') {\n tokens.comments = extra.comments;\n }\n if (typeof extra.errors !== 'undefined') {\n tokens.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n return tokens;\n }\n\n function parse(code, options) {\n var program, toString;\n\n toString = String;\n if (typeof code !== 'string' && !(code instanceof String)) {\n code = toString(code);\n }\n\n delegate = SyntaxTreeDelegate;\n source = code;\n index = 0;\n lineNumber = (source.length > 0) ? 1 : 0;\n lineStart = 0;\n length = source.length;\n lookahead = null;\n state = {\n allowIn: true,\n labelSet: {},\n inFunctionBody: false,\n inIteration: false,\n inSwitch: false,\n lastCommentStart: -1\n };\n\n extra = {};\n if (typeof options !== 'undefined') {\n extra.range = (typeof options.range === 'boolean') && options.range;\n extra.loc = (typeof options.loc === 'boolean') && options.loc;\n extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;\n\n if (extra.loc && options.source !== null && options.source !== undefined) {\n extra.source = toString(options.source);\n }\n\n if (typeof options.tokens === 'boolean' && options.tokens) {\n extra.tokens = [];\n }\n if (typeof options.comment === 'boolean' && options.comment) {\n extra.comments = [];\n }\n if (typeof options.tolerant === 'boolean' && options.tolerant) {\n extra.errors = [];\n }\n if (extra.attachComment) {\n extra.range = true;\n extra.comments = [];\n extra.bottomRightStack = [];\n extra.trailingComments = [];\n extra.leadingComments = [];\n }\n }\n\n try {\n program = parseProgram();\n if (typeof extra.comments !== 'undefined') {\n program.comments = extra.comments;\n }\n if (typeof extra.tokens !== 'undefined') {\n filterTokenLocation();\n program.tokens = extra.tokens;\n }\n if (typeof extra.errors !== 'undefined') {\n program.errors = extra.errors;\n }\n } catch (e) {\n throw e;\n } finally {\n extra = {};\n }\n\n return program;\n }\n\n // Sync with *.json manifests.\n exports.version = '1.2.2';\n\n exports.tokenize = tokenize;\n\n exports.parse = parse;\n\n // Deep copy.\n /* istanbul ignore next */\n exports.Syntax = (function () {\n var name, types = {};\n\n if (typeof Object.create === 'function') {\n types = Object.create(null);\n }\n\n for (name in Syntax) {\n if (Syntax.hasOwnProperty(name)) {\n types[name] = Syntax[name];\n }\n }\n\n if (typeof Object.freeze === 'function') {\n Object.freeze(types);\n }\n\n return types;\n }());\n\n}));\n/* vim: set sw=4 ts=4 et tw=80 : */\n\n},{}],1:[function(require,module,exports){\n(function (process){\n/* parser generated by jison 0.4.13 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"JSON_PATH\":3,\"DOLLAR\":4,\"PATH_COMPONENTS\":5,\"LEADING_CHILD_MEMBER_EXPRESSION\":6,\"PATH_COMPONENT\":7,\"MEMBER_COMPONENT\":8,\"SUBSCRIPT_COMPONENT\":9,\"CHILD_MEMBER_COMPONENT\":10,\"DESCENDANT_MEMBER_COMPONENT\":11,\"DOT\":12,\"MEMBER_EXPRESSION\":13,\"DOT_DOT\":14,\"STAR\":15,\"IDENTIFIER\":16,\"SCRIPT_EXPRESSION\":17,\"INTEGER\":18,\"END\":19,\"CHILD_SUBSCRIPT_COMPONENT\":20,\"DESCENDANT_SUBSCRIPT_COMPONENT\":21,\"[\":22,\"SUBSCRIPT\":23,\"]\":24,\"SUBSCRIPT_EXPRESSION\":25,\"SUBSCRIPT_EXPRESSION_LIST\":26,\"SUBSCRIPT_EXPRESSION_LISTABLE\":27,\",\":28,\"STRING_LITERAL\":29,\"ARRAY_SLICE\":30,\"FILTER_EXPRESSION\":31,\"QQ_STRING\":32,\"Q_STRING\":33,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"DOLLAR\",12:\"DOT\",14:\"DOT_DOT\",15:\"STAR\",16:\"IDENTIFIER\",17:\"SCRIPT_EXPRESSION\",18:\"INTEGER\",19:\"END\",22:\"[\",24:\"]\",28:\",\",30:\"ARRAY_SLICE\",31:\"FILTER_EXPRESSION\",32:\"QQ_STRING\",33:\"Q_STRING\"},\nproductions_: [0,[3,1],[3,2],[3,1],[3,2],[5,1],[5,2],[7,1],[7,1],[8,1],[8,1],[10,2],[6,1],[11,2],[13,1],[13,1],[13,1],[13,1],[13,1],[9,1],[9,1],[20,3],[21,4],[23,1],[23,1],[26,1],[26,3],[27,1],[27,1],[27,1],[25,1],[25,1],[25,1],[29,1],[29,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */\n/**/) {\n/* this == yyval */\nif (!yy.ast) {\n yy.ast = _ast;\n _ast.initialize();\n}\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:yy.ast.set({ expression: { type: \"root\", value: $$[$0] } }); yy.ast.unshift(); return yy.ast.yield()\nbreak;\ncase 2:yy.ast.set({ expression: { type: \"root\", value: $$[$0-1] } }); yy.ast.unshift(); return yy.ast.yield()\nbreak;\ncase 3:yy.ast.unshift(); return yy.ast.yield()\nbreak;\ncase 4:yy.ast.set({ operation: \"member\", scope: \"child\", expression: { type: \"identifier\", value: $$[$0-1] }}); yy.ast.unshift(); return yy.ast.yield()\nbreak;\ncase 5:\nbreak;\ncase 6:\nbreak;\ncase 7:yy.ast.set({ operation: \"member\" }); yy.ast.push()\nbreak;\ncase 8:yy.ast.set({ operation: \"subscript\" }); yy.ast.push() \nbreak;\ncase 9:yy.ast.set({ scope: \"child\" })\nbreak;\ncase 10:yy.ast.set({ scope: \"descendant\" })\nbreak;\ncase 11:\nbreak;\ncase 12:yy.ast.set({ scope: \"child\", operation: \"member\" })\nbreak;\ncase 13:\nbreak;\ncase 14:yy.ast.set({ expression: { type: \"wildcard\", value: $$[$0] } })\nbreak;\ncase 15:yy.ast.set({ expression: { type: \"identifier\", value: $$[$0] } })\nbreak;\ncase 16:yy.ast.set({ expression: { type: \"script_expression\", value: $$[$0] } })\nbreak;\ncase 17:yy.ast.set({ expression: { type: \"numeric_literal\", value: parseInt($$[$0]) } })\nbreak;\ncase 18:\nbreak;\ncase 19:yy.ast.set({ scope: \"child\" })\nbreak;\ncase 20:yy.ast.set({ scope: \"descendant\" })\nbreak;\ncase 21:\nbreak;\ncase 22:\nbreak;\ncase 23:\nbreak;\ncase 24:$$[$0].length > 1? yy.ast.set({ expression: { type: \"union\", value: $$[$0] } }) : this.$ = $$[$0]\nbreak;\ncase 25:this.$ = [$$[$0]]\nbreak;\ncase 26:this.$ = $$[$0-2].concat($$[$0])\nbreak;\ncase 27:this.$ = { expression: { type: \"numeric_literal\", value: parseInt($$[$0]) } }; yy.ast.set(this.$)\nbreak;\ncase 28:this.$ = { expression: { type: \"string_literal\", value: $$[$0] } }; yy.ast.set(this.$)\nbreak;\ncase 29:this.$ = { expression: { type: \"slice\", value: $$[$0] } }; yy.ast.set(this.$)\nbreak;\ncase 30:this.$ = { expression: { type: \"wildcard\", value: $$[$0] } }; yy.ast.set(this.$)\nbreak;\ncase 31:this.$ = { expression: { type: \"script_expression\", value: $$[$0] } }; yy.ast.set(this.$)\nbreak;\ncase 32:this.$ = { expression: { type: \"filter_expression\", value: $$[$0] } }; yy.ast.set(this.$)\nbreak;\ncase 33:this.$ = $$[$0]\nbreak;\ncase 34:this.$ = $$[$0]\nbreak;\n}\n},\ntable: [{3:1,4:[1,2],6:3,13:4,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9]},{1:[3]},{1:[2,1],5:10,7:11,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,3],5:21,7:11,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,12],12:[2,12],14:[2,12],22:[2,12]},{1:[2,14],12:[2,14],14:[2,14],22:[2,14]},{1:[2,15],12:[2,15],14:[2,15],22:[2,15]},{1:[2,16],12:[2,16],14:[2,16],22:[2,16]},{1:[2,17],12:[2,17],14:[2,17],22:[2,17]},{1:[2,18],12:[2,18],14:[2,18],22:[2,18]},{1:[2,2],7:22,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,5],12:[2,5],14:[2,5],22:[2,5]},{1:[2,7],12:[2,7],14:[2,7],22:[2,7]},{1:[2,8],12:[2,8],14:[2,8],22:[2,8]},{1:[2,9],12:[2,9],14:[2,9],22:[2,9]},{1:[2,10],12:[2,10],14:[2,10],22:[2,10]},{1:[2,19],12:[2,19],14:[2,19],22:[2,19]},{1:[2,20],12:[2,20],14:[2,20],22:[2,20]},{13:23,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9]},{13:24,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9],22:[1,25]},{15:[1,29],17:[1,30],18:[1,33],23:26,25:27,26:28,27:32,29:34,30:[1,35],31:[1,31],32:[1,36],33:[1,37]},{1:[2,4],7:22,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,6],12:[2,6],14:[2,6],22:[2,6]},{1:[2,11],12:[2,11],14:[2,11],22:[2,11]},{1:[2,13],12:[2,13],14:[2,13],22:[2,13]},{15:[1,29],17:[1,30],18:[1,33],23:38,25:27,26:28,27:32,29:34,30:[1,35],31:[1,31],32:[1,36],33:[1,37]},{24:[1,39]},{24:[2,23]},{24:[2,24],28:[1,40]},{24:[2,30]},{24:[2,31]},{24:[2,32]},{24:[2,25],28:[2,25]},{24:[2,27],28:[2,27]},{24:[2,28],28:[2,28]},{24:[2,29],28:[2,29]},{24:[2,33],28:[2,33]},{24:[2,34],28:[2,34]},{24:[1,41]},{1:[2,21],12:[2,21],14:[2,21],22:[2,21]},{18:[1,33],27:42,29:34,30:[1,35],32:[1,36],33:[1,37]},{1:[2,22],12:[2,22],14:[2,22],22:[2,22]},{24:[2,26],28:[2,26]}],\ndefaultActions: {27:[2,23],29:[2,30],30:[2,31],31:[2,32]},\nparseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n throw new Error(str);\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n this.yy.parser = this;\n if (typeof this.lexer.yylloc == 'undefined') {\n this.lexer.yylloc = {};\n }\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n var ranges = this.lexer.options && this.lexer.options.ranges;\n if (typeof this.yy.parseError === 'function') {\n this.parseError = this.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = self.lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (this.lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + this.lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: this.lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: this.lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n this.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\nvar _ast = {\n\n initialize: function() {\n this._nodes = [];\n this._node = {};\n this._stash = [];\n },\n\n set: function(props) {\n for (var k in props) this._node[k] = props[k];\n return this._node;\n },\n\n node: function(obj) {\n if (arguments.length) this._node = obj;\n return this._node;\n },\n\n push: function() {\n this._nodes.push(this._node);\n this._node = {};\n },\n\n unshift: function() {\n this._nodes.unshift(this._node);\n this._node = {};\n },\n\n yield: function() {\n var _nodes = this._nodes;\n this.initialize();\n return _nodes;\n }\n};\n/* generated by jison-lex 0.2.1 */\nvar lexer = (function(){\nvar lexer = {\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input) {\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function (match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin(condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState(condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START\n/**/) {\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 4\nbreak;\ncase 1:return 14\nbreak;\ncase 2:return 12\nbreak;\ncase 3:return 15\nbreak;\ncase 4:return 16\nbreak;\ncase 5:return 22\nbreak;\ncase 6:return 24\nbreak;\ncase 7:return 28\nbreak;\ncase 8:return 30\nbreak;\ncase 9:return 18\nbreak;\ncase 10:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 32;\nbreak;\ncase 11:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 33;\nbreak;\ncase 12:return 17\nbreak;\ncase 13:return 31\nbreak;\n}\n},\nrules: [/^(?:\\$)/,/^(?:\\.\\.)/,/^(?:\\.)/,/^(?:\\*)/,/^(?:[a-zA-Z_]+[a-zA-Z0-9_]*)/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?:((-?(?:0|[1-9][0-9]*)))?\\:((-?(?:0|[1-9][0-9]*)))?(\\:((-?(?:0|[1-9][0-9]*)))?)?)/,/^(?:(-?(?:0|[1-9][0-9]*)))/,/^(?:\"(?:\\\\[\"bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\"\\\\])*\")/,/^(?:'(?:\\\\['bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^'\\\\])*')/,/^(?:\\(.+?\\)(?=\\]))/,/^(?:\\?\\(.+?\\)(?=\\]))/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}}\n};\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain(args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}\n\n}).call(this,require('_process'))\n},{\"_process\":14,\"fs\":12,\"path\":13}],2:[function(require,module,exports){\nmodule.exports = {\n identifier: \"[a-zA-Z_]+[a-zA-Z0-9_]*\",\n integer: \"-?(?:0|[1-9][0-9]*)\",\n qq_string: \"\\\"(?:\\\\\\\\[\\\"bfnrt/\\\\\\\\]|\\\\\\\\u[a-fA-F0-9]{4}|[^\\\"\\\\\\\\])*\\\"\",\n q_string: \"'(?:\\\\\\\\[\\'bfnrt/\\\\\\\\]|\\\\\\\\u[a-fA-F0-9]{4}|[^\\'\\\\\\\\])*'\"\n};\n\n},{}],3:[function(require,module,exports){\nvar dict = require('./dict');\nvar fs = require('fs');\nvar grammar = {\n\n lex: {\n\n macros: {\n esc: \"\\\\\\\\\",\n int: dict.integer\n },\n\n rules: [\n [\"\\\\$\", \"return 'DOLLAR'\"],\n [\"\\\\.\\\\.\", \"return 'DOT_DOT'\"],\n [\"\\\\.\", \"return 'DOT'\"],\n [\"\\\\*\", \"return 'STAR'\"],\n [dict.identifier, \"return 'IDENTIFIER'\"],\n [\"\\\\[\", \"return '['\"],\n [\"\\\\]\", \"return ']'\"],\n [\",\", \"return ','\"],\n [\"({int})?\\\\:({int})?(\\\\:({int})?)?\", \"return 'ARRAY_SLICE'\"],\n [\"{int}\", \"return 'INTEGER'\"],\n [dict.qq_string, \"yytext = yytext.substr(1,yyleng-2); return 'QQ_STRING';\"],\n [dict.q_string, \"yytext = yytext.substr(1,yyleng-2); return 'Q_STRING';\"],\n [\"\\\\(.+?\\\\)(?=\\\\])\", \"return 'SCRIPT_EXPRESSION'\"],\n [\"\\\\?\\\\(.+?\\\\)(?=\\\\])\", \"return 'FILTER_EXPRESSION'\"]\n ]\n },\n\n start: \"JSON_PATH\",\n\n bnf: {\n\n JSON_PATH: [\n [ 'DOLLAR', 'yy.ast.set({ expression: { type: \"root\", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()' ],\n [ 'DOLLAR PATH_COMPONENTS', 'yy.ast.set({ expression: { type: \"root\", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()' ],\n [ 'LEADING_CHILD_MEMBER_EXPRESSION', 'yy.ast.unshift(); return yy.ast.yield()' ],\n [ 'LEADING_CHILD_MEMBER_EXPRESSION PATH_COMPONENTS', 'yy.ast.set({ operation: \"member\", scope: \"child\", expression: { type: \"identifier\", value: $1 }}); yy.ast.unshift(); return yy.ast.yield()' ] ],\n\n PATH_COMPONENTS: [\n [ 'PATH_COMPONENT', '' ],\n [ 'PATH_COMPONENTS PATH_COMPONENT', '' ] ],\n\n PATH_COMPONENT: [\n [ 'MEMBER_COMPONENT', 'yy.ast.set({ operation: \"member\" }); yy.ast.push()' ],\n [ 'SUBSCRIPT_COMPONENT', 'yy.ast.set({ operation: \"subscript\" }); yy.ast.push() ' ] ],\n\n MEMBER_COMPONENT: [\n [ 'CHILD_MEMBER_COMPONENT', 'yy.ast.set({ scope: \"child\" })' ],\n [ 'DESCENDANT_MEMBER_COMPONENT', 'yy.ast.set({ scope: \"descendant\" })' ] ],\n\n CHILD_MEMBER_COMPONENT: [\n [ 'DOT MEMBER_EXPRESSION', '' ] ],\n\n LEADING_CHILD_MEMBER_EXPRESSION: [\n [ 'MEMBER_EXPRESSION', 'yy.ast.set({ scope: \"child\", operation: \"member\" })' ] ],\n\n DESCENDANT_MEMBER_COMPONENT: [\n [ 'DOT_DOT MEMBER_EXPRESSION', '' ] ],\n\n MEMBER_EXPRESSION: [\n [ 'STAR', 'yy.ast.set({ expression: { type: \"wildcard\", value: $1 } })' ],\n [ 'IDENTIFIER', 'yy.ast.set({ expression: { type: \"identifier\", value: $1 } })' ],\n [ 'SCRIPT_EXPRESSION', 'yy.ast.set({ expression: { type: \"script_expression\", value: $1 } })' ],\n [ 'INTEGER', 'yy.ast.set({ expression: { type: \"numeric_literal\", value: parseInt($1) } })' ],\n [ 'END', '' ] ],\n\n SUBSCRIPT_COMPONENT: [\n [ 'CHILD_SUBSCRIPT_COMPONENT', 'yy.ast.set({ scope: \"child\" })' ],\n [ 'DESCENDANT_SUBSCRIPT_COMPONENT', 'yy.ast.set({ scope: \"descendant\" })' ] ],\n\n CHILD_SUBSCRIPT_COMPONENT: [\n [ '[ SUBSCRIPT ]', '' ] ],\n\n DESCENDANT_SUBSCRIPT_COMPONENT: [\n [ 'DOT_DOT [ SUBSCRIPT ]', '' ] ],\n\n SUBSCRIPT: [\n [ 'SUBSCRIPT_EXPRESSION', '' ],\n [ 'SUBSCRIPT_EXPRESSION_LIST', '$1.length > 1? yy.ast.set({ expression: { type: \"union\", value: $1 } }) : $$ = $1' ] ],\n\n SUBSCRIPT_EXPRESSION_LIST: [\n [ 'SUBSCRIPT_EXPRESSION_LISTABLE', '$$ = [$1]'],\n [ 'SUBSCRIPT_EXPRESSION_LIST , SUBSCRIPT_EXPRESSION_LISTABLE', '$$ = $1.concat($3)' ] ],\n\n SUBSCRIPT_EXPRESSION_LISTABLE: [\n [ 'INTEGER', '$$ = { expression: { type: \"numeric_literal\", value: parseInt($1) } }; yy.ast.set($$)' ],\n [ 'STRING_LITERAL', '$$ = { expression: { type: \"string_literal\", value: $1 } }; yy.ast.set($$)' ],\n [ 'ARRAY_SLICE', '$$ = { expression: { type: \"slice\", value: $1 } }; yy.ast.set($$)' ] ],\n\n SUBSCRIPT_EXPRESSION: [\n [ 'STAR', '$$ = { expression: { type: \"wildcard\", value: $1 } }; yy.ast.set($$)' ],\n [ 'SCRIPT_EXPRESSION', '$$ = { expression: { type: \"script_expression\", value: $1 } }; yy.ast.set($$)' ],\n [ 'FILTER_EXPRESSION', '$$ = { expression: { type: \"filter_expression\", value: $1 } }; yy.ast.set($$)' ] ],\n\n STRING_LITERAL: [\n [ 'QQ_STRING', \"$$ = $1\" ],\n [ 'Q_STRING', \"$$ = $1\" ] ]\n }\n};\nif (fs.readFileSync) {\n grammar.moduleInclude = fs.readFileSync(require.resolve(\"../include/module.js\"));\n grammar.actionInclude = fs.readFileSync(require.resolve(\"../include/action.js\"));\n}\n\nmodule.exports = grammar;\n\n},{\"./dict\":2,\"fs\":12}],4:[function(require,module,exports){\nvar aesprim = require('./aesprim');\nvar slice = require('./slice');\nvar _evaluate = require('static-eval');\nvar _uniq = require('underscore').uniq;\n\nvar Handlers = function() {\n return this.initialize.apply(this, arguments);\n}\n\nHandlers.prototype.initialize = function() {\n this.traverse = traverser(true);\n this.descend = traverser();\n}\n\nHandlers.prototype.keys = Object.keys;\n\nHandlers.prototype.resolve = function(component) {\n\n var key = [ component.operation, component.scope, component.expression.type ].join('-');\n var method = this._fns[key];\n\n if (!method) throw new Error(\"couldn't resolve key: \" + key);\n return method.bind(this);\n};\n\nHandlers.prototype.register = function(key, handler) {\n\n if (!handler instanceof Function) {\n throw new Error(\"handler must be a function\");\n }\n\n this._fns[key] = handler;\n};\n\nHandlers.prototype._fns = {\n\n 'member-child-identifier': function(component, partial) {\n var key = component.expression.value;\n var value = partial.value;\n if (value instanceof Object && key in value) {\n return [ { value: value[key], path: partial.path.concat(key) } ]\n }\n },\n\n 'member-descendant-identifier':\n _traverse(function(key, value, ref) { return key == ref }),\n\n 'subscript-child-numeric_literal':\n _descend(function(key, value, ref) { return key === ref }),\n\n 'member-child-numeric_literal':\n _descend(function(key, value, ref) { return String(key) === String(ref) }),\n\n 'subscript-descendant-numeric_literal':\n _traverse(function(key, value, ref) { return key === ref }),\n\n 'member-child-wildcard':\n _descend(function() { return true }),\n\n 'member-descendant-wildcard':\n _traverse(function() { return true }),\n\n 'subscript-descendant-wildcard':\n _traverse(function() { return true }),\n\n 'subscript-child-wildcard':\n _descend(function() { return true }),\n\n 'subscript-child-slice': function(component, partial) {\n if (is_array(partial.value)) {\n var args = component.expression.value.split(':').map(_parse_nullable_int);\n var values = partial.value.map(function(v, i) { return { value: v, path: partial.path.concat(i) } });\n return slice.apply(null, [values].concat(args));\n }\n },\n\n 'subscript-child-union': function(component, partial) {\n var results = [];\n component.expression.value.forEach(function(component) {\n var _component = { operation: 'subscript', scope: 'child', expression: component.expression };\n var handler = this.resolve(_component);\n var _results = handler(_component, partial);\n if (_results) {\n results = results.concat(_results);\n }\n }, this);\n\n return unique(results);\n },\n\n 'subscript-descendant-union': function(component, partial, count) {\n\n var jp = require('..');\n var self = this;\n\n var results = [];\n var nodes = jp.nodes(partial, '$..*').slice(1);\n\n nodes.forEach(function(node) {\n if (results.length >= count) return;\n component.expression.value.forEach(function(component) {\n var _component = { operation: 'subscript', scope: 'child', expression: component.expression };\n var handler = self.resolve(_component);\n var _results = handler(_component, node);\n results = results.concat(_results);\n });\n });\n\n return unique(results);\n },\n\n 'subscript-child-filter_expression': function(component, partial, count) {\n\n // slice out the expression from ?(expression)\n var src = component.expression.value.slice(2, -1);\n var ast = aesprim.parse(src).body[0].expression;\n\n var passable = function(key, value) {\n return evaluate(ast, { '@': value });\n }\n\n return this.descend(partial, null, passable, count);\n\n },\n\n 'subscript-descendant-filter_expression': function(component, partial, count) {\n\n // slice out the expression from ?(expression)\n var src = component.expression.value.slice(2, -1);\n var ast = aesprim.parse(src).body[0].expression;\n\n var passable = function(key, value) {\n return evaluate(ast, { '@': value });\n }\n\n return this.traverse(partial, null, passable, count);\n },\n\n 'subscript-child-script_expression': function(component, partial) {\n var exp = component.expression.value.slice(1, -1);\n return eval_recurse(partial, exp, '$[{{value}}]');\n },\n\n 'member-child-script_expression': function(component, partial) {\n var exp = component.expression.value.slice(1, -1);\n return eval_recurse(partial, exp, '$.{{value}}');\n },\n\n 'member-descendant-script_expression': function(component, partial) {\n var exp = component.expression.value.slice(1, -1);\n return eval_recurse(partial, exp, '$..value');\n }\n};\n\nHandlers.prototype._fns['subscript-child-string_literal'] =\n\tHandlers.prototype._fns['member-child-identifier'];\n\nHandlers.prototype._fns['member-descendant-numeric_literal'] =\n Handlers.prototype._fns['subscript-descendant-string_literal'] =\n Handlers.prototype._fns['member-descendant-identifier'];\n\nfunction eval_recurse(partial, src, template) {\n\n var jp = require('./index');\n var ast = aesprim.parse(src).body[0].expression;\n var value = evaluate(ast, { '@': partial.value });\n var path = template.replace(/\\{\\{\\s*value\\s*\\}\\}/g, value);\n\n var results = jp.nodes(partial.value, path);\n results.forEach(function(r) {\n r.path = partial.path.concat(r.path.slice(1));\n });\n\n return results;\n}\n\nfunction is_array(val) {\n return Array.isArray(val);\n}\n\nfunction is_object(val) {\n // is this a non-array, non-null object?\n return val && !(val instanceof Array) && val instanceof Object;\n}\n\nfunction traverser(recurse) {\n\n return function(partial, ref, passable, count) {\n\n var value = partial.value;\n var path = partial.path;\n\n var results = [];\n\n var descend = function(value, path) {\n\n if (is_array(value)) {\n value.forEach(function(element, index) {\n if (results.length >= count) { return }\n if (passable(index, element, ref)) {\n results.push({ path: path.concat(index), value: element });\n }\n });\n value.forEach(function(element, index) {\n if (results.length >= count) { return }\n if (recurse) {\n descend(element, path.concat(index));\n }\n });\n } else if (is_object(value)) {\n this.keys(value).forEach(function(k) {\n if (results.length >= count) { return }\n if (passable(k, value[k], ref)) {\n results.push({ path: path.concat(k), value: value[k] });\n }\n })\n this.keys(value).forEach(function(k) {\n if (results.length >= count) { return }\n if (recurse) {\n descend(value[k], path.concat(k));\n }\n });\n }\n }.bind(this);\n descend(value, path);\n return results;\n }\n}\n\nfunction _descend(passable) {\n return function(component, partial, count) {\n return this.descend(partial, component.expression.value, passable, count);\n }\n}\n\nfunction _traverse(passable) {\n return function(component, partial, count) {\n return this.traverse(partial, component.expression.value, passable, count);\n }\n}\n\nfunction evaluate() {\n try { return _evaluate.apply(this, arguments) }\n catch (e) { }\n}\n\nfunction unique(results) {\n results = results.filter(function(d) { return d })\n return _uniq(\n results,\n function(r) { return r.path.map(function(c) { return String(c).replace('-', '--') }).join('-') }\n );\n}\n\nfunction _parse_nullable_int(val) {\n var sval = String(val);\n return sval.match(/^-?[0-9]+$/) ? parseInt(sval) : null;\n}\n\nmodule.exports = Handlers;\n\n},{\"..\":\"jsonpath\",\"./aesprim\":\"./aesprim\",\"./index\":5,\"./slice\":7,\"static-eval\":15,\"underscore\":12}],5:[function(require,module,exports){\nvar assert = require('assert');\nvar dict = require('./dict');\nvar Parser = require('./parser');\nvar Handlers = require('./handlers');\n\nvar JSONPath = function() {\n this.initialize.apply(this, arguments);\n};\n\nJSONPath.prototype.initialize = function() {\n this.parser = new Parser();\n this.handlers = new Handlers();\n};\n\nJSONPath.prototype.parse = function(string) {\n assert.ok(_is_string(string), \"we need a path\");\n return this.parser.parse(string);\n};\n\nJSONPath.prototype.parent = function(obj, string) {\n\n assert.ok(obj instanceof Object, \"obj needs to be an object\");\n assert.ok(string, \"we need a path\");\n\n var node = this.nodes(obj, string)[0];\n var key = node.path.pop(); /* jshint unused:false */\n return this.value(obj, node.path);\n}\n\nJSONPath.prototype.apply = function(obj, string, fn) {\n\n assert.ok(obj instanceof Object, \"obj needs to be an object\");\n assert.ok(string, \"we need a path\");\n assert.equal(typeof fn, \"function\", \"fn needs to be function\")\n\n var nodes = this.nodes(obj, string).sort(function(a, b) {\n // sort nodes so we apply from the bottom up\n return b.path.length - a.path.length;\n });\n\n nodes.forEach(function(node) {\n var key = node.path.pop();\n var parent = this.value(obj, this.stringify(node.path));\n var val = node.value = fn.call(obj, parent[key]);\n parent[key] = val;\n }, this);\n\n return nodes;\n}\n\nJSONPath.prototype.value = function(obj, path, value) {\n\n assert.ok(obj instanceof Object, \"obj needs to be an object\");\n assert.ok(path, \"we need a path\");\n\n if (arguments.length >= 3) {\n var node = this.nodes(obj, path).shift();\n if (!node) return this._vivify(obj, path, value);\n var key = node.path.slice(-1).shift();\n var parent = this.parent(obj, this.stringify(node.path));\n parent[key] = value;\n }\n return this.query(obj, this.stringify(path), 1).shift();\n}\n\nJSONPath.prototype._vivify = function(obj, string, value) {\n\n var self = this;\n\n assert.ok(obj instanceof Object, \"obj needs to be an object\");\n assert.ok(string, \"we need a path\");\n\n var path = this.parser.parse(string)\n .map(function(component) { return component.expression.value });\n\n var setValue = function(path, value) {\n var key = path.pop();\n var node = self.value(obj, path);\n if (!node) {\n setValue(path.concat(), typeof key === 'string' ? {} : []);\n node = self.value(obj, path);\n }\n node[key] = value;\n }\n setValue(path, value);\n return this.query(obj, string)[0];\n}\n\nJSONPath.prototype.query = function(obj, string, count) {\n\n assert.ok(obj instanceof Object, \"obj needs to be an object\");\n assert.ok(_is_string(string), \"we need a path\");\n\n var results = this.nodes(obj, string, count)\n .map(function(r) { return r.value });\n\n return results;\n};\n\nJSONPath.prototype.paths = function(obj, string, count) {\n\n assert.ok(obj instanceof Object, \"obj needs to be an object\");\n assert.ok(string, \"we need a path\");\n\n var results = this.nodes(obj, string, count)\n .map(function(r) { return r.path });\n\n return results;\n};\n\nJSONPath.prototype.nodes = function(obj, string, count) {\n\n assert.ok(obj instanceof Object, \"obj needs to be an object\");\n assert.ok(string, \"we need a path\");\n\n if (count === 0) return [];\n\n var path = this.parser.parse(string);\n var handlers = this.handlers;\n\n var partials = [ { path: ['$'], value: obj } ];\n var matches = [];\n\n if (path.length && path[0].expression.type == 'root') path.shift();\n\n if (!path.length) return partials;\n\n path.forEach(function(component, index) {\n\n if (matches.length >= count) return;\n var handler = handlers.resolve(component);\n var _partials = [];\n\n partials.forEach(function(p) {\n\n if (matches.length >= count) return;\n var results = handler(component, p, count);\n\n if (index == path.length - 1) {\n // if we're through the components we're done\n matches = matches.concat(results || []);\n } else {\n // otherwise accumulate and carry on through\n _partials = _partials.concat(results || []);\n }\n });\n\n partials = _partials;\n\n });\n\n return count ? matches.slice(0, count) : matches;\n};\n\nJSONPath.prototype.stringify = function(path) {\n\n assert.ok(path, \"we need a path\");\n\n var string = '$';\n\n var templates = {\n 'descendant-member': '..{{value}}',\n 'child-member': '.{{value}}',\n 'descendant-subscript': '..[{{value}}]',\n 'child-subscript': '[{{value}}]'\n };\n\n path = this._normalize(path);\n\n path.forEach(function(component) {\n\n if (component.expression.type == 'root') return;\n\n var key = [component.scope, component.operation].join('-');\n var template = templates[key];\n var value;\n\n if (component.expression.type == 'string_literal') {\n value = JSON.stringify(component.expression.value)\n } else {\n value = component.expression.value;\n }\n\n if (!template) throw new Error(\"couldn't find template \" + key);\n\n string += template.replace(/{{value}}/, value);\n });\n\n return string;\n}\n\nJSONPath.prototype._normalize = function(path) {\n\n assert.ok(path, \"we need a path\");\n\n if (typeof path == \"string\") {\n\n return this.parser.parse(path);\n\n } else if (Array.isArray(path) && typeof path[0] == \"string\") {\n\n var _path = [ { expression: { type: \"root\", value: \"$\" } } ];\n\n path.forEach(function(component, index) {\n\n if (component == '$' && index === 0) return;\n\n if (typeof component == \"string\" && component.match(\"^\" + dict.identifier + \"$\")) {\n\n _path.push({\n operation: 'member',\n scope: 'child',\n expression: { value: component, type: 'identifier' }\n });\n\n } else {\n\n var type = typeof component == \"number\" ?\n 'numeric_literal' : 'string_literal';\n\n _path.push({\n operation: 'subscript',\n scope: 'child',\n expression: { value: component, type: type }\n });\n }\n });\n\n return _path;\n\n } else if (Array.isArray(path) && typeof path[0] == \"object\") {\n\n return path\n }\n\n throw new Error(\"couldn't understand path \" + path);\n}\n\nfunction _is_string(obj) {\n return Object.prototype.toString.call(obj) == '[object String]';\n}\n\nJSONPath.Handlers = Handlers;\nJSONPath.Parser = Parser;\n\nvar instance = new JSONPath;\ninstance.JSONPath = JSONPath;\n\nmodule.exports = instance;\n\n},{\"./dict\":2,\"./handlers\":4,\"./parser\":6,\"assert\":8}],6:[function(require,module,exports){\nvar grammar = require('./grammar');\nvar gparser = require('../generated/parser');\n\nvar Parser = function() {\n\n var parser = new gparser.Parser();\n\n var _parseError = parser.parseError;\n parser.yy.parseError = function() {\n if (parser.yy.ast) {\n parser.yy.ast.initialize();\n }\n _parseError.apply(parser, arguments);\n }\n\n return parser;\n\n};\n\nParser.grammar = grammar;\nmodule.exports = Parser;\n\n},{\"../generated/parser\":1,\"./grammar\":3}],7:[function(require,module,exports){\nmodule.exports = function(arr, start, end, step) {\n\n if (typeof start == 'string') throw new Error(\"start cannot be a string\");\n if (typeof end == 'string') throw new Error(\"end cannot be a string\");\n if (typeof step == 'string') throw new Error(\"step cannot be a string\");\n\n var len = arr.length;\n\n if (step === 0) throw new Error(\"step cannot be zero\");\n step = step ? integer(step) : 1;\n\n // normalize negative values\n start = start < 0 ? len + start : start;\n end = end < 0 ? len + end : end;\n\n // default extents to extents\n start = integer(start === 0 ? 0 : !start ? (step > 0 ? 0 : len - 1) : start);\n end = integer(end === 0 ? 0 : !end ? (step > 0 ? len : -1) : end);\n\n // clamp extents\n start = step > 0 ? Math.max(0, start) : Math.min(len, start);\n end = step > 0 ? Math.min(end, len) : Math.max(-1, end);\n\n // return empty if extents are backwards\n if (step > 0 && end <= start) return [];\n if (step < 0 && start <= end) return [];\n\n var result = [];\n\n for (var i = start; i != end; i += step) {\n if ((step < 0 && i <= end) || (step > 0 && i >= end)) break;\n result.push(arr[i]);\n }\n\n return result;\n}\n\nfunction integer(val) {\n return String(val).match(/^[0-9]+$/) ? parseInt(val) :\n Number.isFinite(val) ? parseInt(val, 10) : 0;\n}\n\n},{}],8:[function(require,module,exports){\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// when used in node, this will actually load the util module we depend on\n// versus loading the builtin util module as happens otherwise\n// this is a bug in node module loading as far as I am concerned\nvar util = require('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n }\n else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = stackStartFunction.name;\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n if (util.isUndefined(value)) {\n return '' + value;\n }\n if (util.isNumber(value) && !isFinite(value)) {\n return value.toString();\n }\n if (util.isFunction(value) || util.isRegExp(value)) {\n return value.toString();\n }\n return value;\n}\n\nfunction truncate(s, n) {\n if (util.isString(s)) {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\n\nfunction getMessage(self) {\n return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n self.operator + ' ' +\n truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nfunction _deepEqual(actual, expected) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n if (actual.length != expected.length) return false;\n\n for (var i = 0; i < actual.length; i++) {\n if (actual[i] !== expected[i]) return false;\n }\n\n return true;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!util.isObject(actual) && !util.isObject(expected)) {\n return actual == expected;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b)) {\n return a === b;\n }\n var aIsArgs = isArguments(a),\n bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b);\n }\n var ka = objectKeys(a),\n kb = objectKeys(b),\n key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n } else if (actual instanceof expected) {\n return true;\n } else if (expected.call({}, actual) === true) {\n return true;\n }\n\n return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (util.isString(expected)) {\n message = expected;\n expected = null;\n }\n\n try {\n block();\n } catch (e) {\n actual = e;\n }\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n if (!shouldThrow && expectedException(actual, expected)) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/message) {\n _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n\n},{\"util/\":11}],9:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n},{}],10:[function(require,module,exports){\nmodule.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}\n},{}],11:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./support/isBuffer\":10,\"_process\":14,\"inherits\":9}],12:[function(require,module,exports){\n\n},{}],13:[function(require,module,exports){\n(function (process){\n// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n\n}).call(this,require('_process'))\n},{\"_process\":14}],14:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],15:[function(require,module,exports){\nvar unparse = require('escodegen').generate;\n\nmodule.exports = function (ast, vars) {\n if (!vars) vars = {};\n var FAIL = {};\n \n var result = (function walk (node, scopeVars) {\n if (node.type === 'Literal') {\n return node.value;\n }\n else if (node.type === 'UnaryExpression'){\n var val = walk(node.argument)\n if (node.operator === '+') return +val\n if (node.operator === '-') return -val\n if (node.operator === '~') return ~val\n if (node.operator === '!') return !val\n return FAIL\n }\n else if (node.type === 'ArrayExpression') {\n var xs = [];\n for (var i = 0, l = node.elements.length; i < l; i++) {\n var x = walk(node.elements[i]);\n if (x === FAIL) return FAIL;\n xs.push(x);\n }\n return xs;\n }\n else if (node.type === 'ObjectExpression') {\n var obj = {};\n for (var i = 0; i < node.properties.length; i++) {\n var prop = node.properties[i];\n var value = prop.value === null\n ? prop.value\n : walk(prop.value)\n ;\n if (value === FAIL) return FAIL;\n obj[prop.key.value || prop.key.name] = value;\n }\n return obj;\n }\n else if (node.type === 'BinaryExpression' ||\n node.type === 'LogicalExpression') {\n var l = walk(node.left);\n if (l === FAIL) return FAIL;\n var r = walk(node.right);\n if (r === FAIL) return FAIL;\n \n var op = node.operator;\n if (op === '==') return l == r;\n if (op === '===') return l === r;\n if (op === '!=') return l != r;\n if (op === '!==') return l !== r;\n if (op === '+') return l + r;\n if (op === '-') return l - r;\n if (op === '*') return l * r;\n if (op === '/') return l / r;\n if (op === '%') return l % r;\n if (op === '<') return l < r;\n if (op === '<=') return l <= r;\n if (op === '>') return l > r;\n if (op === '>=') return l >= r;\n if (op === '|') return l | r;\n if (op === '&') return l & r;\n if (op === '^') return l ^ r;\n if (op === '&&') return l && r;\n if (op === '||') return l || r;\n \n return FAIL;\n }\n else if (node.type === 'Identifier') {\n if ({}.hasOwnProperty.call(vars, node.name)) {\n return vars[node.name];\n }\n else return FAIL;\n }\n else if (node.type === 'ThisExpression') {\n if ({}.hasOwnProperty.call(vars, 'this')) {\n return vars['this'];\n }\n else return FAIL;\n }\n else if (node.type === 'CallExpression') {\n var callee = walk(node.callee);\n if (callee === FAIL) return FAIL;\n if (typeof callee !== 'function') return FAIL;\n \n var ctx = node.callee.object ? walk(node.callee.object) : FAIL;\n if (ctx === FAIL) ctx = null;\n\n var args = [];\n for (var i = 0, l = node.arguments.length; i < l; i++) {\n var x = walk(node.arguments[i]);\n if (x === FAIL) return FAIL;\n args.push(x);\n }\n return callee.apply(ctx, args);\n }\n else if (node.type === 'MemberExpression') {\n var obj = walk(node.object);\n // do not allow access to methods on Function \n if((obj === FAIL) || (typeof obj == 'function')){\n return FAIL;\n }\n if (node.property.type === 'Identifier') {\n return obj[node.property.name];\n }\n var prop = walk(node.property);\n if (prop === FAIL) return FAIL;\n return obj[prop];\n }\n else if (node.type === 'ConditionalExpression') {\n var val = walk(node.test)\n if (val === FAIL) return FAIL;\n return val ? walk(node.consequent) : walk(node.alternate)\n }\n else if (node.type === 'ExpressionStatement') {\n var val = walk(node.expression)\n if (val === FAIL) return FAIL;\n return val;\n }\n else if (node.type === 'ReturnStatement') {\n return walk(node.argument)\n }\n else if (node.type === 'FunctionExpression') {\n \n var bodies = node.body.body;\n \n // Create a \"scope\" for our arguments\n var oldVars = {};\n Object.keys(vars).forEach(function(element){\n oldVars[element] = vars[element];\n })\n\n for(var i=0; i= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export * from \"./chains\";\nexport * from \"./classNames\";\nexport * from \"./events\";\nexport * from \"./keys\";\n","export * from \"./local\";\nexport * from \"./types\";\nexport * from \"./utils\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import { ThemesList } from \"../helpers\";\nimport lightTheme from \"./light\";\nimport darkTheme from \"./dark\";\n\nexport const themesList: ThemesList = {\n default: lightTheme,\n [lightTheme.name]: lightTheme,\n [darkTheme.name]: darkTheme\n};\n","import * as connectors from \"./connectors\";\nimport * as injected from \"./injected\";\nimport * as providers from \"./providers\";\n\nexport { connectors, injected, providers };\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import { IProviderInfo } from \"../../helpers\";\n\n// @ts-ignore\nimport Web3DefaultLogo from \"../logos/web3-default.svg\";\n// @ts-ignore\nimport MetaMaskLogo from \"../logos/metamask.svg\";\n// @ts-ignore\nimport SafeLogo from \"../logos/safe.svg\";\n// @ts-ignore\nimport NiftyWalletLogo from \"../logos/niftyWallet.png\";\n// @ts-ignore\nimport TrustLogo from \"../logos/trust.svg\";\n// @ts-ignore\nimport DapperLogo from \"../logos/dapper.png\";\n// @ts-ignore\nimport CoinbaseLogo from \"../logos/coinbase.svg\";\n// @ts-ignore\nimport CipherLogo from \"../logos/cipher.svg\";\n// @ts-ignore\nimport imTokenLogo from \"../logos/imtoken.svg\";\n// @ts-ignore\nimport StatusLogo from \"../logos/status.svg\";\n// @ts-ignore\nimport TokenaryLogo from \"../logos/tokenary.png\";\n// @ts-ignore\nimport OperaLogo from \"../logos/opera.svg\";\n// @ts-ignore\nimport FrameLogo from \"../logos/frame.svg\";\n// @ts-ignore\nimport LiqualityLogo from \"../logos/liquality.png\";\n\nexport const FALLBACK: IProviderInfo = {\n id: \"injected\",\n name: \"Web3\",\n logo: Web3DefaultLogo,\n type: \"injected\",\n check: \"isWeb3\"\n};\n\nexport const METAMASK: IProviderInfo = {\n id: \"injected\",\n name: \"MetaMask\",\n logo: MetaMaskLogo,\n type: \"injected\",\n check: \"isMetaMask\"\n};\n\nexport const SAFE: IProviderInfo = {\n id: \"injected\",\n name: \"Safe\",\n logo: SafeLogo,\n type: \"injected\",\n check: \"isSafe\"\n};\n\nexport const NIFTY: IProviderInfo = {\n id: \"injected\",\n name: \"Nifty\",\n logo: NiftyWalletLogo,\n type: \"injected\",\n check: \"isNiftyWallet\"\n};\n\nexport const DAPPER: IProviderInfo = {\n id: \"injected\",\n name: \"Dapper\",\n logo: DapperLogo,\n type: \"injected\",\n check: \"isDapper\"\n};\n\nexport const OPERA: IProviderInfo = {\n id: \"injected\",\n name: \"Opera\",\n logo: OperaLogo,\n type: \"injected\",\n check: \"isOpera\"\n};\n\nexport const TRUST: IProviderInfo = {\n id: \"injected\",\n name: \"Trust\",\n logo: TrustLogo,\n type: \"injected\",\n check: \"isTrust\"\n};\n\nexport const COINBASE: IProviderInfo = {\n id: \"injected\",\n name: \"Coinbase\",\n logo: CoinbaseLogo,\n type: \"injected\",\n check: \"isToshi\"\n};\n\nexport const CIPHER: IProviderInfo = {\n id: \"injected\",\n name: \"Cipher\",\n logo: CipherLogo,\n type: \"injected\",\n check: \"isCipher\"\n};\n\nexport const IMTOKEN: IProviderInfo = {\n id: \"injected\",\n name: \"imToken\",\n logo: imTokenLogo,\n type: \"injected\",\n check: \"isImToken\"\n};\n\nexport const STATUS: IProviderInfo = {\n id: \"injected\",\n name: \"Status\",\n logo: StatusLogo,\n type: \"injected\",\n check: \"isStatus\"\n};\n\nexport const TOKENARY: IProviderInfo = {\n id: \"injected\",\n name: \"Tokenary\",\n logo: TokenaryLogo,\n type: \"injected\",\n check: \"isTokenary\"\n};\n\nexport const FRAMEINJECTED: IProviderInfo = {\n id: \"injected\",\n name: \"Frame\",\n logo: FrameLogo,\n type: \"injected\",\n check: \"isFrame\"\n};\n\nexport const LIQUALITY: IProviderInfo = {\n id: \"injected\",\n name: \"Liquality\",\n logo: LiqualityLogo,\n type: \"injected\",\n check: \"isLiquality\"\n};\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDE1My40IDE1Mi45Ij48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InBoYXNlIiBncmFkaWVudFRyYW5zZm9ybT0icm90YXRlKDQ1KSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3R5bGU9InN0b3AtY29sb3I6ICMyYjI1NGYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0eWxlPSJzdG9wLWNvbG9yOiAjMTkyZjQ1Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZmlsbD0idXJsKCcjcGhhc2UnKSIgZD0iTTE0NS4xLDc1LjZ2LTU4YzAtNS4xLTQuMi05LjMtOS4zLTkuM2gwSDc3LjdjLTAuNiwwLTEuMS0wLjItMS42LTAuNmwtNy03Yy0wLjQtMC40LTEtMC43LTEuNi0wLjdIOS4zIEM0LjIsMCwwLDQuMSwwLDkuM2MwLDAsMCwwLDAsMGwwLDB2NThjMCwwLjYsMC4yLDEuMSwwLjYsMS42bDcsN2MwLjQsMC40LDAuNywxLDAuNywxLjZ2NThjMCw1LjEsNC4yLDkuMyw5LjMsOS4zYzAsMCwwLDAsMCwwaDU4LjIgYzAuNiwwLDEuMSwwLjIsMS42LDAuNmw3LDdjMC40LDAuNCwxLDAuNiwxLjYsMC42aDU4LjJjNS4xLDAsOS4zLTQuMSw5LjMtOS4zYzAsMCwwLDAsMCwwbDAsMHYtNThjMC0wLjYtMC4yLTEuMS0wLjYtMS42bC03LTcgQzE0NS40LDc2LjcsMTQ1LjEsNzYuMiwxNDUuMSw3NS42eiBNMTA1LjYsMTA2LjZINDcuOWMtMC43LDAtMS4zLTAuNi0xLjMtMS4zVjQ3LjdjMC0wLjcsMC42LTEuMywxLjMtMS4zaDU3LjcgYzAuNywwLDEuMywwLjYsMS4zLDEuM3Y1Ny42QzEwNywxMDYsMTA2LjQsMTA2LjYsMTA1LjYsMTA2LjZ6Ii8+PC9zdmc+Cg==\"","export * from \"./Modal\";\nexport * from \"./Provider\";\n","import{typeOf as e,isElement as t,isValidElementType as n}from\"react-is\";import r,{useState as o,useContext as i,useMemo as s,useEffect as a,useRef as c,createElement as u,useDebugValue as l,useLayoutEffect as d}from\"react\";import h from\"shallowequal\";import p from\"@emotion/stylis\";import f from\"@emotion/unitless\";import m from\"@emotion/is-prop-valid\";import y from\"hoist-non-react-statics\";function v(){return(v=Object.assign||function(e){for(var t=1;t ({})}\\n```\\n\\n',8:'ThemeProvider: Please make your \"theme\" prop an object.\\n\\n',9:\"Missing document ``\\n\\n\",10:\"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",11:\"_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\",12:\"It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\",13:\"%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\\n\",14:'ThemeProvider: \"theme\" prop is required.\\n\\n',15:\"A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to ``, please make sure each plugin is uniquely-named, e.g.\\n\\n```js\\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\\n```\\n\\n\",16:\"Reached the limit of how many styled components may be created at group %s.\\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\\nas for instance in your render method then you may be running into this limitation.\\n\\n\",17:\"CSSStyleSheet could not be found on HTMLStyleElement.\\nHas styled-components' style tag been unmounted or altered by another script?\\n\"}:{};function T(){for(var e=arguments.length<=0?void 0:arguments[0],t=[],n=1,r=arguments.length;n1?t-1:0),r=1;r0?\" Args: \"+n.join(\", \"):\"\")):new Error(T.apply(void 0,[j[e]].concat(n)).trim())}var k=function(e){var t=document.head,n=e||t,r=document.createElement(\"style\"),o=function(e){for(var t=e.childNodes,n=t.length;n>=0;n--){var r=t[n];if(r&&1===r.nodeType&&r.hasAttribute(I))return r}}(n),i=void 0!==o?o.nextSibling:null;r.setAttribute(I,\"active\"),r.setAttribute(\"data-styled-version\",\"5.2.0\");var s=R();return s&&r.setAttribute(\"nonce\",s),n.insertBefore(r,i),r},x=function(){function e(e){var t=this.element=k(e);t.appendChild(document.createTextNode(\"\")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,n=0,r=t.length;n=0){var n=document.createTextNode(t),r=this.nodes[e];return this.element.insertBefore(n,r||null),this.length++,!0}return!1},t.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},t.getRule=function(e){return e=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,o=r;e>=o;)(o<<=1)<0&&D(16,\"\"+e);this.groupSizes=new Uint32Array(o),this.groupSizes.set(n),this.length=o;for(var i=r;i=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),o=r+n,i=r;i1<<30)&&D(16,\"\"+t),G.set(e,t),F.set(t,e),t},q=function(e){return F.get(e)},H=function(e,t){t>=B&&(B=t+1),G.set(e,t),F.set(t,e)},$=\"style[\"+I+'][data-styled-version=\"5.2.0\"]',Y=new RegExp(\"^\"+I+'\\\\.g(\\\\d+)\\\\[id=\"([\\\\w\\\\d-]+)\"\\\\].*?\"([^\"]*)'),W=function(e,t,n){for(var r,o=n.split(\",\"),i=0,s=o.length;i0&&(u+=e+\",\")})),r+=\"\"+a+c+'{content:\"'+u+'\"}/*!sc*/\\n'}}}return r}(this)},e}(),K=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},Q=function(e){return K(5381,e)},ee=/^\\s*\\/\\/.*$/gm,te=[\":\",\"[\",\".\",\"#\"];function ne(e){var t,n,r,o,i=void 0===e?b:e,s=i.options,a=void 0===s?b:s,c=i.plugins,u=void 0===c?w:c,l=new p(a),d=[],h=function(e){function t(t){if(t)try{e(t+\"}\")}catch(e){}}return function(n,r,o,i,s,a,c,u,l,d){switch(n){case 1:if(0===l&&64===r.charCodeAt(0))return e(r+\";\"),\"\";break;case 2:if(0===u)return r+\"/*|*/\";break;case 3:switch(u){case 102:case 112:return e(o[0]+r),\"\";default:return r+(0===d?\"/*|*/\":\"\")}case-2:r.split(\"/*|*/}\").forEach(t)}}}((function(e){d.push(e)})),f=function(e,r,i){return 0===r&&te.includes(i[n.length])||i.match(o)?e:\".\"+t};function m(e,i,s,a){void 0===a&&(a=\"&\");var c=e.replace(ee,\"\"),u=i&&s?s+\" \"+i+\" { \"+c+\" }\":c;return t=a,n=i,r=new RegExp(\"\\\\\"+n+\"\\\\b\",\"g\"),o=new RegExp(\"(\\\\\"+n+\"\\\\b){2,}\"),l(s||!i?\"\":i,u)}return l.use([].concat(u,[function(e,t,o){2===e&&o.length&&o[0].lastIndexOf(n)>0&&(o[0]=o[0].replace(r,f))},h,function(e){if(-2===e){var t=d;return d=[],t}}])),m.hash=u.length?u.reduce((function(e,t){return t.name||D(15),K(e,t.name)}),5381).toString():\"\",m}var re=r.createContext(),oe=re.Consumer,ie=r.createContext(),se=(ie.Consumer,new Z),ae=ne();function ce(){return i(re)||se}function ue(){return i(ie)||ae}function le(e){var t=o(e.stylisPlugins),n=t[0],i=t[1],c=ce(),u=s((function(){var t=c;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t}),[e.disableCSSOMInjection,e.sheet,e.target]),l=s((function(){return ne({options:{prefix:!e.disableVendorPrefixes},plugins:n})}),[e.disableVendorPrefixes,n]);return a((function(){h(n,e.stylisPlugins)||i(e.stylisPlugins)}),[e.stylisPlugins]),r.createElement(re.Provider,{value:u},r.createElement(ie.Provider,{value:l},\"production\"!==process.env.NODE_ENV?r.Children.only(e.children):e.children))}var de=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=ae);var r=n.name+t.hash;e.hasNameForId(n.id,r)||e.insertRules(n.id,r,t(n.rules,r,\"@keyframes\"))},this.toString=function(){return D(12,String(n.name))},this.name=e,this.id=\"sc-keyframes-\"+e,this.rules=t}return e.prototype.getName=function(e){return void 0===e&&(e=ae),this.name+e.hash},e}(),he=/([A-Z])/,pe=new RegExp(he,\"g\"),fe=/^ms-/,me=function(e){return\"-\"+e.toLowerCase()};function ye(e){return he.test(e)?e.replace(pe,me).replace(fe,\"-ms-\"):e}var ve=function(e){return null==e||!1===e||\"\"===e};function ge(e,n,r,o){if(Array.isArray(e)){for(var i,s=[],a=0,c=e.length;a1?t-1:0),r=1;r1?t-1:0),r=1;r25?39:97))};function Ce(e){var t,n=\"\";for(t=Math.abs(e);t>52;t=t/52|0)n=Ie(t%52)+n;return(Ie(t%52)+n).replace(_e,\"$1-$2\")}function Ae(e){for(var t=0;t>>0);if(!t.hasNameForId(r,s)){var a=n(i,\".\"+s,void 0,r);t.insertRules(r,s,a)}o.push(s),this.staticRulesId=s}else{for(var c=this.rules.length,u=K(this.baseHash,n.hash),l=\"\",d=0;d>>0);if(!t.hasNameForId(r,m)){var y=n(l,\".\"+m,void 0,r);t.insertRules(r,m,y)}o.push(m)}}return o.join(\" \")},e}(),Re=/invalid hook call/i,je=new Set,Te=function(e,t){if(\"production\"!==process.env.NODE_ENV){var n=\"The component \"+e+(t?' with the id of \"'+t+'\"':\"\")+\" has been created dynamically.\\nYou may see this warning because you've called styled inside another component.\\nTo resolve this only create new StyledComponents outside of any render method and function component.\";try{c(),je.has(n)||(console.warn(n),je.add(n))}catch(e){Re.test(e.message)&&je.delete(n)}}},De=function(e,t,n){return void 0===n&&(n=b),e.theme!==n.theme&&e.theme||t||n.theme},ke=/[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~-]+/g,xe=/(^-|-$)/g;function Ve(e){return e.replace(ke,\"-\").replace(xe,\"\")}function Me(e){return\"string\"==typeof e&&(\"production\"===process.env.NODE_ENV||e.charAt(0)===e.charAt(0).toLowerCase())}var ze=function(e){return Ce(Q(e)>>>0)},Ge=r.createContext(),Fe=Ge.Consumer;function Be(e){var t=i(Ge),n=s((function(){return function(e,t){if(!e)return D(14);if(N(e)){var n=e(t);return\"production\"===process.env.NODE_ENV||null!==n&&!Array.isArray(n)&&\"object\"==typeof n?n:D(7)}return Array.isArray(e)||\"object\"!=typeof e?D(8):t?v({},t,{},e):e}(e.theme,t)}),[e.theme,t]);return e.children?r.createElement(Ge.Provider,{value:n},e.children):null}var Le={};function qe(e,t,n){var o=_(e),s=!Me(e),a=t.displayName,c=void 0===a?function(e){return Me(e)?\"styled.\"+e:\"Styled(\"+E(e)+\")\"}(e):a,d=t.componentId,h=void 0===d?function(e,t){var n=\"string\"!=typeof e?\"sc\":Ve(e);Le[n]=(Le[n]||0)+1;var r=n+\"-\"+ze(\"5.2.0\"+n+Le[n]);return t?t+\"-\"+r:r}(t.displayName,t.parentComponentId):d,p=t.attrs,f=void 0===p?w:p,g=t.displayName&&t.componentId?Ve(t.displayName)+\"-\"+t.componentId:t.componentId||h,S=o&&e.attrs?Array.prototype.concat(e.attrs,f).filter(Boolean):f,I=t.shouldForwardProp;o&&e.shouldForwardProp&&(I=I?function(n,r){return e.shouldForwardProp(n,r)&&t.shouldForwardProp(n,r)}:e.shouldForwardProp);var C,A=new Pe(n,g,o?e.componentStyle:void 0),O=function(e,t){return function(e,t,n){var r=e.attrs,o=e.componentStyle,s=e.defaultProps,a=e.foldedComponentIds,c=e.shouldForwardProp,d=e.styledComponentId,h=e.target;\"production\"!==process.env.NODE_ENV&&l(d);var p=function(e,t,n){void 0===e&&(e=b);var r=v({},t,{theme:e}),o={};return n.forEach((function(e){var t,n,i,s=e;for(t in N(s)&&(s=s(r)),s)r[t]=o[t]=\"className\"===t?(n=o[t],i=s[t],n&&i?n+\" \"+i:n||i):s[t]})),[r,o]}(De(t,i(Ge),s)||b,t,r),f=p[0],y=p[1],g=function(e,t,n,r){var o=ce(),i=ue(),s=e.isStatic&&!t,a=s?e.generateAndInjectStyles(b,o,i):e.generateAndInjectStyles(n,o,i);return\"production\"!==process.env.NODE_ENV&&l(a),\"production\"!==process.env.NODE_ENV&&!s&&r&&r(a),a}(o,r.length>0,f,\"production\"!==process.env.NODE_ENV?e.warnTooManyClasses:void 0),S=n,w=y.$as||t.$as||y.as||t.as||h,E=Me(w),_=y!==t?v({},t,{},y):t,I=c||E&&m,C={};for(var A in _)\"$\"!==A[0]&&\"as\"!==A&&(\"forwardedAs\"===A?C.as=_[A]:I&&!I(A,m)||(C[A]=_[A]));return t.style&&y.style!==t.style&&(C.style=v({},t.style,{},y.style)),C.className=Array.prototype.concat(a,d,g!==d?g:null,t.className,y.className).filter(Boolean).join(\" \"),C.ref=S,u(w,C)}(C,e,t)};return O.displayName=c,(C=r.forwardRef(O)).attrs=S,C.componentStyle=A,C.displayName=c,C.shouldForwardProp=I,C.foldedComponentIds=o?Array.prototype.concat(e.foldedComponentIds,e.styledComponentId):w,C.styledComponentId=g,C.target=o?e.target:e,C.withComponent=function(e){var r=t.componentId,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(t,[\"componentId\"]),i=r&&r+\"-\"+(Me(e)?e:Ve(E(e)));return qe(e,v({},o,{attrs:S,componentId:i}),n)},Object.defineProperty(C,\"defaultProps\",{get:function(){return this._foldedDefaultProps},set:function(t){this._foldedDefaultProps=o?Ee({},e.defaultProps,t):t}}),\"production\"!==process.env.NODE_ENV&&(Te(c,g),C.warnTooManyClasses=function(e,t){var n={},r=!1;return function(o){if(!r&&(n[o]=!0,Object.keys(n).length>=200)){var i=t?' with the id of \"'+t+'\"':\"\";console.warn(\"Over 200 classes were generated for component \"+e+i+\".\\nConsider using the attrs method, together with a style object for frequently changed styles.\\nExample:\\n const Component = styled.div.attrs(props => ({\\n style: {\\n background: props.background,\\n },\\n }))`width: 100%;`\\n\\n \"),r=!0,n={}}}}(c,g)),C.toString=function(){return\".\"+C.styledComponentId},s&&y(C,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,self:!0,styledComponentId:!0,target:!0,withComponent:!0}),C}var He=function(e){return function e(t,r,o){if(void 0===o&&(o=b),!n(r))return D(1,String(r));var i=function(){return t(r,o,Se.apply(void 0,arguments))};return i.withConfig=function(n){return e(t,r,v({},o,{},n))},i.attrs=function(n){return e(t,r,v({},o,{attrs:Array.prototype.concat(o.attrs,n).filter(Boolean)}))},i}(qe,e)};[\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"big\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"title\",\"tr\",\"track\",\"u\",\"ul\",\"var\",\"video\",\"wbr\",\"circle\",\"clipPath\",\"defs\",\"ellipse\",\"foreignObject\",\"g\",\"image\",\"line\",\"linearGradient\",\"marker\",\"mask\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialGradient\",\"rect\",\"stop\",\"svg\",\"text\",\"tspan\"].forEach((function(e){He[e]=He(e)}));var $e=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Ae(e),Z.registerId(this.componentId+1)}var t=e.prototype;return t.createStyles=function(e,t,n,r){var o=r(ge(this.rules,t,n,r).join(\"\"),\"\"),i=this.componentId+e;n.insertRules(i,i,o)},t.removeStyles=function(e,t){t.clearRules(this.componentId+e)},t.renderStyles=function(e,t,n,r){e>2&&Z.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)},e}();function Ye(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o meta tag to the stylesheet, or simply embedding it manually in your index.html section for a simpler app.\"),d((function(){return h(l,e,t,o,n),function(){return u.removeStyles(l,t)}}),[l,e,t,o,n]),null}function h(e,t,n,r,o){if(u.isStatic)u.renderStyles(e,P,n,o);else{var i=v({},t,{theme:De(t,r,l.defaultProps)});u.renderStyles(e,i,n,o)}}return\"production\"!==process.env.NODE_ENV&&Te(a),r.memo(l)}function We(e){\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.\");for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r\"+t+\"\"},this.getStyleTags=function(){return e.sealed?D(2):e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)return D(2);var n=((t={})[I]=\"\",t[\"data-styled-version\"]=\"5.2.0\",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),o=R();return o&&(n.nonce=o),[r.createElement(\"style\",v({},n,{key:\"sc-0-0\"}))]},this.seal=function(){e.sealed=!0},this.instance=new Z({isServer:!0}),this.sealed=!1}var t=e.prototype;return t.collectStyles=function(e){return this.sealed?D(2):r.createElement(le,{sheet:this.instance},e)},t.interleaveWithNodeStream=function(e){return D(3)},e}(),Je=function(e){var t=r.forwardRef((function(t,n){var o=i(Ge),s=e.defaultProps,a=De(t,o,s);return\"production\"!==process.env.NODE_ENV&&void 0===a&&console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"'+E(e)+'\"'),r.createElement(e,v({},t,{theme:a,ref:n}))}));return y(t,e),t.displayName=\"WithTheme(\"+E(e)+\")\",t},Xe=function(){return i(Ge)},Ze={StyleSheet:Z,masterSheet:se};\"production\"!==process.env.NODE_ENV&&\"undefined\"!=typeof navigator&&\"ReactNative\"===navigator.product&&console.warn(\"It looks like you've imported 'styled-components' on React Native.\\nPerhaps you're looking to import 'styled-components/native'?\\nRead more about this at https://www.styled-components.com/docs/basics#react-native\"),\"production\"!==process.env.NODE_ENV&&\"test\"!==process.env.NODE_ENV&&(window[\"__styled-components-init__\"]=window[\"__styled-components-init__\"]||0,1===window[\"__styled-components-init__\"]&&console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. This may cause dynamic styles not rendering properly, errors happening during rehydration process, missing theme prop, and makes your application bigger without a good reason.\\n\\nSee https://s-c.sh/2BAXzed for more info.\"),window[\"__styled-components-init__\"]+=1);export default He;export{Ue as ServerStyleSheet,oe as StyleSheetConsumer,re as StyleSheetContext,le as StyleSheetManager,Fe as ThemeConsumer,Ge as ThemeContext,Be as ThemeProvider,Ze as __PRIVATE__,Ye as createGlobalStyle,Se as css,_ as isStyledComponent,We as keyframes,Xe as useTheme,C as version,Je as withTheme};\n//# sourceMappingURL=styled-components.browser.esm.js.map\n","import * as React from \"react\";\nimport styled from \"styled-components\";\n\nimport { ThemeColors } from \"../helpers\";\nimport {\n PROVIDER_WRAPPER_CLASSNAME,\n PROVIDER_CONTAINER_CLASSNAME,\n PROVIDER_ICON_CLASSNAME,\n PROVIDER_NAME_CLASSNAME,\n PROVIDER_DESCRIPTION_CLASSNAME\n} from \"../constants\";\n\nconst SIcon = styled.div`\n width: 45px;\n height: 45px;\n display: flex;\n border-radius: 50%;\n overflow: visible;\n box-shadow: none;\n justify-content: center;\n align-items: center;\n & img {\n width: 100%;\n height: 100%;\n }\n\n @media screen and (max-width: 768px) {\n width: 8.5vw;\n height: 8.5vw;\n }\n`;\n\ninterface IStyedThemeColorOptions {\n themeColors: ThemeColors;\n}\n\nconst SName = styled.div`\n width: 100%;\n font-size: 24px;\n font-weight: 700;\n margin-top: 0.5em;\n color: ${({ themeColors }) => themeColors.main};\n @media screen and (max-width: 768px) {\n font-size: 5vw;\n }\n`;\n\nconst SDescription = styled.div`\n width: 100%;\n font-size: 18px;\n margin: 0.333em 0;\n color: ${({ themeColors }) => themeColors.secondary};\n @media screen and (max-width: 768px) {\n font-size: 4vw;\n }\n`;\n\nconst SProviderContainer = styled.div`\n transition: background-color 0.2s ease-in-out;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: ${({ themeColors }) => themeColors.background};\n border-radius: 12px;\n padding: 24px 16px;\n @media screen and (max-width: 768px) {\n padding: 1vw;\n }\n`;\n\nconst SProviderWrapper = styled.div`\n width: 100%;\n padding: 8px;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n cursor: pointer;\n border-radius: 0;\n border: ${({ themeColors }) => `1px solid ${themeColors.border}`};\n @media (hover: hover) {\n &:hover ${SProviderContainer} {\n background-color: ${({ themeColors }) => themeColors.hover};\n }\n }\n`;\n\ninterface IProviderProps {\n name: string;\n logo: string;\n description: string;\n themeColors: ThemeColors;\n onClick: () => void;\n}\n\nexport function Provider(props: IProviderProps) {\n const {\n name,\n logo,\n description,\n themeColors,\n onClick,\n ...otherProps\n } = props;\n return (\n \n \n \n {name}\n \n \n {name}\n \n \n {description}\n \n \n \n );\n}\n","export * from \"./events\";\nexport * from \"./providers\";\n","import { IEventCallback } from \"../helpers\";\n\n// -- EventController --------------------------------------------------------- //\n\nexport class EventController {\n private _eventCallbacks: IEventCallback[];\n\n constructor() {\n this._eventCallbacks = [];\n }\n\n public on(eventCallback: IEventCallback) {\n this._eventCallbacks.push(eventCallback);\n }\n\n public off(eventObj?: Partial) {\n // remove specific event callback\n if (eventObj) {\n if (eventObj.callback) {\n this._eventCallbacks = this._eventCallbacks.filter(\n (eventCallback: IEventCallback) =>\n eventCallback.event !== eventObj.event ||\n eventCallback.callback !== eventObj.callback\n );\n } // No callback to remove, remove entire event\n else {\n this._eventCallbacks = this._eventCallbacks.filter(\n (eventCallback: IEventCallback) =>\n eventCallback.event !== eventObj.event\n );\n }\n } else {\n this._eventCallbacks = [];\n }\n }\n\n public trigger(event: string, result?: any): void {\n let eventCallbacks: IEventCallback[] = this._eventCallbacks.filter(\n (eventCallback: IEventCallback) => eventCallback.event === event\n );\n\n if (eventCallbacks && eventCallbacks.length) {\n eventCallbacks.forEach((eventCallback: IEventCallback) => {\n eventCallback.callback(result);\n });\n }\n }\n}\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n if (ret !== void 0) {\n return !!ret;\n }\n\n if (objA === objB) {\n return true;\n }\n\n if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n // Test for A's keys different from B.\n for (var idx = 0; idx < keysA.length; idx++) {\n var key = keysA[idx];\n\n if (!bHasOwnProperty(key)) {\n return false;\n }\n\n var valueA = objA[key];\n var valueB = objB[key];\n\n ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n if (ret === false || (ret === void 0 && valueA !== valueB)) {\n return false;\n }\n }\n\n return true;\n};\n","function stylis_min (W) {\n function M(d, c, e, h, a) {\n for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) {\n g = e.charCodeAt(l);\n l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++);\n\n if (0 === b + n + v + m) {\n if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) {\n switch (g) {\n case 32:\n case 9:\n case 59:\n case 13:\n case 10:\n break;\n\n default:\n f += e.charAt(l);\n }\n\n g = 59;\n }\n\n switch (g) {\n case 123:\n f = f.trim();\n q = f.charCodeAt(0);\n k = 1;\n\n for (t = ++l; l < B;) {\n switch (g = e.charCodeAt(l)) {\n case 123:\n k++;\n break;\n\n case 125:\n k--;\n break;\n\n case 47:\n switch (g = e.charCodeAt(l + 1)) {\n case 42:\n case 47:\n a: {\n for (u = l + 1; u < J; ++u) {\n switch (e.charCodeAt(u)) {\n case 47:\n if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) {\n l = u + 1;\n break a;\n }\n\n break;\n\n case 10:\n if (47 === g) {\n l = u + 1;\n break a;\n }\n\n }\n }\n\n l = u;\n }\n\n }\n\n break;\n\n case 91:\n g++;\n\n case 40:\n g++;\n\n case 34:\n case 39:\n for (; l++ < J && e.charCodeAt(l) !== g;) {\n }\n\n }\n\n if (0 === k) break;\n l++;\n }\n\n k = e.substring(t, l);\n 0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0));\n\n switch (q) {\n case 64:\n 0 < r && (f = f.replace(N, ''));\n g = f.charCodeAt(1);\n\n switch (g) {\n case 100:\n case 109:\n case 115:\n case 45:\n r = c;\n break;\n\n default:\n r = O;\n }\n\n k = M(c, r, k, g, a + 1);\n t = k.length;\n 0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = ''));\n if (0 < t) switch (g) {\n case 115:\n f = f.replace(da, ea);\n\n case 100:\n case 109:\n case 45:\n k = f + '{' + k + '}';\n break;\n\n case 107:\n f = f.replace(fa, '$1 $2');\n k = f + '{' + k + '}';\n k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k;\n break;\n\n default:\n k = f + k, 112 === h && (k = (p += k, ''));\n } else k = '';\n break;\n\n default:\n k = M(c, X(c, f, I), k, h, a + 1);\n }\n\n F += k;\n k = I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n break;\n\n case 125:\n case 59:\n f = (0 < r ? f.replace(N, '') : f).trim();\n if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\\x00\\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) {\n case 0:\n break;\n\n case 64:\n if (105 === g || 99 === g) {\n G += f + e.charAt(l);\n break;\n }\n\n default:\n 58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2)));\n }\n I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n }\n }\n\n switch (g) {\n case 13:\n case 10:\n 47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\\x00');\n 0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h);\n z = 1;\n D++;\n break;\n\n case 59:\n case 125:\n if (0 === b + n + v + m) {\n z++;\n break;\n }\n\n default:\n z++;\n y = e.charAt(l);\n\n switch (g) {\n case 9:\n case 32:\n if (0 === n + m + b) switch (x) {\n case 44:\n case 58:\n case 9:\n case 32:\n y = '';\n break;\n\n default:\n 32 !== g && (y = ' ');\n }\n break;\n\n case 0:\n y = '\\\\0';\n break;\n\n case 12:\n y = '\\\\f';\n break;\n\n case 11:\n y = '\\\\v';\n break;\n\n case 38:\n 0 === n + b + m && (r = I = 1, y = '\\f' + y);\n break;\n\n case 108:\n if (0 === n + b + m + E && 0 < u) switch (l - u) {\n case 2:\n 112 === x && 58 === e.charCodeAt(l - 3) && (E = x);\n\n case 8:\n 111 === K && (E = K);\n }\n break;\n\n case 58:\n 0 === n + b + m && (u = l);\n break;\n\n case 44:\n 0 === b + v + n + m && (r = 1, y += '\\r');\n break;\n\n case 34:\n case 39:\n 0 === b && (n = n === g ? 0 : 0 === n ? g : n);\n break;\n\n case 91:\n 0 === n + b + v && m++;\n break;\n\n case 93:\n 0 === n + b + v && m--;\n break;\n\n case 41:\n 0 === n + b + m && v--;\n break;\n\n case 40:\n if (0 === n + b + m) {\n if (0 === q) switch (2 * x + 3 * K) {\n case 533:\n break;\n\n default:\n q = 1;\n }\n v++;\n }\n\n break;\n\n case 64:\n 0 === b + v + n + m + u + k && (k = 1);\n break;\n\n case 42:\n case 47:\n if (!(0 < n + m + v)) switch (b) {\n case 0:\n switch (2 * g + 3 * e.charCodeAt(l + 1)) {\n case 235:\n b = 47;\n break;\n\n case 220:\n t = l, b = 42;\n }\n\n break;\n\n case 42:\n 47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0);\n }\n }\n\n 0 === b && (f += y);\n }\n\n K = x;\n x = g;\n l++;\n }\n\n t = p.length;\n\n if (0 < t) {\n r = c;\n if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F;\n p = r.join(',') + '{' + p + '}';\n\n if (0 !== w * E) {\n 2 !== w || L(p, 2) || (E = 0);\n\n switch (E) {\n case 111:\n p = p.replace(ha, ':-moz-$1') + p;\n break;\n\n case 112:\n p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p;\n }\n\n E = 0;\n }\n }\n\n return G + p + F;\n }\n\n function X(d, c, e) {\n var h = c.trim().split(ia);\n c = h;\n var a = h.length,\n m = d.length;\n\n switch (m) {\n case 0:\n case 1:\n var b = 0;\n\n for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) {\n c[b] = Z(d, c[b], e).trim();\n }\n\n break;\n\n default:\n var v = b = 0;\n\n for (c = []; b < a; ++b) {\n for (var n = 0; n < m; ++n) {\n c[v++] = Z(d[n] + ' ', h[b], e).trim();\n }\n }\n\n }\n\n return c;\n }\n\n function Z(d, c, e) {\n var h = c.charCodeAt(0);\n 33 > h && (h = (c = c.trim()).charCodeAt(0));\n\n switch (h) {\n case 38:\n return c.replace(F, '$1' + d.trim());\n\n case 58:\n return d.trim() + c.replace(F, '$1' + d.trim());\n\n default:\n if (0 < 1 * e && 0 < c.indexOf('\\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim());\n }\n\n return d + c;\n }\n\n function P(d, c, e, h) {\n var a = d + ';',\n m = 2 * c + 3 * e + 4 * h;\n\n if (944 === m) {\n d = a.indexOf(':', 9) + 1;\n var b = a.substring(d, a.length - 1).trim();\n b = a.substring(0, d).trim() + b + ';';\n return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b;\n }\n\n if (0 === w || 2 === w && !L(a, 1)) return a;\n\n switch (m) {\n case 1015:\n return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a;\n\n case 951:\n return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a;\n\n case 963:\n return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a;\n\n case 1009:\n if (100 !== a.charCodeAt(4)) break;\n\n case 969:\n case 942:\n return '-webkit-' + a + a;\n\n case 978:\n return '-webkit-' + a + '-moz-' + a + a;\n\n case 1019:\n case 983:\n return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a;\n\n case 883:\n if (45 === a.charCodeAt(8)) return '-webkit-' + a + a;\n if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a;\n break;\n\n case 932:\n if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) {\n case 103:\n return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a;\n\n case 115:\n return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a;\n\n case 98:\n return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a;\n }\n return '-webkit-' + a + '-ms-' + a + a;\n\n case 964:\n return '-webkit-' + a + '-ms-flex-' + a + a;\n\n case 1023:\n if (99 !== a.charCodeAt(8)) break;\n b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify');\n return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a;\n\n case 1005:\n return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a;\n\n case 1e3:\n b = a.substring(13).trim();\n c = b.indexOf('-') + 1;\n\n switch (b.charCodeAt(0) + b.charCodeAt(c)) {\n case 226:\n b = a.replace(G, 'tb');\n break;\n\n case 232:\n b = a.replace(G, 'tb-rl');\n break;\n\n case 220:\n b = a.replace(G, 'lr');\n break;\n\n default:\n return a;\n }\n\n return '-webkit-' + a + '-ms-' + b + a;\n\n case 1017:\n if (-1 === a.indexOf('sticky', 9)) break;\n\n case 975:\n c = (a = d).length - 10;\n b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim();\n\n switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) {\n case 203:\n if (111 > b.charCodeAt(8)) break;\n\n case 115:\n a = a.replace(b, '-webkit-' + b) + ';' + a;\n break;\n\n case 207:\n case 102:\n a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a;\n }\n\n return a + ';';\n\n case 938:\n if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) {\n case 105:\n return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a;\n\n case 115:\n return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a;\n\n default:\n return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a;\n }\n break;\n\n case 973:\n case 989:\n if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break;\n\n case 931:\n case 953:\n if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a;\n break;\n\n case 962:\n if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a;\n }\n\n return a;\n }\n\n function L(d, c) {\n var e = d.indexOf(1 === c ? ':' : '{'),\n h = d.substring(0, 3 !== c ? e : 10);\n e = d.substring(e + 1, d.length - 1);\n return R(2 !== c ? h : h.replace(na, '$1'), e, c);\n }\n\n function ea(d, c) {\n var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2));\n return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')';\n }\n\n function H(d, c, e, h, a, m, b, v, n, q) {\n for (var g = 0, x = c, w; g < A; ++g) {\n switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) {\n case void 0:\n case !1:\n case !0:\n case null:\n break;\n\n default:\n x = w;\n }\n }\n\n if (x !== c) return x;\n }\n\n function T(d) {\n switch (d) {\n case void 0:\n case null:\n A = S.length = 0;\n break;\n\n default:\n if ('function' === typeof d) S[A++] = d;else if ('object' === typeof d) for (var c = 0, e = d.length; c < e; ++c) {\n T(d[c]);\n } else Y = !!d | 0;\n }\n\n return T;\n }\n\n function U(d) {\n d = d.prefix;\n void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0);\n return U;\n }\n\n function B(d, c) {\n var e = d;\n 33 > e.charCodeAt(0) && (e = e.trim());\n V = e;\n e = [V];\n\n if (0 < A) {\n var h = H(-1, c, e, e, D, z, 0, 0, 0, 0);\n void 0 !== h && 'string' === typeof h && (c = h);\n }\n\n var a = M(O, e, c, 0, 0);\n 0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h));\n V = '';\n E = 0;\n z = D = 1;\n return a;\n }\n\n var ca = /^\\0+/g,\n N = /[\\0\\r\\f]/g,\n aa = /: */g,\n ka = /zoo|gra/,\n ma = /([,: ])(transform)/g,\n ia = /,\\r+?/g,\n F = /([\\t\\r\\n ])*\\f?&/g,\n fa = /@(k\\w+)\\s*(\\S*)\\s*/,\n Q = /::(place)/g,\n ha = /:(read-only)/g,\n G = /[svh]\\w+-[tblr]{2}/,\n da = /\\(\\s*(.*)\\s*\\)/g,\n oa = /([\\s\\S]*?);/g,\n ba = /-self|flex-/g,\n na = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n la = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n ja = /([^-])(image-set\\()/,\n z = 1,\n D = 1,\n E = 0,\n w = 1,\n O = [],\n S = [],\n A = 0,\n R = null,\n Y = 0,\n V = '';\n B.use = T;\n B.set = U;\n void 0 !== W && U(W);\n return B;\n}\n\nexport default stylis_min;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","import { Core } from \"./core\";\n\nexport * from \"./components\";\nexport * from \"./constants\";\nexport * from \"./controllers\";\nexport * from \"./providers\";\nexport * from \"./helpers\";\nexport * from \"./themes\";\n\nexport default Core;\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\nimport {\n ICoreOptions,\n IProviderUserOptions,\n ThemeColors,\n getThemeColors,\n SimpleFunction\n} from \"../helpers\";\nimport {\n WEB3_CONNECT_MODAL_ID,\n CONNECT_EVENT,\n ERROR_EVENT,\n CLOSE_EVENT\n} from \"../constants\";\nimport { themesList } from \"../themes\";\nimport { Modal } from \"../components\";\nimport { EventController, ProviderController } from \"../controllers\";\n\nconst INITIAL_STATE = { show: false };\n\nconst defaultOpts: ICoreOptions = {\n lightboxOpacity: 0.4,\n theme: themesList.default.name,\n cacheProvider: false,\n disableInjectedProvider: false,\n providerOptions: {},\n network: \"\"\n};\n\nexport class Core {\n private show: boolean = INITIAL_STATE.show;\n private themeColors: ThemeColors;\n private eventController: EventController = new EventController();\n private lightboxOpacity: number;\n private providerController: ProviderController;\n private userOptions: IProviderUserOptions[];\n\n constructor(opts?: Partial) {\n const options: ICoreOptions = {\n ...defaultOpts,\n ...opts\n };\n\n this.lightboxOpacity = options.lightboxOpacity;\n this.themeColors = getThemeColors(options.theme);\n\n this.providerController = new ProviderController({\n disableInjectedProvider: options.disableInjectedProvider,\n cacheProvider: options.cacheProvider,\n providerOptions: options.providerOptions,\n network: options.network\n });\n\n this.providerController.on(CONNECT_EVENT, provider =>\n this.onConnect(provider)\n );\n this.providerController.on(ERROR_EVENT, error => this.onError(error));\n\n this.userOptions = this.providerController.getUserOptions();\n this.renderModal();\n }\n\n get cachedProvider(): string {\n return this.providerController.cachedProvider;\n }\n\n // --------------- PUBLIC METHODS --------------- //\n\n public connect = (): Promise =>\n new Promise(async (resolve, reject) => {\n this.on(CONNECT_EVENT, provider => resolve(provider));\n this.on(ERROR_EVENT, error => reject(error));\n this.on(CLOSE_EVENT, () => reject(\"Modal closed by user\"));\n await this.toggleModal();\n });\n\n public connectTo = (id: string): Promise =>\n new Promise(async (resolve, reject) => {\n this.on(CONNECT_EVENT, provider => resolve(provider));\n this.on(ERROR_EVENT, error => reject(error));\n this.on(CLOSE_EVENT, () => reject(\"Modal closed by user\"));\n const provider = this.providerController.getProvider(id);\n if (!provider) {\n return reject(\n new Error(\n `Cannot connect to provider (${id}), check provider options`\n )\n );\n }\n await this.providerController.connectTo(provider.id, provider.connector);\n });\n\n public async toggleModal(): Promise {\n if (this.cachedProvider) {\n await this.providerController.connectToCachedProvider();\n return;\n }\n if (\n this.userOptions &&\n this.userOptions.length === 1 &&\n this.userOptions[0].name\n ) {\n await this.userOptions[0].onClick();\n return;\n }\n await this._toggleModal();\n }\n\n public on(event: string, callback: SimpleFunction): SimpleFunction {\n this.eventController.on({\n event,\n callback\n });\n\n return () =>\n this.eventController.off({\n event,\n callback\n });\n }\n\n public off(event: string, callback?: SimpleFunction): void {\n this.eventController.off({\n event,\n callback\n });\n }\n\n public clearCachedProvider(): void {\n this.providerController.clearCachedProvider();\n }\n\n public setCachedProvider(id: string): void {\n this.providerController.setCachedProvider(id);\n }\n\n public async updateTheme(theme: string | ThemeColors): Promise {\n this.themeColors = getThemeColors(theme);\n await this.updateState({ themeColors: this.themeColors });\n }\n\n // --------------- PRIVATE METHODS --------------- //\n\n private renderModal() {\n const el = document.createElement(\"div\");\n el.id = WEB3_CONNECT_MODAL_ID;\n document.body.appendChild(el);\n\n ReactDOM.render(\n ,\n document.getElementById(WEB3_CONNECT_MODAL_ID)\n );\n }\n\n private _toggleModal = async () => {\n const d = typeof window !== \"undefined\" ? document : \"\";\n const body = d ? d.body || d.getElementsByTagName(\"body\")[0] : \"\";\n if (body) {\n if (this.show) {\n body.style.overflow = \"\";\n } else {\n body.style.overflow = \"hidden\";\n }\n }\n await this.updateState({ show: !this.show });\n };\n\n private onError = async (error: any) => {\n if (this.show) {\n await this._toggleModal();\n }\n this.eventController.trigger(ERROR_EVENT, error);\n };\n\n private onConnect = async (provider: any) => {\n if (this.show) {\n await this._toggleModal();\n }\n this.eventController.trigger(CONNECT_EVENT, provider);\n };\n\n private onClose = async () => {\n if (this.show) {\n await this._toggleModal();\n }\n this.eventController.trigger(CLOSE_EVENT);\n };\n\n private updateState = async (state: any) => {\n Object.keys(state).forEach(key => {\n this[key] = state[key];\n });\n await window.updateWeb3Modal(state);\n };\n\n private resetState = () => this.updateState({ ...INITIAL_STATE });\n}\n","/** @license React v16.13.1\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;kb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime {\n const jsonData = JSON.stringify(data);\n if (local) {\n local.setItem(key, jsonData);\n }\n};\n\nexport const getLocal = (key: string) => {\n let data = null;\n let raw = null;\n if (local) {\n raw = local.getItem(key);\n }\n if (raw && typeof raw === \"string\") {\n try {\n data = JSON.parse(raw);\n } catch (error) {\n return null;\n }\n }\n return data;\n};\n\nexport const removeLocal = (key: string) => {\n if (local) {\n local.removeItem(key);\n }\n};\n\nexport const updateLocal = (key: string, data: any) => {\n const localData = getLocal(key) || {};\n const mergedData = { ...localData, ...data };\n setLocal(key, mergedData);\n};\n","import * as env from \"detect-browser\";\n\nimport { CHAIN_DATA_LIST } from \"../constants\";\nimport { themesList } from \"../themes\";\nimport { providers, injected } from \"../providers\";\nimport {\n IProviderInfo,\n IInjectedProvidersMap,\n ChainData,\n ThemeColors,\n RequiredOption\n} from \"./types\";\n\nexport function checkInjectedProviders(): IInjectedProvidersMap {\n const result = {\n injectedAvailable: !!window.ethereum || !!window.web3\n };\n if (result.injectedAvailable) {\n let fallbackProvider = true;\n Object.values(injected).forEach(provider => {\n const isAvailable = verifyInjectedProvider(provider.check);\n if (isAvailable) {\n result[provider.check] = true;\n fallbackProvider = false;\n }\n });\n\n const browser = env.detect();\n\n if (browser && browser.name === \"opera\") {\n result[injected.OPERA.check] = true;\n fallbackProvider = false;\n }\n\n if (fallbackProvider) {\n result[injected.FALLBACK.check] = true;\n }\n }\n\n return result;\n}\n\nexport function verifyInjectedProvider(check: string): boolean {\n return window.ethereum\n ? window.ethereum[check]\n : window.web3 &&\n window.web3.currentProvider &&\n window.web3.currentProvider[check];\n}\n\nexport function getInjectedProvider(): IProviderInfo | null {\n let result = null;\n\n const injectedProviders = checkInjectedProviders();\n\n if (injectedProviders.injectedAvailable) {\n delete injectedProviders.injectedAvailable;\n const checks = Object.keys(injectedProviders);\n result = getProviderInfoFromChecksArray(checks);\n }\n return result;\n}\n\nexport function getInjectedProviderName(): string | null {\n const injectedProvider = getInjectedProvider();\n return injectedProvider ? injectedProvider.name : null;\n}\n\nexport function getProviderInfo(provider: any): IProviderInfo {\n if (!provider) return providers.FALLBACK;\n const checks = Object.values(providers)\n .filter(x => provider[x.check])\n .map(x => x.check);\n return getProviderInfoFromChecksArray(checks);\n}\n\nexport function getProviderInfoFromChecksArray(\n checks: string[]\n): IProviderInfo {\n const check = filterProviderChecks(checks);\n return filterProviders(\"check\", check);\n}\n\nexport function getProviderInfoByName(name: string | null): IProviderInfo {\n return filterProviders(\"name\", name);\n}\n\nexport function getProviderInfoById(id: string | null): IProviderInfo {\n return filterProviders(\"id\", id);\n}\n\nexport function getProviderInfoByCheck(check: string | null): IProviderInfo {\n return filterProviders(\"check\", check);\n}\n\nexport function isMobile(): boolean {\n let mobile: boolean = false;\n\n function hasTouchEvent(): boolean {\n try {\n document.createEvent(\"TouchEvent\");\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function hasMobileUserAgent(): boolean {\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\n navigator.userAgent\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(\n navigator.userAgent.substr(0, 4)\n )\n ) {\n return true;\n } else if (hasTouchEvent()) {\n return true;\n }\n return false;\n }\n\n mobile = hasMobileUserAgent();\n\n return mobile;\n}\n\nexport function getProviderDescription(\n providerInfo: Partial\n): string {\n if (providerInfo.description) {\n return providerInfo.description;\n }\n let description = \"\";\n switch (providerInfo.type) {\n case \"injected\":\n description = `Connect to your ${providerInfo.name} Wallet`;\n break;\n case \"web\":\n description = `Connect with your ${providerInfo.name} account`;\n break;\n case \"qrcode\":\n description = `Scan with ${providerInfo.name} to connect`;\n break;\n case \"hardware\":\n description = `Connect to your ${providerInfo.name} Hardware Wallet`;\n break;\n default:\n break;\n }\n return description;\n}\n\nexport function filterMatches(\n array: T[],\n condition: (x: T) => boolean,\n fallback: T | undefined\n): T | undefined {\n let result = fallback;\n const matches = array.filter(condition);\n\n if (!!matches && matches.length) {\n result = matches[0];\n }\n\n return result;\n}\n\nexport function filterProviders(\n param: string,\n value: string | null\n): IProviderInfo {\n if (!value) return providers.FALLBACK;\n const match = filterMatches(\n Object.values(providers),\n x => x[param] === value,\n providers.FALLBACK\n );\n return match || providers.FALLBACK;\n}\n\nexport function filterProviderChecks(checks: string[]): string {\n if (!!checks && checks.length) {\n if (checks.length > 1) {\n if (\n checks[0] === injected.METAMASK.check ||\n checks[0] === injected.CIPHER.check\n ) {\n return checks[1];\n }\n }\n return checks[0];\n }\n return providers.FALLBACK.check;\n}\n\nexport function getChainId(network: string): number {\n const chains: ChainData[] = Object.values(CHAIN_DATA_LIST);\n const match = filterMatches(\n chains,\n x => x.network === network,\n undefined\n );\n if (!match) {\n throw new Error(`No chainId found match ${network}`);\n }\n return match.chainId;\n}\n\nexport function getThemeColors(theme: string | ThemeColors): ThemeColors {\n return typeof theme === \"string\" ? themesList[theme].colors : theme;\n}\n\nexport function findMatchingRequiredOptions(\n requiredOptions: RequiredOption[],\n providedOptions: { [key: string]: any }\n): RequiredOption[] {\n const matches = requiredOptions.filter(requiredOption => {\n if (typeof requiredOption === \"string\") {\n return requiredOption in providedOptions;\n }\n const matches = findMatchingRequiredOptions(\n requiredOption,\n providedOptions\n );\n return matches && matches.length;\n });\n return matches;\n}\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nvar BrowserInfo = /** @class */ (function () {\n function BrowserInfo(name, version, os) {\n this.name = name;\n this.version = version;\n this.os = os;\n this.type = 'browser';\n }\n return BrowserInfo;\n}());\nexport { BrowserInfo };\nvar NodeInfo = /** @class */ (function () {\n function NodeInfo(version) {\n this.version = version;\n this.type = 'node';\n this.name = 'node';\n this.os = process.platform;\n }\n return NodeInfo;\n}());\nexport { NodeInfo };\nvar SearchBotDeviceInfo = /** @class */ (function () {\n function SearchBotDeviceInfo(name, version, os, bot) {\n this.name = name;\n this.version = version;\n this.os = os;\n this.bot = bot;\n this.type = 'bot-device';\n }\n return SearchBotDeviceInfo;\n}());\nexport { SearchBotDeviceInfo };\nvar BotInfo = /** @class */ (function () {\n function BotInfo() {\n this.type = 'bot';\n this.bot = true; // NOTE: deprecated test name instead\n this.name = 'bot';\n this.version = null;\n this.os = null;\n }\n return BotInfo;\n}());\nexport { BotInfo };\nvar ReactNativeInfo = /** @class */ (function () {\n function ReactNativeInfo() {\n this.type = 'react-native';\n this.name = 'react-native';\n this.version = null;\n this.os = null;\n }\n return ReactNativeInfo;\n}());\nexport { ReactNativeInfo };\n// tslint:disable-next-line:max-line-length\nvar SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/;\nvar SEARCHBOT_OS_REGEX = /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/;\nvar REQUIRED_VERSION_PARTS = 3;\nvar userAgentRules = [\n ['aol', /AOLShield\\/([0-9\\._]+)/],\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['edge-ios', /EdgiOS\\/([0-9\\._]+)/],\n ['yandexbrowser', /YaBrowser\\/([0-9\\._]+)/],\n ['kakaotalk', /KAKAOTALK\\s([0-9\\.]+)/],\n ['samsung', /SamsungBrowser\\/([0-9\\.]+)/],\n ['silk', /\\bSilk\\/([0-9._-]+)\\b/],\n ['miui', /MiuiBrowser\\/([0-9\\.]+)$/],\n ['beaker', /BeakerBrowser\\/([0-9\\.]+)/],\n ['edge-chromium', /Edg\\/([0-9\\.]+)/],\n [\n 'chromium-webview',\n /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n ],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['phantomjs', /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n ['crios', /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['fxios', /FxiOS\\/([0-9\\.]+)/],\n ['opera-mini', /Opera Mini.*Version\\/([0-9\\.]+)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['bb10', /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['ios', /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n ['facebook', /FBAV\\/([0-9\\.]+)/],\n ['instagram', /Instagram\\s([0-9\\.]+)/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n ['searchbot', SEARCHBOX_UA_REGEX],\n];\nvar operatingSystemRules = [\n ['iOS', /iP(hone|od|ad)/],\n ['Android OS', /Android/],\n ['BlackBerry OS', /BlackBerry|BB10/],\n ['Windows Mobile', /IEMobile/],\n ['Amazon OS', /Kindle/],\n ['Windows 3.11', /Win16/],\n ['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/],\n ['Windows 98', /(Windows 98)|(Win98)/],\n ['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/],\n ['Windows XP', /(Windows NT 5.1)|(Windows XP)/],\n ['Windows Server 2003', /(Windows NT 5.2)/],\n ['Windows Vista', /(Windows NT 6.0)/],\n ['Windows 7', /(Windows NT 6.1)/],\n ['Windows 8', /(Windows NT 6.2)/],\n ['Windows 8.1', /(Windows NT 6.3)/],\n ['Windows 10', /(Windows NT 10.0)/],\n ['Windows ME', /Windows ME/],\n ['Open BSD', /OpenBSD/],\n ['Sun OS', /SunOS/],\n ['Chrome OS', /CrOS/],\n ['Linux', /(Linux)|(X11)/],\n ['Mac OS', /(Mac_PowerPC)|(Macintosh)/],\n ['QNX', /QNX/],\n ['BeOS', /BeOS/],\n ['OS/2', /OS\\/2/],\n];\nexport function detect(userAgent) {\n if (!!userAgent) {\n return parseUserAgent(userAgent);\n }\n if (typeof document === 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative') {\n return new ReactNativeInfo();\n }\n if (typeof navigator !== 'undefined') {\n return parseUserAgent(navigator.userAgent);\n }\n return getNodeVersion();\n}\nfunction matchUserAgent(ua) {\n // opted for using reduce here rather than Array#first with a regex.test call\n // this is primarily because using the reduce we only perform the regex\n // execution once rather than once for the test and for the exec again below\n // probably something that needs to be benchmarked though\n return (ua !== '' &&\n userAgentRules.reduce(function (matched, _a) {\n var browser = _a[0], regex = _a[1];\n if (matched) {\n return matched;\n }\n var uaMatch = regex.exec(ua);\n return !!uaMatch && [browser, uaMatch];\n }, false));\n}\nexport function browserName(ua) {\n var data = matchUserAgent(ua);\n return data ? data[0] : null;\n}\nexport function parseUserAgent(ua) {\n var matchedRule = matchUserAgent(ua);\n if (!matchedRule) {\n return null;\n }\n var name = matchedRule[0], match = matchedRule[1];\n if (name === 'searchbot') {\n return new BotInfo();\n }\n var versionParts = match[1] && match[1].split(/[._]/).slice(0, 3);\n if (versionParts) {\n if (versionParts.length < REQUIRED_VERSION_PARTS) {\n versionParts = __spreadArrays(versionParts, createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length));\n }\n }\n else {\n versionParts = [];\n }\n var version = versionParts.join('.');\n var os = detectOS(ua);\n var searchBotMatch = SEARCHBOT_OS_REGEX.exec(ua);\n if (searchBotMatch && searchBotMatch[1]) {\n return new SearchBotDeviceInfo(name, version, os, searchBotMatch[1]);\n }\n return new BrowserInfo(name, version, os);\n}\nexport function detectOS(ua) {\n for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) {\n var _a = operatingSystemRules[ii], os = _a[0], regex = _a[1];\n var match = regex.exec(ua);\n if (match) {\n return os;\n }\n }\n return null;\n}\nexport function getNodeVersion() {\n var isNode = typeof process !== 'undefined' && process.version;\n return isNode ? new NodeInfo(process.version.slice(1)) : null;\n}\nfunction createVersionParts(count) {\n var output = [];\n for (var ii = 0; ii < count; ii++) {\n output.push('0');\n }\n return output;\n}\n","import { ChainDataList } from \"../helpers\";\n\nexport const CHAIN_DATA_LIST: ChainDataList = {\n 1: {\n chainId: 1,\n chain: \"ETH\",\n network: \"mainnet\",\n networkId: 1\n },\n 2: {\n chainId: 2,\n chain: \"EXP\",\n network: \"expanse\",\n networkId: 1\n },\n 3: {\n chainId: 3,\n chain: \"ETH\",\n network: \"ropsten\",\n networkId: 3\n },\n 4: {\n chainId: 4,\n chain: \"ETH\",\n network: \"rinkeby\",\n networkId: 4\n },\n 5: {\n chainId: 5,\n chain: \"ETH\",\n network: \"goerli\",\n networkId: 5\n },\n 6: {\n chainId: 6,\n chain: \"ETC\",\n network: \"kotti\",\n networkId: 6\n },\n 8: {\n chainId: 8,\n chain: \"UBQ\",\n network: \"ubiq\",\n networkId: 88\n },\n 9: {\n chainId: 9,\n chain: \"UBQ\",\n network: \"ubiq-testnet\",\n networkId: 2\n },\n 11: {\n chainId: 11,\n chain: \"META\",\n network: \"metadium\",\n networkId: 11\n },\n 12: {\n chainId: 12,\n chain: \"META\",\n network: \"metadium-testnet\",\n networkId: 12\n },\n 18: {\n chainId: 18,\n chain: \"TST\",\n network: \"thundercore-testnet\",\n networkId: 18\n },\n 30: {\n chainId: 30,\n chain: \"RSK\",\n network: \"rsk\",\n networkId: 30\n },\n 31: {\n chainId: 31,\n chain: \"RSK\",\n network: \"rsk-testnet\",\n networkId: 31\n },\n 42: {\n chainId: 42,\n chain: \"ETH\",\n network: \"kovan\",\n networkId: 42\n },\n 56: {\n chainId: 56,\n chain: \"BSC\",\n network: \"binance\",\n networkId: 56\n },\n 60: {\n chainId: 60,\n chain: \"GO\",\n network: \"gochain\",\n networkId: 60\n },\n 61: {\n chainId: 61,\n chain: \"ETC\",\n network: \"etc\",\n networkId: 1\n },\n 62: {\n chainId: 62,\n chain: \"ETC\",\n network: \"etc-morden\",\n networkId: 2\n },\n 63: {\n chainId: 63,\n chain: \"ETC\",\n network: \"etc-testnet\",\n networkId: 7\n },\n 64: {\n chainId: 64,\n chain: \"ELLA\",\n network: \"ellaism\",\n networkId: 64\n },\n 76: {\n chainId: 76,\n chain: \"MIX\",\n network: \"mix\",\n networkId: 76\n },\n 77: {\n chainId: 77,\n chain: \"POA\",\n network: \"poa-sokol\",\n networkId: 77\n },\n 88: {\n chainId: 88,\n chain: \"TOMO\",\n network: \"tomochain\",\n networkId: 88\n },\n 99: {\n chainId: 99,\n chain: \"POA\",\n network: \"poa-core\",\n networkId: 99\n },\n 100: {\n chainId: 100,\n chain: \"XDAI\",\n network: \"xdai\",\n networkId: 100\n },\n 101: {\n chainId: 101,\n chain: \"ETI\",\n network: \"etherinc\",\n networkId: 1\n },\n 108: {\n chainId: 108,\n chain: \"TT\",\n network: \"thundercore\",\n networkId: 108\n },\n 162: {\n chainId: 162,\n chain: \"PHT\",\n network: \"sirius\",\n networkId: 162\n },\n 163: {\n chainId: 163,\n chain: \"PHT\",\n network: \"lightstreams\",\n networkId: 163\n },\n 211: {\n chainId: 211,\n chain: \"FTN\",\n network: \"freight\",\n networkId: 0\n },\n 269: {\n chainId: 269,\n chain: \"HPB\",\n network: \"hpb\",\n networkId: 100\n },\n 385: {\n chainId: 385,\n chain: \"CRO\",\n network: \"lisinski\",\n networkId: 385\n },\n 820: {\n chainId: 820,\n chain: \"CLO\",\n network: \"callisto\",\n networkId: 1\n },\n 821: {\n chainId: 821,\n chain: \"CLO\",\n network: \"callisto-testnet\",\n networkId: 2\n },\n 137: {\n chainId: 137,\n chain: \"MATIC\",\n network: \"matic\",\n networkId: 137\n },\n 80001: {\n chainId: 80001,\n chain: \"MUMBAI\",\n network: \"mumbai\",\n networkId: 80001\n },\n 246529: {\n chainId: 246529,\n chain: \"ARTIS sigma1\",\n network: \"artis-s1\",\n networkId: 246529\n },\n 246785: {\n chainId: 246785,\n chain: \"ARTIS tau1\",\n network: \"artis-t1\",\n networkId: 246785\n }\n};\n","export const MODAL_LIGHTBOX_CLASSNAME = \"web3modal-modal-lightbox\";\nexport const MODAL_CONTAINER_CLASSNAME = \"web3modal-modal-container\";\nexport const MODAL_HITBOX_CLASSNAME = \"web3modal-modal-hitbox\";\nexport const MODAL_CARD_CLASSNAME = \"web3modal-modal-card\";\n\nexport const PROVIDER_WRAPPER_CLASSNAME = \"web3modal-provider-wrapper\";\nexport const PROVIDER_CONTAINER_CLASSNAME = \"web3modal-provider-container\";\nexport const PROVIDER_ICON_CLASSNAME = \"web3modal-provider-icon\";\nexport const PROVIDER_NAME_CLASSNAME = \"web3modal-provider-name\";\nexport const PROVIDER_DESCRIPTION_CLASSNAME = \"web3modal-provider-description\";\n\nexport const CONNECT_BUTTON_CLASSNAME = \"web3modal-connect-button\";\n","export const CONNECT_EVENT = \"connect\";\nexport const ERROR_EVENT = \"error\";\nexport const CLOSE_EVENT = \"close\";\n","export const WEB3_CONNECT_MODAL_ID = \"WEB3_CONNECT_MODAL_ID\";\nexport const INJECTED_PROVIDER_ID = \"injected\";\nexport const CACHED_PROVIDER_KEY = \"WEB3_CONNECT_CACHED_PROVIDER\";\n","import { IThemeConfig } from \"../helpers\";\n\nconst lightTheme: IThemeConfig = {\n name: \"light\",\n colors: {\n background: \"rgb(255, 255, 255)\",\n main: \"rgb(12, 12, 13)\",\n secondary: \"rgb(169, 169, 188)\",\n border: \"rgba(195, 195, 195, 0.14)\",\n hover: \"rgba(195, 195, 195, 0.14)\"\n }\n};\n\nexport default lightTheme;\n","import { IThemeConfig } from \"../helpers\";\n\nconst darkTheme: IThemeConfig = {\n name: \"dark\",\n colors: {\n background: \"rgb(39, 49, 56)\",\n main: \"rgb(199, 199, 199)\",\n secondary: \"rgb(136, 136, 136)\",\n border: \"rgba(195, 195, 195, 0.14)\",\n hover: \"rgb(16, 26, 32)\"\n }\n};\n\nexport default darkTheme;\n","import injected from \"./injected\";\nimport walletconnect from \"./walletconnect\";\nimport portis from \"./portis\";\nimport fortmatic from \"./fortmatic\";\nimport torus from \"./torus\";\nimport arkane from \"./arkane\";\nimport authereum from \"./authereum\";\nimport burnerconnect from \"./burnerconnect\";\nimport mewconnect from \"./mewconnect\";\nimport dcentwallet from \"./dcentwallet\";\nimport bitski from \"./bitski\";\nimport frame from \"./frame\";\n\nexport {\n injected,\n walletconnect,\n portis,\n torus,\n fortmatic,\n arkane,\n authereum,\n burnerconnect,\n mewconnect,\n dcentwallet,\n bitski,\n frame\n};\n","const ConnectToInjected = async () => {\n let provider = null;\n if (typeof window.ethereum !== 'undefined') {\n provider = window.ethereum;\n try {\n await provider.request({ method: 'eth_requestAccounts' })\n } catch (error) {\n throw new Error(\"User Rejected\");\n }\n } else if (window.web3) {\n provider = window.web3.currentProvider;\n } else {\n throw new Error(\"No Web3 Provider found\");\n }\n return provider;\n};\n\nexport default ConnectToInjected;\n","import { IAbstractConnectorOptions, getChainId } from \"../../helpers\";\n\nexport interface IWalletConnectConnectorOptions\n extends IAbstractConnectorOptions {\n infuraId?: string;\n rpc?: { [chainId: number]: string };\n bridge?: string;\n qrcode?: boolean;\n qrcodeModalOptions?: { mobileLinks?: string[] };\n}\n\nconst ConnectToWalletConnect = (\n WalletConnectProvider: any,\n opts: IWalletConnectConnectorOptions\n) => {\n return new Promise(async (resolve, reject) => {\n let bridge = \"https://bridge.walletconnect.org\";\n let qrcode = true;\n let infuraId = \"\";\n let rpc = undefined;\n let chainId = 1;\n let qrcodeModalOptions = undefined;\n console.log(\"wallet connect\"); // todo remove dev item\n if (opts) {\n bridge = opts.bridge || bridge;\n qrcode = typeof opts.qrcode !== \"undefined\" ? opts.qrcode : qrcode;\n infuraId = opts.infuraId || \"\";\n rpc = opts.rpc || undefined;\n chainId =\n opts.network && getChainId(opts.network) ? getChainId(opts.network) : 1;\n qrcodeModalOptions = opts.qrcodeModalOptions || undefined;\n }\n\n const provider = new WalletConnectProvider({\n bridge,\n qrcode,\n infuraId,\n rpc,\n chainId,\n qrcodeModalOptions\n });\n try {\n await provider.enable();\n resolve(provider);\n } catch (e) {\n reject(e);\n }\n });\n};\n\nexport default ConnectToWalletConnect;\n","import { IAbstractConnectorOptions } from \"../../helpers\";\n\nexport interface INetwork {\n nodeUrl: string;\n chainId?: string;\n gasRelayHubAddress?: string;\n}\n\nexport type Scope = \"email\";\n\nexport interface IOptions {\n scope?: Scope[];\n gasRelay?: boolean;\n registerPageByDefault?: boolean;\n pocketDevId?: string;\n}\n\nexport interface IPortisConnectorOptions extends IAbstractConnectorOptions {\n id: string;\n config?: IOptions;\n}\n\nconst ConnectToPortis = (Portis: any, opts: IPortisConnectorOptions) => {\n return new Promise(async (resolve, reject) => {\n if (opts && opts.id) {\n try {\n const id = opts.id;\n const network = opts.network || \"mainnet\";\n const config = opts.config;\n const pt = new Portis(id, network, config);\n await pt.provider.enable();\n pt.provider._portis = pt;\n resolve(pt.provider);\n } catch (error) {\n return reject(error);\n }\n } else {\n return reject(new Error(\"Missing Portis Id\"));\n }\n });\n};\n\nexport default ConnectToPortis;\n","import { IAbstractConnectorOptions } from \"../../helpers\";\n\nexport interface IFortmaticConnectorOptions extends IAbstractConnectorOptions {\n key: string;\n}\n\nconst ConnectToFortmatic = async (\n Fortmatic: any,\n opts: IFortmaticConnectorOptions\n) => {\n if (opts && opts.key) {\n try {\n const key = opts.key;\n const fm = new Fortmatic(key, opts.network);\n const provider = await fm.getProvider();\n provider.fm = fm;\n await fm.user.login();\n const isLoggedIn = await fm.user.isLoggedIn();\n if (isLoggedIn) {\n return provider;\n } else {\n throw new Error(\"Failed to login to Fortmatic\");\n }\n } catch (error) {\n throw error;\n }\n } else {\n throw new Error(\"Missing Fortmatic key\");\n }\n};\n\nexport default ConnectToFortmatic;\n","import { IAbstractConnectorOptions } from \"../../helpers\";\n\ntype ETHEREUM_NETWORK_TYPE =\n | \"ropsten\"\n | \"rinkeby\"\n | \"kovan\"\n | \"mainnet\"\n | \"goerli\"\n | \"localhost\"\n | \"matic\"\n | \"mumbai\";\n\ninterface NetworkParams {\n host: ETHEREUM_NETWORK_TYPE | string;\n chainId?: number;\n networkName?: string;\n}\n\ninterface VerifierStatus {\n google?: boolean;\n facebook?: boolean;\n reddit?: boolean;\n twitch?: boolean;\n discord?: boolean;\n}\n\ninterface LoginParams {\n verifier?: \"google\" | \"facebook\" | \"twitch\" | \"reddit\" | \"discord\" | string;\n}\n\ntype LOGIN_TYPE =\n | \"google\"\n | \"facebook\"\n | \"reddit\"\n | \"discord\"\n | \"twitch\"\n | \"apple\"\n | \"github\"\n | \"linkedin\"\n | \"twitter\"\n | \"weibo\"\n | \"line\"\n | \"jwt\"\n | \"email-password\"\n | \"passwordless\";\n\ninterface BaseLoginOptions {\n display?: \"page\" | \"popup\" | \"touch\" | \"wap\";\n prompt?: \"none\" | \"login\" | \"consent\" | \"select_account\";\n max_age?: string | number;\n ui_locales?: string;\n id_token_hint?: string;\n login_hint?: string;\n acr_values?: string;\n scope?: string;\n audience?: string;\n connection?: string;\n [key: string]: unknown;\n}\n\ninterface JwtParameters extends BaseLoginOptions {\n domain: string;\n client_id?: string;\n redirect_uri?: string;\n leeway?: number;\n verifierIdField?: string;\n isVerifierIdCaseSensitive?: boolean;\n}\n\ninterface IntegrityParams {\n check: boolean;\n hash?: string;\n version?: string;\n}\n\ninterface WhiteLabelParams {\n theme: ThemeParams;\n defaultLanguage?: string;\n logoDark: string;\n logoLight: string;\n topupHide?: boolean;\n featuredBillboardHide?: boolean;\n disclaimerHide?: boolean;\n tncLink?: LocaleLinks;\n privacyPolicy?: LocaleLinks;\n contactLink?: LocaleLinks;\n customTranslations?: LocaleLinks;\n}\n\ninterface LocaleLinks {\n en?: T;\n ja?: T;\n ko?: T;\n de?: T;\n zh?: T;\n}\n\ninterface ThemeParams {\n isDark: boolean;\n colors: any;\n}\n\ninterface LoginConfigItem {\n name?: string;\n typeOfLogin: LOGIN_TYPE;\n description?: string;\n clientId?: string;\n logoHover?: string;\n logoLight?: string;\n logoDark?: string;\n showOnModal?: boolean;\n jwtParameters?: JwtParameters;\n}\n\ninterface LoginConfig {\n [verifier: string]: LoginConfigItem;\n}\n\nexport interface IOptions {\n buttonPosition?: \"top-left\" | \"top-right\" | \"bottom-right\" | \"bottom-left\";\n modalZIndex?: number;\n apiKey?: string;\n buildEnv?: \"production\" | \"development\" | \"staging\" | \"testing\" | \"lrc\";\n enableLogging?: boolean;\n enabledVerifiers?: VerifierStatus;\n loginConfig?: LoginConfig;\n showTorusButton?: boolean;\n integrity?: IntegrityParams;\n whiteLabel?: WhiteLabelParams;\n}\n\nexport interface ITorusConnectorOptions extends IAbstractConnectorOptions {\n config?: IOptions;\n loginParams?: LoginParams;\n networkParams?: NetworkParams;\n}\n\n// Supports Torus package versions 0.2.*\nconst ConnectToTorus = async (Torus: any, opts: ITorusConnectorOptions) => {\n return new Promise(async (resolve, reject) => {\n try {\n // defaults\n let buttonPosition = \"bottom-left\";\n let apiKey = \"torus-default\";\n let modalZIndex = 99999;\n let network: NetworkParams = { host: \"mainnet\" };\n let defaultVerifier = undefined;\n\n // parsing to Torus interfaces\n network =\n opts.networkParams || opts.network\n ? { host: opts.network, ...opts.networkParams }\n : network;\n\n const torus = new Torus({\n buttonPosition: opts.config?.buttonPosition || buttonPosition,\n apiKey: opts.config?.apiKey || apiKey,\n modalZIndex: opts.config?.modalZIndex || modalZIndex\n });\n await torus.init({\n showTorusButton: false,\n ...opts.config,\n network\n });\n\n if (opts.loginParams) {\n defaultVerifier = opts.loginParams.verifier;\n }\n await torus.login({ verifier: defaultVerifier });\n const provider = torus.provider;\n provider.torus = torus;\n resolve(provider);\n } catch (err) {\n reject(err);\n }\n });\n};\n\nexport default ConnectToTorus;\n","import { IAbstractConnectorOptions } from \"../../helpers\";\n\nexport interface IArkaneConnectorOptions extends IAbstractConnectorOptions {\n clientId: string;\n nodeUrl?: string;\n environment?: string;\n}\n\nconst ConnectToArkane = (Arkane: any, opts: IArkaneConnectorOptions) => {\n return new Promise(async (resolve, reject) => {\n if (opts && opts.clientId) {\n try {\n const options = {\n clientId: opts.clientId,\n rpcUrl: opts.nodeUrl,\n environment: opts.environment,\n signMethod: \"POPUP\"\n };\n const provider = await (window as any).Arkane.createArkaneProviderEngine(\n options\n );\n return resolve(provider);\n } catch (error) {\n console.error(error);\n return reject(new Error(\"Failed to login to Arkane 2\"));\n }\n } else {\n return reject(new Error(\"Please provide an Arkane client id\"));\n }\n });\n};\n\nexport default ConnectToArkane;\n","import { IAbstractConnectorOptions } from \"../../helpers\";\n\nexport interface IAuthereumConnectorOptions extends IAbstractConnectorOptions {\n networkName: string;\n apiKey: string;\n rpcUri: string;\n webUri: string;\n xsUri: string;\n blockedPopupRedirect: boolean;\n forceRedirect: boolean;\n disableNotifications: boolean;\n disableGoogleAnalytics: boolean;\n}\n\nconst ConnectToAuthereum = (\n Authereum: any,\n opts: Partial = {}\n) => {\n return new Promise(async (resolve, reject) => {\n try {\n const authereum = new Authereum({\n ...opts,\n networkName: opts.networkName || opts.network\n });\n const provider = authereum.getProvider();\n provider.authereum = authereum;\n await provider.enable();\n resolve(provider);\n } catch (error) {\n return reject(error);\n }\n });\n};\n\nexport default ConnectToAuthereum;\n","import { IAbstractConnectorOptions } from \"../../helpers\";\n\ninterface Wallet {\n origin: string;\n name: string;\n}\n\nexport interface IBurnerConnectorOptions extends IAbstractConnectorOptions {\n hubUrl?: string;\n defaultNetwork?: string;\n defaultWallets?: Wallet[];\n}\n\nconst ConnectToBurnerConnect = async (\n BurnerConnectProvider: any,\n opts: IBurnerConnectorOptions\n) => {\n opts.defaultNetwork = opts.defaultNetwork || opts.network;\n const provider = new BurnerConnectProvider(opts);\n\n await provider.enable();\n\n return provider;\n};\n\nexport default ConnectToBurnerConnect;\n","import { IAbstractConnectorOptions, getChainId } from \"../../helpers\";\n\nexport interface IMewConnectConnectorOptions\n extends IAbstractConnectorOptions {\n infuraId?: string;\n rpc?: { [chainId: number]: string };\n}\n\nconst ConnectToMewConnect = (\n MewConnectProvider: any,\n opts: IMewConnectConnectorOptions\n) => {\n return new Promise(async (resolve, reject) => {\n let infuraId = \"\";\n let rpc = undefined;\n let chainId = 1;\n\n if (opts) {\n infuraId = opts.infuraId || \"\";\n rpc = opts.rpc || undefined;\n if(opts.infuraId && !rpc){\n rpc = `wss://mainnet.infura.io/ws/v3/${infuraId}`\n }\n chainId =\n opts.network && getChainId(opts.network) ? getChainId(opts.network) : 1;\n }\n\n if (!MewConnectProvider.Provider.isConnected) {\n const mewConnect = new MewConnectProvider.Provider();\n const provider = mewConnect.makeWeb3Provider(chainId, rpc, true)\n\n mewConnect.on('disconnected', () => {\n })\n try {\n const address = await mewConnect.enable();\n console.log(address); // todo remove dev item\n resolve(provider);\n } catch (e) {\n reject(e);\n }\n }\n\n });\n};\n\nexport default ConnectToMewConnect;\n","import { IAbstractConnectorOptions } from \"../../helpers\";\n\nexport interface IDcentConnectorOptions extends IAbstractConnectorOptions {\n rpcUrl: string;\n chainId: number;\n}\n\nconst ConnectToDcentWallet = async (\n DcentProvider: any,\n opts: IDcentConnectorOptions\n) => {\n const provider = new DcentProvider(opts);\n\n await provider.enable();\n\n return provider;\n};\n\nexport default ConnectToDcentWallet;\n","import { IAbstractConnectorOptions } from \"../../helpers\";\n\ninterface IBitskiOptions extends IAbstractConnectorOptions {\n clientId: string;\n callbackUrl: string;\n extraBitskiOptions?: any;\n extraProviderOptions?: any;\n}\n\nconst ConnectToBitski = async (\n Bitski: any,\n opts: IBitskiOptions\n) => {\n const bitski = new Bitski(opts.clientId, opts.callbackUrl, opts.extraBitskiOptions);\n\n await bitski.signIn();\n\n const provider = bitski.getProvider(opts.extraProviderOptions)\n\n return provider;\n};\n\nexport default ConnectToBitski;\n","const ConnectToFrame = async (ethProvider: any) => {\n try {\n const provider = ethProvider('frame');\n provider.isFrameNative = true;\n return provider;\n } catch (err) {\n throw err;\n }\n};\n\nexport default ConnectToFrame;\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjEuODEzMTMyJSIgY3k9IjUwJSIgcj0iOTguMTg2ODY4JSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNDI0MjQyIi8+PHN0b3Agb2Zmc2V0PSIxIi8+PC9yYWRpYWxHcmFkaWVudD48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Im0yNTYgMGMxNDEuMzg0ODk2IDAgMjU2IDExNC42MTUxMDQgMjU2IDI1NiAwIDE0MS4zODQ4OTYtMTE0LjYxNTEwNCAyNTYtMjU2IDI1Ni0xNDEuMzg0ODk2IDAtMjU2LTExNC42MTUxMDQtMjU2LTI1NiAwLTE0MS4zODQ4OTYgMTE0LjYxNTEwNC0yNTYgMjU2LTI1NnoiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJtMTM3LjkwMjM0NCAyNDIuNzYxNzE5LTE1LjgyMDMxMyA1NS45NTcwMzFoLTE2LjY5OTIxOWwtMjIuMzgyODEyLTg0LjU1MDc4MWgxOC4zOTg0MzhsMTMuMTgzNTkzIDU5LjU4OTg0M2guOTM3NWwxNS40MTAxNTctNTkuNTg5ODQzaDE0Ljk0MTQwNmwxNS43MDMxMjUgNTkuNTg5ODQzaC45Mzc1bDEzLjA2NjQwNi01OS41ODk4NDNoMTguMjgxMjVsLTIyLjQ0MTQwNiA4NC41NTA3ODFoLTE2LjU4MjAzMWwtMTUuOTk2MDk0LTU1Ljk1NzAzMXptMTI3LjMyNDIxOCA0MC44Mzk4NDN2MTUuMTE3MTg4aC01Ni4wMTU2MjR2LTg0LjU1MDc4MWg1Ni4wMTU2MjR2MTUuMTE3MTg3aC0zOC4zMjAzMTJ2MTkuNzQ2MDk0aDM2LjE1MjM0NHYxNC4wMDM5MDZoLTM2LjE1MjM0NHYyMC41NjY0MDZ6bTU2LjYwMTU2MyAxNS4xMTcxODhoLTM3Ljk2ODc1di04NC41NTA3ODFoMzYuOTcyNjU2YzE2LjQwNjI1IDAgMjYuMTkxNDA3IDguMDI3MzQzIDI2LjE5MTQwNyAyMS4wOTM3NSAwIDguOTY0ODQzLTYuNjIxMDk0IDE2Ljc1NzgxMi0xNS4yOTI5NjkgMTguMDQ2ODc1djEuMDU0Njg3YzExLjE5MTQwNi44MjAzMTMgMTkuMzM1OTM3IDkuMjU3ODEzIDE5LjMzNTkzNyAyMC4xNTYyNSAwIDE0LjgyNDIxOS0xMS4xOTE0MDYgMjQuMTk5MjE5LTI5LjIzODI4MSAyNC4xOTkyMTl6bS0yMC4yNzM0MzctNzEuMDE1NjI1djIxLjUwMzkwNmgxMy4zMDA3ODFjOS41NTA3ODEgMCAxNC43NjU2MjUtMy45MjU3ODEgMTQuNzY1NjI1LTEwLjcyMjY1NiAwLTYuNzM4MjgxLTQuODYzMjgyLTEwLjc4MTI1LTEzLjMwMDc4Mi0xMC43ODEyNXptMCA1Ny40ODA0NjloMTUuNzYxNzE4YzEwLjE5NTMxMyAwIDE1LjcwMzEyNS00LjI3NzM0NCAxNS43MDMxMjUtMTIuMTg3NSAwLTcuNzM0Mzc1LTUuNjgzNTkzLTExLjgzNTkzOC0xNi4xMTMyODEtMTEuODM1OTM4aC0xNS4zNTE1NjJ6bTg0LjQzMzU5My0yMy4xNDQ1MzJ2LTEzLjE4MzU5M2gxMC4zMTI1YzguMDI3MzQ0IDAgMTMuNDc2NTYzLTQuNjg3NSAxMy40NzY1NjMtMTEuNjAxNTYzIDAtNi43OTY4NzUtNS4yNzM0MzgtMTEuMTMyODEyLTEzLjUzNTE1Ni0xMS4xMzI4MTItOC4yMDMxMjYgMC0xMy42NTIzNDQgNC42Mjg5MDYtMTQuMTIxMDk0IDExLjk1MzEyNWgtMTYuMzQ3NjU2Yy41ODU5MzctMTUuOTk2MDk0IDEyLjQ4MDQ2OC0yNi4wNzQyMTkgMzAuOTM3NS0yNi4wNzQyMTkgMTcuMzQzNzUgMCAyOS44MjQyMTggOS40OTIxODggMjkuODI0MjE4IDIyLjc5Mjk2OSAwIDkuNzg1MTU2LTYuMTUyMzQ0IDE3LjQwMjM0My0xNS41ODU5MzcgMTkuMzM1OTM3djEuMDU0Njg4YzExLjYwMTU2MiAxLjI4OTA2MiAxOC44NjcxODcgOS4wMjM0MzcgMTguODY3MTg3IDIwLjE1NjI1IDAgMTQuODI0MjE4LTEzLjk0NTMxMiAyNS41NDY4NzUtMzMuMjIyNjU2IDI1LjU0Njg3NS0xOC44NjcxODggMC0zMS42NDA2MjUtMTAuNDI5Njg4LTMyLjQwMjM0NC0yNi4zNjcxODhoMTYuOTMzNTk0Yy41MjczNDQgNy4xNDg0MzggNi41NjI1IDExLjY2MDE1NyAxNS42NDQ1MzEgMTEuNjYwMTU3IDguODQ3NjU3IDAgMTUtNC45ODA0NjkgMTUtMTIuMTg3NSAwLTcuMzgyODEzLTUuODAwNzgxLTExLjk1MzEyNi0xNS4yOTI5NjktMTEuOTUzMTI2eiIgZmlsbD0iI2ZmZiIvPjwvZz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM1NSIgdmlld0JveD0iMCAwIDM5NyAzNTUiIHdpZHRoPSIzOTciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMSAtMSkiPjxwYXRoIGQ9Im0xMTQuNjIyNjQ0IDMyNy4xOTU0NzIgNTIuMDA0NzE3IDEzLjgxMDE5OHYtMTguMDU5NDlsNC4yNDUyODMtNC4yNDkyOTJoMjkuNzE2OTgydjIxLjI0NjQ1OSAxNC44NzI1MjNoLTMxLjgzOTYyNGwtMzkuMjY4ODY4LTE2Ljk5NzE2OXoiIGZpbGw9IiNjZGJkYjIiLz48cGF0aCBkPSJtMTk5LjUyODMwNSAzMjcuMTk1NDcyIDUwLjk0MzM5NyAxMy44MTAxOTh2LTE4LjA1OTQ5bDQuMjQ1MjgzLTQuMjQ5MjkyaDI5LjcxNjk4MXYyMS4yNDY0NTkgMTQuODcyNTIzaC0zMS44Mzk2MjNsLTM5LjI2ODg2OC0xNi45OTcxNjl6IiBmaWxsPSIjY2RiZGIyIiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSA0ODMuOTYyMjcgMCkiLz48cGF0aCBkPSJtMTcwLjg3MjY0NCAyODcuODg5NTIzLTQuMjQ1MjgzIDM1LjA1NjY1NyA1LjMwNjYwNC00LjI0OTI5Mmg1NS4xODg2OGw2LjM2NzkyNSA0LjI0OTI5Mi00LjI0NTI4NC0zNS4wNTY2NTctOC40OTA1NjUtNS4zMTE2MTUtNDIuNDUyODMyIDEuMDYyMzIzeiIgZmlsbD0iIzM5MzkzOSIvPjxwYXRoIGQ9Im0xNDIuMjE2OTg0IDUwLjk5MTUwMjIgMjUuNDcxNjk4IDU5LjQ5MDA4NTggMTEuNjc0NTI4IDE3My4xNTg2NDNoNDEuMzkxNTExbDEyLjczNTg0OS0xNzMuMTU4NjQzIDIzLjM0OTA1Ni01OS40OTAwODU4eiIgZmlsbD0iI2Y4OWMzNSIvPjxwYXRoIGQ9Im0zMC43NzgzMDIzIDE4MS42NTcyMjYtMjkuNzE2OTgxNTMgODYuMDQ4MTYxIDc0LjI5MjQ1MzkzLTQuMjQ5MjkzaDQ3Ljc1OTQzNDN2LTM3LjE4MTMwM2wtMi4xMjI2NDEtNzYuNDg3MjUzLTEwLjYxMzIwOCA4LjQ5ODU4M3oiIGZpbGw9IiNmODlkMzUiLz48cGF0aCBkPSJtODcuMDI4MzAzMiAxOTEuMjE4MTM0IDg3LjAyODMwMjggMi4xMjQ2NDYtOS41NTE4ODYgNDQuNjE3NTYzLTQxLjM5MTUxMS0xMC42MjMyMjl6IiBmaWxsPSIjZDg3YzMwIi8+PHBhdGggZD0ibTg3LjAyODMwMzIgMTkyLjI4MDQ1NyAzNi4wODQ5MDU4IDMzLjk5NDMzNHYzMy45OTQzMzR6IiBmaWxsPSIjZWE4ZDNhIi8+PHBhdGggZD0ibTEyMy4xMTMyMDkgMjI3LjMzNzExNCA0Mi40NTI4MzEgMTAuNjIzMjI5IDEzLjc5NzE3IDQ1LjY3OTg4OC05LjU1MTg4NiA1LjMxMTYxNS00Ni42OTgxMTUtMjcuNjIwMzk4eiIgZmlsbD0iI2Y4OWQzNSIvPjxwYXRoIGQ9Im0xMjMuMTEzMjA5IDI2MS4zMzE0NDgtOC40OTA1NjUgNjUuODY0MDI0IDU2LjI1LTM5LjMwNTk0OXoiIGZpbGw9IiNlYjhmMzUiLz48cGF0aCBkPSJtMTc0LjA1NjYwNiAxOTMuMzQyNzggNS4zMDY2MDQgOTAuMjk3NDUxLTE1LjkxOTgxMi00Ni4yMTEwNDl6IiBmaWxsPSIjZWE4ZTNhIi8+PHBhdGggZD0ibTc0LjI5MjQ1MzkgMjYyLjM5Mzc3MSA0OC44MjA3NTUxLTEuMDYyMzIzLTguNDkwNTY1IDY1Ljg2NDAyNHoiIGZpbGw9IiNkODdjMzAiLz48cGF0aCBkPSJtMjQuNDEwMzc3NyAzNTUuODc4MTkzIDkwLjIxMjI2NjMtMjguNjgyNzIxLTQwLjMzMDE5MDEtNjQuODAxNzAxLTczLjIzMTEzMzEzIDUuMzExNjE2eiIgZmlsbD0iI2ViOGYzNSIvPjxwYXRoIGQ9Im0xNjcuNjg4NjgyIDExMC40ODE1ODgtNDUuNjM2NzkzIDM4LjI0MzYyNy0zNS4wMjM1ODU4IDQyLjQ5MjkxOSA4Ny4wMjgzMDI4IDMuMTg2OTY5eiIgZmlsbD0iI2U4ODIxZSIvPjxwYXRoIGQ9Im0xMTQuNjIyNjQ0IDMyNy4xOTU0NzIgNTYuMjUtMzkuMzA1OTQ5LTQuMjQ1MjgzIDMzLjk5NDMzNHYxOS4xMjE4MTNsLTM4LjIwNzU0OC03LjQzNjI2eiIgZmlsbD0iI2RmY2VjMyIvPjxwYXRoIGQ9Im0yMjkuMjQ1Mjg2IDMyNy4xOTU0NzIgNTUuMTg4NjgtMzkuMzA1OTQ5LTQuMjQ1MjgzIDMzLjk5NDMzNHYxOS4xMjE4MTNsLTM4LjIwNzU0OC03LjQzNjI2eiIgZmlsbD0iI2RmY2VjMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgNTEzLjY3OTI1MiAwKSIvPjxwYXRoIGQ9Im0xMzIuNjY1MDk2IDIxMi40NjQ1OTMtMTEuNjc0NTI4IDI0LjQzMzQyNyA0MS4zOTE1MS0xMC42MjMyMjl6IiBmaWxsPSIjMzkzOTM5IiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAyODMuMzcyNjQ2IDApIi8+PHBhdGggZD0ibTIzLjM0OTA1NyAxLjA2MjMyMjk2IDE0NC4zMzk2MjUgMTA5LjQxOTI2NTA0LTI0LjQxMDM3OC01OS40OTAwODU4eiIgZmlsbD0iI2U4OGYzNSIvPjxwYXRoIGQ9Im0yMy4zNDkwNTcgMS4wNjIzMjI5Ni0xOS4xMDM3NzM5MiA1OC40Mjc3NjI5NCAxMC42MTMyMDc3MiA2My43MzkzNzgxLTcuNDI5MjQ1NDEgNC4yNDkyOTIgMTAuNjEzMjA3NzEgOS41NjA5MDYtOC40OTA1NjYxNyA3LjQzNjI2MSAxMS42NzQ1Mjg0NyAxMC42MjMyMjktNy40MjkyNDU0IDYuMzczOTM4IDE2Ljk4MTEzMjMgMjEuMjQ2NDU5IDc5LjU5OTA1NzctMjQuNDMzNDI4YzM4LjkxNTA5Ni0zMS4xNjE0NzMgNTguMDE4ODY5LTQ3LjA5NjMxOCA1Ny4zMTEzMjItNDcuODA0NTMzLS43MDc1NDgtLjcwODIxNS00OC44MjA3NTYtMzcuMTgxMzAzNi0xNDQuMzM5NjI1LTEwOS40MTkyNjUwNHoiIGZpbGw9IiM4ZTVhMzAiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAzOTkuMDU2NjExIDApIj48cGF0aCBkPSJtMzAuNzc4MzAyMyAxODEuNjU3MjI2LTI5LjcxNjk4MTUzIDg2LjA0ODE2MSA3NC4yOTI0NTM5My00LjI0OTI5M2g0Ny43NTk0MzQzdi0zNy4xODEzMDNsLTIuMTIyNjQxLTc2LjQ4NzI1My0xMC42MTMyMDggOC40OTg1ODN6IiBmaWxsPSIjZjg5ZDM1Ii8+PHBhdGggZD0ibTg3LjAyODMwMzIgMTkxLjIxODEzNCA4Ny4wMjgzMDI4IDIuMTI0NjQ2LTkuNTUxODg2IDQ0LjYxNzU2My00MS4zOTE1MTEtMTAuNjIzMjI5eiIgZmlsbD0iI2Q4N2MzMCIvPjxwYXRoIGQ9Im04Ny4wMjgzMDMyIDE5Mi4yODA0NTcgMzYuMDg0OTA1OCAzMy45OTQzMzR2MzMuOTk0MzM0eiIgZmlsbD0iI2VhOGQzYSIvPjxwYXRoIGQ9Im0xMjMuMTEzMjA5IDIyNy4zMzcxMTQgNDIuNDUyODMxIDEwLjYyMzIyOSAxMy43OTcxNyA0NS42Nzk4ODgtOS41NTE4ODYgNS4zMTE2MTUtNDYuNjk4MTE1LTI3LjYyMDM5OHoiIGZpbGw9IiNmODlkMzUiLz48cGF0aCBkPSJtMTIzLjExMzIwOSAyNjEuMzMxNDQ4LTguNDkwNTY1IDY1Ljg2NDAyNCA1NS4xODg2OC0zOC4yNDM2MjZ6IiBmaWxsPSIjZWI4ZjM1Ii8+PHBhdGggZD0ibTE3NC4wNTY2MDYgMTkzLjM0Mjc4IDUuMzA2NjA0IDkwLjI5NzQ1MS0xNS45MTk4MTItNDYuMjExMDQ5eiIgZmlsbD0iI2VhOGUzYSIvPjxwYXRoIGQ9Im03NC4yOTI0NTM5IDI2Mi4zOTM3NzEgNDguODIwNzU1MS0xLjA2MjMyMy04LjQ5MDU2NSA2NS44NjQwMjR6IiBmaWxsPSIjZDg3YzMwIi8+PHBhdGggZD0ibTI0LjQxMDM3NzcgMzU1Ljg3ODE5MyA5MC4yMTIyNjYzLTI4LjY4MjcyMS00MC4zMzAxOTAxLTY0LjgwMTcwMS03My4yMzExMzMxMyA1LjMxMTYxNnoiIGZpbGw9IiNlYjhmMzUiLz48cGF0aCBkPSJtMTY3LjY4ODY4MiAxMTAuNDgxNTg4LTQ1LjYzNjc5MyAzOC4yNDM2MjctMzUuMDIzNTg1OCA0Mi40OTI5MTkgODcuMDI4MzAyOCAzLjE4Njk2OXoiIGZpbGw9IiNlODgyMWUiLz48cGF0aCBkPSJtMTMyLjY2NTA5NiAyMTIuNDY0NTkzLTExLjY3NDUyOCAyNC40MzM0MjcgNDEuMzkxNTEtMTAuNjIzMjI5eiIgZmlsbD0iIzM5MzkzOSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjgzLjM3MjY0NiAwKSIvPjxwYXRoIGQ9Im0yMy4zNDkwNTcgMS4wNjIzMjI5NiAxNDQuMzM5NjI1IDEwOS40MTkyNjUwNC0yNC40MTAzNzgtNTkuNDkwMDg1OHoiIGZpbGw9IiNlODhmMzUiLz48cGF0aCBkPSJtMjMuMzQ5MDU3IDEuMDYyMzIyOTYtMTkuMTAzNzczOTIgNTguNDI3NzYyOTQgMTAuNjEzMjA3NzIgNjMuNzM5Mzc4MS03LjQyOTI0NTQxIDQuMjQ5MjkyIDEwLjYxMzIwNzcxIDkuNTYwOTA2LTguNDkwNTY2MTcgNy40MzYyNjEgMTEuNjc0NTI4NDcgMTAuNjIzMjI5LTcuNDI5MjQ1NCA2LjM3MzkzOCAxNi45ODExMzIzIDIxLjI0NjQ1OSA3OS41OTkwNTc3LTI0LjQzMzQyOGMzOC45MTUwOTYtMzEuMTYxNDczIDU4LjAxODg2OS00Ny4wOTYzMTggNTcuMzExMzIyLTQ3LjgwNDUzMy0uNzA3NTQ4LS43MDgyMTUtNDguODIwNzU2LTM3LjE4MTMwMzYtMTQ0LjMzOTYyNS0xMDkuNDE5MjY1MDR6IiBmaWxsPSIjOGU1YTMwIi8+PC9nPjwvZz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgNDQwIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6IzAwOGM3Mzt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPnNhbnNfd2hpdGUgY29weTwvdGl0bGU+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjIwLDkuODJDMTAzLjkyLDkuODIsOS44MiwxMDMuOTIsOS44MiwyMjBTMTAzLjkyLDQzMC4xOCwyMjAsNDMwLjE4LDQzMC4xOCwzMzYuMDgsNDMwLjE4LDIyMCwzMzYuMDgsOS44MiwyMjAsOS44MlpNMzczLjgzLDIzMS40N0gyNzYuM2E1OS40MSw1OS40MSwwLDEsMSwuNDUtMjAuNjdoOTcuMDhhMTAuMzQsMTAuMzQsMCwxLDEsMCwyMC42N1oiLz48L3N2Zz4=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNTguOCAxODQiIHZpZXdCb3g9IjAgMCAxNTguOCAxODQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzU0IDM1MSkiPjxwYXRoIGQ9Im0tMjc0LjYtMzQzLjdjMjkuMyAyMi43IDYyLjkgMjEuMyA3Mi41IDIxLjMtMi4xIDEyOS4xLTE4LjEgMTExLjktNzIuNSAxNDguMS01NC40LTM2LjItNzAuMy0xOS03Mi40LTE0OC4xIDkuNSAwIDQzIDEuNCA3Mi40LTIxLjN6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0ibS0yNzQuNi0zNDMuNyA0LjItNS41Yy0yLjUtMS45LTYtMS45LTguNSAwem03Mi41IDIxLjMgNi45LjFjMC0xLjktLjctMy42LTItNS0xLjMtMS4zLTMuMS0yLjEtNC45LTIuMXptLTcyLjUgMTQ4LjEtMy44IDUuOGMyLjMgMS41IDUuMyAxLjUgNy43IDB6bS03Mi40LTE0OC4xdi02LjljLTEuOSAwLTMuNi43LTQuOSAyLjEtMS4zIDEuMy0yIDMuMS0yIDV6bTY4LjEtMTUuOGMzMS40IDI0LjMgNjcuMyAyMi43IDc2LjcgMjIuN3YtMTMuOGMtOS44IDAtNDEuMSAxLjItNjguMy0xOS45em02OS44IDE1LjdjLS41IDMyLjEtMS45IDU0LjgtNC41IDcxLjYtMi42IDE2LjYtNi4yIDI2LjYtMTEgMzMuNi00LjggNy4zLTEwLjggMTEuNi0xOS43IDE2LjktOSA1LjQtMjAuMyAxMS4yLTM0LjMgMjAuNGw3LjcgMTEuNWMxMy4zLTguOCAyNC4zLTE0LjUgMzMuNy0yMC4xIDkuNS01LjcgMTcuOC0xMS45IDI0LjEtMjEgNi4zLTkuNCAxMC41LTIxLjYgMTMuMi0zOS4yIDIuNy0xNy40IDQuMS00MSA0LjYtNzMuNXptLTYxLjcgMTQyLjRjLTEzLjktOS4zLTI1LjMtMTUuMS0zNC4yLTIwLjRzLTE0LjktOS42LTE5LjctMTYuOWMtNC43LTctOC40LTE2LjktMTAuOS0zMy42LTIuNi0xNi44LTMuOS0zOS40LTQuNS03MS42bC0xMy45LjNjLjUgMzIuNCAyIDU2IDQuNiA3My41IDIuNyAxNy42IDYuOCAyOS44IDEzLjEgMzkuMiA2LjMgOS4xIDE0LjYgMTUuMyAyNCAyMSA5LjQgNS42IDIwLjQgMTEuMiAzMy43IDIwLjF6bS03Ni4yLTEzNS40YzkuMyAwIDQ1LjMgMS42IDc2LjYtMjIuN2wtOC40LTExYy0yNy4yIDIxLjEtNTguNSAxOS45LTY4LjIgMTkuOXoiIGZpbGw9IiMzMzc1YmIiLz48L2c+PC9zdmc+\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PGNpcmNsZSBpZD0iYSIgY3g9IjU5LjkyOCIgY3k9IjU5LjkyOCIgcj0iNTkuOTI4Ii8+PGxpbmVhckdyYWRpZW50IHgxPSI1MCUiIHkxPSIwJSIgeDI9IjUwJSIgeTI9IjEwMCUiIGlkPSJjIj48c3RvcCBzdG9wLWNvbG9yPSIjMkU2NkY4IiBvZmZzZXQ9IjAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzEyNEFEQiIgb2Zmc2V0PSIxMDAlIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0wIDBoMTI4djEyOEgweiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTAgMGgxMjh2MTI4SDB6Ii8+PHBhdGggZD0iTTAgMGgxMjh2MTI4SDB6Ii8+PHBhdGggZD0iTTE5IDY0YzAgMjQuODUzIDIwLjE0NyA0NSA0NSA0NXM0NS0yMC4xNDcgNDUtNDUtMjAuMTQ3LTQ1LTQ1LTQ1LTQ1IDIwLjE0Ny00NSA0NXptMzMuNS0xNC41YTMgMyAwIDAgMC0zIDN2MjNhMyAzIDAgMCAwIDMgM2gyM2EzIDMgMCAwIDAgMy0zdi0yM2EzIDMgMCAwIDAtMy0zaC0yM3oiIGZpbGw9IiNGRkYiLz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0IDQpIj48bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvbWFzaz48ZyBtYXNrPSJ1cmwoI2IpIj48cGF0aCBkPSJNMCAwaDExOS44NTZ2MTE5Ljg1NkgweiIvPjxyZWN0IGZpbGw9InVybCgjYykiIGZpbGwtcnVsZT0ibm9uemVybyIgd2lkdGg9IjExOS44NTYiIGhlaWdodD0iMTE5Ljg1NiIgcng9IjQ4Ii8+PHBhdGggZD0iTTI0Ljk3IDU5LjkyOGMwIDE5LjMwNyAxNS42NTEgMzQuOTU4IDM0Ljk1OCAzNC45NThzMzQuOTU4LTE1LjY1MSAzNC45NTgtMzQuOTU4Uzc5LjIzNSAyNC45NyA1OS45MjggMjQuOTcgMjQuOTcgNDAuNjIgMjQuOTcgNTkuOTI4em0yNi4wMjQtMTEuMjY0YTIuMzMgMi4zMyAwIDAgMC0yLjMzIDIuMzN2MTcuODY4YTIuMzMgMi4zMyAwIDAgMCAyLjMzIDIuMzNoMTcuODY4YTIuMzMgMi4zMyAwIDAgMCAyLjMzLTIuMzNWNTAuOTk0YTIuMzMgMi4zMyAwIDAgMC0yLjMzLTIuMzNINTAuOTk0eiIgZmlsbD0iI0ZGRiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA3MiIgaGVpZ2h0PSIxMDcyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxsaW5lYXJHcmFkaWVudCB4MT0iNTAlIiB5MT0iMCUiIHgyPSI1MCUiIHkyPSIxMDAlIiBpZD0iYSI+PHN0b3Agc3RvcC1jb2xvcj0iIzM5NDlBQiIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiMxQTIzN0UiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGNpcmNsZSBmaWxsPSJ1cmwoI2EpIiBjeD0iNTM1LjcxNCIgY3k9IjUzNS43MTQiIHI9IjUzNS43MTQiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSAxNjkuOTA2IDY4Ny4yMzcpIiBmaWxsPSIjRkZGIj48cGF0aCBkPSJNNjYuODE0IDBoMTc3LjljMzYuOSAwIDY2LjgxNCAyOS45MTQgNjYuODE0IDY2LjgxNHYxNzcuOWMwIDM2LjktMjkuOTEzIDY2LjgxNC02Ni44MTMgNjYuODE0SDY2LjgxNEMyOS45MTQgMzExLjUyOCAwIDI4MS42MTUgMCAyNDQuNzE1VjY2LjgxNEMwIDI5LjkxNCAyOS45MTQgMCA2Ni44MTQgMHptODguOTUgMjE0LjE3NmMzMi4yNiAwIDU4LjQxMi0yNi4xNTIgNTguNDEyLTU4LjQxMnMtMjYuMTUyLTU4LjQxMS01OC40MTItNTguNDExLTU4LjQxMSAyNi4xNTEtNTguNDExIDU4LjQxMWMwIDMyLjI2IDI2LjE1MSA1OC40MTIgNTguNDExIDU4LjQxMnoiLz48cGF0aCBkPSJNMzk3LjgxIDI1LjA1OGMtMjMuMDYzIDAtNDEuNzU5IDE4LjY5Ni00MS43NTkgNDEuNzU5djE3Ny45YzAgMjMuMDY0IDE4LjY5NiA0MS43NiA0MS43NTkgNDEuNzZoMTc3LjljMjMuMDYzIDAgNDEuNzYtMTguNjk2IDQxLjc2LTQxLjc2di0xNzcuOWMwLTIzLjA2My0xOC42OTctNDEuNzU5LTQxLjc2LTQxLjc1OWgtMTc3Ljl6bTAtMjUuMDU1aDE3Ny45YzM2LjkgMCA2Ni44MTQgMjkuOTE0IDY2LjgxNCA2Ni44MTR2MTc3LjljMCAzNi45MDEtMjkuOTEzIDY2LjgxNS02Ni44MTQgNjYuODE1aC0xNzcuOWMtMzYuOSAwLTY2LjgxNC0yOS45MTQtNjYuODE0LTY2LjgxNFY2Ni44MTdjMC0zNi45IDI5LjkxMy02Ni44MTQgNjYuODE0LTY2LjgxNHoiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxjaXJjbGUgY3g9IjQ4Ni43NiIgY3k9IjE1NS43NjciIHI9IjU4LjQxMiIvPjxwYXRoIGQ9Ik02Ni44MTQgMzMwLjk5OWgxNzcuOWMzNi45IDAgNjYuODE0IDI5LjkxNCA2Ni44MTQgNjYuODE0djE3Ny45YzAgMzYuOS0yOS45MTMgNjYuODE0LTY2LjgxMyA2Ni44MTRINjYuODE0QzI5LjkxNCA2NDIuNTI3IDAgNjEyLjYxNCAwIDU3NS43MTRWMzk3LjgxM2MwLTM2LjkgMjkuOTE0LTY2LjgxNCA2Ni44MTQtNjYuODE0em04OC45NSAyMTQuMTc2YzMyLjI2IDAgNTguNDEyLTI2LjE1MiA1OC40MTItNTguNDEycy0yNi4xNTItNTguNDExLTU4LjQxMi01OC40MTEtNTguNDExIDI2LjE1MS01OC40MTEgNTguNDExYzAgMzIuMjYgMjYuMTUxIDU4LjQxMiA1OC40MTEgNTguNDEyem0yNDIuMDQ5LTIxNC4xNzZoMTc3LjljMzYuOSAwIDY2LjgxNCAyOS45MTQgNjYuODE0IDY2LjgxNHYxNzcuOWMwIDM2LjktMjkuOTEzIDY2LjgxNC02Ni44MTMgNjYuODE0SDM5Ny44MTNjLTM2LjkgMC02Ni44MTQtMjkuOTEzLTY2LjgxNC02Ni44MTNWMzk3LjgxM2MwLTM2LjkgMjkuOTE0LTY2LjgxNCA2Ni44MTQtNjYuODE0em04OC45NSAyMTQuMTc2YzMyLjI2IDAgNTguNDEyLTI2LjE1MiA1OC40MTItNTguNDEycy0yNi4xNTItNTguNDExLTU4LjQxMi01OC40MTEtNTguNDExIDI2LjE1MS01OC40MTEgNTguNDExYzAgMzIuMjYgMjYuMTUxIDU4LjQxMiA1OC40MTEgNTguNDEyeiIvPjwvZz48L2c+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2NCA2NCIgdmlld0JveD0iMCAwIDY0IDY0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48bGluZWFyR3JhZGllbnQgaWQ9ImEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMjMuOTg2NiAwIDAgLTE2Ljk0NiA2NTk3LjEzNTMgNTY5NS40OTA3KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSItMjcyLjUyNzIiIHgyPSItMjc1LjEyMDciIHkxPSIzMzUuNTUzMiIgeTI9IjMzMi45NTk3Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMxMWM0ZDEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwMDYyYWQiLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9Im02My44IDEwLjljMi4xIDI4LjYtMTYuMiA0Mi4xLTMyLjcgNDMuNi0xNS4zIDEuMy0yOS43LTguMS0zMS0yMi41LTEtMTEuOSA2LjMtMTcgMTIuMS0xNy41IDYtLjUgMTEgMy42IDExLjQgOC42LjQgNC44LTIuNiA3LTQuNiA3LjItMS42LjEtMy43LS45LTMuOS0zLS4yLTEuOC41LTIuMS40LTQtLjMtMy41LTMuMy0zLjktNS0zLjctMiAuMi01LjcgMi41LTUuMSA4LjQuNSA1LjkgNi4yIDEwLjYgMTMuNiA5LjkgOC0uNyAxMy42LTYuOSAxNC0xNS43IDAtLjUuMS0uOS4zLTEuMy4xLS4yLjItLjQuMy0uNS4yLS4zLjQtLjUuNy0uOC4yLS4yLjUtLjUuNy0uOCAzLjUtMy4zIDE2LjEtMTEuMSAyOC04LjYuNC0uMi44LjIuOC43IiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAwIiBoZWlnaHQ9IjIwMDAiPjxjaXJjbGUgY3g9IjEwMDAiIGN5PSIxMDAwIiByPSIxMDAwIiBmaWxsPSIjNWI2ZGVlIi8+PHBhdGggZD0iTTgzMS4yNyA5MzguNzlhNTcxLjUgNTcxLjUgMCAwIDAtMTA0IDguOTVjMjguMjUtMjYxLjI4IDI0Ni00NTkuMTIgNTA1LjI0LTQ1OS4xIDE1OC43MyAwIDI2Ny40OSA3Ny43MiAyNjcuNDkgMjM4LjY0cy0xMzAuNTQgMjM4LjY0LTMyMSAyMzguNjRjLTE0MC41OC0uMDEtMjA3LjEzLTI3LjEzLTM0Ny43My0yNy4xM20tMTAuMjcgOTUuM2MtMTkwLjQ1IDAtMzIxIDc3LjcyLTMyMSAyMzguNjRzMTA4Ljc2IDIzOC42NCAyNjcuNDkgMjM4LjY0YzI1OS4yNyAwIDQ3Ny0xOTcuODIgNTA1LjI0LTQ1OS4xYTU3MS41IDU3MS41IDAgMCAxLTEwNCA4Ljk1Yy0xNDAuNi0uMDEtMjA3LjE1LTI3LjEzLTM0Ny43My0yNy4xMyIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODEiIGhlaWdodD0iODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNLjcxIDBINjh2NzkuOEguNzF6Ii8+PHBhdGggZD0iTTQwLjYxIDBDMTguNTczIDAgLjcxIDE3Ljg2My43MSAzOS45MDJjMCAyMS4zOTkgMTYuODQ1IDM4Ljg2IDM3Ljk5NyAzOS44NTIuNjMzLjAzMSAxLjI2Ni4wNDcgMS45MDIuMDQ3IDEwLjIxNSAwIDE5LjUzMi0zLjg0IDI2LjU5LTEwLjE1My00LjY3NiAzLjEwMi0xMC4xNDQgNC44ODctMTUuOTg4IDQuODg3LTkuNSAwLTE4LjAxMi00LjcxNS0yMy43MzQtMTIuMTQ4LTQuNDEtNS4yMDctNy4yNy0xMi45MDctNy40NjUtMjEuNTQ3di0xLjg4Yy4xOTUtOC42NCAzLjA1NC0xNi4zMzkgNy40NjUtMjEuNTQ2QzMzLjE5OSA5Ljk4NCA0MS43MSA1LjI3IDUxLjIxIDUuMjdjNS44NDQgMCAxMS4zMTYgMS43ODUgMTUuOTkyIDQuODg2QzYwLjE4IDMuODc1IDUwLjkxOC4wNCA0MC43NjIuMDA0IDQwLjcxLjAwNCA0MC42NiAwIDQwLjYwOSAweiIgaWQ9ImMiLz48bGluZWFyR3JhZGllbnQgeDE9IjQ5Ljk5OSUiIHkxPSIwJSIgeDI9IjQ5Ljk5OSUiIHkyPSIxMDAlIiBpZD0iZCI+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMUIyRCIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRjFCMkQiIG9mZnNldD0iMjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZGMUIyRCIgb2Zmc2V0PSIzMS4yNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkYxQjJEIiBvZmZzZXQ9IjM0LjM3NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkUxQjJEIiBvZmZzZXQ9IjM3LjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZEMUEyRCIgb2Zmc2V0PSIzOS4wNjMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZEMUEyQyIgb2Zmc2V0PSI0MC42MjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZDMUEyQyIgb2Zmc2V0PSI0Mi4xODglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZCMUEyQyIgb2Zmc2V0PSI0My43NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkExQTJDIiBvZmZzZXQ9IjQ0LjUzMSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkExOTJDIiBvZmZzZXQ9IjQ1LjMxMyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjkxOTJCIiBvZmZzZXQ9IjQ2LjA5NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjkxOTJCIiBvZmZzZXQ9IjQ2Ljg3NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjgxOTJCIiBvZmZzZXQ9IjQ3LjY1NiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjgxOTJCIiBvZmZzZXQ9IjQ4LjQzOCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjcxOTJCIiBvZmZzZXQ9IjQ5LjIxOSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjYxODJCIiBvZmZzZXQ9IjUwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGNjE4MkEiIG9mZnNldD0iNTAuNzgxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGNTE4MkEiIG9mZnNldD0iNTEuNTYzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGNDE4MkEiIG9mZnNldD0iNTIuMzQ0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGNDE3MkEiIG9mZnNldD0iNTMuMTI1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGMzE3MkEiIG9mZnNldD0iNTMuOTA2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGMjE3MjkiIG9mZnNldD0iNTQuNjg4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGMTE3MjkiIG9mZnNldD0iNTUuNDY5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGMDE3MjkiIG9mZnNldD0iNTYuMjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0YwMTYyOSIgb2Zmc2V0PSI1Ny4wMzElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VGMTYyOCIgb2Zmc2V0PSI1Ny44MTMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VFMTYyOCIgb2Zmc2V0PSI1OC41OTQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VEMTUyOCIgb2Zmc2V0PSI1OS4zNzUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VDMTUyOCIgb2Zmc2V0PSI2MC4xNTYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VCMTUyNyIgb2Zmc2V0PSI2MC45MzglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VBMTUyNyIgb2Zmc2V0PSI2MS43MTklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U5MTQyNyIgb2Zmc2V0PSI2Mi41JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFODE0MjciIG9mZnNldD0iNjIuODkxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFODE0MjYiIG9mZnNldD0iNjMuMjgxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFNzE0MjYiIG9mZnNldD0iNjMuNjcyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFNzE0MjYiIG9mZnNldD0iNjQuMDYzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFNjEzMjYiIG9mZnNldD0iNjQuNDUzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFNjEzMjYiIG9mZnNldD0iNjQuODQ0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFNTEzMjYiIG9mZnNldD0iNjUuMjM0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFNTEzMjYiIG9mZnNldD0iNjUuNjI1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFNDEzMjUiIG9mZnNldD0iNjYuMDE2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFNDEzMjUiIG9mZnNldD0iNjYuNDA2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMzEyMjUiIG9mZnNldD0iNjYuNzk3JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMjEyMjUiIG9mZnNldD0iNjcuMTg4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMjEyMjUiIG9mZnNldD0iNjcuNTc4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMTEyMjUiIG9mZnNldD0iNjcuOTY5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMTEyMjQiIG9mZnNldD0iNjguMzU5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMDEyMjQiIG9mZnNldD0iNjguNzUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0UwMTEyNCIgb2Zmc2V0PSI2OS4xNDElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0RGMTEyNCIgb2Zmc2V0PSI2OS41MzElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0RFMTEyNCIgb2Zmc2V0PSI2OS45MjIlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0RFMTEyNCIgb2Zmc2V0PSI3MC4zMTMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0REMTEyMyIgb2Zmc2V0PSI3MC43MDMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0REMTAyMyIgb2Zmc2V0PSI3MS4wOTQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0RDMTAyMyIgb2Zmc2V0PSI3MS40ODQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0RCMTAyMyIgb2Zmc2V0PSI3MS44NzUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0RCMTAyMyIgb2Zmc2V0PSI3Mi4yNjYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0RBMTAyMyIgb2Zmc2V0PSI3Mi42NTYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0RBMTAyMiIgb2Zmc2V0PSI3My4wNDclIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Q5MEYyMiIgb2Zmc2V0PSI3My40MzglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Q4MEYyMiIgb2Zmc2V0PSI3My44MjglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Q4MEYyMiIgb2Zmc2V0PSI3NC4yMTklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Q3MEYyMiIgb2Zmc2V0PSI3NC42MDklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Q2MEYyMSIgb2Zmc2V0PSI3NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDYwRTIxIiBvZmZzZXQ9Ijc1LjM5MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDUwRTIxIiBvZmZzZXQ9Ijc1Ljc4MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDQwRTIxIiBvZmZzZXQ9Ijc2LjE3MiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDQwRTIxIiBvZmZzZXQ9Ijc2LjU2MyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDMwRTIxIiBvZmZzZXQ9Ijc2Ljk1MyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDIwRDIwIiBvZmZzZXQ9Ijc3LjM0NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDIwRDIwIiBvZmZzZXQ9Ijc3LjczNCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDEwRDIwIiBvZmZzZXQ9Ijc4LjEyNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDAwRDIwIiBvZmZzZXQ9Ijc4LjUxNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDAwQzIwIiBvZmZzZXQ9Ijc4LjkwNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQ0YwQzFGIiBvZmZzZXQ9Ijc5LjI5NyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQ0UwQzFGIiBvZmZzZXQ9Ijc5LjY4OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQ0UwQzFGIiBvZmZzZXQ9IjgwLjA3OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQ0QwQzFGIiBvZmZzZXQ9IjgwLjQ2OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQ0MwQjFGIiBvZmZzZXQ9IjgwLjg1OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQ0IwQjFFIiBvZmZzZXQ9IjgxLjI1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDQjBCMUUiIG9mZnNldD0iODEuNjQxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDQTBCMUUiIG9mZnNldD0iODIuMDMxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDOTBBMUUiIG9mZnNldD0iODIuNDIyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDODBBMUUiIG9mZnNldD0iODIuODEzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDODBBMUQiIG9mZnNldD0iODMuMjAzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDNzBBMUQiIG9mZnNldD0iODMuNTk0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDNjBBMUQiIG9mZnNldD0iODMuOTg0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDNTA5MUQiIG9mZnNldD0iODQuMzc1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDNTA5MUMiIG9mZnNldD0iODQuNzY2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDNDA5MUMiIG9mZnNldD0iODUuMTU2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDMzA5MUMiIG9mZnNldD0iODUuNTQ3JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDMjA4MUMiIG9mZnNldD0iODUuOTM4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDMjA4MUMiIG9mZnNldD0iODYuMzI4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDMTA4MUIiIG9mZnNldD0iODYuNzE5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDMDA4MUIiIG9mZnNldD0iODcuMTA5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCRjA3MUIiIG9mZnNldD0iODcuNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQkUwNzFCIiBvZmZzZXQ9Ijg3Ljg5MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQkUwNzFBIiBvZmZzZXQ9Ijg4LjI4MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQkQwNzFBIiBvZmZzZXQ9Ijg4LjY3MiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQkMwNjFBIiBvZmZzZXQ9Ijg5LjA2MyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQkIwNjFBIiBvZmZzZXQ9Ijg5LjQ1MyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQkEwNjFBIiBvZmZzZXQ9Ijg5Ljg0NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQkEwNjE5IiBvZmZzZXQ9IjkwLjIzNCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjkwNTE5IiBvZmZzZXQ9IjkwLjYyNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjgwNTE5IiBvZmZzZXQ9IjkxLjAxNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjcwNTE5IiBvZmZzZXQ9IjkxLjQwNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjYwNTE4IiBvZmZzZXQ9IjkxLjc5NyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjUwNDE4IiBvZmZzZXQ9IjkyLjE4OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjUwNDE4IiBvZmZzZXQ9IjkyLjU3OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjQwNDE4IiBvZmZzZXQ9IjkyLjk2OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjMwNDE3IiBvZmZzZXQ9IjkzLjM1OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQjIwMzE3IiBvZmZzZXQ9IjkzLjc1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMTAzMTciIG9mZnNldD0iOTQuMTQxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMDAzMTciIG9mZnNldD0iOTQuNTMxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRjAzMTYiIG9mZnNldD0iOTQuOTIyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRTAyMTYiIG9mZnNldD0iOTUuMzEzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRTAyMTYiIG9mZnNldD0iOTUuNzAzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRDAyMTYiIG9mZnNldD0iOTYuMDk0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBQzAxMTUiIG9mZnNldD0iOTYuNDg0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBQjAxMTUiIG9mZnNldD0iOTYuODc1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBQTAxMTUiIG9mZnNldD0iOTcuMjY2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBOTAxMTUiIG9mZnNldD0iOTcuNjU2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBODAwMTQiIG9mZnNldD0iOTguMDQ3JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBNzAwMTQiIG9mZnNldD0iOTguNDM4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBNzAwMTQiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggaWQ9ImYiIGQ9Ik0wIDBoNTR2NzBIMHoiLz48cGF0aCBkPSJNLjQ3NyAxMi40MTRjMy42Ni00LjMyIDguMzktNi45MjYgMTMuNTU0LTYuOTI2IDExLjYxNyAwIDIxLjAzMiAxMy4xNjggMjEuMDMyIDI5LjQxNCAwIDE2LjI0My05LjQxNSAyOS40MS0yMS4wMzIgMjkuNDEtNS4xNjQgMC05Ljg5NC0yLjYwNS0xMy41NTQtNi45MjVDNi4xOTkgNjQuODIgMTQuNzEgNjkuNTM1IDI0LjIxIDY5LjUzNWM1Ljg0NCAwIDExLjMxMi0xLjc4NSAxNS45ODgtNC44ODcgOC4xNjgtNy4zMDggMTMuMzEzLTE3LjkyNSAxMy4zMTMtMjkuNzQ2IDAtMTEuODItNS4xNDUtMjIuNDQxLTEzLjMwOS0yOS43NDZDMzUuNTI3IDIuMDU1IDMwLjA1NS4yNyAyNC4yMTEuMjcgMTQuNzEuMjcgNi4xOTkgNC45ODQuNDc3IDEyLjQxNCIgaWQ9ImgiLz48bGluZWFyR3JhZGllbnQgeDE9IjQ5Ljk5OCUiIHkxPSItLjAwMSUiIHgyPSI0OS45OTglIiB5Mj0iOTkuOTk3JSIgaWQ9ImkiPjxzdG9wIHN0b3AtY29sb3I9IiM5QzAwMDAiIG9mZnNldD0iMCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjOUMwMDAwIiBvZmZzZXQ9Ii43ODElIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzlEMDAwMCIgb2Zmc2V0PSIxLjE3MiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjOUQwMTAxIiBvZmZzZXQ9IjEuNTYzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiM5RTAxMDEiIG9mZnNldD0iMS45NTMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMDIwMiIgb2Zmc2V0PSIyLjM0NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjOUYwMjAyIiBvZmZzZXQ9IjIuNzM0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiM5RjAyMDIiIG9mZnNldD0iMy4xMjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0EwMDMwMyIgb2Zmc2V0PSIzLjUxNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQTAwMzAzIiBvZmZzZXQ9IjMuOTA2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBMTA0MDQiIG9mZnNldD0iNC4yOTclIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ExMDQwNCIgb2Zmc2V0PSI0LjY4OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQTIwNTA1IiBvZmZzZXQ9IjUuMDc4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBMzA1MDUiIG9mZnNldD0iNS40NjklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0EzMDUwNSIgb2Zmc2V0PSI1Ljg1OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQTQwNjA2IiBvZmZzZXQ9IjYuMjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0E0MDYwNiIgb2Zmc2V0PSI2LjY0MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQTUwNzA3IiBvZmZzZXQ9IjcuMDMxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBNTA3MDciIG9mZnNldD0iNy40MjIlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0E2MDgwOCIgb2Zmc2V0PSI3LjgxMyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQTcwODA4IiBvZmZzZXQ9IjguMjAzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBNzA4MDgiIG9mZnNldD0iOC41OTQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0E4MDkwOSIgb2Zmc2V0PSI4Ljk4NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQTgwOTA5IiBvZmZzZXQ9IjkuMzc1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBOTBBMEEiIG9mZnNldD0iOS43NjYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0E5MEEwQSIgb2Zmc2V0PSIxMC4xNTYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0FBMEIwQiIgb2Zmc2V0PSIxMC41NDclIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0FBMEIwQiIgb2Zmc2V0PSIxMC45MzglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0FCMEIwQiIgb2Zmc2V0PSIxMS4zMjglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0FDMEMwQyIgb2Zmc2V0PSIxMS43MTklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0FDMEMwQyIgb2Zmc2V0PSIxMi4xMDklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0FEMEQwRCIgb2Zmc2V0PSIxMi41JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRDBEMEQiIG9mZnNldD0iMTIuODkxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRTBEMEQiIG9mZnNldD0iMTMuMjgxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRTBFMEUiIG9mZnNldD0iMTMuNjcyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRjBFMEUiIG9mZnNldD0iMTQuMDYzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNBRjBGMEYiIG9mZnNldD0iMTQuNDUzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMDBGMEYiIG9mZnNldD0iMTQuODQ0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMTEwMTAiIG9mZnNldD0iMTUuMjM0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMTEwMTAiIG9mZnNldD0iMTUuNjI1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMjEwMTAiIG9mZnNldD0iMTYuMDE2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMjExMTEiIG9mZnNldD0iMTYuNDA2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMzExMTEiIG9mZnNldD0iMTYuNzk3JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCMzEyMTIiIG9mZnNldD0iMTcuMTg4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCNDEyMTIiIG9mZnNldD0iMTcuNTc4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCNTEzMTMiIG9mZnNldD0iMTcuOTY5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCNTEzMTMiIG9mZnNldD0iMTguMzU5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNCNjEzMTMiIG9mZnNldD0iMTguNzUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0I2MTQxNCIgb2Zmc2V0PSIxOS4xNDElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0I3MTQxNCIgb2Zmc2V0PSIxOS41MzElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0I3MTUxNSIgb2Zmc2V0PSIxOS45MjIlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0I4MTUxNSIgb2Zmc2V0PSIyMC4zMTMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0I4MTYxNiIgb2Zmc2V0PSIyMC43MDMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0I5MTYxNiIgb2Zmc2V0PSIyMS4wOTQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JBMTYxNiIgb2Zmc2V0PSIyMS40ODQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JBMTcxNyIgb2Zmc2V0PSIyMS44NzUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JCMTcxNyIgb2Zmc2V0PSIyMi4yNjYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JCMTgxOCIgb2Zmc2V0PSIyMi42NTYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JDMTgxOCIgb2Zmc2V0PSIyMy4wNDclIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JDMTkxOSIgb2Zmc2V0PSIyMy40MzglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JEMTkxOSIgb2Zmc2V0PSIyMy44MjglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JEMTkxOSIgb2Zmc2V0PSIyNC4yMTklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JFMUExQSIgb2Zmc2V0PSIyNC42MDklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0JGMUExQSIgb2Zmc2V0PSIyNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQkYxQjFCIiBvZmZzZXQ9IjI1LjM5MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzAxQjFCIiBvZmZzZXQ9IjI1Ljc4MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzAxQjFCIiBvZmZzZXQ9IjI2LjE3MiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzExQzFDIiBvZmZzZXQ9IjI2LjU2MyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzExQzFDIiBvZmZzZXQ9IjI2Ljk1MyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzIxRDFEIiBvZmZzZXQ9IjI3LjM0NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzIxRDFEIiBvZmZzZXQ9IjI3LjczNCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzMxRTFFIiBvZmZzZXQ9IjI4LjEyNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzQxRTFFIiBvZmZzZXQ9IjI4LjUxNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzQxRTFFIiBvZmZzZXQ9IjI4LjkwNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzUxRjFGIiBvZmZzZXQ9IjI5LjI5NyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzUxRjFGIiBvZmZzZXQ9IjI5LjY4OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzYyMDIwIiBvZmZzZXQ9IjMwLjA3OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzYyMDIwIiBvZmZzZXQ9IjMwLjQ2OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzcyMTIxIiBvZmZzZXQ9IjMwLjg1OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjQzgyMTIxIiBvZmZzZXQ9IjMxLjI1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDODIxMjEiIG9mZnNldD0iMzEuNjQxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDOTIyMjIiIG9mZnNldD0iMzIuMDMxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDOTIyMjIiIG9mZnNldD0iMzIuNDIyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDQTIzMjMiIG9mZnNldD0iMzIuODEzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDQTIzMjMiIG9mZnNldD0iMzMuMjAzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDQjI0MjQiIG9mZnNldD0iMzMuNTk0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDQjI0MjQiIG9mZnNldD0iMzMuOTg0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDQzI0MjQiIG9mZnNldD0iMzQuMzc1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDRDI1MjUiIG9mZnNldD0iMzQuNzY2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDRDI1MjUiIG9mZnNldD0iMzUuMTU2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDRTI2MjYiIG9mZnNldD0iMzUuNTQ3JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDRTI2MjYiIG9mZnNldD0iMzUuOTM4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDRjI2MjYiIG9mZnNldD0iMzYuMzI4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNDRjI3MjciIG9mZnNldD0iMzYuNzE5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEMDI3MjciIG9mZnNldD0iMzcuMTA5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEMDI4MjgiIG9mZnNldD0iMzcuNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDEyODI4IiBvZmZzZXQ9IjM3Ljg5MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDIyOTI5IiBvZmZzZXQ9IjM4LjI4MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDIyOTI5IiBvZmZzZXQ9IjM4LjY3MiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDMyOTI5IiBvZmZzZXQ9IjM5LjA2MyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDMyQTJBIiBvZmZzZXQ9IjM5LjQ1MyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDQyQTJBIiBvZmZzZXQ9IjM5Ljg0NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDQyQjJCIiBvZmZzZXQ9IjQwLjIzNCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDUyQjJCIiBvZmZzZXQ9IjQwLjYyNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDYyQzJDIiBvZmZzZXQ9IjQxLjAxNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDYyQzJDIiBvZmZzZXQ9IjQxLjQwNiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDcyQzJDIiBvZmZzZXQ9IjQxLjc5NyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDcyRDJEIiBvZmZzZXQ9IjQyLjE4OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDgyRDJEIiBvZmZzZXQ9IjQyLjU3OCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDgyRTJFIiBvZmZzZXQ9IjQyLjk2OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDkyRTJFIiBvZmZzZXQ9IjQzLjM1OSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRDkyRjJGIiBvZmZzZXQ9IjQzLjc1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEQTJGMkYiIG9mZnNldD0iNDQuMTQxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEQjJGMkYiIG9mZnNldD0iNDQuNTMxJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEQjMwMzAiIG9mZnNldD0iNDQuOTIyJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEQzMwMzAiIG9mZnNldD0iNDUuMzEzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNEQzMxMzEiIG9mZnNldD0iNDUuNzAzJSIvPjxzdG9wIHN0b3AtY29sb3I9IiNERDMxMzEiIG9mZnNldD0iNDYuMDk0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNERDMyMzIiIG9mZnNldD0iNDYuNDg0JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNERTMyMzIiIG9mZnNldD0iNDYuODc1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNERTMyMzIiIG9mZnNldD0iNDcuMjY2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNERjMzMzMiIG9mZnNldD0iNDcuNjU2JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMDMzMzMiIG9mZnNldD0iNDguMDQ3JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMDM0MzQiIG9mZnNldD0iNDguNDM4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMTM0MzQiIG9mZnNldD0iNDguODI4JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMTM0MzQiIG9mZnNldD0iNDkuMjE5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMjM1MzUiIG9mZnNldD0iNDkuNjA5JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNFMjM1MzUiIG9mZnNldD0iNTAlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0UzMzYzNiIgb2Zmc2V0PSI1MC4zOTElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U0MzYzNiIgb2Zmc2V0PSI1MC43ODElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U0MzczNyIgb2Zmc2V0PSI1MS4xNzIlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U1MzczNyIgb2Zmc2V0PSI1MS41NjMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U1MzczNyIgb2Zmc2V0PSI1MS45NTMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U2MzgzOCIgb2Zmc2V0PSI1Mi4zNDQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U2MzgzOCIgb2Zmc2V0PSI1Mi43MzQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U3MzkzOSIgb2Zmc2V0PSI1My4xMjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U3MzkzOSIgb2Zmc2V0PSI1My41MTYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U4M0EzQSIgb2Zmc2V0PSI1My45MDYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U5M0EzQSIgb2Zmc2V0PSI1NC4yOTclIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0U5M0EzQSIgb2Zmc2V0PSI1NC42ODglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VBM0IzQiIgb2Zmc2V0PSI1NS4wNzglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VBM0IzQiIgb2Zmc2V0PSI1NS40NjklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VCM0MzQyIgb2Zmc2V0PSI1NS44NTklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0VCM0MzQyIgb2Zmc2V0PSI1Ni4yNSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRUMzRDNEIiBvZmZzZXQ9IjU2LjY0MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRUMzRDNEIiBvZmZzZXQ9IjU3LjAzMSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRUQzRDNEIiBvZmZzZXQ9IjU3LjQyMiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRUUzRTNFIiBvZmZzZXQ9IjU3LjgxMyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRUUzRTNFIiBvZmZzZXQ9IjU4LjIwMyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRUYzRjNGIiBvZmZzZXQ9IjU4LjU5NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRUYzRjNGIiBvZmZzZXQ9IjU4Ljk4NCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjAzRjNGIiBvZmZzZXQ9IjU5LjM3NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjA0MDQwIiBvZmZzZXQ9IjU5Ljc2NiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjE0MDQwIiBvZmZzZXQ9IjYwLjE1NiUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjE0MTQxIiBvZmZzZXQ9IjYwLjU0NyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjI0MTQxIiBvZmZzZXQ9IjYwLjkzOCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjM0MjQyIiBvZmZzZXQ9IjYxLjMyOCUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjM0MjQyIiBvZmZzZXQ9IjYxLjcxOSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjQ0MjQyIiBvZmZzZXQ9IjYyLjEwOSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRjQ0MzQzIiBvZmZzZXQ9IjYyLjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y1NDM0MyIgb2Zmc2V0PSI2Mi44OTElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y1NDQ0NCIgb2Zmc2V0PSI2My4yODElIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y2NDQ0NCIgb2Zmc2V0PSI2My42NzIlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y3NDU0NSIgb2Zmc2V0PSI2NC4wNjMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y3NDU0NSIgb2Zmc2V0PSI2NC40NTMlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y4NDU0NSIgb2Zmc2V0PSI2NC44NDQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y4NDY0NiIgb2Zmc2V0PSI2NS4yMzQlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5NDY0NiIgb2Zmc2V0PSI2NS42MjUlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5NDc0NyIgb2Zmc2V0PSI2Ni4wMTYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZBNDc0NyIgb2Zmc2V0PSI2Ni40MDYlIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZBNDg0OCIgb2Zmc2V0PSI2Ni43OTclIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZCNDg0OCIgb2Zmc2V0PSI2Ny4xODglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZDNDg0OCIgb2Zmc2V0PSI2Ny41NzglIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZDNDk0OSIgb2Zmc2V0PSI2Ny45NjklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZENDk0OSIgb2Zmc2V0PSI2OC4zNTklIi8+PHN0b3Agc3RvcC1jb2xvcj0iI0ZENEE0QSIgb2Zmc2V0PSI2OC43NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkU0QTRBIiBvZmZzZXQ9IjY5LjE0MSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkU0QjRCIiBvZmZzZXQ9IjY5LjUzMSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkY0QjRCIiBvZmZzZXQ9IjcwLjMxMyUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkY0QjRCIiBvZmZzZXQ9IjcxLjg3NSUiLz48c3RvcCBzdG9wLWNvbG9yPSIjRkY0QjRCIiBvZmZzZXQ9Ijc1JSIvPjxzdG9wIHN0b3AtY29sb3I9IiNGRjRCNEIiIG9mZnNldD0iMTAwJSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PG1hc2sgaWQ9ImIiIGZpbGw9IiNmZmYiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48L21hc2s+PGcgbWFzaz0idXJsKCNiKSI+PG1hc2sgaWQ9ImUiIGZpbGw9IiNmZmYiPjx1c2UgeGxpbms6aHJlZj0iI2MiLz48L21hc2s+PHBhdGggZmlsbD0idXJsKCNkKSIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI2UpIiBkPSJNNjcuMjAzIDBILjcxMXY3OS44aDY2LjQ5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjcgNSkiPjxtYXNrIGlkPSJnIiBmaWxsPSIjZmZmIj48dXNlIHhsaW5rOmhyZWY9IiNmIi8+PC9tYXNrPjxnIG1hc2s9InVybCgjZykiPjxtYXNrIGlkPSJqIiBmaWxsPSIjZmZmIj48dXNlIHhsaW5rOmhyZWY9IiNoIi8+PC9tYXNrPjxwYXRoIGZpbGw9InVybCgjaSkiIGZpbGwtcnVsZT0ibm9uemVybyIgbWFzaz0idXJsKCNqKSIgZD0iTTUzLjUxMi4yN0guNDc3djY5LjI2NWg1My4wMzV6Ii8+PC9nPjwvZz48L2c+PC9zdmc+\"","module.exports = \"data:image/png;base64,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\"","// @ts-ignore\nimport WalletConnectLogo from \"../logos/walletconnect-circle.svg\";\n// @ts-ignore\nimport PortisLogo from \"../logos/portis.svg\";\n// @ts-ignore\nimport FortmaticLogo from \"../logos/fortmatic.svg\";\n// @ts-ignore\nimport ArkaneLogo from \"../logos/arkane.svg\";\n// @ts-ignore\nimport TorusLogo from \"../logos/torus.svg\";\n// @ts-ignore\nimport AuthereumLogo from \"../logos/authereum.svg\";\n// @ts-ignore\nimport BurnerWalletLogo from \"../logos/burnerwallet.png\";\n// @ts-ignore\nimport MEWwallet from \"../logos/mewwallet.png\";\n// @ts-ignore\nimport DcentWalletLogo from \"../logos/dcentwallet.png\";\n// @ts-ignore\nimport BitskiLogo from \"../logos/bitski.svg\";\n// @ts-ignore\nimport FrameLogo from \"../logos/frame.svg\";\n\nimport { IProviderInfo } from \"../../helpers\";\n\nexport * from \"../injected\";\n\nexport const WALLETCONNECT: IProviderInfo = {\n id: \"walletconnect\",\n name: \"WalletConnect\",\n logo: WalletConnectLogo,\n type: \"qrcode\",\n check: \"isWalletConnect\",\n package: {\n required: [[\"infuraId\", \"rpc\"]]\n }\n};\n\nexport const PORTIS: IProviderInfo = {\n id: \"portis\",\n name: \"Portis\",\n logo: PortisLogo,\n type: \"web\",\n check: \"isPortis\",\n package: {\n required: [\"id\"]\n }\n};\n\nexport const FORTMATIC: IProviderInfo = {\n id: \"fortmatic\",\n name: \"Fortmatic\",\n logo: FortmaticLogo,\n type: \"web\",\n check: \"isFortmatic\",\n package: {\n required: [\"key\"]\n }\n};\n\nexport const TORUS: IProviderInfo = {\n id: \"torus\",\n name: \"Torus\",\n logo: TorusLogo,\n type: \"web\",\n check: \"isTorus\"\n};\n\nexport const ARKANE: IProviderInfo = {\n id: \"arkane\",\n name: \"Arkane\",\n logo: ArkaneLogo,\n type: \"web\",\n check: \"isArkane\",\n package: {\n required: [\"clientId\"]\n }\n};\n\nexport const AUTHEREUM: IProviderInfo = {\n id: \"authereum\",\n name: \"Authereum\",\n logo: AuthereumLogo,\n type: \"web\",\n check: \"isAuthereum\"\n};\n\nexport const BURNERCONNECT: IProviderInfo = {\n id: \"burnerconnect\",\n name: \"Burner Connect\",\n logo: BurnerWalletLogo,\n type: \"web\",\n check: \"isBurnerProvider\"\n};\n\nexport const MEWCONNECT: IProviderInfo = {\n id: \"mewconnect\",\n name: \"MEW wallet\",\n logo: MEWwallet,\n type: \"qrcode\",\n check: \"isMEWconnect\",\n package: {\n required: [[\"infuraId\", \"rpc\"]]\n }\n};\n\nexport const DCENT: IProviderInfo = {\n id: \"dcentwallet\",\n name: \"D'CENT\",\n logo: DcentWalletLogo,\n type: \"hardware\",\n check: \"isDcentWallet\",\n package: {\n required: [\"rpcUrl\"]\n }\n};\n\nexport const BITSKI: IProviderInfo = {\n id: \"bitski\",\n name: \"Bitski\",\n logo: BitskiLogo,\n type: \"web\",\n check: \"isBitski\",\n package: {\n required: [\"clientId\", \"callbackUrl\"]\n }\n};\n\nexport const FRAME: IProviderInfo = {\n id: \"frame\",\n name: \"Frame\",\n logo: FrameLogo,\n type: \"web\",\n check: \"isFrameNative\"\n};\n","module.exports = \"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAlIiBjeT0iNTAlIiByPSIxMDAlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1ZDlkZjYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwMDZmZmYiLz48L3JhZGlhbEdyYWRpZW50PjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0ibTI1NiAwYzE0MS4zODQ4OTYgMCAyNTYgMTE0LjYxNTEwNCAyNTYgMjU2cy0xMTQuNjE1MTA0IDI1Ni0yNTYgMjU2LTI1Ni0xMTQuNjE1MTA0LTI1Ni0yNTYgMTE0LjYxNTEwNC0yNTYgMjU2LTI1NnoiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJtNjQuNjkxNzU1OCAzNy43MDg4Mjk4YzUxLjUzMjgwNzItNTAuMjc4NDM5NyAxMzUuMDgzOTk0Mi01MC4yNzg0Mzk3IDE4Ni42MTY3OTkyIDBsNi4yMDIwNTcgNi4wNTEwOTA2YzIuNTc2NjQgMi41MTM5MjE4IDIuNTc2NjQgNi41ODk3OTQ4IDAgOS4xMDM3MTc3bC0yMS4yMTU5OTggMjAuNjk5NTc1OWMtMS4yODgzMjEgMS4yNTY5NjE5LTMuMzc3MSAxLjI1Njk2MTktNC42NjU0MjEgMGwtOC41MzQ3NjYtOC4zMjcwMjA1Yy0zNS45NTA1NzMtMzUuMDc1NDk2Mi05NC4yMzc5NjktMzUuMDc1NDk2Mi0xMzAuMTg4NTQ0IDBsLTkuMTQwMDI4MiA4LjkxNzU1MTljLTEuMjg4MzIxNyAxLjI1Njk2MDktMy4zNzcxMDE2IDEuMjU2OTYwOS00LjY2NTQyMDggMGwtMjEuMjE1OTk3My0yMC42OTk1NzU5Yy0yLjU3NjY0MDMtMi41MTM5MjI5LTIuNTc2NjQwMy02LjU4OTc5NTggMC05LjEwMzcxNzd6bTIzMC40OTM0ODUyIDQyLjgwODkxMTcgMTguODgyMjc5IDE4LjQyMjcyNjJjMi41NzY2MjcgMi41MTM5MTAzIDIuNTc2NjQyIDYuNTg5NzU5My4wMDAwMzIgOS4xMDM2ODYzbC04NS4xNDE0OTggODMuMDcwMzU4Yy0yLjU3NjYyMyAyLjUxMzk0MS02Ljc1NDE4MiAyLjUxMzk2OS05LjMzMDg0LjAwMDA2Ni0uMDAwMDEtLjAwMDAxLS4wMDAwMjMtLjAwMDAyMy0uMDAwMDMzLS4wMDAwMzRsLTYwLjQyODI1Ni01OC45NTc0NTFjLS42NDQxNi0uNjI4NDgxLTEuNjg4NTUtLjYyODQ4MS0yLjMzMjcxIDAtLjAwMDAwNC4wMDAwMDQtLjAwMDAwOC4wMDAwMDctLjAwMDAxMi4wMDAwMTFsLTYwLjQyNjk2ODMgNTguOTU3NDA4Yy0yLjU3NjYxNDEgMi41MTM5NDctNi43NTQxNzQ2IDIuNTEzOTktOS4zMzA4NDA4LjAwMDA5Mi0uMDAwMDE1MS0uMDAwMDE0LS4wMDAwMzA5LS4wMDAwMjktLjAwMDA0NjctLjAwMDA0NmwtODUuMTQzODY3NzQtODMuMDcxNDYzYy0yLjU3NjYzOTI4LTIuNTEzOTIxLTIuNTc2NjM5MjgtNi41ODk3OTUgMC05LjEwMzcxNjNsMTguODgyMzEyNjQtMTguNDIyNjk1NWMyLjU3NjYzOTMtMi41MTM5MjIyIDYuNzU0MTk5My0yLjUxMzkyMjIgOS4zMzA4Mzk3IDBsNjAuNDI5MTM0NyA1OC45NTgyNzU4Yy42NDQxNjA4LjYyODQ4IDEuNjg4NTQ5NS42Mjg0OCAyLjMzMjcxMDMgMCAuMDAwMDA5NS0uMDAwMDA5LjAwMDAxODItLjAwMDAxOC4wMDAwMjc3LS4wMDAwMjVsNjAuNDI2MTA2NS01OC45NTgyNTA4YzIuNTc2NTgxLTIuNTEzOTggNi43NTQxNDItMi41MTQwNzQzIDkuMzMwODQtLjAwMDIxMDMuMDAwMDM3LjAwMDAzNTQuMDAwMDcyLjAwMDA3MDkuMDAwMTA3LjAwMDEwNjNsNjAuNDI5MDU2IDU4Ljk1ODM1NDhjLjY0NDE1OS42Mjg0NzkgMS42ODg1NDkuNjI4NDc5IDIuMzMyNzA5IDBsNjAuNDI4MDc5LTU4Ljk1NzE5MjVjMi41NzY2NC0yLjUxMzkyMzEgNi43NTQxOTktMi41MTM5MjMxIDkuMzMwODM5IDB6IiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDk4IDE2MCkiLz48L2c+PC9zdmc+\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzAxLjM4IDQ1NS44NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNC40NSAyNjIuMTEgMTAuOTMtNC43NSAxMzUuMzEtNTguODIgMTQ2LjI0IDYzLjU3LTU0Ljk1IDExMy40My0xMzQuMzMgMTktMTAxLTEwOXoiIGZpbGw9IiMxMzM0NDQiLz48cGF0aCBkPSJtMjY2LjUxIDE5Mi4xNmExNTAuNDMgMTUwLjQzIDAgMCAwIC05NS44Mi01M3EtMS4yLS4xNy0yLjQtLjNhMTUyLjM2IDE1Mi4zNiAwIDAgMCAtMzUuMiAwcS0xLjIuMTQtMi40LjNhMTUwLjQzIDE1MC40MyAwIDAgMCAtOTUuODIgNTNsLTYuMDggMTAuMDgtMTAuMTMgMTYuNzYtNy40MSAxMi4zMWMtLjE0LjMzLS4yOC42Ny0uNDEgMWwtLjA5LjIzIDE2LjM1IDkuNjcgMTAzLjYgNjEuMjggMjAgMTEuODN2LTE0Ni40N2wtMjAgOS4wOHYtMjEuOTNsMjAtOS4wOSAyMCA5LjA5IDEwMS45IDQ2LjI4eiIgZmlsbD0iI2M0MjM3MCIvPjxwYXRoIGQ9Im0zMDEuMzggMjk4LjU2YzAgNDguNzgtMjMuMTggOTQuNDItNTkuMTIgMTIzLjg0YTE0OS40NSAxNDkuNDUgMCAwIDEgLTQ3LjY0IDI2LjM3IDEzOS41MSAxMzkuNTEgMCAwIDEgLTQzLjkzIDcuMWMtODMuMjIgMC0xNTAuNjktNzQuMDktMTUwLjY5LTE1Ny4zMWExNTAuNDkgMTUwLjQ5IDAgMCAxIDQuNDUtMzYuNDVsMTQ2LjI0IDg2LjUxIDE0Ni4yNC04Ni41MWExNTAuNDkgMTUwLjQ5IDAgMCAxIDQuNDUgMzYuNDV6IiBmaWxsPSIjMWM0ZDZiIi8+PHBhdGggZD0ibTEzMy4wOSAxMzguODkgMTcuNiA3Ljk5LTIwIDkuMDl2LTE4LjE3eiIvPjxwYXRoIGQ9Im0xMzAuNjkgMTc3LjkzIDIwLTkuMDh2MTQ2LjUzbC0yMC0xMS44M3oiLz48cGF0aCBkPSJtMTUwLjY5IDE2OC44NXYxNDYuNTNsMTQwLjEzLTgyLjg5eiIgZmlsbD0iIzFkNDI1OSIvPjxwYXRoIGQ9Im0xNTAuNjkgMHYxNjguODVsMTQwLjEzIDYzLjY0eiIgZmlsbD0iIzRiNmI5YSIvPjxwYXRoIGQ9Im0xNTAuNjkgMTY4Ljg1djE0Ni41M2wtMjAtMTEuODMtMTE5Ljk1LTcxLS4xOC0uMTEuMjctLjEyYy4xMy0uMzMuMjctLjY3LjQxLTFsMTcuNTMtMjkuMDkgMTAxLjkyLTQ2LjIzdjIyeiIgZmlsbD0iIzM0MzUzNSIvPjxwYXRoIGQ9Im0xNTAuNjkgMTY4Ljg1djE0Ni41M2wtMjAtMTEuODMtMTE5Ljk1LTcwLjk1LS4xOC0uMTEuMjctLjEyIDExOS44Ni01NC40NHoiIGZpbGw9IiMzZTU1NzgiLz48cGF0aCBkPSJtMTUwLjY5IDB2MTY4Ljg1bC0xNDAuMTMgNjMuNjR6IiBmaWxsPSIjNmRiMmQ4Ii8+PGcgZmlsbD0iIzMzNWY4YSI+PHBhdGggZD0ibTk0IDQ0My44NWMyLjA5LjkyIDQuMjEgMS43OSA2LjM0IDIuNjFxLTMuMjYtMS4yMy02LjM0LTIuNjF6Ii8+PHBhdGggZD0ibTEwMC4yOSA0NDYuNDZjMi4xNC44MiA0LjI5IDEuNTkgNi40NyAyLjMxcS0zLjI3LTEuMDctNi40Ny0yLjMxeiIvPjxwYXRoIGQ9Im0xMTIuMzMgNDUwLjQ5YzEuNjYuNDcgMy4zMy45MiA1IDEuMzNxLTIuNTEtLjYyLTUtMS4zM3oiLz48L2c+PHBhdGggZD0ibTQuNDUgMjYyLjExIDE0Ni4yNCA4Ni41MWExNjcuNDggMTY3LjQ4IDAgMCAxIC0xMC40NyAzOC4zOGMtMTEuNyAyOC4yOC0zNS4zNCA1OC4xOS04MS4wOCAzNS40NC0zNS45Ni0yOS40NC01OS4xNC03NS4xLTU5LjE0LTEyMy44OGExNTAuNDkgMTUwLjQ5IDAgMCAxIDQuNDUtMzYuNDV6IiBmaWxsPSIjNmRiMmQ4Ii8+PHBhdGggZD0ibTI0Mi4yNCA0MjIuNDEtLjM2LjI5Yy0uNzYuNjItMS41MiAxLjIzLTIuMjkgMS44M2wtLjIuMTZxLTEuMjUgMS0yLjUyIDEuOTJjLS45MS42OC0xLjgzIDEuMzYtMi43NiAycy0xLjg2IDEuMzEtMi44IDEuOTUtMS42NiAxLjEyLTIuNDkgMS42NmwtLjQ2LjNjLS44OC41Ny0xLjc2IDEuMTMtMi42NCAxLjY3YTIuNjMgMi42MyAwIDAgMSAtLjMzLjJjLS45MS41Ny0xLjgyIDEuMTItMi43NCAxLjY1cy0yIDEuMTUtMyAxLjctMiAxLjA4LTMgMS42bC0uMTEuMDZjLTEgLjUyLTIgMS0zIDEuNTJzLTIgMS0zLjA4IDEuNDktMi4wOCAxLTMuMTIgMS40MmMtMi4wOS45Mi00LjIxIDEuNzktNi4zNCAyLjYxcy00LjI5IDEuNTktNi40NyAyLjMxYy0uODcuMjktMS43NC41Ny0yLjYyLjg0cy0yIC42LTIuOTUuODhjLTEuNjYuNDctMy4zMy45Mi01IDEuMzMtLjYzLjE2LTEuMjcuMzEtMS45MS40NWwtMS4wNy4yNWMtLjg5LjItMS43OC4zOS0yLjY4LjU3cy0xLjY0LjMzLTIuNDcuNDgtMS41MS4yOC0yLjI3LjQtMS42OC4yNy0yLjUyLjM5Yy0uNDEuMDctLjgyLjEzLTEuMjQuMThsLTEuODkuMjUtMS4wNS4xM2MtLjY5LjA5LTEuMzkuMTYtMi4wOS4yMy0uODYuMDktMS43MS4xNy0yLjU3LjI0LS42Ny4wNS0xLjM0LjExLTIgLjE1cy0xLjE2LjA4LTEuNzUuMWgtLjA4Yy0uNjggMC0xLjM2LjA4LTIgLjEtLjk0IDAtMS44OS4wNy0yLjg0LjA5cy0xLjkgMC0yLjg2IDAtMS45MSAwLTIuODYgMC0xLjkgMC0yLjg0LS4wOWMtLjY5IDAtMS4zNy0uMDYtMi4wNS0uMWgtLjA4Yy0uNTkgMC0xLjE3LS4wNi0xLjc1LS4xcy0xLjM0LS4xLTItLjE1Yy0uODYtLjA3LTEuNzEtLjE1LTIuNTctLjI0LS43LS4wNy0xLjQtLjE0LTIuMDktLjIzbC0xLS4xM2MtLjYzLS4wNy0xLjI2LS4xNi0xLjg5LS4yNS0uNDIgMC0uODMtLjExLTEuMjQtLjE4cS0xLjI3LS4xOC0yLjUyLS4zOWMtLjc2LS4xMi0xLjUyLS4yNi0yLjI3LS40cy0xLjY1LS4zMS0yLjQ3LS40OC0xLjc5LS4zNy0yLjY4LS41N2wtMS4wNy0uMjVjLS42NC0uMTQtMS4yOC0uMjktMS45MS0uNDUtMS42OC0uNDEtMy4zNS0uODYtNS0xLjMzbC0zLS44OGMtLjg4LS4yNy0xLjc1LS41NS0yLjYyLS44NC0yLjE4LS43Mi00LjMzLTEuNDktNi40Ny0yLjMxcy00LjI5LTEuNjctNi4yOS0yLjU5Yy0xLS40Ni0yLjA4LS45NC0zLjEyLTEuNDJzLTIuMDYtMS0zLjA4LTEuNDktMi0xLTMtMS41MmwtLjExLS4wNmMtMS0uNTItMi0xLjA2LTMtMS42cy0yLTEuMTItMy0xLjctMS43OS0xLjA2LTIuNjktMS42NWwtLjMzLS4yYy0uODgtLjU0LTEuNzYtMS4xLTIuNjQtMS42N2wtLjQ2LS4zYy0uODMtLjU0LTEuNjctMS4xLTIuNDktMS42NnMtMS44OC0xLjI5LTIuOC0xLjk1LTEuODUtMS4zNC0yLjc2LTItMS42OS0xLjI3LTIuNTItMS45MmwtLjItLjE2Yy0uNzctLjYtMS41My0xLjIxLTIuMjktMS44M2wtLjM2LS4yOWM0NS43NCAyMi43NSA2OS4zOC03LjE2IDgxLjA4LTM1LjQ0YTE2Ny40OCAxNjcuNDggMCAwIDAgMTAuNDctMzguMzUgMTY3LjQ3IDE2Ny40NyAwIDAgMCAxMC40NiAzOC4zNmMxMS43IDI4LjI1IDM1LjM0IDU4LjE2IDgxLjA4IDM1LjQxeiIgZmlsbD0iIzUyOWJiYSIvPjxwYXRoIGQ9Im0xODQgNDUxLjgyYzEuNjgtLjQxIDMuMzUtLjg2IDUtMS4zM3EtMi40NC43Mi01IDEuMzN6IiBmaWxsPSIjMzM1ZjhhIi8+PHBhdGggZD0ibTE5NC42MiA0NDguNzdjMi4xOC0uNzIgNC4zMy0xLjQ5IDYuNDctMi4zMXEtMy4xOSAxLjI0LTYuNDcgMi4zMXoiIGZpbGw9IiMzMzVmOGEiLz48cGF0aCBkPSJtMjAxLjA5IDQ0Ni40NmMyLjEzLS44MiA0LjI1LTEuNjkgNi4zNC0yLjYxcS0zLjEzIDEuMzgtNi4zNCAyLjYxeiIgZmlsbD0iIzMzNWY4YSIvPjxwYXRoIGQ9Im0zMDEuMzggMjk4LjU2YzAgNDguNzgtMjMuMTkgOTQuNDMtNTkuMTQgMTIzLjg1LTQ1Ljc0IDIyLjc1LTY5LjM4LTcuMTYtODEuMDgtMzUuNDRhMTY3LjQ3IDE2Ny40NyAwIDAgMSAtMTAuNDctMzguMzVsMTQ2LjI0LTg2LjUxYTE1MC40OSAxNTAuNDkgMCAwIDEgNC40NSAzNi40NXoiIGZpbGw9IiM0YjZiOWEiLz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjYzIiB2aWV3Qm94PSIwIDAgNjMgNjMiIHdpZHRoPSI2MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMS42MzkzLjk4NDM3NWgxNS4zMjc0IDE1LjMyNzV2MTUuMjk5MDI1aC0xNS4zMjc1LTE1LjMyNzQtMTUuMzI3NXYxNS4yOTg5Ljk4MSAxNC4yMjg5LjA4OTEgMTUuMjA5OWgtMTUuMzI3NDI1di0xNS4yMDk5LS4wODkxLTE0LjIyODktLjk4MS0xNS4yOTg5LTE1LjI5OTAyNWgxNS4zMjc0MjV6bTE1LjMyNzQgNDUuODA4MzI1aC0xNS4yMzgxdi0xNS4yMDk4aDMwLjU1NjZ2MTUuNzQ0OWMwIDMuOTE0LTEuNTU3MSA3LjY2OC00LjMyOTEgMTAuNDM2NXMtNi41MzE5IDQuMzI1LTEwLjQ1MzMgNC4zMjc0aC0uNTM2MXoiIGZpbGw9IiM2MTdiZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNjAgMTYwIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6bm9uZTtzdHJva2U6I2IzMmY5ZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6NHB4O30uY2xzLTJ7ZmlsbDojYjMyZjlkO308L3N0eWxlPjwvZGVmcz48dGl0bGU+QnVzaW5lc3MgLSAxNjB4MTYwIC0gY29sb3JlZCB3aXRoIGxpZ2h0IGJhY2tncm91bmQ8L3RpdGxlPjxnIGlkPSJCdXNpbmVzc18tXzE2MHgxNjBfLV9jb2xvcmVkX3dpdGhfbGlnaHRfYmFja2dyb3VuZCIgZGF0YS1uYW1lPSJCdXNpbmVzcyAtIDE2MHgxNjAgLSBjb2xvcmVkIHdpdGggbGlnaHQgYmFja2dyb3VuZCI+PHJlY3QgY2xhc3M9ImNscy0xIiB4PSI3Ljk5IiB5PSI3Ljk5IiB3aWR0aD0iMTQ0LjAxIiBoZWlnaHQ9IjE0NC4wMSIgcng9IjEyIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTEwLjczLDc4LjA2Yy0xMy0yMS40Ny0yNS40NS00Mi4yNS0yNi44OC00NC4xOGE1LjcsNS43LDAsMCwwLTMuMjktMi4zOEg3OS41YTUuNjQsNS42NCwwLDAsMC0zLjI5LDIuMzRDNzQuNzQsMzUuNzYsNjIuMjksNTYuNTQsNDkuMzMsNzhjLTE0Ljg5LDI0LjctMzEuMDYsNTAuNDgtMzEuMDYsNTAuNDhIMzQuNDRMNzQuNzIsNjIuNDRzMi43Ny00LjY2LDUuMjctNC41OWgwYzIuNDgtLjA3LDUuMjYsNC41OSw1LjI2LDQuNTlsNDAuMzEsNjYuMDZoMTYuMTdTMTI1LjYzLDEwMi43MiwxMTAuNzMsNzguMDZaIi8+PHBhdGggY2xhc3M9ImNscy0yIiBkPSJNODUuODgsNzUuNTlINzQuMTJhNC40MSw0LjQxLDAsMCwwLDAsOC44Mkg4NS44OGE0LjQxLDQuNDEsMCwxLDAsMC04LjgyWiIvPjwvZz48L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU3IiBoZWlnaHQ9IjI3NyIgdmlld0JveD0iMCAwIDI1NyAyNzciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cmVjdCB3aWR0aD0iMTUzLjg4OSIgaGVpZ2h0PSI4Mi4wNzQxIiBmaWxsPSIjMDM2NEZGIiAvPgogICAgPHJlY3QgeD0iNzEuODEzNSIgd2lkdGg9IjgyLjA3NDEiIGhlaWdodD0iMjc3IiBmaWxsPSIjMDM2NEZGIiAvPgogICAgPHBhdGggZD0iTTIxNS40NDMgODIuMDc0MUMyMzguMTA3IDgyLjA3NDEgMjU2LjQ4IDYzLjcwMTIgMjU2LjQ4IDQxLjAzN0MyNTYuNDggMTguMzcyOSAyMzguMTA3IDAgMjE1LjQ0MyAwQzE5Mi43NzkgMCAxNzQuNDA2IDE4LjM3MjkgMTc0LjQwNiA0MS4wMzdDMTc0LjQwNiA2My43MDEyIDE5Mi43NzkgODIuMDc0MSAyMTUuNDQzIDgyLjA3NDFaIiBmaWxsPSIjMDM2NEZGIiAvPgo8L3N2Zz4=\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMzgycHgiIGhlaWdodD0iNDcycHgiIHZpZXdCb3g9IjAgMCAzODIgNDcyIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA1Mi42ICg2NzQ5MSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+YXV0aGVyZXVtPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImF1dGhlcmV1bSIgZmlsbD0iI0ZGNEMyRiI+CiAgICAgICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTkwLjk1MDAwMCwgMjM1LjkwMDAwMCkgc2NhbGUoLTEsIDEpIHJvdGF0ZSgtMTgwLjAwMDAwMCkgdHJhbnNsYXRlKC0xOTAuOTUwMDAwLCAtMjM1LjkwMDAwMCkgdHJhbnNsYXRlKC0wLjAwMDAwMCwgMC4xMDAwMDApIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik04MCw0NTQuMSBDNTAsNDQ0LjUgMTkuOCw0MzQuOSAxMi43LDQzMi43IEwwLDQyOC42IEwwLDM0MC40IEMwLDI4Ny42IDAuNCwyNDcuOCAxLDI0MS4yIEM1LjQsMTk1IDI1LjQsMTUxLjIgNTguOCwxMTQuOCBDNjYuNCwxMDYuNSAxODcsMS40IDE5MC40LDAuMSBDMTkxLjgsLTAuNCAyOTcuOCw5MCAzMTUuMiwxMDYuNiBDMzQ1LjQsMTM1LjMgMzY5LDE3Ny4zIDM3Ny40LDIxNy41IEMzODEuOCwyMzguNyAzODIuMSwyNDYuNiAzODEuOCwzNDAuNiBMMzgxLjUsNDI5IEwzMTMuNiw0NTAuNCBDMjc2LjMsNDYyLjEgMjQ1LjYsNDcxLjYgMjQ1LjQsNDcxLjUgQzI0NS4zLDQ3MS4zIDI1MC45LDQ2MC4yIDI1OCw0NDYuNyBMMjcwLjksNDIyLjIgTDI5MC4yLDQxNiBDMzAwLjgsNDEyLjYgMzE2LjgsNDA3LjUgMzI1LjgsNDA0LjcgTDM0Mi4xLDM5OS42IEwzNDEuNywzMTguNCBDMzQxLjQsMjQwLjQgMzQxLjMsMjM2LjggMzM5LjMsMjI3LjcgQzMzMS43LDE5My40IDMxNiwxNjQuMyAyOTEuOSwxMzkuNyBDMjg3LjMsMTM1IDI2My45LDExNC4zIDI0MCw5My44IEMyMTYuMSw3My4yIDE5NS4zLDU1LjMgMTkzLjgsNTMuOSBMMTkxLjIsNTEuNSBMMTQ1LjMsOTEgQzg5LjIsMTM5LjQgODAuOCwxNDcuNiA2Ny40LDE2OC4yIEM1Ny4xLDE4NC4xIDQ5LjUsMjAxLjIgNDQuOSwyMTguOSBDNDAuNCwyMzYuOSA0MCwyNDMuNiA0MCwzMjMuOCBMNDAsMzk5LjUgTDU0LjMsNDA0IEM2Mi4xLDQwNi41IDc4LjEsNDExLjYgODkuOCw0MTUuMyBDMTAxLjQsNDE5IDExMSw0MjIuNCAxMTEsNDIyLjcgQzExMSw0MjMgMTE2LjYsNDM0IDEyMy41LDQ0Ny4xIEMxMzAuNCw0NjAuMyAxMzYsNDcxLjIgMTM2LDQ3MS40IEMxMzYsNDcyIDEzNC44LDQ3MS42IDgwLDQ1NC4xIFoiIGlkPSJQYXRoIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTg4LjQsNDY4LjUgQzE4Ny41LDQ2Ni43IDE2Mi4zLDQxOC42IDEzMi41LDM2MS43IEw3OC4zLDI1OC4yIEw3OS4xLDI0OS44IEM4MC45LDIzMi42IDg3LjMsMjE0LjQgOTcuNywxOTcuOSBDMTAxLjQsMTkxLjkgMTAyLjUsMTkwLjggMTAzLjUsMTkxLjkgQzEwNC4xLDE5Mi42IDEyMy45LDIzMCAxNDcuNSwyNzUgQzE3MSwzMTkuOSAxOTAuNSwzNTYuNyAxOTAuOSwzNTYuNyBDMTkxLjIsMzU2LjcgMjExLDMyMC4zIDIzNC44LDI3NS45IEMyNTguNiwyMzEuNSAyNzguNSwxOTQuNCAyNzkuMSwxOTMuNCBDMjgwLjEsMTkxLjcgMjgwLjMsMTkxLjggMjgxLjksMTkzLjkgQzI5Mi4yLDIwNy40IDMwMC43LDIyOS43IDMwMy4xLDI0OS40IEwzMDQuMywyNTkuNCBMMjQ3LjUsMzY1LjMgQzIxNi4zLDQyMy41IDE5MC42LDQ3MS40IDE5MC40LDQ3MS41IEMxOTAuMyw0NzEuNyAxODkuNCw0NzAuNCAxODguNCw0NjguNSBaIiBpZD0iUGF0aCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2MywyMTMuOCBMMTM1LjUsMTU4LjkgTDE1MSwxNDUuNCBDMTU5LjUsMTM4IDE3MiwxMjcuMyAxNzguNywxMjEuNyBMMTkxLDExMS41IEwxOTMuNywxMTMuNyBDMTk1LjMsMTE0LjkgMjA3LjYsMTI1LjYgMjIxLjEsMTM3LjUgTDI0NS44LDE1OS4xIEwyMTguNCwyMTMuOSBDMjAzLjMsMjQ0IDE5MC45LDI2OC43IDE5MC43LDI2OC43IEMxOTAuNiwyNjguNyAxNzguMSwyNDQgMTYzLDIxMy44IFoiIGlkPSJQYXRoIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpFMjcyNDlCNjRCQ0FFMTExQkU5NEVFNUY2RjkwRDQ5RiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozMzQxN0ZCOTRFQUExMUU4QTcwMkQyMDA4MEVBREMyNyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMzQxN0ZCODRFQUExMUU4QTcwMkQyMDA4MEVBREMyNyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MURCMDJBMjY3NDhFODExQjY2RTlGQzNFNENBMTNFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMjcyNDlCNjRCQ0FFMTExQkU5NEVFNUY2RjkwRDQ5RiIvPiA8L3JkZjpEZXNjcmlwdGlv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\"","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDFweCIgaGVpZ2h0PSI0NHB4IiB2aWV3Qm94PSIwIDAgNDEgNDQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8dGl0bGU+Yml0c2tpLWljb248L3RpdGxlPgogICAgPGRlZnM+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSI1MS4yNjgwMjQ3JSIgeTE9IjEyLjE0Mjk4NSUiIHgyPSI0OC42MTExMTExJSIgeTI9Ijg4LjMxMTMxNzclIiBpZD0ibGluZWFyR3JhZGllbnQtMSI+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiNDRjBCQzMiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0NGMEJDMyIgb2Zmc2V0PSIwJSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjQ0YwQkMzIiBvZmZzZXQ9IjAlIj48L3N0b3A+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiNGRjM1NjgiIG9mZnNldD0iMTAwJSI+PC9zdG9wPgogICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSI1MS4yNjgwMjQ3JSIgeTE9IjQ4Ljg5ODI2MjclIiB4Mj0iNDguNjExMTExMSUiIHkyPSI1MS4xMTQ5NTg3JSIgaWQ9ImxpbmVhckdyYWRpZW50LTIiPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjQ0YwQkMzIiBvZmZzZXQ9IjAlIj48L3N0b3A+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiNDRjBCQzMiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0NGMEJDMyIgb2Zmc2V0PSIwJSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjRkYzNTY4IiBvZmZzZXQ9IjEwMCUiPjwvc3RvcD4KICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImJpdHNraS1pY29uIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwgLTcuMDAwMDAwKSIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgPGcgaWQ9IlJlY3RhbmdsZS0zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMi41MTIyNDksIDQwLjQ3MDQyOSkgcm90YXRlKC00NS4wMDAwMDApIHRyYW5zbGF0ZSgtMTIuNTEyMjQ5LCAtNDAuNDcwNDI5KSB0cmFuc2xhdGUoMTAuMDEyMjQ5LCAyNi45NzA0MjkpIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJwYXRoLTItbGluayIgZmlsbD0iIzQxMDBFQSI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEuNzExODkxLDAuNzc4MzUyIEwzLjIyODk2NywwLjc3ODM1MiBDMy43MDA3NTksMC43NzgzNTIgMy44NzE4NDIsMC44Mjc0NzYgNC4wNDQzMjIsMC45MTk3MTkgQzQuMjE2ODAyLDEuMDExOTYyIDQuMzUyMTY1LDEuMTQ3MzI2IDQuNDQ0NDA5LDEuMzE5ODA2IEM0LjUzNjY1MiwxLjQ5MjI4NiA0LjU4NTc3NSwxLjY2MzM2OSA0LjU4NTc3NSwyLjEzNTE2IEw0LjU4NTc3NSwyNC44MDU2OTggQzQuNTg1Nzc1LDI1LjI3NzQ4OSA0LjUzNjY1MiwyNS40NDg1NzMgNC40NDQ0MDksMjUuNjIxMDUzIEM0LjM1MjE2NSwyNS43OTM1MzMgNC4yMTY4MDIsMjUuOTI4ODk2IDQuMDQ0MzIyLDI2LjAyMTEzOSBDMy44NzE4NDIsMjYuMTEzMzgyIDMuNzAwNzU5LDI2LjE2MjUwNiAzLjIyODk2NywyNi4xNjI1MDYgTDEuNzExODkxLDI2LjE2MjUwNiBDMS4yNDAwOTksMjYuMTYyNTA2IDEuMDY5MDE2LDI2LjExMzM4MiAwLjg5NjUzNiwyNi4wMjExMzkgQzAuNzI0MDU2LDI1LjkyODg5NiAwLjU4ODY5MywyNS43OTM1MzMgMC40OTY0NSwyNS42MjEwNTMgQzAuNDA0MjA2LDI1LjQ0ODU3MyAwLjM1NTA4MywyNS4yNzc0ODkgMC4zNTUwODMsMjQuODA1Njk4IEwwLjM1NTA4MywyLjEzNTE2IEMwLjM1NTA4MywxLjY2MzM2OSAwLjQwNDIwNiwxLjQ5MjI4NiAwLjQ5NjQ1LDEuMzE5ODA2IEMwLjU4ODY5MywxLjE0NzMyNiAwLjcyNDA1NiwxLjAxMTk2MiAwLjg5NjUzNiwwLjkxOTcxOSBDMS4wNjkwMTYsMC44Mjc0NzYgMS4yNDAwOTksMC43NzgzNTIgMS43MTE4OTEsMC43NzgzNTIgWiIgaWQ9InBhdGgtMiI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPGcgaWQ9InBhdGgtMi1saW5rIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50LTIpIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMS43MTE4OTEsMC43NzgzNTIgTDMuMjI4OTY3LDAuNzc4MzUyIEMzLjcwMDc1OSwwLjc3ODM1MiAzLjg3MTg0MiwwLjgyNzQ3NiA0LjA0NDMyMiwwLjkxOTcxOSBDNC4yMTY4MDIsMS4wMTE5NjIgNC4zNTIxNjUsMS4xNDczMjYgNC40NDQ0MDksMS4zMTk4MDYgQzQuNTM2NjUyLDEuNDkyMjg2IDQuNTg1Nzc1LDEuNjYzMzY5IDQuNTg1Nzc1LDIuMTM1MTYgTDQuNTg1Nzc1LDI0LjgwNTY5OCBDNC41ODU3NzUsMjUuMjc3NDg5IDQuNTM2NjUyLDI1LjQ0ODU3MyA0LjQ0NDQwOSwyNS42MjEwNTMgQzQuMzUyMTY1LDI1Ljc5MzUzMyA0LjIxNjgwMiwyNS45Mjg4OTYgNC4wNDQzMjIsMjYuMDIxMTM5IEMzLjg3MTg0MiwyNi4xMTMzODIgMy43MDA3NTksMjYuMTYyNTA2IDMuMjI4OTY3LDI2LjE2MjUwNiBMMS43MTE4OTEsMjYuMTYyNTA2IEMxLjI0MDA5OSwyNi4xNjI1MDYgMS4wNjkwMTYsMjYuMTEzMzgyIDAuODk2NTM2LDI2LjAyMTEzOSBDMC43MjQwNTYsMjUuOTI4ODk2IDAuNTg4NjkzLDI1Ljc5MzUzMyAwLjQ5NjQ1LDI1LjYyMTA1MyBDMC40MDQyMDYsMjUuNDQ4NTczIDAuMzU1MDgzLDI1LjI3NzQ4OSAwLjM1NTA4MywyNC44MDU2OTggTDAuMzU1MDgzLDIuMTM1MTYgQzAuMzU1MDgzLDEuNjYzMzY5IDAuNDA0MjA2LDEuNDkyMjg2IDAuNDk2NDUsMS4zMTk4MDYgQzAuNTg4NjkzLDEuMTQ3MzI2IDAuNzI0MDU2LDEuMDExOTYyIDAuODk2NTM2LDAuOTE5NzE5IEMxLjA2OTAxNiwwLjgyNzQ3NiAxLjI0MDA5OSwwLjc3ODM1MiAxLjcxMTg5MSwwLjc3ODM1MiBaIiBpZD0icGF0aC0yIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPHBhdGggZD0iTTkuNTY5OTQ3NjUsNC43MjE1NzQxNSBMMjAuMzgzNTk2Niw0LjcyMTU3NDE1IEMyNy41NDE5Mjc2LDQuNzIxNTc0MTUgMzEuMzQ5NTUwNiw5LjA4NzY0OTE1IDMxLjM0OTU1MDYsMTUuNDg0NDU1MSBDMzEuMzQ5NTUwNiwxNi4yOTY3NDgxIDMxLjE0NjQ3NzYsMTcuNTE1MTg4MSAzMC45OTQxNzI2LDE4LjI3NjcxMjEgQzMwLjk0MzQwNDYsMTguNTgxMzIyMSAzMC44OTI2MzU2LDE4Ljc4NDM5NTEgMzAuODkyNjM1NiwxOC45ODc0NjkxIEMzMC44OTI2MzU2LDE5LjM5MzYxNTEgMzEuMDQ0OTQwNiwxOS42NDc0NTcxIDMxLjYwMzM5MjYsMTkuOTUyMDY2MSBDMzUuMDA0ODY4NiwyMS44ODEyNjIxIDM2LjUyNzkxODYsMjUuMDI4ODk3MSAzNi41Mjc5MTg2LDI5LjQ5NjUwODEgQzM2LjUyNzkxODYsMzUuNzQxMDEwMSAzMi42Njk1MjY2LDQwLjI1OTM4OTEgMjQuNzQ5NjcwNiw0MC4yNTkzODkxIEw5LjU2OTk0NzY1LDQwLjI1OTM4OTEgQzguNzU3NjU0NjUsNDAuMjU5Mzg5MSA4LjQ1MzA0NDY1LDM5LjkwNDAxMTEgOC40NTMwNDQ2NSwzOS4wOTE3MTgxIEw4LjQ1MzA0NDY1LDUuODg5MjQ1MTUgQzguNDUzMDQ0NjUsNS4wNzY5NTIxNSA4Ljc1NzY1NDY1LDQuNzIxNTc0MTUgOS41Njk5NDc2NSw0LjcyMTU3NDE1IFogTTE3Ljc5NDQxMjYsMTguNjgyODU5MSBMMjAuMzgzNTk2NiwxOC42ODI4NTkxIEMyMS43MDM1NzI2LDE4LjY4Mjg1OTEgMjIuNzE4OTM4NiwxNy44NzA1NjYxIDIyLjcxODkzODYsMTYuMjk2NzQ4MSBDMjIuNzE4OTM4NiwxNC43NzM2OTkxIDIxLjcwMzU3MjYsMTMuOTEwNjM4MSAyMC4zODM1OTY2LDEzLjkxMDYzODEgTDE3Ljc5NDQxMjYsMTMuOTEwNjM4MSBDMTYuOTgyMTE5NiwxMy45MTA2MzgxIDE2LjY3NzUxMDYsMTQuMjY2MDE2MSAxNi42Nzc1MTA2LDE1LjA3ODMwOTEgTDE2LjY3NzUxMDYsMTcuNTE1MTg4MSBDMTYuNjc3NTEwNiwxOC4zMjc0ODExIDE2Ljk4MjExOTYsMTguNjgyODU5MSAxNy43OTQ0MTI2LDE4LjY4Mjg1OTEgWiBNMTcuNzk0NDEyNiwzMS4wNzAzMjYxIEwyNC41OTczNjU2LDMxLjA3MDMyNjEgQzI2LjU3NzMyOTYsMzEuMDcwMzI2MSAyNy42OTQyMzI2LDMwLjM1OTU2OTEgMjcuNjk0MjMyNiwyOC42ODQyMTUxIEMyNy42OTQyMzI2LDI3LjA1OTYyOTEgMjYuNTc3MzI5NiwyNi4yOTgxMDUxIDI0LjU5NzM2NTYsMjYuMjk4MTA1MSBMMTcuNzk0NDEyNiwyNi4yOTgxMDUxIEMxNi45ODIxMTk2LDI2LjI5ODEwNTEgMTYuNjc3NTEwNiwyNi42NTM0ODMxIDE2LjY3NzUxMDYsMjcuNDY1Nzc2MSBMMTYuNjc3NTEwNiwyOS45MDI2NTQxIEMxNi42Nzc1MTA2LDMwLjcxNDk0NzEgMTYuOTgyMTE5NiwzMS4wNzAzMjYxIDE3Ljc5NDQxMjYsMzEuMDcwMzI2MSBaIiBpZD0iYml0c2tpIiBmaWxsPSIjMjkyNkNGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMi40OTA0ODIsIDIyLjQ5MDQ4Mikgcm90YXRlKC00NS4wMDAwMDApIHRyYW5zbGF0ZSgtMjIuNDkwNDgyLCAtMjIuNDkwNDgyKSAiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo=\"","import * as React from \"react\";\nimport * as PropTypes from \"prop-types\";\nimport styled from \"styled-components\";\n\nimport { Provider } from \"./Provider\";\nimport {\n MODAL_LIGHTBOX_CLASSNAME,\n MODAL_CONTAINER_CLASSNAME,\n MODAL_HITBOX_CLASSNAME,\n MODAL_CARD_CLASSNAME\n} from \"../constants\";\nimport { SimpleFunction, IProviderUserOptions, ThemeColors } from \"../helpers\";\n\ndeclare global {\n // tslint:disable-next-line\n interface Window {\n ethereum: any;\n web3: any;\n updateWeb3Modal: any;\n }\n}\n\ninterface ILightboxStyleProps {\n show: boolean;\n offset: number;\n opacity?: number;\n}\n\nconst SLightbox = styled.div`\n transition: opacity 0.1s ease-in-out;\n text-align: center;\n position: fixed;\n width: 100vw;\n height: 100vh;\n margin-left: -50vw;\n top: ${({ offset }) => (offset ? `-${offset}px` : 0)};\n left: 50%;\n z-index: 2;\n will-change: opacity;\n background-color: ${({ opacity }) => {\n let alpha = 0.4;\n if (typeof opacity === \"number\") {\n alpha = opacity;\n }\n return `rgba(0, 0, 0, ${alpha})`;\n }};\n opacity: ${({ show }) => (show ? 1 : 0)};\n visibility: ${({ show }) => (show ? \"visible\" : \"hidden\")};\n pointer-events: ${({ show }) => (show ? \"auto\" : \"none\")};\n display: flex;\n justify-content: center;\n align-items: center;\n\n & * {\n box-sizing: border-box !important;\n }\n`;\n\ninterface IModalContainerStyleProps {\n show: boolean;\n}\n\nconst SModalContainer = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n padding: 15px;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: ${({ show }) => (show ? 1 : 0)};\n visibility: ${({ show }) => (show ? \"visible\" : \"hidden\")};\n pointer-events: ${({ show }) => (show ? \"auto\" : \"none\")};\n`;\n\nconst SHitbox = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n`;\n\ninterface IModalCardStyleProps {\n show: boolean;\n themeColors: ThemeColors;\n maxWidth?: number;\n}\n\nconst SModalCard = styled.div`\n position: relative;\n width: 100%;\n background-color: ${({ themeColors }) => themeColors.background};\n border-radius: 12px;\n margin: 10px;\n padding: 0;\n opacity: ${({ show }) => (show ? 1 : 0)};\n visibility: ${({ show }) => (show ? \"visible\" : \"hidden\")};\n pointer-events: ${({ show }) => (show ? \"auto\" : \"none\")};\n\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n max-width: ${({ maxWidth }) => (maxWidth ? `${maxWidth}px` : \"800px\")};\n min-width: fit-content;\n max-height: 100%;\n overflow: auto;\n\n @media screen and (max-width: 768px) {\n max-width: ${({ maxWidth }) => (maxWidth ? `${maxWidth}px` : \"500px\")};\n grid-template-columns: 1fr;\n }\n`;\n\ninterface IModalProps {\n themeColors: ThemeColors;\n userOptions: IProviderUserOptions[];\n onClose: SimpleFunction;\n resetState: SimpleFunction;\n lightboxOpacity: number;\n}\n\ninterface IModalState {\n show: boolean;\n lightboxOffset: number;\n}\n\nconst INITIAL_STATE: IModalState = {\n show: false,\n lightboxOffset: 0\n};\n\nexport class Modal extends React.Component {\n constructor(props: IModalProps) {\n super(props);\n window.updateWeb3Modal = async (state: IModalState) => {\n this.setState(state);\n };\n }\n public static propTypes = {\n userOptions: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n resetState: PropTypes.func.isRequired,\n lightboxOpacity: PropTypes.number.isRequired\n };\n\n public lightboxRef?: HTMLDivElement | null;\n public mainModalCard?: HTMLDivElement | null;\n\n public state: IModalState = {\n ...INITIAL_STATE\n };\n\n public componentDidUpdate(prevProps: IModalProps, prevState: IModalState) {\n if (prevState.show && !this.state.show) {\n this.props.resetState();\n }\n if (this.lightboxRef) {\n const lightboxRect = this.lightboxRef.getBoundingClientRect();\n const lightboxOffset = lightboxRect.top > 0 ? lightboxRect.top : 0;\n\n if (\n lightboxOffset !== INITIAL_STATE.lightboxOffset &&\n lightboxOffset !== this.state.lightboxOffset\n ) {\n this.setState({ lightboxOffset });\n }\n }\n }\n\n public render = () => {\n const { show, lightboxOffset } = this.state;\n\n const { onClose, lightboxOpacity, userOptions, themeColors } = this.props;\n\n return (\n (this.lightboxRef = c)}\n show={show}\n >\n \n \n (this.mainModalCard = c)}\n >\n {userOptions.map(provider =>\n !!provider ? (\n \n ) : null\n )}\n \n \n \n );\n };\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","import * as list from \"../providers\";\nimport {\n CONNECT_EVENT,\n ERROR_EVENT,\n INJECTED_PROVIDER_ID,\n CACHED_PROVIDER_KEY\n} from \"../constants\";\nimport {\n isMobile,\n IProviderControllerOptions,\n IProviderOptions,\n IProviderDisplayWithConnector,\n getLocal,\n setLocal,\n removeLocal,\n getProviderInfoById,\n getProviderDescription,\n IProviderInfo,\n filterMatches,\n IProviderUserOptions,\n getInjectedProvider,\n findMatchingRequiredOptions\n} from \"../helpers\";\nimport { EventController } from \"./events\";\n\nexport class ProviderController {\n public cachedProvider: string = \"\";\n public shouldCacheProvider: boolean = false;\n public disableInjectedProvider: boolean = false;\n\n private eventController: EventController = new EventController();\n private injectedProvider: IProviderInfo | null = null;\n private providers: IProviderDisplayWithConnector[] = [];\n private providerOptions: IProviderOptions;\n private network: string = \"\";\n\n constructor(opts: IProviderControllerOptions) {\n this.cachedProvider = getLocal(CACHED_PROVIDER_KEY) || \"\";\n\n this.disableInjectedProvider = opts.disableInjectedProvider;\n this.shouldCacheProvider = opts.cacheProvider;\n this.providerOptions = opts.providerOptions;\n this.network = opts.network;\n\n this.injectedProvider = getInjectedProvider();\n\n this.providers = Object.keys(list.connectors).map((id: string) => {\n let providerInfo: IProviderInfo;\n if (id === INJECTED_PROVIDER_ID) {\n providerInfo = this.injectedProvider || list.providers.FALLBACK;\n } else {\n providerInfo = getProviderInfoById(id);\n }\n // parse custom display options\n if (this.providerOptions[id]) {\n const options = this.providerOptions[id];\n if (typeof options.display !== \"undefined\") {\n providerInfo = {\n ...providerInfo,\n ...this.providerOptions[id].display\n };\n }\n }\n return {\n ...providerInfo,\n connector: list.connectors[id],\n package: providerInfo.package\n };\n });\n // parse custom providers\n Object.keys(this.providerOptions)\n .filter(key => key.startsWith(\"custom-\"))\n .map(id => {\n if (id && this.providerOptions[id]) {\n const options = this.providerOptions[id];\n if (\n typeof options.display !== \"undefined\" &&\n typeof options.connector !== \"undefined\"\n ) {\n this.providers.push({\n ...list.providers.FALLBACK,\n id,\n ...options.display,\n connector: options.connector\n });\n }\n }\n });\n }\n\n public shouldDisplayProvider(id: string) {\n const provider = this.getProvider(id);\n if (typeof provider !== \"undefined\") {\n const providerPackageOptions = this.providerOptions[id];\n if (providerPackageOptions) {\n const isProvided = !!providerPackageOptions.package;\n if (isProvided) {\n const requiredOptions = provider.package\n ? provider.package.required\n : undefined;\n if (requiredOptions && requiredOptions.length) {\n const providedOptions = providerPackageOptions.options;\n if (providedOptions && Object.keys(providedOptions).length) {\n const matches = findMatchingRequiredOptions(\n requiredOptions,\n providedOptions\n );\n if (requiredOptions.length === matches.length) {\n return true;\n }\n }\n } else {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n public getUserOptions = () => {\n const mobile = isMobile();\n\n const defaultProviderList = this.providers.map(({ id }) => id);\n\n const displayInjected =\n !!this.injectedProvider && !this.disableInjectedProvider;\n const onlyInjected = displayInjected && mobile;\n\n const providerList = [];\n\n if (onlyInjected) {\n providerList.push(INJECTED_PROVIDER_ID);\n } else {\n if (displayInjected) {\n providerList.push(INJECTED_PROVIDER_ID);\n }\n\n defaultProviderList.forEach((id: string) => {\n if (id !== INJECTED_PROVIDER_ID) {\n const result = this.shouldDisplayProvider(id);\n if (result) {\n providerList.push(id);\n }\n }\n });\n }\n\n const userOptions: IProviderUserOptions[] = [];\n\n providerList.forEach((id: string) => {\n let provider = this.getProvider(id);\n if (typeof provider !== \"undefined\") {\n const { id, name, logo, connector } = provider;\n userOptions.push({\n name,\n logo,\n description: getProviderDescription(provider),\n onClick: () => this.connectTo(id, connector)\n });\n }\n });\n\n return userOptions;\n };\n\n public getProvider(id: string) {\n return filterMatches(\n this.providers,\n x => x.id === id,\n undefined\n );\n }\n\n public getProviderOption(id: string, key: string) {\n return this.providerOptions &&\n this.providerOptions[id] &&\n this.providerOptions[id][key]\n ? this.providerOptions[id][key]\n : {};\n }\n\n public clearCachedProvider() {\n this.cachedProvider = \"\";\n removeLocal(CACHED_PROVIDER_KEY);\n }\n\n public setCachedProvider(id: string) {\n this.cachedProvider = id;\n setLocal(CACHED_PROVIDER_KEY, id);\n }\n\n public connectTo = async (\n id: string,\n connector: (providerPackage: any, opts: any) => Promise\n ) => {\n try {\n const providerPackage = this.getProviderOption(id, \"package\");\n const providerOptions = this.getProviderOption(id, \"options\");\n const opts = { network: this.network || undefined, ...providerOptions };\n const provider = await connector(providerPackage, opts);\n this.eventController.trigger(CONNECT_EVENT, provider);\n if (this.shouldCacheProvider && this.cachedProvider !== id) {\n this.setCachedProvider(id);\n }\n } catch (error) {\n this.eventController.trigger(ERROR_EVENT);\n }\n };\n\n public async connectToCachedProvider() {\n const provider = this.getProvider(this.cachedProvider);\n if (typeof provider !== \"undefined\") {\n await this.connectTo(provider.id, provider.connector);\n }\n }\n\n public on(event: string, callback: (result: any) => void): () => void {\n this.eventController.on({\n event,\n callback\n });\n\n return () =>\n this.eventController.off({\n event,\n callback\n });\n }\n\n public off(event: string, callback?: (result: any) => void): void {\n this.eventController.off({\n event,\n callback\n });\n }\n}\n","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","export var SupportedAlgorithm;\n(function (SupportedAlgorithm) {\n SupportedAlgorithm[\"sha256\"] = \"sha256\";\n SupportedAlgorithm[\"sha512\"] = \"sha512\";\n})(SupportedAlgorithm || (SupportedAlgorithm = {}));\n;\n//# sourceMappingURL=types.js.map","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","import _ec from \"elliptic\";\nvar EC = _ec.ec;\nexport { EC };\n//# sourceMappingURL=elliptic.js.map","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","module.exports = require('./lib/axios');","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\n\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n}\n\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n debug = options.debug || false;\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement(\"span\");\n mark.textContent = text;\n // reset user styles for span element\n mark.style.all = \"unset\";\n // prevents scrolling to the end of the page\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\";\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = \"pre\";\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function(e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n if (typeof e.clipboardData === \"undefined\") { // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"]\n window.clipboardData.setData(format, text);\n } else { // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n var successful = document.execCommand(\"copy\");\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;\n","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","/* eslint no-console:0 */\n\nconst formatRegExp = /%[sdj%]/g;\n\nexport let warning = () => {};\n\n// don't print warning message when in production env or node runtime\nif (\n typeof process !== 'undefined' &&\n process.env &&\n process.env.NODE_ENV !== 'production' &&\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n) {\n warning = (type, errors) => {\n if (typeof console !== 'undefined' && console.warn) {\n if (errors.every(e => typeof e === 'string')) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nexport function convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n const fields = {};\n errors.forEach(error => {\n const field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\n\nexport function format(...args) {\n let i = 1;\n const f = args[0];\n const len = args.length;\n if (typeof f === 'function') {\n return f.apply(null, args.slice(1));\n }\n if (typeof f === 'string') {\n let str = String(f).replace(formatRegExp, x => {\n if (x === '%%') {\n return '%';\n }\n if (i >= len) {\n return x;\n }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n break;\n default:\n return x;\n }\n });\n return str;\n }\n return f;\n}\n\nfunction isNativeStringType(type) {\n return (\n type === 'string' ||\n type === 'url' ||\n type === 'hex' ||\n type === 'email' ||\n type === 'date' ||\n type === 'pattern'\n );\n}\n\nexport function isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n return false;\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n const results = [];\n let total = 0;\n const arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors);\n total++;\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(a => {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n let index = 0;\n const arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n const original = index;\n index = index + 1;\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n const ret = [];\n Object.keys(objArr).forEach(k => {\n ret.push.apply(ret, objArr[k]);\n });\n return ret;\n}\n\nexport class AsyncValidationError extends Error {\n constructor(errors, fields) {\n super('Async Validation Error');\n this.errors = errors;\n this.fields = fields;\n }\n}\n\nexport function asyncMap(objArr, option, func, callback) {\n if (option.first) {\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n callback(errors);\n return errors.length\n ? reject(new AsyncValidationError(errors, convertFieldsError(errors)))\n : resolve();\n };\n const flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n pending.catch(e => e);\n return pending;\n }\n let firstFields = option.firstFields || [];\n if (firstFields === true) {\n firstFields = Object.keys(objArr);\n }\n const objArrKeys = Object.keys(objArr);\n const objArrLength = objArrKeys.length;\n let total = 0;\n const results = [];\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n results.push.apply(results, errors);\n total++;\n if (total === objArrLength) {\n callback(results);\n return results.length\n ? reject(\n new AsyncValidationError(results, convertFieldsError(results)),\n )\n : resolve();\n }\n };\n if (!objArrKeys.length) {\n callback(results);\n resolve();\n }\n objArrKeys.forEach(key => {\n const arr = objArr[key];\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending.catch(e => e);\n return pending;\n}\n\nexport function complementError(rule) {\n return oe => {\n if (oe && oe.message) {\n oe.field = oe.field || rule.fullField;\n return oe;\n }\n return {\n message: typeof oe === 'function' ? oe() : oe,\n field: oe.field || rule.fullField,\n };\n };\n}\n\nexport function deepMerge(target, source) {\n if (source) {\n for (const s in source) {\n if (source.hasOwnProperty(s)) {\n const value = source[s];\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = {\n ...target[s],\n ...value,\n };\n } else {\n target[s] = value;\n }\n }\n }\n }\n return target;\n}\n","import * as util from '../util';\n\n/**\n * Rule for validating required fields.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n if (\n rule.required &&\n (!source.hasOwnProperty(rule.field) ||\n util.isEmptyValue(value, type || rule.type))\n ) {\n errors.push(util.format(options.messages.required, rule.fullField));\n }\n}\n\nexport default required;\n","import * as util from '../util';\nimport required from './required';\n\n/* eslint max-len:0 */\n\nconst pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n url: new RegExp(\n '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n 'i',\n ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,\n};\n\nconst types = {\n integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n float(value) {\n return types.number(value) && !types.integer(value);\n },\n array(value) {\n return Array.isArray(value);\n },\n regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date(value) {\n return (\n typeof value.getTime === 'function' &&\n typeof value.getMonth === 'function' &&\n typeof value.getYear === 'function' &&\n !isNaN(value.getTime())\n );\n },\n number(value) {\n if (isNaN(value)) {\n return false;\n }\n return typeof value === 'number';\n },\n object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method(value) {\n return typeof value === 'function';\n },\n email(value) {\n return (\n typeof value === 'string' &&\n !!value.match(pattern.email) &&\n value.length < 255\n );\n },\n url(value) {\n return typeof value === 'string' && !!value.match(pattern.url);\n },\n hex(value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n },\n};\n\n/**\n * Rule for validating the type of a value.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required(rule, value, source, errors, options);\n return;\n }\n const custom = [\n 'integer',\n 'float',\n 'array',\n 'regexp',\n 'object',\n 'method',\n 'email',\n 'number',\n 'date',\n 'url',\n 'hex',\n ];\n const ruleType = rule.type;\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(\n util.format(\n options.messages.types[ruleType],\n rule.fullField,\n rule.type,\n ),\n );\n }\n // straight typeof check\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(\n util.format(options.messages.types[ruleType], rule.fullField, rule.type),\n );\n }\n}\n\nexport default type;\n","import required from './required';\nimport whitespace from './whitespace';\nimport type from './type';\nimport range from './range';\nimport enumRule from './enum';\nimport pattern from './pattern';\n\nexport default {\n required,\n whitespace,\n type,\n range,\n enum: enumRule,\n pattern,\n};\n","import * as util from '../util';\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(util.format(options.messages.whitespace, rule.fullField));\n }\n}\n\nexport default whitespace;\n","import * as util from '../util';\n\n/**\n * Rule for validating minimum and maximum allowed values.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n const len = typeof rule.len === 'number';\n const min = typeof rule.min === 'number';\n const max = typeof rule.max === 'number';\n // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n let val = value;\n let key = null;\n const num = typeof value === 'number';\n const str = typeof value === 'string';\n const arr = Array.isArray(value);\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n }\n // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n if (!key) {\n return false;\n }\n if (arr) {\n val = value.length;\n }\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n if (len) {\n if (val !== rule.len) {\n errors.push(\n util.format(options.messages[key].len, rule.fullField, rule.len),\n );\n }\n } else if (min && !max && val < rule.min) {\n errors.push(\n util.format(options.messages[key].min, rule.fullField, rule.min),\n );\n } else if (max && !min && val > rule.max) {\n errors.push(\n util.format(options.messages[key].max, rule.fullField, rule.max),\n );\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(\n util.format(\n options.messages[key].range,\n rule.fullField,\n rule.min,\n rule.max,\n ),\n );\n }\n}\n\nexport default range;\n","import * as util from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Rule for validating a value exists in an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(\n util.format(\n options.messages[ENUM],\n rule.fullField,\n rule[ENUM].join(', '),\n ),\n );\n }\n}\n\nexport default enumerable;\n","import * as util from '../util';\n\n/**\n * Rule for validating a regular expression pattern.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n if (!rule.pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n } else if (typeof rule.pattern === 'string') {\n const _pattern = new RegExp(rule.pattern);\n if (!_pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n }\n }\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction type(rule, value, callback, source, options) {\n const ruleType = rule.type;\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, ruleType);\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default type;\n","import string from './string';\nimport method from './method';\nimport number from './number';\nimport boolean from './boolean';\nimport regexp from './regexp';\nimport integer from './integer';\nimport float from './float';\nimport array from './array';\nimport object from './object';\nimport enumValidator from './enum';\nimport pattern from './pattern';\nimport date from './date';\nimport required from './required';\nimport type from './type';\nimport any from './any';\n\nexport default {\n string,\n method,\n number,\n boolean,\n regexp,\n integer,\n float,\n array,\n object,\n enum: enumValidator,\n pattern,\n date,\n url: type,\n hex: type,\n email: type,\n required,\n any,\n};\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for string types.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'string');\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default string;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a function.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default method;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default number;\n","import { isEmptyValue } from '../util';\nimport rules from '../rule/index.js';\n\n/**\n * Validates a boolean.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default boolean;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates the regular expression type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default regexp;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is an integer.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default integer;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is a floating point number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default floatFn;\n","import rules from '../rule/index';\nimport { isEmptyValue } from '../util';\n/**\n * Validates an array.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'array');\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default array;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates an object.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default object;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Validates an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default enumerable;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a regular expression pattern.\n *\n * Performs validation when a rule only contains\n * a pattern property but is not declared as a string type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n // console.log('validate on %s value', value);\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'date')) {\n let dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default date;\n","import rules from '../rule/index.js';\n\nfunction required(rule, value, callback, source, options) {\n const errors = [];\n const type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n}\n\nexport default required;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for any type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction any(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n }\n callback(errors);\n}\n\nexport default any;\n","export function newMessages() {\n return {\n default: 'Validation error on field %s',\n required: '%s is required',\n enum: '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid',\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n boolean: '%s is not a %s',\n integer: '%s is not an %s',\n float: '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s',\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters',\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s',\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length',\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s',\n },\n clone() {\n const cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n },\n };\n}\n\nexport const messages = newMessages();\n","import {\n format,\n complementError,\n asyncMap,\n warning,\n deepMerge,\n convertFieldsError,\n} from './util';\nimport validators from './validator/index';\nimport { messages as defaultMessages, newMessages } from './messages';\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\nfunction Schema(descriptor) {\n this.rules = null;\n this._messages = defaultMessages;\n this.define(descriptor);\n}\n\nSchema.prototype = {\n messages(messages) {\n if (messages) {\n this._messages = deepMerge(newMessages(), messages);\n }\n return this._messages;\n },\n define(rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n this.rules = {};\n let z;\n let item;\n for (z in rules) {\n if (rules.hasOwnProperty(z)) {\n item = rules[z];\n this.rules[z] = Array.isArray(item) ? item : [item];\n }\n }\n },\n validate(source_, o = {}, oc = () => {}) {\n let source = source_;\n let options = o;\n let callback = oc;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback();\n }\n return Promise.resolve();\n }\n\n function complete(results) {\n let i;\n let errors = [];\n let fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n errors = errors.concat(...e);\n } else {\n errors.push(e);\n }\n }\n\n for (i = 0; i < results.length; i++) {\n add(results[i]);\n }\n if (!errors.length) {\n errors = null;\n fields = null;\n } else {\n fields = convertFieldsError(errors);\n }\n callback(errors, fields);\n }\n\n if (options.messages) {\n let messages = this.messages();\n if (messages === defaultMessages) {\n messages = newMessages();\n }\n deepMerge(messages, options.messages);\n options.messages = messages;\n } else {\n options.messages = this.messages();\n }\n let arr;\n let value;\n const series = {};\n const keys = options.keys || Object.keys(this.rules);\n keys.forEach(z => {\n arr = this.rules[z];\n value = source[z];\n arr.forEach(r => {\n let rule = r;\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = { ...source };\n }\n value = source[z] = rule.transform(value);\n }\n if (typeof rule === 'function') {\n rule = {\n validator: rule,\n };\n } else {\n rule = { ...rule };\n }\n rule.validator = this.getValidationMethod(rule);\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = this.getType(rule);\n if (!rule.validator) {\n return;\n }\n series[z] = series[z] || [];\n series[z].push({\n rule,\n value,\n source,\n field: z,\n });\n });\n });\n const errorFields = {};\n return asyncMap(\n series,\n options,\n (data, doIt) => {\n const rule = data.rule;\n let deep =\n (rule.type === 'object' || rule.type === 'array') &&\n (typeof rule.fields === 'object' ||\n typeof rule.defaultField === 'object');\n deep = deep && (rule.required || (!rule.required && data.value));\n rule.field = data.field;\n\n function addFullfield(key, schema) {\n return {\n ...schema,\n fullField: `${rule.fullField}.${key}`,\n };\n }\n\n function cb(e = []) {\n let errors = e;\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n if (!options.suppressWarning && errors.length) {\n Schema.warning('async-validator:', errors);\n }\n if (errors.length && rule.message !== undefined) {\n errors = [].concat(rule.message);\n }\n\n errors = errors.map(complementError(rule));\n\n if (options.first && errors.length) {\n errorFields[rule.field] = 1;\n return doIt(errors);\n }\n if (!deep) {\n doIt(errors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n errors = [].concat(rule.message).map(complementError(rule));\n } else if (options.error) {\n errors = [\n options.error(\n rule,\n format(options.messages.required, rule.field),\n ),\n ];\n }\n return doIt(errors);\n }\n\n let fieldsSchema = {};\n if (rule.defaultField) {\n for (const k in data.value) {\n if (data.value.hasOwnProperty(k)) {\n fieldsSchema[k] = rule.defaultField;\n }\n }\n }\n fieldsSchema = {\n ...fieldsSchema,\n ...data.rule.fields,\n };\n for (const f in fieldsSchema) {\n if (fieldsSchema.hasOwnProperty(f)) {\n const fieldSchema = Array.isArray(fieldsSchema[f])\n ? fieldsSchema[f]\n : [fieldsSchema[f]];\n fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n }\n }\n const schema = new Schema(fieldsSchema);\n schema.messages(options.messages);\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n schema.validate(data.value, data.rule.options || options, errs => {\n const finalErrors = [];\n if (errors && errors.length) {\n finalErrors.push(...errors);\n }\n if (errs && errs.length) {\n finalErrors.push(...errs);\n }\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n let res;\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n res = rule.validator(rule, data.value, cb, data.source, options);\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(rule.message || `${rule.field} fails`);\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n if (res && res.then) {\n res.then(\n () => cb(),\n e => cb(e),\n );\n }\n },\n results => {\n complete(results);\n },\n );\n },\n getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n if (\n typeof rule.validator !== 'function' &&\n rule.type &&\n !validators.hasOwnProperty(rule.type)\n ) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n return rule.type || 'string';\n },\n getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n const keys = Object.keys(rule);\n const messageIndex = keys.indexOf('message');\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n return validators[this.getType(rule)] || false;\n },\n};\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error(\n 'Cannot register a validator by type, validator is not a function',\n );\n }\n validators[type] = validator;\n};\n\nSchema.warning = warning;\n\nSchema.messages = defaultMessages;\n\nSchema.validators = validators;\n\nexport default Schema;\n","function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value = ret) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? undefined : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction claim_element(nodes, name, attributes, svg) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeName === name) {\n let j = 0;\n const remove = [];\n while (j < node.attributes.length) {\n const attribute = node.attributes[j++];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n for (let k = 0; k < remove.length; k++) {\n node.removeAttribute(remove[k]);\n }\n return nodes.splice(i, 1)[0];\n }\n }\n return svg ? svg_element(name) : element(name);\n}\nfunction claim_text(nodes, data) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 3) {\n node.data = '' + data;\n return nodes.splice(i, 1)[0];\n }\n }\n return text(data);\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n node.style.setProperty(key, value, important ? 'important' : '');\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n const z_index = (parseInt(computed_style.zIndex) || 0) - 1;\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', `display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ` +\n `overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: ${z_index};`);\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = `data:text/html,`;\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, false, false, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(anchor = null) {\n this.a = anchor;\n this.e = this.n = null;\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n this.e = element(target.nodeName);\n this.t = target;\n this.h(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\n\nconst active_docs = new Set();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = node.ownerDocument;\n active_docs.add(doc);\n const stylesheet = doc.__svelte_stylesheet || (doc.__svelte_stylesheet = doc.head.appendChild(element('style')).sheet);\n const current_rules = doc.__svelte_rules || (doc.__svelte_rules = {});\n if (!current_rules[name]) {\n current_rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ``}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || '').split(', ');\n const next = previous.filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(', ');\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n active_docs.forEach(doc => {\n const stylesheet = doc.__svelte_stylesheet;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n doc.__svelte_rules = {};\n });\n active_docs.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error(`Function called outside component initialization`);\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n callbacks.slice().forEach(fn => fn(event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n if (flushing)\n return;\n flushing = true;\n do {\n // first, call beforeUpdate functions\n // and update components\n for (let i = 0; i < dirty_components.length; i += 1) {\n const component = dirty_components[i];\n set_current_component(component);\n update(component.$$);\n }\n dirty_components.length = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n flushing = false;\n seen_callbacks.clear();\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = program.b - t;\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n info.blocks[i] = null;\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(child_ctx, dirty);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error(`Cannot have duplicate keys in a keyed each`);\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, classes_to_add) {\n const attributes = Object.assign({}, ...args);\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += \" \" + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += \" \" + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${String(value).replace(/\"/g, '"').replace(/'/g, ''')}\"`;\n }\n });\n return str;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(parent_component ? parent_component.$$.context : []),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, options = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, options);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : ``;\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));\n}\nfunction init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const prop_values = options.props || {};\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n before_update: [],\n after_update: [],\n context: new Map(parent_component ? parent_component.$$.context : []),\n // everything else\n callbacks: blank_object(),\n dirty\n };\n let ready = false;\n $$.ctx = instance\n ? instance(component, prop_values, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {\n if ($$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n })\n : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor);\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set() {\n // overridden by instance, if it has props\n }\n };\n}\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set() {\n // overridden by instance, if it has props\n }\n}\n\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.24.0' }, detail)));\n}\nfunction append_dev(target, node) {\n dispatch_dev(\"SvelteDOMInsert\", { target, node });\n append(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev(\"SvelteDOMInsert\", { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev(\"SvelteDOMRemove\", { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? [\"capture\"] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev(\"SvelteDOMAddEventListener\", { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev(\"SvelteDOMRemoveEventListener\", { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev(\"SvelteDOMRemoveAttribute\", { node, attribute });\n else\n dispatch_dev(\"SvelteDOMSetAttribute\", { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev(\"SvelteDOMSetProperty\", { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev(\"SvelteDOMSetDataset\", { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev(\"SvelteDOMSetData\", { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(`'target' is a required option`);\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn(`Component was already destroyed`); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error(`Infinite loop detected`);\n }\n };\n}\n\nexport { HtmlTag, SvelteComponent, SvelteComponentDev, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, append_dev, assign, attr, attr_dev, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_space, claim_text, clear_loops, component_subscribe, compute_rest_props, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, escape, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getContext, get_binding_group_value, get_current_component, get_slot_changes, get_slot_context, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, has_prop, identity, init, insert, insert_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_function, is_promise, listen, listen_dev, loop, loop_guard, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, update_keyed_each, update_slot, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal';\nexport { get_store_value as get } from '../internal';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe,\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = [];\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (let i = 0; i < subscribers.length; i += 1) {\n const s = subscribers[i];\n s[1]();\n subscriber_queue.push(s, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.push(subscriber);\n if (subscribers.length === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n const index = subscribers.indexOf(subscriber);\n if (index !== -1) {\n subscribers.splice(index, 1);\n }\n if (subscribers.length === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","// gutted from https://github.com/Polymer/observe-js/blob/master/src/observe.js\nfunction noop () {}\nfunction detectEval () {\n // Don't test for eval if we're running in a Chrome App environment.\n // We check for APIs set that only exist in a Chrome App context.\n if (typeof chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return false\n }\n\n // Firefox OS Apps do not allow eval. This feature detection is very hacky\n // but even if some other platform adds support for this function this code\n // will continue to work.\n if (typeof navigator != 'undefined' && navigator.getDeviceStorage) {\n return false\n }\n\n try {\n var f = new Function('', 'return true;')\n return f()\n } catch (ex) {\n return false\n }\n}\n\nvar hasEval = detectEval()\n\nfunction isIndex (s) {\n return +s === s >>> 0 && s !== ''\n}\n\nfunction isObject (obj) {\n return obj === Object(obj)\n}\n\nvar createObject = ('__proto__' in {}) ?\n function (obj) {\n return obj\n } :\n function (obj) {\n var proto = obj.__proto__\n if (!proto)\n return obj\n var newObject = Object.create(proto)\n Object.getOwnPropertyNames(obj).forEach(function (name) {\n Object.defineProperty(newObject, name,\n Object.getOwnPropertyDescriptor(obj, name))\n })\n return newObject\n }\n\nfunction parsePath (path) {\n var keys = []\n var index = -1\n var c, newChar, key, type, transition, action, typeMap, mode = 'beforePath'\n\n var actions = {\n push: function () {\n if (key === undefined)\n return\n\n keys.push(key)\n key = undefined\n },\n\n append: function () {\n if (key === undefined)\n key = newChar\n else\n key += newChar\n }\n }\n\n function maybeUnescapeQuote () {\n if (index >= path.length)\n return\n\n var nextChar = path[index + 1]\n if ((mode == 'inSingleQuote' && nextChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"')) {\n index++\n newChar = nextChar\n actions.append()\n return true\n }\n }\n\n while (mode) {\n index++\n c = path[index]\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n continue\n\n type = getPathCharType(c)\n typeMap = pathStateMachine[mode]\n transition = typeMap[type] || typeMap['else'] || 'error'\n\n if (transition == 'error')\n return // parse error\n\n mode = transition[0]\n action = actions[transition[1]] || noop\n newChar = transition[2] === undefined ? c : transition[2]\n action()\n\n if (mode === 'afterPath') {\n return keys\n }\n }\n\n return // parse error\n}\n\nvar identStart = '[\\$_a-zA-Z]'\nvar identPart = '[\\$_a-zA-Z0-9]'\nvar identRegExp = new RegExp('^' + identStart + '+' + identPart + '*' + '$')\n\nfunction isIdent (s) {\n return identRegExp.test(s)\n}\n\nvar constructorIsPrivate = {}\n\nfunction Path (parts, privateToken) {\n if (privateToken !== constructorIsPrivate)\n throw Error('Use Path.get to retrieve path objects')\n\n for (var i = 0; i < parts.length; i++) {\n this.push(String(parts[i]))\n }\n\n if (hasEval && this.length) {\n this.getValueFrom = this.compiledGetValueFromFn()\n }\n}\n\nvar pathCache = {}\n\nfunction getPath (pathString) {\n if (pathString instanceof Path)\n return pathString\n\n if (pathString == null || pathString.length == 0)\n pathString = ''\n\n if (typeof pathString != 'string') {\n if (isIndex(pathString.length)) {\n // Constructed with array-like (pre-parsed) keys\n return new Path(pathString, constructorIsPrivate)\n }\n\n pathString = String(pathString)\n }\n\n var path = pathCache[pathString]\n if (path)\n return path\n\n var parts = parsePath(pathString)\n if (!parts)\n return invalidPath\n\n var path = new Path(parts, constructorIsPrivate)\n pathCache[pathString] = path\n return path\n}\n\nPath.get = getPath\n\nfunction formatAccessor (key) {\n if (isIndex(key)) {\n return '[' + key + ']'\n } else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]'\n }\n}\n\nPath.prototype = createObject({\n __proto__: [],\n valid: true,\n\n toString: function () {\n var pathString = ''\n for (var i = 0; i < this.length; i++) {\n var key = this[i]\n if (isIdent(key)) {\n pathString += i ? '.' + key : key\n } else {\n pathString += formatAccessor(key)\n }\n }\n\n return pathString\n },\n\n getValueFrom: function (obj, directObserver) {\n for (var i = 0; i < this.length; i++) {\n if (obj == null)\n return\n obj = obj[this[i]]\n }\n return obj\n },\n\n iterateObjects: function (obj, observe) {\n for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[this[i - 1]]\n if (!isObject(obj))\n return\n observe(obj, this[i])\n }\n },\n\n compiledGetValueFromFn: function () {\n var str = ''\n var pathString = 'obj'\n str += 'if (obj != null'\n var i = 0\n var key\n for (; i < (this.length - 1); i++) {\n key = this[i]\n pathString += isIdent(key) ? '.' + key : formatAccessor(key)\n str += ' &&\\n ' + pathString + ' != null'\n }\n str += ')\\n'\n\n var key = this[i]\n pathString += isIdent(key) ? '.' + key : formatAccessor(key)\n\n str += ' return ' + pathString + ';\\nelse\\n return undefined;'\n return new Function('obj', str)\n },\n\n setValueFrom: function (obj, value) {\n if (!this.length)\n return false\n\n for (var i = 0; i < this.length - 1; i++) {\n if (!isObject(obj))\n return false\n obj = obj[this[i]]\n }\n\n if (!isObject(obj))\n return false\n\n obj[this[i]] = value\n return true\n }\n})\n\nfunction getPathCharType (char) {\n if (char === undefined)\n return 'eof'\n\n var code = char.charCodeAt(0)\n\n switch (code) {\n case 0x5B: // [\n case 0x5D: // ]\n case 0x2E: // .\n case 0x22: // \"\n case 0x27: // '\n case 0x30: // 0\n return char\n\n case 0x5F: // _\n case 0x24: // $\n return 'ident'\n\n case 0x20: // Space\n case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n case 0xA0: // No-break space\n case 0xFEFF: // Byte Order Mark\n case 0x2028: // Line Separator\n case 0x2029: // Paragraph Separator\n return 'ws'\n }\n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x7A) || (0x41 <= code && code <= 0x5A))\n return 'ident'\n\n // 1-9\n if (0x31 <= code && code <= 0x39)\n return 'number'\n\n return 'else'\n}\n\nvar pathStateMachine = {\n 'beforePath': {\n 'ws': ['beforePath'],\n 'ident': ['inIdent', 'append'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n '.': ['beforeIdent'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']\n },\n\n 'beforeIdent': {\n 'ws': ['beforeIdent'],\n 'ident': ['inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent', 'append'],\n '0': ['inIdent', 'append'],\n 'number': ['inIdent', 'append'],\n 'ws': ['inPath', 'push'],\n '.': ['beforeIdent', 'push'],\n '[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n\n 'beforeElement': {\n 'ws': ['beforeElement'],\n '0': ['afterZero', 'append'],\n 'number': ['inIndex', 'append'],\n \"'\": ['inSingleQuote', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n 'afterZero': {\n 'ws': ['afterElement', 'push'],\n ']': ['inPath', 'push']\n },\n\n 'inIndex': {\n '0': ['inIndex', 'append'],\n 'number': ['inIndex', 'append'],\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n 'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n 'inDoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n 'else': ['inDoubleQuote', 'append']\n },\n\n 'afterElement': {\n 'ws': ['afterElement'],\n ']': ['inPath', 'push']\n }\n}\n\nvar invalidPath = new Path('', constructorIsPrivate)\ninvalidPath.valid = false\ninvalidPath.getValueFrom = invalidPath.setValueFrom = function () {}\n\nmodule.exports = Path\n","export var TYPE;\n(function (TYPE) {\n /**\n * Raw text\n */\n TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n /**\n * Variable w/o any format, e.g `var` in `this is a {var}`\n */\n TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n /**\n * Variable w/ number format\n */\n TYPE[TYPE[\"number\"] = 2] = \"number\";\n /**\n * Variable w/ date format\n */\n TYPE[TYPE[\"date\"] = 3] = \"date\";\n /**\n * Variable w/ time format\n */\n TYPE[TYPE[\"time\"] = 4] = \"time\";\n /**\n * Variable w/ select format\n */\n TYPE[TYPE[\"select\"] = 5] = \"select\";\n /**\n * Variable w/ plural format\n */\n TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n /**\n * Only possible within plural argument.\n * This is the `#` symbol that will be substituted with the count.\n */\n TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n})(TYPE || (TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n return el.type === TYPE.pound;\n}\nexport function isNumberSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === 0 /* number */);\n}\nexport function isDateTimeSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === 1 /* dateTime */);\n}\nexport function createLiteralElement(value) {\n return {\n type: TYPE.literal,\n value: value,\n };\n}\nexport function createNumberElement(value, style) {\n return {\n type: TYPE.number,\n value: value,\n style: style,\n };\n}\n","// tslint:disable:only-arrow-functions\n// tslint:disable:object-literal-shorthand\n// tslint:disable:trailing-comma\n// tslint:disable:object-literal-sort-keys\n// tslint:disable:one-variable-per-declaration\n// tslint:disable:max-line-length\n// tslint:disable:no-consecutive-blank-lines\n// tslint:disable:align\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n// Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.2.6 )\n//\n// https://pegjs.org/ https://github.com/metadevpro/ts-pegjs\nimport { TYPE, } from './types';\nvar SyntaxError = /** @class */ (function (_super) {\n __extends(SyntaxError, _super);\n function SyntaxError(message, expected, found, location) {\n var _this = _super.call(this) || this;\n _this.message = message;\n _this.expected = expected;\n _this.found = found;\n _this.location = location;\n _this.name = \"SyntaxError\";\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(_this, SyntaxError);\n }\n return _this;\n }\n SyntaxError.buildMessage = function (expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n }\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) { return \"\\\\x\" + hex(ch); });\n }\n function describeExpectation(expectation) {\n switch (expectation.type) {\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n case \"class\":\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n case \"any\":\n return \"any character\";\n case \"end\":\n return \"end of input\";\n case \"other\":\n return expectation.description;\n }\n }\n function describeExpected(expected1) {\n var descriptions = expected1.map(describeExpectation);\n var i;\n var j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n return SyntaxError;\n}(Error));\nexport { SyntaxError };\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n var peg$FAILED = {};\n var peg$startRuleFunctions = { start: peg$parsestart };\n var peg$startRuleFunction = peg$parsestart;\n var peg$c0 = function (parts) {\n return parts.join('');\n };\n var peg$c1 = function (messageText) {\n return __assign({ type: TYPE.literal, value: messageText }, insertLocation());\n };\n var peg$c2 = \"#\";\n var peg$c3 = peg$literalExpectation(\"#\", false);\n var peg$c4 = function () {\n return __assign({ type: TYPE.pound }, insertLocation());\n };\n var peg$c5 = peg$otherExpectation(\"argumentElement\");\n var peg$c6 = \"{\";\n var peg$c7 = peg$literalExpectation(\"{\", false);\n var peg$c8 = \"}\";\n var peg$c9 = peg$literalExpectation(\"}\", false);\n var peg$c10 = function (value) {\n return __assign({ type: TYPE.argument, value: value }, insertLocation());\n };\n var peg$c11 = peg$otherExpectation(\"numberSkeletonId\");\n var peg$c12 = /^['\\/{}]/;\n var peg$c13 = peg$classExpectation([\"'\", \"/\", \"{\", \"}\"], false, false);\n var peg$c14 = peg$anyExpectation();\n var peg$c15 = peg$otherExpectation(\"numberSkeletonTokenOption\");\n var peg$c16 = \"/\";\n var peg$c17 = peg$literalExpectation(\"/\", false);\n var peg$c18 = function (option) { return option; };\n var peg$c19 = peg$otherExpectation(\"numberSkeletonToken\");\n var peg$c20 = function (stem, options) {\n return { stem: stem, options: options };\n };\n var peg$c21 = function (tokens) {\n return __assign({ type: 0 /* number */, tokens: tokens }, insertLocation());\n };\n var peg$c22 = \"::\";\n var peg$c23 = peg$literalExpectation(\"::\", false);\n var peg$c24 = function (skeleton) { return skeleton; };\n var peg$c25 = function () { messageCtx.push('numberArgStyle'); return true; };\n var peg$c26 = function (style) {\n messageCtx.pop();\n return style.replace(/\\s*$/, '');\n };\n var peg$c27 = \",\";\n var peg$c28 = peg$literalExpectation(\",\", false);\n var peg$c29 = \"number\";\n var peg$c30 = peg$literalExpectation(\"number\", false);\n var peg$c31 = function (value, type, style) {\n return __assign({ type: type === 'number' ? TYPE.number : type === 'date' ? TYPE.date : TYPE.time, style: style && style[2], value: value }, insertLocation());\n };\n var peg$c32 = \"'\";\n var peg$c33 = peg$literalExpectation(\"'\", false);\n var peg$c34 = /^[^']/;\n var peg$c35 = peg$classExpectation([\"'\"], true, false);\n var peg$c36 = /^[^a-zA-Z'{}]/;\n var peg$c37 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"'\", \"{\", \"}\"], true, false);\n var peg$c38 = /^[a-zA-Z]/;\n var peg$c39 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$c40 = function (pattern) {\n return __assign({ type: 1 /* dateTime */, pattern: pattern }, insertLocation());\n };\n var peg$c41 = function () { messageCtx.push('dateOrTimeArgStyle'); return true; };\n var peg$c42 = \"date\";\n var peg$c43 = peg$literalExpectation(\"date\", false);\n var peg$c44 = \"time\";\n var peg$c45 = peg$literalExpectation(\"time\", false);\n var peg$c46 = \"plural\";\n var peg$c47 = peg$literalExpectation(\"plural\", false);\n var peg$c48 = \"selectordinal\";\n var peg$c49 = peg$literalExpectation(\"selectordinal\", false);\n var peg$c50 = \"offset:\";\n var peg$c51 = peg$literalExpectation(\"offset:\", false);\n var peg$c52 = function (value, pluralType, offset, options) {\n return __assign({ type: TYPE.plural, pluralType: pluralType === 'plural' ? 'cardinal' : 'ordinal', value: value, offset: offset ? offset[2] : 0, options: options.reduce(function (all, _a) {\n var id = _a.id, value = _a.value, optionLocation = _a.location;\n if (id in all) {\n error(\"Duplicate option \\\"\" + id + \"\\\" in plural element: \\\"\" + text() + \"\\\"\", location());\n }\n all[id] = {\n value: value,\n location: optionLocation\n };\n return all;\n }, {}) }, insertLocation());\n };\n var peg$c53 = \"select\";\n var peg$c54 = peg$literalExpectation(\"select\", false);\n var peg$c55 = function (value, options) {\n return __assign({ type: TYPE.select, value: value, options: options.reduce(function (all, _a) {\n var id = _a.id, value = _a.value, optionLocation = _a.location;\n if (id in all) {\n error(\"Duplicate option \\\"\" + id + \"\\\" in select element: \\\"\" + text() + \"\\\"\", location());\n }\n all[id] = {\n value: value,\n location: optionLocation\n };\n return all;\n }, {}) }, insertLocation());\n };\n var peg$c56 = \"=\";\n var peg$c57 = peg$literalExpectation(\"=\", false);\n var peg$c58 = function (id) { messageCtx.push('select'); return true; };\n var peg$c59 = function (id, value) {\n messageCtx.pop();\n return __assign({ id: id,\n value: value }, insertLocation());\n };\n var peg$c60 = function (id) { messageCtx.push('plural'); return true; };\n var peg$c61 = function (id, value) {\n messageCtx.pop();\n return __assign({ id: id,\n value: value }, insertLocation());\n };\n var peg$c62 = peg$otherExpectation(\"whitespace\");\n var peg$c63 = /^[\\t-\\r \\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n var peg$c64 = peg$classExpectation([[\"\\t\", \"\\r\"], \" \", \"\\x85\", \"\\xA0\", \"\\u1680\", [\"\\u2000\", \"\\u200A\"], \"\\u2028\", \"\\u2029\", \"\\u202F\", \"\\u205F\", \"\\u3000\"], false, false);\n var peg$c65 = peg$otherExpectation(\"syntax pattern\");\n var peg$c66 = /^[!-\\/:-@[-\\^`{-~\\xA1-\\xA7\\xA9\\xAB\\xAC\\xAE\\xB0\\xB1\\xB6\\xBB\\xBF\\xD7\\xF7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]/;\n var peg$c67 = peg$classExpectation([[\"!\", \"/\"], [\":\", \"@\"], [\"[\", \"^\"], \"`\", [\"{\", \"~\"], [\"\\xA1\", \"\\xA7\"], \"\\xA9\", \"\\xAB\", \"\\xAC\", \"\\xAE\", \"\\xB0\", \"\\xB1\", \"\\xB6\", \"\\xBB\", \"\\xBF\", \"\\xD7\", \"\\xF7\", [\"\\u2010\", \"\\u2027\"], [\"\\u2030\", \"\\u203E\"], [\"\\u2041\", \"\\u2053\"], [\"\\u2055\", \"\\u205E\"], [\"\\u2190\", \"\\u245F\"], [\"\\u2500\", \"\\u2775\"], [\"\\u2794\", \"\\u2BFF\"], [\"\\u2E00\", \"\\u2E7F\"], [\"\\u3001\", \"\\u3003\"], [\"\\u3008\", \"\\u3020\"], \"\\u3030\", \"\\uFD3E\", \"\\uFD3F\", \"\\uFE45\", \"\\uFE46\"], false, false);\n var peg$c68 = peg$otherExpectation(\"optional whitespace\");\n var peg$c69 = peg$otherExpectation(\"number\");\n var peg$c70 = \"-\";\n var peg$c71 = peg$literalExpectation(\"-\", false);\n var peg$c72 = function (negative, num) {\n return num\n ? negative\n ? -num\n : num\n : 0;\n };\n var peg$c73 = peg$otherExpectation(\"apostrophe\");\n var peg$c74 = peg$otherExpectation(\"double apostrophes\");\n var peg$c75 = \"''\";\n var peg$c76 = peg$literalExpectation(\"''\", false);\n var peg$c77 = function () { return \"'\"; };\n var peg$c78 = function (escapedChar, quotedChars) {\n return escapedChar + quotedChars.replace(\"''\", \"'\");\n };\n var peg$c79 = function (x) {\n return (x !== '{' &&\n !(isInPluralOption() && x === '#') &&\n !(isNestedMessageText() && x === '}'));\n };\n var peg$c80 = \"\\n\";\n var peg$c81 = peg$literalExpectation(\"\\n\", false);\n var peg$c82 = function (x) {\n return x === '{' || x === '}' || (isInPluralOption() && x === '#');\n };\n var peg$c83 = peg$otherExpectation(\"argNameOrNumber\");\n var peg$c84 = peg$otherExpectation(\"argNumber\");\n var peg$c85 = \"0\";\n var peg$c86 = peg$literalExpectation(\"0\", false);\n var peg$c87 = function () { return 0; };\n var peg$c88 = /^[1-9]/;\n var peg$c89 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n var peg$c90 = /^[0-9]/;\n var peg$c91 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$c92 = function (digits) {\n return parseInt(digits.join(''), 10);\n };\n var peg$c93 = peg$otherExpectation(\"argName\");\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location1) {\n location1 = location1 !== undefined\n ? location1\n : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n }\n function error(message, location1) {\n location1 = location1 !== undefined\n ? location1\n : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n function peg$literalExpectation(text1, ignoreCase) {\n return { type: \"literal\", text: text1, ignoreCase: ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n }\n else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n }\n else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected1);\n }\n function peg$buildSimpleError(message, location1) {\n return new SyntaxError(message, [], \"\", location1);\n }\n function peg$buildStructuredError(expected1, found, location1) {\n return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n }\n function peg$parsestart() {\n var s0;\n s0 = peg$parsemessage();\n return s0;\n }\n function peg$parsemessage() {\n var s0, s1;\n s0 = [];\n s1 = peg$parsemessageElement();\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsemessageElement();\n }\n return s0;\n }\n function peg$parsemessageElement() {\n var s0;\n s0 = peg$parseliteralElement();\n if (s0 === peg$FAILED) {\n s0 = peg$parseargumentElement();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesimpleFormatElement();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepluralElement();\n if (s0 === peg$FAILED) {\n s0 = peg$parseselectElement();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepoundElement();\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsemessageText() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedoubleApostrophes();\n if (s2 === peg$FAILED) {\n s2 = peg$parsequotedString();\n if (s2 === peg$FAILED) {\n s2 = peg$parseunquotedString();\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedoubleApostrophes();\n if (s2 === peg$FAILED) {\n s2 = peg$parsequotedString();\n if (s2 === peg$FAILED) {\n s2 = peg$parseunquotedString();\n }\n }\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseliteralElement() {\n var s0, s1;\n s0 = peg$currPos;\n s1 = peg$parsemessageText();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c1(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsepoundElement() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c4();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseargumentElement() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c8;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10(s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n return s0;\n }\n function peg$parsenumberSkeletonId() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n if (s4 === peg$FAILED) {\n if (peg$c12.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n }\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n if (s4 === peg$FAILED) {\n if (peg$c12.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n }\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n }\n else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c11);\n }\n }\n return s0;\n }\n function peg$parsenumberSkeletonTokenOption() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c16;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c17);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeletonId();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c18(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c15);\n }\n }\n return s0;\n }\n function peg$parsenumberSkeletonToken() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeletonId();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsenumberSkeletonTokenOption();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenumberSkeletonTokenOption();\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c20(s2, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c19);\n }\n }\n return s0;\n }\n function peg$parsenumberSkeleton() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsenumberSkeletonToken();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsenumberSkeletonToken();\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c21(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsenumberArgStyle() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeleton();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$c25();\n if (s1) {\n s1 = undefined;\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemessageText();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parsenumberFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c29) {\n s7 = peg$c29;\n peg$currPos += 6;\n }\n else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c30);\n }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (s8 !== peg$FAILED) {\n s9 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s10 = peg$c27;\n peg$currPos++;\n }\n else {\n s10 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s10 !== peg$FAILED) {\n s11 = peg$parse_();\n if (s11 !== peg$FAILED) {\n s12 = peg$parsenumberArgStyle();\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n }\n else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n if (s9 === peg$FAILED) {\n s9 = null;\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c8;\n peg$currPos++;\n }\n else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s3, s7, s9);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedateTimeSkeletonLiteral() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c32;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsedoubleApostrophes();\n if (s3 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsedoubleApostrophes();\n if (s3 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n }\n }\n else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c32;\n peg$currPos++;\n }\n else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = [];\n s1 = peg$parsedoubleApostrophes();\n if (s1 === peg$FAILED) {\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c37);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsedoubleApostrophes();\n if (s1 === peg$FAILED) {\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c37);\n }\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parsedateTimeSkeletonPattern() {\n var s0, s1;\n s0 = [];\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c39);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c39);\n }\n }\n }\n }\n else {\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedateTimeSkeleton() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsedateTimeSkeletonLiteral();\n if (s3 === peg$FAILED) {\n s3 = peg$parsedateTimeSkeletonPattern();\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsedateTimeSkeletonLiteral();\n if (s3 === peg$FAILED) {\n s3 = peg$parsedateTimeSkeletonPattern();\n }\n }\n }\n else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n }\n else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c40(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsedateOrTimeArgStyle() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedateTimeSkeleton();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$c41();\n if (s1) {\n s1 = undefined;\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemessageText();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parsedateOrTimeFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c42) {\n s7 = peg$c42;\n peg$currPos += 4;\n }\n else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c43);\n }\n }\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c44) {\n s7 = peg$c44;\n peg$currPos += 4;\n }\n else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c45);\n }\n }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (s8 !== peg$FAILED) {\n s9 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s10 = peg$c27;\n peg$currPos++;\n }\n else {\n s10 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s10 !== peg$FAILED) {\n s11 = peg$parse_();\n if (s11 !== peg$FAILED) {\n s12 = peg$parsedateOrTimeArgStyle();\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n }\n else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n if (s9 === peg$FAILED) {\n s9 = null;\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c8;\n peg$currPos++;\n }\n else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s3, s7, s9);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesimpleFormatElement() {\n var s0;\n s0 = peg$parsenumberFormatElement();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedateOrTimeFormatElement();\n }\n return s0;\n }\n function peg$parsepluralElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c46) {\n s7 = peg$c46;\n peg$currPos += 6;\n }\n else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c47);\n }\n }\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c48) {\n s7 = peg$c48;\n peg$currPos += 13;\n }\n else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c49);\n }\n }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c27;\n peg$currPos++;\n }\n else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (s10 !== peg$FAILED) {\n s11 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c50) {\n s12 = peg$c50;\n peg$currPos += 7;\n }\n else {\n s12 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c51);\n }\n }\n if (s12 !== peg$FAILED) {\n s13 = peg$parse_();\n if (s13 !== peg$FAILED) {\n s14 = peg$parsenumber();\n if (s14 !== peg$FAILED) {\n s12 = [s12, s13, s14];\n s11 = s12;\n }\n else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n if (s11 === peg$FAILED) {\n s11 = null;\n }\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n if (s12 !== peg$FAILED) {\n s13 = [];\n s14 = peg$parsepluralOption();\n if (s14 !== peg$FAILED) {\n while (s14 !== peg$FAILED) {\n s13.push(s14);\n s14 = peg$parsepluralOption();\n }\n }\n else {\n s13 = peg$FAILED;\n }\n if (s13 !== peg$FAILED) {\n s14 = peg$parse_();\n if (s14 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s15 = peg$c8;\n peg$currPos++;\n }\n else {\n s15 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n if (s15 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c52(s3, s7, s11, s13);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseselectElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c53) {\n s7 = peg$c53;\n peg$currPos += 6;\n }\n else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c54);\n }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c27;\n peg$currPos++;\n }\n else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (s10 !== peg$FAILED) {\n s11 = [];\n s12 = peg$parseselectOption();\n if (s12 !== peg$FAILED) {\n while (s12 !== peg$FAILED) {\n s11.push(s12);\n s12 = peg$parseselectOption();\n }\n }\n else {\n s11 = peg$FAILED;\n }\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n if (s12 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s13 = peg$c8;\n peg$currPos++;\n }\n else {\n s13 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n if (s13 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c55(s3, s11);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepluralRuleSelectValue() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c56;\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c57);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n }\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n }\n else {\n s0 = s1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseargName();\n }\n return s0;\n }\n function peg$parseselectOption() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseargName();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c6;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$c58(s2);\n if (s5) {\n s5 = undefined;\n }\n else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessage();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c8;\n peg$currPos++;\n }\n else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c59(s2, s6);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepluralOption() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepluralRuleSelectValue();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c6;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$c60(s2);\n if (s5) {\n s5 = undefined;\n }\n else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessage();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c8;\n peg$currPos++;\n }\n else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c61(s2, s6);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhiteSpace() {\n var s0, s1;\n peg$silentFails++;\n if (peg$c63.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c64);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c62);\n }\n }\n return s0;\n }\n function peg$parsepatternSyntax() {\n var s0, s1;\n peg$silentFails++;\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c67);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c65);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhiteSpace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhiteSpace();\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n }\n else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c68);\n }\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c70;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c71);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseargNumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c72(s1, s2);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c69);\n }\n }\n return s0;\n }\n function peg$parseapostrophe() {\n var s0, s1;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 39) {\n s0 = peg$c32;\n peg$currPos++;\n }\n else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c73);\n }\n }\n return s0;\n }\n function peg$parsedoubleApostrophes() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s1 = peg$c75;\n peg$currPos += 2;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c77();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c74);\n }\n }\n return s0;\n }\n function peg$parsequotedString() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c32;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseescapedChar();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s5 = peg$c75;\n peg$currPos += 2;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n if (s5 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s5 = peg$c75;\n peg$currPos += 2;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n if (s5 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n }\n else {\n s3 = s4;\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s4 = peg$c32;\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c78(s2, s3);\n s0 = s1;\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseunquotedString() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s3 = peg$c79(s2);\n if (s3) {\n s3 = undefined;\n }\n else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n }\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s1 = peg$c80;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n }\n else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parseescapedChar() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s3 = peg$c82(s2);\n if (s3) {\n s3 = undefined;\n }\n else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n }\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n }\n else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parseargNameOrNumber() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseargNumber();\n if (s1 === peg$FAILED) {\n s1 = peg$parseargName();\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n }\n else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n return s0;\n }\n function peg$parseargNumber() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c85;\n peg$currPos++;\n }\n else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c86);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c87();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (peg$c88.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c89);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c90.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c91);\n }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c90.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c91);\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n }\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c92(s1);\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c84);\n }\n }\n return s0;\n }\n function peg$parseargName() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n if (s4 === peg$FAILED) {\n s4 = peg$parsepatternSyntax();\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n }\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n if (s4 === peg$FAILED) {\n s4 = peg$parsepatternSyntax();\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n }\n else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n }\n else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n }\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n }\n else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n }\n else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$c93);\n }\n }\n return s0;\n }\n var messageCtx = ['root'];\n function isNestedMessageText() {\n return messageCtx.length > 1;\n }\n function isInPluralOption() {\n return messageCtx[messageCtx.length - 1] === 'plural';\n }\n function insertLocation() {\n return options && options.captureLocation ? {\n location: location()\n } : {};\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n }\n else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nexport var pegParse = peg$parse;\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { isPluralElement, isLiteralElement, isSelectElement, } from './types';\nimport { pegParse } from './parser';\nvar PLURAL_HASHTAG_REGEX = /(^|[^\\\\])#/g;\n/**\n * Whether to convert `#` in plural rule options\n * to `{var, number}`\n * @param el AST Element\n * @param pluralStack current plural stack\n */\nexport function normalizeHashtagInPlural(els) {\n els.forEach(function (el) {\n // If we're encountering a plural el\n if (!isPluralElement(el) && !isSelectElement(el)) {\n return;\n }\n // Go down the options and search for # in any literal element\n Object.keys(el.options).forEach(function (id) {\n var _a;\n var opt = el.options[id];\n // If we got a match, we have to split this\n // and inject a NumberElement in the middle\n var matchingLiteralElIndex = -1;\n var literalEl = undefined;\n for (var i = 0; i < opt.value.length; i++) {\n var el_1 = opt.value[i];\n if (isLiteralElement(el_1) && PLURAL_HASHTAG_REGEX.test(el_1.value)) {\n matchingLiteralElIndex = i;\n literalEl = el_1;\n break;\n }\n }\n if (literalEl) {\n var newValue = literalEl.value.replace(PLURAL_HASHTAG_REGEX, \"$1{\" + el.value + \", number}\");\n var newEls = pegParse(newValue);\n (_a = opt.value).splice.apply(_a, __spreadArrays([matchingLiteralElIndex, 1], newEls));\n }\n normalizeHashtagInPlural(opt.value);\n });\n });\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n var result = {};\n skeleton.replace(DATE_TIME_REGEX, function (match) {\n var len = match.length;\n switch (match[0]) {\n // Era\n case 'G':\n result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n // Year\n case 'y':\n result.year = len === 2 ? '2-digit' : 'numeric';\n break;\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n // Quarter\n case 'q':\n case 'Q':\n throw new RangeError('`q/Q` (quarter) patterns are not supported');\n // Month\n case 'M':\n case 'L':\n result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n break;\n // Week\n case 'w':\n case 'W':\n throw new RangeError('`w/W` (week) patterns are not supported');\n case 'd':\n result.day = ['numeric', '2-digit'][len - 1];\n break;\n case 'D':\n case 'F':\n case 'g':\n throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n // Weekday\n case 'E':\n result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n break;\n case 'e':\n if (len < 4) {\n throw new RangeError('`e..eee` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n case 'c':\n if (len < 4) {\n throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n }\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n // Period\n case 'a': // AM, PM\n result.hour12 = true;\n break;\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n // Hour\n case 'h':\n result.hourCycle = 'h12';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'H':\n result.hourCycle = 'h23';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'K':\n result.hourCycle = 'h11';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'k':\n result.hourCycle = 'h24';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n case 'j':\n case 'J':\n case 'C':\n throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n // Minute\n case 'm':\n result.minute = ['numeric', '2-digit'][len - 1];\n break;\n // Second\n case 's':\n result.second = ['numeric', '2-digit'][len - 1];\n break;\n case 'S':\n case 'A':\n throw new RangeError('`S/A` (second) pattenrs are not supported, use `s` instead');\n // Zone\n case 'z': // 1..3, 4: specific non-location format\n result.timeZoneName = len < 4 ? 'short' : 'long';\n break;\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n throw new RangeError('`Z/O/v/V/X/x` (timeZone) pattenrs are not supported, use `z` instead');\n }\n return '';\n });\n return result;\n}\nfunction icuUnitToEcma(unit) {\n return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\+|#+)?)?$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?$/g;\nfunction parseSignificantPrecision(str) {\n var result = {};\n str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n // @@@ case\n if (typeof g2 !== 'string') {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length;\n }\n // @@@+ case\n else if (g2 === '+') {\n result.minimumSignificantDigits = g1.length;\n }\n // .### case\n else if (g1[0] === '#') {\n result.maximumSignificantDigits = g1.length;\n }\n // .@@## or .@@@ case\n else {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits =\n g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n return '';\n });\n return result;\n}\nfunction parseSign(str) {\n switch (str) {\n case 'sign-auto':\n return {\n signDisplay: 'auto',\n };\n case 'sign-accounting':\n return {\n currencySign: 'accounting',\n };\n case 'sign-always':\n return {\n signDisplay: 'always',\n };\n case 'sign-accounting-always':\n return {\n signDisplay: 'always',\n currencySign: 'accounting',\n };\n case 'sign-except-zero':\n return {\n signDisplay: 'exceptZero',\n };\n case 'sign-accounting-except-zero':\n return {\n signDisplay: 'exceptZero',\n currencySign: 'accounting',\n };\n case 'sign-never':\n return {\n signDisplay: 'never',\n };\n }\n}\nfunction parseNotationOptions(opt) {\n var result = {};\n var signOpts = parseSign(opt);\n if (signOpts) {\n return signOpts;\n }\n return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function convertNumberSkeletonToNumberFormatOptions(tokens) {\n var result = {};\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n switch (token.stem) {\n case 'percent':\n result.style = 'percent';\n continue;\n case 'currency':\n result.style = 'currency';\n result.currency = token.options[0];\n continue;\n case 'group-off':\n result.useGrouping = false;\n continue;\n case 'precision-integer':\n result.maximumFractionDigits = 0;\n continue;\n case 'measure-unit':\n result.style = 'unit';\n result.unit = icuUnitToEcma(token.options[0]);\n continue;\n case 'compact-short':\n result.notation = 'compact';\n result.compactDisplay = 'short';\n continue;\n case 'compact-long':\n result.notation = 'compact';\n result.compactDisplay = 'long';\n continue;\n case 'scientific':\n result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'engineering':\n result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n continue;\n case 'notation-simple':\n result.notation = 'standard';\n continue;\n // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n case 'unit-width-narrow':\n result.currencyDisplay = 'narrowSymbol';\n result.unitDisplay = 'narrow';\n continue;\n case 'unit-width-short':\n result.currencyDisplay = 'code';\n result.unitDisplay = 'short';\n continue;\n case 'unit-width-full-name':\n result.currencyDisplay = 'name';\n result.unitDisplay = 'long';\n continue;\n case 'unit-width-iso-code':\n result.currencyDisplay = 'symbol';\n continue;\n }\n // Precision\n // https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#fraction-precision\n if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n if (token.options.length > 1) {\n throw new RangeError('Fraction-precision stems only accept a single optional option');\n }\n token.stem.replace(FRACTION_PRECISION_REGEX, function (match, g1, g2) {\n // precision-integer case\n if (match === '.') {\n result.maximumFractionDigits = 0;\n }\n // .000+ case\n else if (g2 === '+') {\n result.minimumFractionDigits = g2.length;\n }\n // .### case\n else if (g1[0] === '#') {\n result.maximumFractionDigits = g1.length;\n }\n // .00## or .000 case\n else {\n result.minimumFractionDigits = g1.length;\n result.maximumFractionDigits =\n g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n return '';\n });\n if (token.options.length) {\n result = __assign(__assign({}, result), parseSignificantPrecision(token.options[0]));\n }\n continue;\n }\n if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n continue;\n }\n var signOpts = parseSign(token.stem);\n if (signOpts) {\n result = __assign(__assign({}, result), signOpts);\n }\n }\n return result;\n}\n","import { pegParse } from './parser';\nimport { normalizeHashtagInPlural } from './normalize';\nexport * from './types';\nexport * from './parser';\nexport * from './skeleton';\nexport function parse(input, opts) {\n var els = pegParse(input, opts);\n if (!opts || opts.normalizeHashtagInPlural !== false) {\n normalizeHashtagInPlural(els);\n }\n return els;\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\n// -- Utilities ----------------------------------------------------------------\nfunction getCacheId(inputs) {\n return JSON.stringify(inputs.map(function (input) {\n return input && typeof input === 'object' ? orderedProps(input) : input;\n }));\n}\nfunction orderedProps(obj) {\n return Object.keys(obj)\n .sort()\n .map(function (k) {\n var _a;\n return (_a = {}, _a[k] = obj[k], _a);\n });\n}\nvar memoizeFormatConstructor = function (FormatConstructor, cache) {\n if (cache === void 0) { cache = {}; }\n return function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var cacheId = getCacheId(args);\n var format = cacheId && cache[cacheId];\n if (!format) {\n format = new ((_a = FormatConstructor).bind.apply(_a, __spreadArrays([void 0], args)))();\n if (cacheId) {\n cache[cacheId] = format;\n }\n }\n return format;\n };\n};\nexport default memoizeFormatConstructor;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { convertNumberSkeletonToNumberFormatOptions, isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTimeElement, parseDateTimeSkeleton, } from 'intl-messageformat-parser';\nvar FormatError = /** @class */ (function (_super) {\n __extends(FormatError, _super);\n function FormatError(msg, variableId) {\n var _this = _super.call(this, msg) || this;\n _this.variableId = variableId;\n return _this;\n }\n return FormatError;\n}(Error));\nfunction mergeLiteral(parts) {\n if (parts.length < 2) {\n return parts;\n }\n return parts.reduce(function (all, part) {\n var lastPart = all[all.length - 1];\n if (!lastPart ||\n lastPart.type !== 0 /* literal */ ||\n part.type !== 0 /* literal */) {\n all.push(part);\n }\n else {\n lastPart.value += part.value;\n }\n return all;\n }, []);\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n // Hot path for straight simple msg translations\n if (els.length === 1 && isLiteralElement(els[0])) {\n return [\n {\n type: 0 /* literal */,\n value: els[0].value,\n },\n ];\n }\n var result = [];\n for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n var el = els_1[_i];\n // Exit early for string parts.\n if (isLiteralElement(el)) {\n result.push({\n type: 0 /* literal */,\n value: el.value,\n });\n continue;\n }\n // TODO: should this part be literal type?\n // Replace `#` in plural rules with the actual numeric value.\n if (isPoundElement(el)) {\n if (typeof currentPluralValue === 'number') {\n result.push({\n type: 0 /* literal */,\n value: formatters.getNumberFormat(locales).format(currentPluralValue),\n });\n }\n continue;\n }\n var varName = el.value;\n // Enforce that all required values are provided by the caller.\n if (!(values && varName in values)) {\n throw new FormatError(\"The intl string context variable \\\"\" + varName + \"\\\" was not provided to the string \\\"\" + originalMessage + \"\\\"\");\n }\n var value = values[varName];\n if (isArgumentElement(el)) {\n if (!value || typeof value === 'string' || typeof value === 'number') {\n value =\n typeof value === 'string' || typeof value === 'number'\n ? String(value)\n : '';\n }\n result.push({\n type: 1 /* argument */,\n value: value,\n });\n continue;\n }\n // Recursively format plural and select parts' option — which can be a\n // nested pattern structure. The choosing of the option to use is\n // abstracted-by and delegated-to the part helper object.\n if (isDateElement(el)) {\n var style = typeof el.style === 'string' ? formats.date[el.style] : undefined;\n result.push({\n type: 0 /* literal */,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isTimeElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.time[el.style]\n : isDateTimeSkeleton(el.style)\n ? parseDateTimeSkeleton(el.style.pattern)\n : undefined;\n result.push({\n type: 0 /* literal */,\n value: formatters\n .getDateTimeFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isNumberElement(el)) {\n var style = typeof el.style === 'string'\n ? formats.number[el.style]\n : isNumberSkeleton(el.style)\n ? convertNumberSkeletonToNumberFormatOptions(el.style.tokens)\n : undefined;\n result.push({\n type: 0 /* literal */,\n value: formatters\n .getNumberFormat(locales, style)\n .format(value),\n });\n continue;\n }\n if (isSelectElement(el)) {\n var opt = el.options[value] || el.options.other;\n if (!opt) {\n throw new RangeError(\"Invalid values for \\\"\" + el.value + \"\\\": \\\"\" + value + \"\\\". Options are \\\"\" + Object.keys(el.options).join('\", \"') + \"\\\"\");\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n continue;\n }\n if (isPluralElement(el)) {\n var opt = el.options[\"=\" + value];\n if (!opt) {\n if (!Intl.PluralRules) {\n throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\");\n }\n var rule = formatters\n .getPluralRules(locales, { type: el.pluralType })\n .select(value - (el.offset || 0));\n opt = el.options[rule] || el.options.other;\n }\n if (!opt) {\n throw new RangeError(\"Invalid values for \\\"\" + el.value + \"\\\": \\\"\" + value + \"\\\". Options are \\\"\" + Object.keys(el.options).join('\", \"') + \"\\\"\");\n }\n result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n continue;\n }\n }\n return mergeLiteral(result);\n}\nexport function formatToString(els, locales, formatters, formats, values, \n// For debugging\noriginalMessage) {\n var parts = formatToParts(els, locales, formatters, formats, values, undefined, originalMessage);\n // Hot path for straight simple msg translations\n if (parts.length === 1) {\n return parts[0].value;\n }\n return parts.reduce(function (all, part) { return (all += part.value); }, '');\n}\n// Singleton\nvar domParser;\nvar TOKEN_DELIMITER = '@@';\nvar TOKEN_REGEX = /@@(\\d+_\\d+)@@/g;\nvar counter = 0;\nfunction generateId() {\n return Date.now() + \"_\" + ++counter;\n}\nfunction restoreRichPlaceholderMessage(text, objectParts) {\n return text\n .split(TOKEN_REGEX)\n .filter(Boolean)\n .map(function (c) { return (objectParts[c] != null ? objectParts[c] : c); })\n .reduce(function (all, c) {\n if (!all.length) {\n all.push(c);\n }\n else if (typeof c === 'string' &&\n typeof all[all.length - 1] === 'string') {\n all[all.length - 1] += c;\n }\n else {\n all.push(c);\n }\n return all;\n }, []);\n}\n/**\n * Not exhaustive, just for sanity check\n */\nvar SIMPLE_XML_REGEX = /(<([0-9a-zA-Z-_]*?)>(.*?)<\\/([0-9a-zA-Z-_]*?)>)|(<[0-9a-zA-Z-_]*?\\/>)/;\nvar TEMPLATE_ID = Date.now() + '@@';\nvar VOID_ELEMENTS = [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n];\nfunction formatHTMLElement(el, objectParts, values) {\n var tagName = el.tagName;\n var outerHTML = el.outerHTML, textContent = el.textContent, childNodes = el.childNodes;\n // Regular text\n if (!tagName) {\n return restoreRichPlaceholderMessage(textContent || '', objectParts);\n }\n tagName = tagName.toLowerCase();\n var isVoidElement = ~VOID_ELEMENTS.indexOf(tagName);\n var formatFnOrValue = values[tagName];\n if (formatFnOrValue && isVoidElement) {\n throw new FormatError(tagName + \" is a self-closing tag and can not be used, please use another tag name.\");\n }\n if (!childNodes.length) {\n return [outerHTML];\n }\n var chunks = Array.prototype.slice.call(childNodes).reduce(function (all, child) {\n return all.concat(formatHTMLElement(child, objectParts, values));\n }, []);\n // Legacy HTML\n if (!formatFnOrValue) {\n return __spreadArrays([\"<\" + tagName + \">\"], chunks, [\"\"]);\n }\n // HTML Tag replacement\n if (typeof formatFnOrValue === 'function') {\n return [formatFnOrValue.apply(void 0, chunks)];\n }\n return [formatFnOrValue];\n}\nexport function formatHTMLMessage(els, locales, formatters, formats, values, \n// For debugging\noriginalMessage) {\n var parts = formatToParts(els, locales, formatters, formats, values, undefined, originalMessage);\n var objectParts = {};\n var formattedMessage = parts.reduce(function (all, part) {\n if (part.type === 0 /* literal */) {\n return (all += part.value);\n }\n var id = generateId();\n objectParts[id] = part.value;\n return (all += \"\" + TOKEN_DELIMITER + id + TOKEN_DELIMITER);\n }, '');\n // Not designed to filter out aggressively\n if (!SIMPLE_XML_REGEX.test(formattedMessage)) {\n return restoreRichPlaceholderMessage(formattedMessage, objectParts);\n }\n if (!values) {\n throw new FormatError('Message has placeholders but no values was given');\n }\n if (typeof DOMParser === 'undefined') {\n throw new FormatError('Cannot format XML message without DOMParser');\n }\n if (!domParser) {\n domParser = new DOMParser();\n }\n var content = domParser\n .parseFromString(\"\" + formattedMessage + \"\", 'text/html')\n .getElementById(TEMPLATE_ID);\n if (!content) {\n throw new FormatError(\"Malformed HTML message \" + formattedMessage);\n }\n var tagsToFormat = Object.keys(values).filter(function (varName) { return !!content.getElementsByTagName(varName).length; });\n // No tags to format\n if (!tagsToFormat.length) {\n return restoreRichPlaceholderMessage(formattedMessage, objectParts);\n }\n var caseSensitiveTags = tagsToFormat.filter(function (tagName) { return tagName !== tagName.toLowerCase(); });\n if (caseSensitiveTags.length) {\n throw new FormatError(\"HTML tag must be lowercased but the following tags are not: \" + caseSensitiveTags.join(', '));\n }\n // We're doing this since top node is `` which does not have a formatter\n return Array.prototype.slice\n .call(content.childNodes)\n .reduce(function (all, child) { return all.concat(formatHTMLElement(child, objectParts, values)); }, []);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { parse } from 'intl-messageformat-parser';\nimport memoizeIntlConstructor from 'intl-format-cache';\nimport { formatToString, formatToParts, formatHTMLMessage, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n if (!c2) {\n return c1;\n }\n return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n return all;\n }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n if (!configs) {\n return defaultConfig;\n }\n return Object.keys(defaultConfig).reduce(function (all, k) {\n all[k] = mergeConfig(defaultConfig[k], configs[k]);\n return all;\n }, __assign({}, defaultConfig));\n}\nexport function createDefaultFormatters(cache) {\n if (cache === void 0) { cache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n }; }\n return {\n getNumberFormat: memoizeIntlConstructor(Intl.NumberFormat, cache.number),\n getDateTimeFormat: memoizeIntlConstructor(Intl.DateTimeFormat, cache.dateTime),\n getPluralRules: memoizeIntlConstructor(Intl.PluralRules, cache.pluralRules),\n };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n function IntlMessageFormat(message, locales, overrideFormats, opts) {\n var _this = this;\n if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n this.formatterCache = {\n number: {},\n dateTime: {},\n pluralRules: {},\n };\n this.format = function (values) {\n return formatToString(_this.ast, _this.locales, _this.formatters, _this.formats, values, _this.message);\n };\n this.formatToParts = function (values) {\n return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n };\n this.formatHTMLMessage = function (values) {\n return formatHTMLMessage(_this.ast, _this.locales, _this.formatters, _this.formats, values, _this.message);\n };\n this.resolvedOptions = function () { return ({\n locale: Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n }); };\n this.getAst = function () { return _this.ast; };\n if (typeof message === 'string') {\n this.message = message;\n if (!IntlMessageFormat.__parse) {\n throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n }\n // Parse string messages into an AST.\n this.ast = IntlMessageFormat.__parse(message, {\n normalizeHashtagInPlural: false,\n });\n }\n else {\n this.ast = message;\n }\n if (!Array.isArray(this.ast)) {\n throw new TypeError('A message must be provided as a String or AST.');\n }\n // Creates a new object with the specified `formats` merged with the default\n // formats.\n this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n // Defined first because it's used to build the format pattern.\n this.locales = locales;\n this.formatters =\n (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n }\n IntlMessageFormat.defaultLocale = new Intl.NumberFormat().resolvedOptions().locale;\n IntlMessageFormat.__parse = parse;\n // Default format options used as the prototype of the `formats` provided to the\n // constructor. These are used when constructing the internal Intl.NumberFormat\n // and Intl.DateTimeFormat instances.\n IntlMessageFormat.formats = {\n number: {\n currency: {\n style: 'currency',\n },\n percent: {\n style: 'percent',\n },\n },\n date: {\n short: {\n month: 'numeric',\n day: 'numeric',\n year: '2-digit',\n },\n medium: {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n },\n long: {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n full: {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n },\n },\n time: {\n short: {\n hour: 'numeric',\n minute: 'numeric',\n },\n medium: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n long: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n full: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n },\n },\n };\n return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\nexport default IntlMessageFormat;\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global['micro-memoize'] = factory());\n}(this, (function () { 'use strict';\n\n /**\n * @constant DEFAULT_OPTIONS_KEYS the default options keys\n */\n var DEFAULT_OPTIONS_KEYS = {\n isEqual: true,\n isMatchingKey: true,\n isPromise: true,\n maxSize: true,\n onCacheAdd: true,\n onCacheChange: true,\n onCacheHit: true,\n transformKey: true,\n };\n /**\n * @function slice\n *\n * @description\n * slice.call() pre-bound\n */\n var slice = Array.prototype.slice;\n /**\n * @function cloneArray\n *\n * @description\n * clone the array-like object and return the new array\n *\n * @param arrayLike the array-like object to clone\n * @returns the clone as an array\n */\n function cloneArray(arrayLike) {\n var length = arrayLike.length;\n if (!length) {\n return [];\n }\n if (length === 1) {\n return [arrayLike[0]];\n }\n if (length === 2) {\n return [arrayLike[0], arrayLike[1]];\n }\n if (length === 3) {\n return [arrayLike[0], arrayLike[1], arrayLike[2]];\n }\n return slice.call(arrayLike, 0);\n }\n /**\n * @function getCustomOptions\n *\n * @description\n * get the custom options on the object passed\n *\n * @param options the memoization options passed\n * @returns the custom options passed\n */\n function getCustomOptions(options) {\n var customOptions = {};\n /* eslint-disable no-restricted-syntax */\n for (var key in options) {\n if (!DEFAULT_OPTIONS_KEYS[key]) {\n customOptions[key] = options[key];\n }\n }\n /* eslint-enable */\n return customOptions;\n }\n /**\n * @function isMemoized\n *\n * @description\n * is the function passed already memoized\n *\n * @param fn the function to test\n * @returns is the function already memoized\n */\n function isMemoized(fn) {\n return (typeof fn === 'function' &&\n fn.isMemoized);\n }\n /**\n * @function isSameValueZero\n *\n * @description\n * are the objects equal based on SameValueZero equality\n *\n * @param object1 the first object to compare\n * @param object2 the second object to compare\n * @returns are the two objects equal\n */\n function isSameValueZero(object1, object2) {\n // eslint-disable-next-line no-self-compare\n return object1 === object2 || (object1 !== object1 && object2 !== object2);\n }\n /**\n * @function mergeOptions\n *\n * @description\n * merge the options into the target\n *\n * @param existingOptions the options provided\n * @param newOptions the options to include\n * @returns the merged options\n */\n function mergeOptions(existingOptions, newOptions) {\n // @ts-ignore\n var target = {};\n /* eslint-disable no-restricted-syntax */\n for (var key in existingOptions) {\n target[key] = existingOptions[key];\n }\n for (var key in newOptions) {\n target[key] = newOptions[key];\n }\n /* eslint-enable */\n return target;\n }\n\n // utils\n var Cache = /** @class */ (function () {\n function Cache(options) {\n this.keys = [];\n this.values = [];\n this.options = options;\n var isMatchingKeyFunction = typeof options.isMatchingKey === 'function';\n if (isMatchingKeyFunction) {\n this.getKeyIndex = this._getKeyIndexFromMatchingKey;\n }\n else if (options.maxSize > 1) {\n this.getKeyIndex = this._getKeyIndexForMany;\n }\n else {\n this.getKeyIndex = this._getKeyIndexForSingle;\n }\n this.canTransformKey = typeof options.transformKey === 'function';\n this.shouldCloneArguments = this.canTransformKey || isMatchingKeyFunction;\n this.shouldUpdateOnAdd = typeof options.onCacheAdd === 'function';\n this.shouldUpdateOnChange = typeof options.onCacheChange === 'function';\n this.shouldUpdateOnHit = typeof options.onCacheHit === 'function';\n }\n Object.defineProperty(Cache.prototype, \"size\", {\n get: function () {\n return this.keys.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Cache.prototype, \"snapshot\", {\n get: function () {\n return {\n keys: cloneArray(this.keys),\n size: this.size,\n values: cloneArray(this.values),\n };\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @function _getKeyIndexFromMatchingKey\n *\n * @description\n * gets the matching key index when a custom key matcher is used\n *\n * @param keyToMatch the key to match\n * @returns the index of the matching key, or -1\n */\n Cache.prototype._getKeyIndexFromMatchingKey = function (keyToMatch) {\n var _a = this.options, isMatchingKey = _a.isMatchingKey, maxSize = _a.maxSize;\n var keys = this.keys;\n var keysLength = keys.length;\n if (!keysLength) {\n return -1;\n }\n if (isMatchingKey(keys[0], keyToMatch)) {\n return 0;\n }\n if (maxSize > 1) {\n for (var index = 1; index < keysLength; index++) {\n if (isMatchingKey(keys[index], keyToMatch)) {\n return index;\n }\n }\n }\n return -1;\n };\n /**\n * @function _getKeyIndexForMany\n *\n * @description\n * gets the matching key index when multiple keys are used\n *\n * @param keyToMatch the key to match\n * @returns the index of the matching key, or -1\n */\n Cache.prototype._getKeyIndexForMany = function (keyToMatch) {\n var isEqual = this.options.isEqual;\n var keys = this.keys;\n var keysLength = keys.length;\n if (!keysLength) {\n return -1;\n }\n if (keysLength === 1) {\n return this._getKeyIndexForSingle(keyToMatch);\n }\n var keyLength = keyToMatch.length;\n var existingKey;\n var argIndex;\n if (keyLength > 1) {\n for (var index = 0; index < keysLength; index++) {\n existingKey = keys[index];\n if (existingKey.length === keyLength) {\n argIndex = 0;\n for (; argIndex < keyLength; argIndex++) {\n if (!isEqual(existingKey[argIndex], keyToMatch[argIndex])) {\n break;\n }\n }\n if (argIndex === keyLength) {\n return index;\n }\n }\n }\n }\n else {\n for (var index = 0; index < keysLength; index++) {\n existingKey = keys[index];\n if (existingKey.length === keyLength &&\n isEqual(existingKey[0], keyToMatch[0])) {\n return index;\n }\n }\n }\n return -1;\n };\n /**\n * @function _getKeyIndexForSingle\n *\n * @description\n * gets the matching key index when a single key is used\n *\n * @param keyToMatch the key to match\n * @returns the index of the matching key, or -1\n */\n Cache.prototype._getKeyIndexForSingle = function (keyToMatch) {\n var keys = this.keys;\n if (!keys.length) {\n return -1;\n }\n var existingKey = keys[0];\n var length = existingKey.length;\n if (keyToMatch.length !== length) {\n return -1;\n }\n var isEqual = this.options.isEqual;\n if (length > 1) {\n for (var index = 0; index < length; index++) {\n if (!isEqual(existingKey[index], keyToMatch[index])) {\n return -1;\n }\n }\n return 0;\n }\n return isEqual(existingKey[0], keyToMatch[0]) ? 0 : -1;\n };\n /**\n * @function orderByLru\n *\n * @description\n * order the array based on a Least-Recently-Used basis\n *\n * @param key the new key to move to the front\n * @param value the new value to move to the front\n * @param startingIndex the index of the item to move to the front\n */\n Cache.prototype.orderByLru = function (key, value, startingIndex) {\n var keys = this.keys;\n var values = this.values;\n var currentLength = keys.length;\n var index = startingIndex;\n while (index--) {\n keys[index + 1] = keys[index];\n values[index + 1] = values[index];\n }\n keys[0] = key;\n values[0] = value;\n var maxSize = this.options.maxSize;\n if (currentLength === maxSize && startingIndex === currentLength) {\n keys.pop();\n values.pop();\n }\n else if (startingIndex >= maxSize) {\n // eslint-disable-next-line no-multi-assign\n keys.length = values.length = maxSize;\n }\n };\n /**\n * @function updateAsyncCache\n *\n * @description\n * update the promise method to auto-remove from cache if rejected, and\n * if resolved then fire cache hit / changed\n *\n * @param memoized the memoized function\n */\n Cache.prototype.updateAsyncCache = function (memoized) {\n var _this = this;\n var _a = this.options, onCacheChange = _a.onCacheChange, onCacheHit = _a.onCacheHit;\n var firstKey = this.keys[0];\n var firstValue = this.values[0];\n this.values[0] = firstValue.then(function (value) {\n if (_this.shouldUpdateOnHit) {\n onCacheHit(_this, _this.options, memoized);\n }\n if (_this.shouldUpdateOnChange) {\n onCacheChange(_this, _this.options, memoized);\n }\n return value;\n }, function (error) {\n var keyIndex = _this.getKeyIndex(firstKey);\n if (keyIndex !== -1) {\n _this.keys.splice(keyIndex, 1);\n _this.values.splice(keyIndex, 1);\n }\n throw error;\n });\n };\n return Cache;\n }());\n\n // cache\n function createMemoizedFunction(fn, options) {\n if (options === void 0) { options = {}; }\n if (isMemoized(fn)) {\n return createMemoizedFunction(fn.fn, mergeOptions(fn.options, options));\n }\n if (typeof fn !== 'function') {\n throw new TypeError('You must pass a function to `memoize`.');\n }\n var _a = options.isEqual, isEqual = _a === void 0 ? isSameValueZero : _a, isMatchingKey = options.isMatchingKey, _b = options.isPromise, isPromise = _b === void 0 ? false : _b, _c = options.maxSize, maxSize = _c === void 0 ? 1 : _c, onCacheAdd = options.onCacheAdd, onCacheChange = options.onCacheChange, onCacheHit = options.onCacheHit, transformKey = options.transformKey;\n var normalizedOptions = mergeOptions({\n isEqual: isEqual,\n isMatchingKey: isMatchingKey,\n isPromise: isPromise,\n maxSize: maxSize,\n onCacheAdd: onCacheAdd,\n onCacheChange: onCacheChange,\n onCacheHit: onCacheHit,\n transformKey: transformKey,\n }, getCustomOptions(options));\n var cache = new Cache(normalizedOptions);\n var keys = cache.keys, values = cache.values, canTransformKey = cache.canTransformKey, shouldCloneArguments = cache.shouldCloneArguments, shouldUpdateOnAdd = cache.shouldUpdateOnAdd, shouldUpdateOnChange = cache.shouldUpdateOnChange, shouldUpdateOnHit = cache.shouldUpdateOnHit;\n // @ts-ignore\n var memoized = function memoized() {\n // @ts-ignore\n var key = shouldCloneArguments\n ? cloneArray(arguments)\n : arguments;\n if (canTransformKey) {\n key = transformKey(key);\n }\n var keyIndex = keys.length ? cache.getKeyIndex(key) : -1;\n if (keyIndex !== -1) {\n if (shouldUpdateOnHit) {\n onCacheHit(cache, normalizedOptions, memoized);\n }\n if (keyIndex) {\n cache.orderByLru(keys[keyIndex], values[keyIndex], keyIndex);\n if (shouldUpdateOnChange) {\n onCacheChange(cache, normalizedOptions, memoized);\n }\n }\n }\n else {\n var newValue = fn.apply(this, arguments);\n var newKey = shouldCloneArguments\n ? key\n : cloneArray(arguments);\n cache.orderByLru(newKey, newValue, keys.length);\n if (isPromise) {\n cache.updateAsyncCache(memoized);\n }\n if (shouldUpdateOnAdd) {\n onCacheAdd(cache, normalizedOptions, memoized);\n }\n if (shouldUpdateOnChange) {\n onCacheChange(cache, normalizedOptions, memoized);\n }\n }\n return values[0];\n };\n memoized.cache = cache;\n memoized.fn = fn;\n memoized.isMemoized = true;\n memoized.options = normalizedOptions;\n return memoized;\n }\n\n return createMemoizedFunction;\n\n})));\n//# sourceMappingURL=micro-memoize.js.map\n","import t from\"object-resolve-path\";import e from\"intl-messageformat\";import n from\"micro-memoize\";function o(){}const r=t=>t;function i(t,e){for(const n in e)t[n]=e[n];return t}function c(t){return t&&\"object\"==typeof t&&\"function\"==typeof t.then}function s(t){return t()}function u(){return Object.create(null)}function a(t){t.forEach(s)}function l(t){return\"function\"==typeof t}function f(t,e){const n=t.subscribe(e);return n.unsubscribe?()=>n.unsubscribe():n}function d(t,e,n){return t[1]?i({},i(e.$$scope.ctx,t[1](n?n(e):{}))):e.$$scope.ctx}const p=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),h=\"undefined\"!=typeof window;let _=h?()=>window.performance.now():()=>Date.now(),m=h?t=>requestAnimationFrame(t):o;const g=new Set;let b,F=!1;function v(){g.forEach(t=>{t[0](_())||(g.delete(t),t[1]())}),(F=g.size>0)&&m(v)}function $(t){let e;return F||(F=!0,m(v)),{promise:new Promise(n=>{g.add(e=[t,n])}),abort(){g.delete(e)}}}function y(t,e){t.appendChild(e)}function w(t,e,n){t.insertBefore(e,n||null)}function k(t){t.parentNode.removeChild(t)}function x(t){return document.createElement(t)}function E(t){return document.createElementNS(\"http://www.w3.org/2000/svg\",t)}function S(t){return document.createTextNode(t)}function O(t,e,n,o){return t.addEventListener(e,n,o),()=>t.removeEventListener(e,n,o)}function C(t,e,n){null==n?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function D(t){return Array.from(t.childNodes)}function j(t,e){for(let n=0;n>>0}(l)}_${s}`;if(!P[f]){if(!b){const t=x(\"style\");document.head.appendChild(t),b=t.sheet}P[f]=!0,b.insertRule(`@keyframes ${f} ${l}`,b.cssRules.length)}const d=t.style.animation||\"\";return t.style.animation=`${d?`${d}, `:\"\"}${f} ${o}ms linear ${r}ms 1 both`,L+=1,f}function q(t,e){t.style.animation=(t.style.animation||\"\").split(\", \").filter(e?t=>t.indexOf(e)<0:t=>-1===t.indexOf(\"__svelte\")).join(\", \"),e&&!--L&&m(()=>{if(L)return;let t=b.cssRules.length;for(;t--;)b.deleteRule(t);P={}})}function N(t,e){const n=t.getBoundingClientRect();if(e.left!==n.left||e.top!==n.top){const o=getComputedStyle(t),r=\"none\"===o.transform?\"\":o.transform;t.style.transform=`${r} translate(${e.left-n.left}px, ${e.top-n.top}px)`}}function T(t){M=t}function z(){if(!M)throw new Error(\"Function called outside component initialization\");return M}const B=[],U=[],H=[],I=[],J=Promise.resolve();let V,Y=!1;function G(){Y||(Y=!0,J.then(Q))}function K(t){H.push(t)}function Q(){const t=new Set;do{for(;B.length;){const t=B.shift();T(t),W(t.$$)}for(;U.length;)U.pop()();for(let e=0;e{V=null}),V}function Z(t,e,n){t.dispatchEvent(A(`${e?\"intro\":\"outro\"}${n}`))}const tt=new Set;let et;function nt(){et={r:0,c:[],p:et}}function ot(){et.r||a(et.c),et=et.p}function rt(t,e){t&&t.i&&(tt.delete(t),t.i(e))}function it(t,e,n,o){if(t&&t.o){if(tt.has(t))return;tt.add(t),et.c.push(()=>{tt.delete(t),o&&(n&&t.d(1),o())}),t.o(e)}}const ct={duration:0};const st=\"undefined\"!=typeof window?window:global;function ut(t,e){t.d(1),e.delete(t.key)}function at(t,e){it(t,1,1,()=>{e.delete(t.key)})}const lt=new Set([\"allowfullscreen\",\"allowpaymentrequest\",\"async\",\"autofocus\",\"autoplay\",\"checked\",\"controls\",\"default\",\"defer\",\"disabled\",\"formnovalidate\",\"hidden\",\"ismap\",\"loop\",\"multiple\",\"muted\",\"nomodule\",\"novalidate\",\"open\",\"playsinline\",\"readonly\",\"required\",\"reversed\",\"selected\"]),ft=/[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;const dt={'\"':\""\",\"'\":\"'\",\"&\":\"&\",\"<\":\"<\",\">\":\">\"};function pt(t){return String(t).replace(/[\"'&<>]/g,t=>dt[t])}let ht,_t;function mt(t,e,n){const{fragment:o,on_mount:r,on_destroy:i,after_update:c}=t.$$;o&&o.m(e,n),K(()=>{const e=r.map(s).filter(l);i?i.push(...e):a(e),t.$$.on_mount=[]}),c.forEach(K)}function gt(t,e){const n=t.$$;null!==n.fragment&&(a(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx={})}\"function\"==typeof HTMLElement&&(_t=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:\"open\"})}connectedCallback(){for(const t in this.$$.slotted)this.appendChild(this.$$.slotted[t])}attributeChangedCallback(t,e,n){this[t]=n}$destroy(){gt(this,1),this.$destroy=o}$on(t,e){const n=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return n.push(e),()=>{const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}$set(){}});class bt{$destroy(){gt(this,1),this.$destroy=o}$on(t,e){const n=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return n.push(e),()=>{const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}$set(){}}function Ft(t,e){document.dispatchEvent(A(t,e))}function vt(t){Ft(\"SvelteDOMRemove\",{node:t}),k(t)}var $t,yt,wt,kt=Object.freeze({__proto__:null,HtmlTag:class{constructor(t,e=null){this.e=x(\"div\"),this.a=e,this.u(t)}m(t,e=null){for(let n=0;n{console.warn(\"Component was already destroyed\")}}},get SvelteElement(){return _t},add_attribute:function(t,e,n){return null==e||n&&!e?\"\":` ${t}${!0===e?\"\":`=${\"string\"==typeof e?JSON.stringify(pt(e)):`\"${e}\"`}`}`},add_classes:function(t){return t?` class=\"${t}\"`:\"\"},add_flush_callback:function(t){I.push(t)},add_location:function(t,e,n,o,r){t.__svelte_meta={loc:{file:e,line:n,column:o,char:r}}},add_render_callback:K,add_resize_listener:function(t,e){\"static\"===getComputedStyle(t).position&&(t.style.position=\"relative\");const n=document.createElement(\"object\");let o;return n.setAttribute(\"style\",\"display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1;\"),n.setAttribute(\"aria-hidden\",\"true\"),n.type=\"text/html\",n.tabIndex=-1,n.onload=()=>{(o=n.contentDocument.defaultView).addEventListener(\"resize\",e)},/Trident/.test(navigator.userAgent)?(t.appendChild(n),n.data=\"about:blank\"):(n.data=\"about:blank\",t.appendChild(n)),{cancel:()=>{o&&o.removeEventListener&&o.removeEventListener(\"resize\",e),t.removeChild(n)}}},add_transform:N,afterUpdate:function(t){z().$$.after_update.push(t)},append:y,append_dev:function(t,e){Ft(\"SvelteDOMInsert\",{target:t,node:e}),y(t,e)},assign:i,attr:C,attr_dev:function(t,e,n){C(t,e,n),null==n?Ft(\"SvelteDOMRemoveAttribute\",{node:t,attribute:e}):Ft(\"SvelteDOMSetAttribute\",{node:t,attribute:e,value:n})},beforeUpdate:function(t){z().$$.before_update.push(t)},bind:function(t,e,n){p(t.$$.props,e)&&(e=t.$$.props[e]||e,t.$$.bound[e]=n,n(t.$$.ctx[e]))},binding_callbacks:U,blank_object:u,bubble:function(t,e){const n=t.$$.callbacks[e.type];n&&n.slice().forEach(t=>t(e))},check_outros:ot,children:D,claim_component:function(t,e){t&&t.l(e)},claim_element:function(t,e,n,o){for(let o=0;og.delete(t)),F=!1},component_subscribe:function(t,e,n){t.$$.on_destroy.push(f(e,n))},createEventDispatcher:function(){const t=z();return(e,n)=>{const o=t.$$.callbacks[e];if(o){const r=A(e,n);o.slice().forEach(e=>{e.call(t,r)})}}},create_animation:function(t,e,n,i){if(!e)return o;const c=t.getBoundingClientRect();if(e.left===c.left&&e.right===c.right&&e.top===c.top&&e.bottom===c.bottom)return o;const{delay:s=0,duration:u=300,easing:a=r,start:l=_()+s,end:f=l+u,tick:d=o,css:p}=n(t,{from:e,to:c},i);let h,m=!0,g=!1;function b(){p&&q(t,h),m=!1}return $(t=>{if(!g&&t>=l&&(g=!0),g&&t>=f&&(d(1,0),b()),!m)return!1;if(g){const e=0+1*a((t-l)/u);d(e,1-e)}return!0}),p&&(h=R(t,0,1,u,s,a,p)),s||(g=!0),d(0,1),b},create_bidirectional_transition:function(t,e,n,i){let c=e(t,n),s=i?0:1,u=null,f=null,d=null;function p(){d&&q(t,d)}function h(t,e){const n=t.b-s;return e*=Math.abs(n),{a:s,b:t.b,d:n,duration:e,start:t.start,end:t.start+e,group:t.group}}function m(e){const{delay:n=0,duration:i=300,easing:l=r,tick:m=o,css:g}=c||ct,b={start:_()+n,b:e};e||(b.group=et,et.r+=1),u?f=b:(g&&(p(),d=R(t,s,e,i,n,l,g)),e&&m(0,1),u=h(b,i),K(()=>Z(t,e,\"start\")),$(e=>{if(f&&e>f.start&&(u=h(f,i),f=null,Z(t,u.b,\"start\"),g&&(p(),d=R(t,s,u.b,u.duration,0,l,c.css))),u)if(e>=u.end)m(s=u.b,1-s),Z(t,u.b,\"end\"),f||(u.b?p():--u.group.r||a(u.group.c)),u=null;else if(e>=u.start){const t=e-u.start;s=u.a+u.d*l(t/u.duration),m(s,1-s)}return!(!u&&!f)}))}return{run(t){l(c)?X().then(()=>{c=c(),m(t)}):m(t)},end(){p(),u=f=null}}},create_component:function(t){t&&t.c()},create_in_transition:function(t,e,n){let i,c,s=e(t,n),u=!1,a=0;function f(){i&&q(t,i)}function d(){const{delay:e=0,duration:n=300,easing:l=r,tick:d=o,css:p}=s||ct;p&&(i=R(t,0,1,n,e,l,p,a++)),d(0,1);const h=_()+e,m=h+n;c&&c.abort(),u=!0,K(()=>Z(t,!0,\"start\")),c=$(e=>{if(u){if(e>=m)return d(1,0),Z(t,!0,\"end\"),f(),u=!1;if(e>=h){const t=l((e-h)/n);d(t,1-t)}}return u})}let p=!1;return{start(){p||(q(t),l(s)?(s=s(),X().then(d)):d())},invalidate(){p=!1},end(){u&&(f(),u=!1)}}},create_out_transition:function(t,e,n){let i,c=e(t,n),s=!0;const u=et;function f(){const{delay:e=0,duration:n=300,easing:l=r,tick:f=o,css:d}=c||ct;d&&(i=R(t,1,0,n,e,l,d));const p=_()+e,h=p+n;K(()=>Z(t,!1,\"start\")),$(e=>{if(s){if(e>=h)return f(0,1),Z(t,!1,\"end\"),--u.r||a(u.c),!1;if(e>=p){const t=l((e-p)/n);f(1-t,t)}}return s})}return u.r+=1,l(c)?X().then(()=>{c=c(),f()}):f(),{end(e){e&&c.tick&&c.tick(1,0),s&&(i&&q(t,i),s=!1)}}},create_slot:function(t,e,n){if(t){const o=d(t,e,n);return t[0](o)}},create_ssr_component:function(t){function e(e,n,o,r){const i=M;T({$$:{on_destroy:ht,context:new Map(i?i.$$.context:[]),on_mount:[],before_update:[],after_update:[],callbacks:u()}});const c=t(e,n,o,r);return T(i),c}return{render:(t={},n={})=>{ht=[];const o={head:\"\",css:new Set},r=e(o,t,{},n);return a(ht),{html:r,css:{code:Array.from(o.css).map(t=>t.code).join(\"\\n\"),map:null},head:o.head}},$$render:e}},get current_component(){return M},custom_event:A,dataset_dev:function(t,e,n){t.dataset[e]=n,Ft(\"SvelteDOMSetDataset\",{node:t,property:e,value:n})},debug:function(t,e,n,o){return console.log(`{@debug} ${t?t+\" \":\"\"}(${e}:${n})`),console.log(o),\"\"},destroy_block:ut,destroy_component:gt,destroy_each:function(t,e){for(let n=0;ne=t)(),e},globals:st,group_outros:nt,handle_promise:function(t,e){const n=e.token={};function o(t,o,r,c){if(e.token!==n)return;e.resolved=r&&{[r]:c};const s=i(i({},e.ctx),e.resolved),u=t&&(e.current=t)(s);let a=!1;e.block&&(e.blocks?e.blocks.forEach((t,n)=>{n!==o&&t&&(nt(),it(t,1,1,()=>{e.blocks[n]=null}),ot())}):e.block.d(1),u.c(),rt(u,1),u.m(e.mount(),e.anchor),a=!0),e.block=u,e.blocks&&(e.blocks[o]=u),a&&Q()}if(c(t)){const n=z();if(t.then(t=>{T(n),o(e.then,1,e.value,t),T(null)},t=>{T(n),o(e.catch,2,e.error,t),T(null)}),e.current!==e.pending)return o(e.pending,0),!0}else{if(e.current!==e.then)return o(e.then,1,e.value,t),!0;e.resolved={[e.value]:t}}},has_prop:p,identity:r,init:function(t,e,n,r,i,c){const s=M;T(t);const l=e.props||{},f=t.$$={fragment:null,ctx:null,props:c,update:o,not_equal:i,bound:u(),on_mount:[],on_destroy:[],before_update:[],after_update:[],context:new Map(s?s.$$.context:[]),callbacks:u(),dirty:null};let d=!1;f.ctx=n?n(t,l,(e,n,o=n)=>(f.ctx&&i(f.ctx[e],f.ctx[e]=o)&&(f.bound[e]&&f.bound[e](o),d&&function(t,e){t.$$.dirty||(B.push(t),G(),t.$$.dirty=u()),t.$$.dirty[e]=!0}(t,e)),n)):l,f.update(),d=!0,a(f.before_update),f.fragment=!!r&&r(f.ctx),e.target&&(e.hydrate?f.fragment&&f.fragment.l(D(e.target)):f.fragment&&f.fragment.c(),e.intro&&rt(t.$$.fragment),mt(t,e.target,e.anchor),Q()),T(s)},insert:w,insert_dev:function(t,e,n){Ft(\"SvelteDOMInsert\",{target:t,node:e,anchor:n}),w(t,e,n)},intros:{enabled:!1},invalid_attribute_name_character:ft,is_client:h,is_function:l,is_promise:c,listen:O,listen_dev:function(t,e,n,o,r,i){const c=!0===o?[\"capture\"]:o?Array.from(Object.keys(o)):[];r&&c.push(\"preventDefault\"),i&&c.push(\"stopPropagation\"),Ft(\"SvelteDOMAddEventListener\",{node:t,event:e,handler:n,modifiers:c});const s=O(t,e,n,o);return()=>{Ft(\"SvelteDOMRemoveEventListener\",{node:t,event:e,handler:n,modifiers:c}),s()}},loop:$,loop_guard:function(t){const e=Date.now();return()=>{if(Date.now()-e>t)throw new Error(\"Infinite loop detected\")}},measure:function(t){const e={};let n=t.length;for(;n--;)e[t[n].key]=t[n].node.getBoundingClientRect();return e},missing_component:{$$render:()=>\"\"},mount_component:mt,noop:o,not_equal:function(t,e){return t!=t?e==e:t!==e},get now(){return _},null_to_empty:function(t){return null==t?\"\":t},object_without_properties:function(t,e){const n={};for(const o in t)p(t,o)&&-1===e.indexOf(o)&&(n[o]=t[o]);return n},onDestroy:function(t){z().$$.on_destroy.push(t)},onMount:function(t){z().$$.on_mount.push(t)},once:function(t){let e=!1;return function(...n){e||(e=!0,t.call(this,...n))}},outro_and_destroy_block:at,prevent_default:function(t){return function(e){return e.preventDefault(),t.call(this,e)}},prop_dev:function(t,e,n){t[e]=n,Ft(\"SvelteDOMSetProperty\",{node:t,property:e,value:n})},get raf(){return m},run:s,run_all:a,safe_not_equal:function(t,e){return t!=t?e==e:t!==e||t&&\"object\"==typeof t||\"function\"==typeof t},schedule_update:G,select_multiple_value:function(t){return[].map.call(t.querySelectorAll(\":checked\"),t=>t.__value)},select_option:function(t,e){for(let n=0;n{if(ft.test(t))return;const e=n[t];!0===e?o+=\" \"+t:lt.has(t.toLowerCase())?e&&(o+=\" \"+t):null!=e&&(o+=\" \"+t+\"=\"+JSON.stringify(String(e).replace(/\"/g,\""\").replace(/'/g,\"'\")))}),o},stop_propagation:function(t){return function(e){return e.stopPropagation(),t.call(this,e)}},subscribe:f,svg_element:E,text:S,tick:function(){return G(),J},time_ranges_to_array:function(t){const e=[];for(let n=0;nb.get(r)?(v.add(o),$(e)):(F.add(r),d--):(u(n,c),d--)}for(;d--;){const e=t[d];g.has(e.key)||u(e,c)}for(;p;)$(m[p-1]);return m},validate_component:function(t,e){if(!t||!t.$$render)throw\"svelte:component\"===e&&(e+=\" this={...}\"),new Error(`<${e}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);return t},validate_store:function(t,e){if(!t||\"function\"!=typeof t.subscribe)throw new Error(`'${e}' is not a store with a 'subscribe' method`)},xlink_attr:function(t,e,n){t.setAttributeNS(\"http://www.w3.org/1999/xlink\",e,n)}}),xt=($t=kt)&&$t.default||$t,Et=(function(t,e){Object.defineProperty(e,\"__esModule\",{value:!0});const n=[];function o(t,e){return{subscribe:r(t,e).subscribe}}function r(t,e=xt.noop){let o;const r=[];function i(e){if(xt.safe_not_equal(t,e)&&(t=e,o)){const e=!n.length;for(let e=0;e{const t=r.indexOf(s);-1!==t&&r.splice(t,1),0===r.length&&(o(),o=null)}}}}Object.defineProperty(e,\"get\",{enumerable:!0,get:function(){return xt.get_store_value}}),e.derived=function(t,e,n){const r=!Array.isArray(t),i=r?[t]:t,c=e.length<2;return o(n,t=>{let n=!1;const o=[];let s=0,u=xt.noop;const a=()=>{if(s)return;u();const n=e(r?o[0]:o,t);c?t(n):u=xt.is_function(n)?n:xt.noop},l=i.map((t,e)=>t.subscribe(t=>{o[e]=t,s&=~(1<{s|=1<{let r;const i=(t,e)=>{const n=t.substr(1).split(\"&\").find(t=>0===t.indexOf(e));if(n)return n.split(\"=\").pop()};return\"undefined\"!=typeof window&&(t&&(r=window.navigator.language||window.navigator.languages[0]),n&&(r=i(window.location.search,n)),e&&(r=i(window.location.hash,e))),r||o};let Dt,jt;const At={number:{scientific:{notation:\"scientific\"},engineering:{notation:\"engineering\"},compactLong:{notation:\"compact\",compactDisplay:\"long\"},compactShort:{notation:\"compact\",compactDisplay:\"short\"}}};function Mt(t){\"number\"in t&&Object.assign(At.number,t.number),\"date\"in t&&Object.assign(At.date,t.date),\"time\"in t&&Object.assign(At.time,t.time)}const Lt=n((t,n)=>new e(t,n,At)),Pt=n((e,n)=>jt[n][e]||t(jt[n],e));function Rt(t,{values:e,locale:n=Dt}={}){return Lt(t,n).format(e)}function qt(t,{values:e,locale:n=Dt}={}){const o=Pt(t,n);return o?e?Lt(o,n).format(e):o:(console.warn(`[svelte-i18n] The message \"${t}\" was not found in the locale \"${n}\".`),t)}qt.time=(t,{format:e=\"short\"}={})=>Rt(`{t,time,${e}}`,{values:{t:t}}),qt.date=(t,{format:e=\"short\"}={})=>Rt(`{d,date,${e}}`,{values:{d:t}}),qt.number=(t,{format:e}={})=>Rt(`{n,number,${e}}`,{values:{n:t}}),qt.capital=(t,e)=>(t=>t.replace(/(^|\\s)\\S/,t=>t.toUpperCase()))(qt(t,e)),qt.title=(t,e)=>(t=>t.replace(/(^|\\s)\\S/g,t=>t.toUpperCase()))(qt(t,e)),qt.upper=(t,e)=>(t=>t.toLocaleUpperCase())(qt(t,e)),qt.lower=(t,e)=>(t=>t.toLocaleLowerCase())(qt(t,e));const Nt=Ot({});Nt.subscribe(t=>{jt=t});const Tt=Ot({}),zt=Tt.set;Tt.set=t=>{const e=function(t){if(jt[t])return t;if(\"string\"==typeof t){const e=t.split(\"-\").shift();if(jt[e])return e}return null}(t);if(e)return zt(e);throw Error(`[svelte-i18n] Locale \"${t}\" not found.`)},Tt.update=t=>zt(t(Dt)),Tt.subscribe(t=>{Dt=t});const Bt=St([Tt,Nt],()=>qt);export{Bt as _,Mt as addCustomFormats,At as customFormats,Nt as dictionary,Bt as format,Rt as formatString,Ct as getClientLocale,Tt as locale};\n","var Path = require('./path')\n/**\n *\n * @param {Object} o\n * @param {String} path\n * @returns {*}\n */\nmodule.exports = function (o, path) {\n if (typeof path !== 'string') {\n throw new TypeError('path must be a string')\n }\n if (typeof o !== 'object') {\n throw new TypeError('object must be passed')\n }\n var pathObj = Path.get(path)\n if (!pathObj.valid) {\n throw new Error('path is not a valid object path')\n }\n return pathObj.getValueFrom(o)\n}\n","export { identity as linear } from '../internal';\n\n/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nfunction backInOut(t) {\n const s = 1.70158 * 1.525;\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s));\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\nfunction backIn(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n}\nfunction backOut(t) {\n const s = 1.70158;\n return --t * t * ((s + 1) * t + s) + 1;\n}\nfunction bounceOut(t) {\n const a = 4.0 / 11.0;\n const b = 8.0 / 11.0;\n const c = 9.0 / 10.0;\n const ca = 4356.0 / 361.0;\n const cb = 35442.0 / 1805.0;\n const cc = 16061.0 / 1805.0;\n const t2 = t * t;\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72;\n}\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t);\n}\nfunction circInOut(t) {\n if ((t *= 2) < 1)\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\nfunction circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t);\n}\nfunction circOut(t) {\n return Math.sqrt(1 - --t * t);\n}\nfunction cubicInOut(t) {\n return t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n const f = t - 1.0;\n return f * f * f + 1.0;\n}\nfunction elasticInOut(t) {\n return t < 0.5\n ? 0.5 *\n Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) *\n Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 *\n Math.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n 1.0;\n}\nfunction elasticIn(t) {\n return Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction elasticOut(t) {\n return (Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0);\n}\nfunction expoInOut(t) {\n return t === 0.0 || t === 1.0\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\nfunction expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\nfunction quadInOut(t) {\n t /= 0.5;\n if (t < 1)\n return 0.5 * t * t;\n t--;\n return -0.5 * (t * (t - 2) - 1);\n}\nfunction quadIn(t) {\n return t * t;\n}\nfunction quadOut(t) {\n return -t * (t - 2.0);\n}\nfunction quartInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\nfunction quartIn(t) {\n return Math.pow(t, 4.0);\n}\nfunction quartOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\nfunction quintInOut(t) {\n if ((t *= 2) < 1)\n return 0.5 * t * t * t * t * t;\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\nfunction quintIn(t) {\n return t * t * t * t * t;\n}\nfunction quintOut(t) {\n return --t * t * t * t * t + 1;\n}\nfunction sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n}\nfunction sineIn(t) {\n const v = Math.cos(t * Math.PI * 0.5);\n if (Math.abs(v) < 1e-14)\n return 1;\n else\n return 1 - v;\n}\nfunction sineOut(t) {\n return Math.sin((t * Math.PI) / 2);\n}\n\nexport { backIn, backInOut, backOut, bounceIn, bounceInOut, bounceOut, circIn, circInOut, circOut, cubicIn, cubicInOut, cubicOut, elasticIn, elasticInOut, elasticOut, expoIn, expoInOut, expoOut, quadIn, quadInOut, quadOut, quartIn, quartInOut, quartOut, quintIn, quintInOut, quintOut, sineIn, sineInOut, sineOut };\n","import { cubicInOut, linear, cubicOut } from '../easing';\nimport { is_function, assign } from '../internal';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nfunction blur(node, { delay = 0, duration = 400, easing = cubicInOut, amount = 5, opacity = 0 }) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const f = style.filter === 'none' ? '' : style.filter;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (_t, u) => `opacity: ${target_opacity - (od * u)}; filter: ${f} blur(${u * amount}px);`\n };\n}\nfunction fade(node, { delay = 0, duration = 400, easing = linear }) {\n const o = +getComputedStyle(node).opacity;\n return {\n delay,\n duration,\n easing,\n css: t => `opacity: ${t * o}`\n };\n}\nfunction fly(node, { delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 }) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const transform = style.transform === 'none' ? '' : style.transform;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * x}px, ${(1 - t) * y}px);\n\t\t\topacity: ${target_opacity - (od * u)}`\n };\n}\nfunction slide(node, { delay = 0, duration = 400, easing = cubicOut }) {\n const style = getComputedStyle(node);\n const opacity = +style.opacity;\n const height = parseFloat(style.height);\n const padding_top = parseFloat(style.paddingTop);\n const padding_bottom = parseFloat(style.paddingBottom);\n const margin_top = parseFloat(style.marginTop);\n const margin_bottom = parseFloat(style.marginBottom);\n const border_top_width = parseFloat(style.borderTopWidth);\n const border_bottom_width = parseFloat(style.borderBottomWidth);\n return {\n delay,\n duration,\n easing,\n css: t => `overflow: hidden;` +\n `opacity: ${Math.min(t * 20, 1) * opacity};` +\n `height: ${t * height}px;` +\n `padding-top: ${t * padding_top}px;` +\n `padding-bottom: ${t * padding_bottom}px;` +\n `margin-top: ${t * margin_top}px;` +\n `margin-bottom: ${t * margin_bottom}px;` +\n `border-top-width: ${t * border_top_width}px;` +\n `border-bottom-width: ${t * border_bottom_width}px;`\n };\n}\nfunction scale(node, { delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 }) {\n const style = getComputedStyle(node);\n const target_opacity = +style.opacity;\n const transform = style.transform === 'none' ? '' : style.transform;\n const sd = 1 - start;\n const od = target_opacity * (1 - opacity);\n return {\n delay,\n duration,\n easing,\n css: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - (sd * u)});\n\t\t\topacity: ${target_opacity - (od * u)}\n\t\t`\n };\n}\nfunction draw(node, { delay = 0, speed, duration, easing = cubicInOut }) {\n const len = node.getTotalLength();\n if (duration === undefined) {\n if (speed === undefined) {\n duration = 800;\n }\n else {\n duration = len / speed;\n }\n }\n else if (typeof duration === 'function') {\n duration = duration(len);\n }\n return {\n delay,\n duration,\n easing,\n css: (t, u) => `stroke-dasharray: ${t * len} ${u * len}`\n };\n}\nfunction crossfade(_a) {\n var { fallback } = _a, defaults = __rest(_a, [\"fallback\"]);\n const to_receive = new Map();\n const to_send = new Map();\n function crossfade(from, node, params) {\n const { delay = 0, duration = d => Math.sqrt(d) * 30, easing = cubicOut } = assign(assign({}, defaults), params);\n const to = node.getBoundingClientRect();\n const dx = from.left - to.left;\n const dy = from.top - to.top;\n const dw = from.width / to.width;\n const dh = from.height / to.height;\n const d = Math.sqrt(dx * dx + dy * dy);\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n const opacity = +style.opacity;\n return {\n delay,\n duration: is_function(duration) ? duration(d) : duration,\n easing,\n css: (t, u) => `\n\t\t\t\topacity: ${t * opacity};\n\t\t\t\ttransform-origin: top left;\n\t\t\t\ttransform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${t + (1 - t) * dh});\n\t\t\t`\n };\n }\n function transition(items, counterparts, intro) {\n return (node, params) => {\n items.set(params.key, {\n rect: node.getBoundingClientRect()\n });\n return () => {\n if (counterparts.has(params.key)) {\n const { rect } = counterparts.get(params.key);\n counterparts.delete(params.key);\n return crossfade(rect, node, params);\n }\n // if the node is disappearing altogether\n // (i.e. wasn't claimed by the other list)\n // then we need to supply an outro\n items.delete(params.key);\n return fallback && fallback(node, params, intro);\n };\n };\n }\n return [\n transition(to_send, to_receive, false),\n transition(to_receive, to_send, true)\n ];\n}\n\nexport { blur, crossfade, draw, fade, fly, scale, slide };\n","import { cubicOut } from '../easing';\nimport { is_function } from '../internal';\n\nfunction flip(node, animation, params) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n const scaleX = animation.from.width / node.clientWidth;\n const scaleY = animation.from.height / node.clientHeight;\n const dx = (animation.from.left - animation.to.left) / scaleX;\n const dy = (animation.from.top - animation.to.top) / scaleY;\n const d = Math.sqrt(dx * dx + dy * dy);\n const { delay = 0, duration = (d) => Math.sqrt(d) * 120, easing = cubicOut } = params;\n return {\n delay,\n duration: is_function(duration) ? duration(d) : duration,\n easing,\n css: (_t, u) => `transform: ${transform} translate(${u * dx}px, ${u * dy}px);`\n };\n}\n\nexport { flip };\n","export const defaultNotifyMessages: any = {\n en: {\n transaction: {\n txRequest: 'Your transaction is waiting for you to confirm',\n nsfFail: 'You have insufficient funds to complete this transaction',\n txUnderpriced:\n 'The gas price for your transaction is too low, try again with a higher gas price',\n txRepeat: 'This could be a repeat transaction',\n txAwaitingApproval:\n 'You have a previous transaction waiting for you to confirm',\n txConfirmReminder:\n 'Please confirm your transaction to continue, the transaction window may be behind your browser',\n txSendFail: 'You rejected the transaction',\n txSent: 'Your transaction has been sent to the network',\n txStallPending:\n 'Your transaction has stalled and has not entered the transaction pool',\n txPool: 'Your transaction has started',\n txStallConfirmed:\n \"Your transaction has stalled and hasn't been confirmed\",\n txSpeedUp: 'Your transaction has been sped up',\n txCancel: 'Your transaction is being canceled',\n txFailed: 'Your transaction has failed',\n txConfirmed: 'Your transaction has succeeded',\n txError: 'Oops something went wrong, please try again'\n },\n watched: {\n txPool:\n 'Your account is {verb} {formattedValue} {asset} {preposition} {counterpartyShortened}',\n txSpeedUp:\n 'Your account is {verb} {formattedValue} {asset} {preposition} {counterpartyShortened}',\n txCancel:\n 'Your account is {verb} {formattedValue} {asset} {preposition} {counterpartyShortened}',\n txConfirmed:\n 'Your account successfully {verb} {formattedValue} {asset} {preposition} {counterpartyShortened}',\n txFailed:\n 'Your account failed to {verb} {formattedValue} {asset} {preposition} {counterpartyShortened}'\n },\n time: {\n minutes: 'min',\n seconds: 'sec'\n }\n },\n es: {\n transaction: {\n txRequest: 'Su transacción está esperando que confirme',\n nsfFail: 'No tiene fondos suficientes para completar esta transacción.',\n txUnderpriced:\n 'El precio del gas para su transacción es demasiado bajo, intente nuevamente con un precio del gas más alto',\n txRepeat: 'Esto podría ser una transacción repetida',\n txAwaitingApproval:\n 'Tienes una transacción anterior esperando que confirmes',\n txConfirmReminder:\n 'Confirme su transacción para continuar, la ventana de transacción puede estar detrás de su navegador',\n txSendFail: 'Rechazaste la transacción',\n txSent: 'Su transacción ha sido enviada a la red.',\n txStallPending:\n 'Su transacción se ha estancado y no ha ingresado al grupo de transacciones',\n txPool: 'Su transacción ha comenzado',\n txStallConfirmed:\n 'Su transacción se ha estancado y no ha sido confirmada.',\n txSpeedUp: 'Su transacción ha sido acelerada',\n txCancel: 'Tu transacción está siendo cancelada',\n txFailed: 'Su transacción ha fallado',\n txConfirmed: 'Su transacción ha tenido éxito.',\n txError: 'Vaya, algo salió mal, por favor intente nuevamente'\n },\n watched: {\n txPool:\n 'su cuenta está {verb, select, receiving {recibiendo} sending {enviando}} {formattedValue} {asset} {preposition, select, from {desde} to {a}} {counterpartyShortened}',\n txSpeedUp:\n 'su cuenta está {verb, select, receiving {recibiendo} sending {enviando}} {formattedValue} {asset} {preposition, select, from {desde} to {a}} {counterpartyShortened}',\n txCancel:\n 'su cuenta está {verb, select, receiving {recibiendo} sending {enviando}} {formattedValue} {asset} {preposition, select, from {desde} to {a}} {counterpartyShortened}',\n txConfirmed:\n 'su cuenta {verb, select, received {recibió} sent {ha enviado}} con éxito {formattedValue} {asset} {preposition, select, from {de} to {a}} {counterpartyShortened}',\n txFailed:\n 'su cuenta fallado {verb, select, received {recibió} sent {ha enviado}} con éxito {formattedValue} {asset} {preposition, select, from {de} to {a}} {counterpartyShortened}'\n },\n time: {\n minutes: 'min',\n seconds: 'sec'\n }\n }\n}\n","import { writable } from 'svelte/store'\nimport { replaceOrAdd } from './utilities'\nimport { defaultNotifyMessages } from './i18n'\n\nimport type {\n TransactionData,\n NotificationObject,\n CustomNotificationObject,\n AppStore\n} from './interfaces'\n\nexport const app = writable({\n version: '',\n name: '',\n dappId: '',\n networkId: 1,\n nodeSynced: true,\n mobilePosition: 'top',\n desktopPosition: 'bottomRight',\n darkMode: false,\n txApproveReminderTimeout: 20000,\n txStallPendingTimeout: 20000,\n txStallConfirmedTimeout: 90000,\n clientLocale: 'en',\n notifyMessages: defaultNotifyMessages\n})\nexport const accounts = writable([])\nexport const contracts = writable([])\nexport const transactions = createTransactionStore([])\nexport const notifications = createNotificationStore([])\n\nfunction createTransactionStore(initialState: TransactionData[]) {\n const { subscribe, update } = writable(initialState)\n\n function updateQueue(transaction: TransactionData) {\n const predicate = (tx: TransactionData) => tx.id === transaction.id\n\n update((store: TransactionData[]) => {\n return replaceOrAdd(store, predicate, transaction)\n })\n }\n\n function add(transaction: TransactionData) {\n update((store: TransactionData[]) => [...store, transaction])\n }\n\n return {\n subscribe,\n updateQueue,\n add\n }\n}\n\nfunction createNotificationStore(\n initialState: (NotificationObject & CustomNotificationObject)[]\n) {\n const { subscribe, update } = writable(initialState)\n\n function add(notification: NotificationObject & CustomNotificationObject) {\n update((store: (NotificationObject & CustomNotificationObject)[]) => {\n const existingNotification = store.find(\n (n: NotificationObject & CustomNotificationObject) =>\n n.id === notification.id\n )\n\n // if notification is a hint type or there are no existing notifications with same id, then just add it.\n if (notification.type === 'hint' || !existingNotification) {\n return [...store, notification]\n }\n\n // otherwise filter out all notifications with the same id and then add the new notification\n return [\n ...store.filter(\n (n: NotificationObject & CustomNotificationObject) =>\n n.id !== notification.id\n ),\n notification\n ]\n })\n }\n\n function remove(id: string, eventCode: string) {\n update((store: (NotificationObject & CustomNotificationObject)[]) =>\n store.filter(\n (n: NotificationObject & CustomNotificationObject) =>\n n.id !== id || n.eventCode !== eventCode\n )\n )\n }\n\n return {\n subscribe,\n add,\n remove,\n update\n }\n}\n","import type {\n Emitter,\n EmitterListener,\n TransactionData,\n TransactionEventCode\n} from './interfaces'\n\nexport function argsEqual(args1: any, args2: any): boolean {\n return JSON.stringify(args1) === JSON.stringify(args2)\n}\n\n// will update object(merge new data) in list if it passes predicate, otherwise adds new object\nexport function replaceOrAdd(\n list: any[],\n predicate: (val: any) => boolean,\n data: any\n): any[] {\n const clone = [...list]\n const index = clone.findIndex(predicate)\n\n if (index !== -1) {\n const { startTime, contractCall } = clone[index]\n const { startTime: serverStartTime } = data\n const contractCallMerge = contractCall ? { ...contractCall } : {}\n\n clone[index] = {\n ...data,\n ...contractCallMerge,\n startTime: startTime || serverStartTime\n }\n return clone\n }\n\n return [...list, data]\n}\n\nexport function extractMessageFromError(error: {\n message: string\n stack: string\n}): { eventCode: string; errorMsg: string } {\n if (!error.stack || !error.message) {\n return {\n eventCode: 'txError',\n errorMsg: 'An unknown error occured'\n }\n }\n\n const message = error.stack || error.message\n\n if (message.includes('User denied transaction signature')) {\n return {\n eventCode: 'txSendFail',\n errorMsg: 'User denied transaction signature'\n }\n }\n\n if (message.includes('transaction underpriced')) {\n return {\n eventCode: 'txUnderpriced',\n errorMsg: 'Transaction is under priced'\n }\n }\n\n return {\n eventCode: 'txError',\n errorMsg: message\n }\n}\n\nexport function createEmitter(): Emitter {\n return {\n listeners: {},\n on: function (\n eventCode: TransactionEventCode,\n listener: EmitterListener\n ): never | void {\n // check if valid eventCode\n switch (eventCode) {\n case 'txSent':\n case 'txPool':\n case 'txConfirmed':\n case 'txSpeedUp':\n case 'txCancel':\n case 'txFailed':\n case 'txRequest':\n case 'nsfFail':\n case 'txRepeat':\n case 'txAwaitingApproval':\n case 'txConfirmReminder':\n case 'txSendFail':\n case 'txError':\n case 'txUnderPriced':\n case 'all':\n break\n default:\n throw new Error(\n `${eventCode} is not a valid event code, for a list of valid event codes see: https://github.com/blocknative/notify`\n )\n }\n\n // check that listener is a function\n if (typeof listener !== 'function') {\n throw new Error('Listener must be a function')\n }\n\n // add listener for the eventCode\n this.listeners[eventCode] = listener\n },\n emit: function (state: TransactionData) {\n if (this.listeners[state.eventCode || '']) {\n return this.listeners[state.eventCode || ''](state)\n }\n\n if (this.listeners.all) {\n return this.listeners.all(state)\n }\n }\n }\n}\n\nexport function localNetwork(networkId: number) {\n switch (networkId) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 42:\n case 56:\n case 100:\n return false\n default:\n return true\n }\n}\n","\n\n\n\n (hovered = true)}\n on:mouseleave={() => (hovered = false)}>\n \n \n \n \n \n \n
\n","\n\n\n\n\n {@html message}\n

\n","\n\n\n\n\n {time}\n\n","\n\n\n\n\n {value}\n\n","\n\n\n\n\n \n \n
\n {:else}\n \n \n {/if}\n notifications.remove(notification.id, notification.eventCode)}>\n \n \n \n \n {/each}\n \n{/if}\n","import type { NotificationType } from './interfaces'\n\nexport function eventToType(eventCode: string | undefined): NotificationType {\n switch (eventCode) {\n case 'txSent':\n case 'txPool':\n case 'txSpeedUp':\n case 'txCancel':\n return 'pending'\n case 'txRequest':\n case 'txRepeat':\n case 'txAwaitingApproval':\n case 'txConfirmReminder':\n case 'txStallPending':\n case 'txStallConfirmed':\n return 'hint'\n case 'txError':\n case 'txSendFail':\n case 'txFailed':\n case 'txDropped':\n case 'nsfFail':\n case 'txUnderpriced':\n return 'error'\n case 'txConfirmed':\n return 'success'\n default:\n return 'hint'\n }\n}\n\nexport function typeToDismissTimeout(type: string): number {\n switch (type) {\n case 'success':\n case 'hint':\n return 4000\n default:\n return 0\n }\n}\n","import { _ } from 'svelte-i18n'\nimport BigNumber from 'bignumber.js'\nimport { notifications } from './stores'\nimport { eventToType, typeToDismissTimeout } from './defaults'\nimport { defaultNotifyMessages } from './i18n'\n\nimport type {\n CustomNotificationObject,\n TransactionData,\n NotificationType,\n BitcoinInputOutput\n} from './interfaces'\n\n// subscribe to the formatter store\nlet formatter: any\n_.subscribe((store: any) => (formatter = store))\n\nexport function createNotification(\n transactionDetails: TransactionData,\n customization: CustomNotificationObject | boolean | void = {}\n): void {\n const notificationObject =\n transactionDetails.system === 'bitcoin'\n ? createBitcoinNotificationObject(transactionDetails, customization)\n : createEthereumNotificationObject(transactionDetails, customization)\n\n notifications.add(notificationObject)\n}\n\nfunction createBitcoinNotificationObject(\n transactionDetails: TransactionData,\n customization: CustomNotificationObject | boolean | void\n) {\n const {\n id,\n txid,\n startTime,\n eventCode,\n watchedAddress,\n inputs,\n outputs\n } = transactionDetails\n const type: NotificationType = eventToType(eventCode)\n const key = `${id}-${\n (typeof customization === 'object' && customization.eventCode) || eventCode\n }`\n\n const { direction, value } = getBitcoinDirectionValue(\n inputs,\n outputs,\n watchedAddress\n )\n\n const formatterOptions = watchedAddress\n ? {\n messageId: `watched['${eventCode}']`,\n values: {\n verb:\n eventCode === 'txConfirmed'\n ? direction === 'incoming'\n ? 'received'\n : 'sent'\n : direction === 'incoming'\n ? 'receiving'\n : 'sending',\n formattedValue: value,\n asset: 'BTC',\n preposition: '',\n counterpartyShortened: ''\n }\n }\n : {\n messageId: `transaction['${eventCode}']`,\n values: { value, asset: 'BTC' }\n }\n\n const internationalizedMessage = formatter(formatterOptions.messageId, {\n values: formatterOptions.values\n })\n\n const noMessageAvailable =\n internationalizedMessage === formatterOptions.messageId\n\n const message = noMessageAvailable\n ? defaultNotifyMessages.en[watchedAddress ? 'watched' : 'transaction'][\n eventCode || ''\n ]\n : internationalizedMessage\n\n let notificationObject = {\n id: id || txid,\n type,\n key,\n startTime,\n eventCode,\n message,\n autoDismiss: typeToDismissTimeout(\n (typeof customization === 'object' && customization.type) || type\n )\n }\n if (typeof customization === 'object') {\n notificationObject = { ...notificationObject, ...customization }\n }\n\n return notificationObject\n}\n\nfunction createEthereumNotificationObject(\n transactionDetails: TransactionData,\n customization: CustomNotificationObject | boolean | void\n) {\n const {\n id,\n hash,\n startTime,\n eventCode,\n direction,\n counterparty,\n value,\n asset\n } = transactionDetails\n\n const type: NotificationType = eventToType(eventCode)\n const key = `${id}-${\n (typeof customization === 'object' && customization.eventCode) || eventCode\n }`\n const counterpartyShortened: string | undefined =\n counterparty &&\n counterparty.substring(0, 4) +\n '...' +\n counterparty.substring(counterparty.length - 4)\n\n const formattedValue = new BigNumber(value || 0)\n .div(new BigNumber('1000000000000000000'))\n .toString(10)\n\n const formatterOptions =\n counterparty && value\n ? {\n messageId: `watched['${eventCode}']`,\n values: {\n verb:\n eventCode === 'txConfirmed'\n ? direction === 'incoming'\n ? 'received'\n : 'sent'\n : direction === 'incoming'\n ? 'receiving'\n : 'sending',\n formattedValue,\n preposition: direction === 'incoming' ? 'from' : 'to',\n counterpartyShortened,\n asset\n }\n }\n : {\n messageId: `transaction['${eventCode}']`,\n values: { formattedValue, asset }\n }\n\n const internationalizedMessage = formatter(formatterOptions.messageId, {\n values: formatterOptions.values\n })\n\n const noMessageAvailable =\n internationalizedMessage === formatterOptions.messageId\n\n const message = noMessageAvailable\n ? defaultNotifyMessages.en[counterparty ? 'watched' : 'transaction'][\n eventCode || ''\n ]\n : internationalizedMessage\n\n let notificationObject = {\n id: id || hash,\n type,\n key,\n startTime,\n eventCode,\n message,\n autoDismiss: typeToDismissTimeout(\n (typeof customization === 'object' && customization.type) || type\n )\n }\n\n if (typeof customization === 'object') {\n notificationObject = { ...notificationObject, ...customization }\n }\n\n return notificationObject\n}\n\nfunction getBitcoinDirectionValue(\n inputs: BitcoinInputOutput[] | undefined,\n outputs: BitcoinInputOutput[] | undefined,\n watchedAddress: string | undefined\n) {\n if (!watchedAddress) return { value: null, direction: '' }\n\n const finder = (i: BitcoinInputOutput) => i.address === watchedAddress\n\n const input = inputs && inputs.find(finder)\n const output = outputs && outputs.find(finder)\n\n return {\n direction: output ? 'incoming' : 'outgoing',\n value: output ? output.value : input && input.value\n }\n}\n","import type {\n InitOptions,\n TransactionOptions,\n CustomNotificationObject,\n ConfigOptions\n} from './interfaces'\n\nconst validInitKeys = [\n 'dappId',\n 'networkId',\n 'system',\n 'transactionHandler',\n 'name',\n 'onerror',\n 'mobilePosition',\n 'desktopPosition',\n 'darkMode',\n 'txApproveReminderTimeout',\n 'txStallPendingTimeout',\n 'txStallConfirmedTimeout',\n 'notifyMessages',\n 'clientLocale'\n]\n\nconst validNotificationKeys = [\n 'eventCode',\n 'type',\n 'message',\n 'autoDismiss',\n 'onclick'\n]\n\nconst validTransactionKeys = [\n 'sendTransaction',\n 'estimateGas',\n 'gasPrice',\n 'balance',\n 'contractCall',\n 'txDetails'\n]\n\nfunction invalidParams(\n params: any,\n validParams: string[],\n functionName: string\n): void | never {\n const invalid = Object.keys(params)\n\n if (invalid.length > 0) {\n throw new Error(\n `${\n invalid[0]\n } is not a valid parameter for ${functionName}, must be one of the following valid parameters: ${validParams.join(\n ', '\n )}`\n )\n }\n}\n\nexport function validateType({\n name,\n value,\n type,\n optional,\n customValidation\n}: {\n name: string\n value: any\n type: string\n optional?: boolean\n customValidation?: (val: any) => void | never\n}): never | void {\n if (!optional && typeof value === 'undefined') {\n throw new Error(`\"${name}\" is required`)\n }\n\n if (\n typeof value !== 'undefined' &&\n (type === 'array' ? Array.isArray(type) : typeof value !== type)\n ) {\n throw new Error(\n `\"${name}\" must be of type: ${type}, received type: ${typeof value} from value: ${value}`\n )\n }\n\n if (typeof value !== 'undefined' && customValidation) {\n customValidation(value)\n }\n}\n\nexport function validateInit(init: InitOptions): void {\n validateType({ name: 'init', value: init, type: 'object' })\n\n const {\n dappId,\n system,\n networkId,\n transactionHandler,\n name,\n apiUrl,\n onerror,\n ...otherParams\n } = init\n\n validateType({\n name: 'dappId',\n value: dappId,\n type: 'string',\n optional: true\n })\n\n validateType({\n name: 'system',\n value: system,\n type: 'string',\n // defaults to ethereum so optional\n optional: true\n })\n\n // if no dappId provided then optional, otherwise required\n validateType({\n name: 'networkId (if dappId provided)',\n value: networkId,\n type: 'number',\n optional: !dappId\n })\n\n validateType({ name: 'name', value: name, type: 'string', optional: true })\n\n validateType({\n name: 'apiUrl',\n value: apiUrl,\n type: 'string',\n optional: true\n })\n\n validateType({\n name: 'transactionHandler',\n value: transactionHandler,\n type: 'function',\n optional: true\n })\n\n validateType({\n name: 'onerror',\n value: onerror,\n type: 'function',\n optional: true\n })\n\n validateConfig(otherParams)\n}\n\nfunction stringOrNumber(val: string | number): boolean {\n return typeof val === 'string' || typeof val === 'number'\n}\n\nexport function validateTransactionOptions(options: TransactionOptions): void {\n validateType({ name: 'transaction options', value: options, type: 'object' })\n\n const {\n sendTransaction,\n estimateGas,\n gasPrice,\n balance,\n contractCall,\n txDetails,\n ...otherParams\n } = options\n\n invalidParams(otherParams, validTransactionKeys, 'Transaction Options')\n\n validateType({\n name: 'sendTransaction',\n value: sendTransaction,\n type: 'function',\n optional: true\n })\n\n validateType({\n name: 'estimateGas',\n value: estimateGas,\n type: 'function',\n optional: true\n })\n\n validateType({\n name: 'gasPrice',\n value: gasPrice,\n type: 'function',\n optional: true\n })\n\n validateType({\n name: 'balance',\n value: balance,\n type: 'string',\n optional: true\n })\n\n validateType({\n name: 'contractCall',\n value: contractCall,\n type: 'object',\n optional: true\n })\n\n if (contractCall) {\n const { methodName, params, ...otherParams } = contractCall\n invalidParams(otherParams, ['methodName', 'params'], 'contractCall')\n\n validateType({\n name: 'methodName',\n value: methodName,\n type: 'string',\n optional: true\n })\n\n validateType({\n name: 'params',\n value: params,\n type: 'array',\n optional: true\n })\n }\n\n validateType({\n name: 'txDetails',\n value: txDetails,\n type: 'object',\n optional: true\n })\n\n if (txDetails) {\n const { to, value, from, ...otherParams } = txDetails\n\n invalidParams(otherParams, ['to', 'value', 'from'], 'txDetails')\n\n validateType({\n name: 'to',\n value: to,\n type: 'string',\n optional: true,\n customValidation: isAddress\n })\n\n if (typeof value !== 'undefined' && !stringOrNumber(value)) {\n throw new Error(\n `\"value\" must be of type: string | number, received type: ${typeof value} from value: ${value}`\n )\n }\n\n validateType({\n name: 'from',\n value: from,\n type: 'string',\n optional: true,\n customValidation: isAddress\n })\n }\n}\n\nexport function validateNotificationObject(\n notification: CustomNotificationObject | boolean | undefined\n): void {\n validateType({\n name: 'notification',\n value: notification,\n type: 'object'\n })\n\n if (typeof notification !== 'object') return\n\n const {\n eventCode,\n type,\n message,\n autoDismiss,\n onclick,\n ...otherParams\n } = notification\n\n invalidParams(otherParams, validNotificationKeys, 'notification')\n\n validateType({\n name: 'eventCode',\n value: eventCode,\n type: 'string',\n optional: true\n })\n\n validateType({\n name: 'type',\n value: type,\n type: 'string',\n optional: true,\n customValidation: validNotificationType\n })\n\n validateType({\n name: 'message',\n value: message,\n type: 'string'\n })\n\n validateType({\n name: 'autoDismiss',\n value: autoDismiss,\n type: 'number',\n optional: true\n })\n\n validateType({\n name: 'onclick',\n value: onclick,\n type: 'function',\n optional: true\n })\n}\n\nexport function validateConfig(config: ConfigOptions): void {\n validateType({ name: 'config', value: config, type: 'object' })\n\n const {\n networkId,\n system,\n mobilePosition,\n desktopPosition,\n darkMode,\n notifyMessages,\n clientLocale,\n txApproveReminderTimeout,\n txStallPendingTimeout,\n txStallConfirmedTimeout,\n ...otherParams\n } = config\n\n invalidParams(otherParams, validInitKeys, 'config / initialize')\n\n validateType({\n name: 'networkId',\n value: networkId,\n type: 'number',\n optional: true\n })\n\n validateType({\n name: 'system',\n value: system,\n type: 'string',\n optional: true\n })\n\n validateType({\n name: 'mobilePosition',\n value: mobilePosition,\n type: 'string',\n optional: true,\n customValidation: validMobilePosition\n })\n\n validateType({\n name: 'desktopPosition',\n value: desktopPosition,\n type: 'string',\n optional: true,\n customValidation: validDesktopPosition\n })\n\n validateType({\n name: 'darkMode',\n value: darkMode,\n type: 'boolean',\n optional: true\n })\n\n validateType({\n name: 'notifyMessages',\n value: notifyMessages,\n type: 'object',\n optional: true\n })\n\n if (notifyMessages) {\n Object.keys(notifyMessages).forEach(locale => {\n validateType({\n name: locale,\n value: notifyMessages[locale],\n type: 'object'\n })\n\n const { transaction, watched, time, ...otherParams } = notifyMessages[\n locale\n ]\n\n invalidParams(otherParams, ['transaction', 'watched', 'time'], locale)\n\n validateType({\n name: `notifyMessages.${locale}.transaction`,\n value: transaction,\n type: 'object',\n optional: true\n })\n\n validateType({\n name: `notifyMessages.${locale}.watched`,\n value: watched,\n type: 'object',\n optional: true\n })\n\n validateType({\n name: `notifyMessages.${locale}.time`,\n value: time,\n type: 'object',\n optional: true\n })\n })\n }\n\n validateType({\n name: 'clientLocale',\n value: clientLocale,\n type: 'string',\n optional: true\n })\n\n validateType({\n name: 'txApproveReminderTimeout',\n value: txApproveReminderTimeout,\n type: 'number',\n optional: true\n })\n\n validateType({\n name: 'txStallPendingTimeout',\n value: txStallPendingTimeout,\n type: 'number',\n optional: true\n })\n\n validateType({\n name: 'txStallConfirmedTimeout',\n value: txStallConfirmedTimeout,\n type: 'number',\n optional: true\n })\n}\n\nfunction validNotificationType(type: string): void | never {\n switch (type) {\n case 'hint':\n case 'pending':\n case 'error':\n case 'success':\n return\n default:\n throw new Error(\n `${type} is not a valid notification type, must be one of: 'hint', 'pending', 'error' or 'success'.`\n )\n }\n}\n\nfunction validMobilePosition(position: string): void | never {\n switch (position) {\n case 'top':\n case 'bottom':\n return\n default:\n throw new Error(\n `${position} is not a valid mobile notification position, must be one of: 'top' or 'bottom'.`\n )\n }\n}\n\nfunction validDesktopPosition(position: string): void | never {\n switch (position) {\n case 'bottomLeft':\n case 'bottomRight':\n case 'topLeft':\n case 'topRight':\n return\n default:\n throw new Error(\n `${position} is not a valid desktop notification position, must be one of: 'bottomLeft', 'bottomRight', 'topLeft' or 'topRight'.`\n )\n }\n}\n\nfunction isAddress(address: string): void | never {\n if (!/^(0x)?[0-9a-fA-F]{40}$/.test(address)) {\n throw new Error(`${address} is not a valid ethereum address.`)\n }\n}\n","import BigNumber from 'bignumber.js'\nimport uuid from 'uuid/v4'\nimport { get } from 'svelte/store'\n\nimport { transactions, app } from './stores'\nimport { createNotification } from './notifications'\nimport { argsEqual, extractMessageFromError, localNetwork } from './utilities'\nimport { validateNotificationObject } from './validation'\n\nimport type {\n TransactionData,\n PreflightEvent,\n ContractCall,\n CustomNotificationObject,\n Emitter,\n TransactionOptions\n} from './interfaces'\n\nlet transactionQueue: TransactionData[]\ntransactions.subscribe((store: TransactionData[]) => (transactionQueue = store))\n\nexport function handlePreFlightEvent(\n blocknative,\n preflightEvent: PreflightEvent\n) {\n const {\n eventCode,\n contractCall,\n balance,\n txDetails,\n emitter,\n status\n } = preflightEvent\n\n let contract\n\n if (contractCall) {\n contract = {\n methodName: contractCall.methodName,\n parameters: contractCall.params\n }\n }\n\n blocknative.event({\n categoryCode: contractCall ? 'activeContract' : 'activeTransaction',\n eventCode,\n transaction: txDetails,\n wallet: { balance },\n contract: contractCall ? contract : undefined\n })\n\n const transaction = {\n ...txDetails,\n eventCode,\n status,\n contractCall: contract ? contractCall : undefined\n }\n\n const emitterResult = emitter.emit(transaction)\n\n if (emitterResult) {\n validateNotificationObject(emitterResult)\n }\n\n handleTransactionEvent({\n transaction: transaction,\n emitterResult\n })\n}\n\nexport function handleTransactionEvent(event: {\n transaction: TransactionData\n emitterResult: boolean | void | CustomNotificationObject\n}) {\n const { transaction, emitterResult } = event\n transactions.updateQueue(transaction)\n\n // create notification if dev hasn't opted out and not connected to a local network\n if (emitterResult !== false && !localNetwork(get(app).networkId)) {\n const transactionObj = transactionQueue.find(\n (tx: TransactionData) => tx.id === transaction.id\n )\n if (transactionObj) {\n createNotification(transactionObj, emitterResult)\n }\n }\n}\n\nexport function duplicateTransactionCandidate(\n transaction: TransactionData,\n contract: ContractCall\n) {\n const duplicate:\n | TransactionData\n | undefined\n | boolean = transactionQueue.find((tx: TransactionData) => {\n if (contract && typeof tx.contractCall === 'undefined') return false\n if (tx.status === 'confirmed' || tx.status === 'failed') return\n\n const sameMethod = contract\n ? contract.methodName === (tx.contractCall && tx.contractCall.methodName)\n : true\n\n const sameParams = contract\n ? argsEqual(contract.params, tx.contractCall && tx.contractCall.params)\n : true\n\n const sameVal = tx.value == transaction.value\n\n const sameTo = contract\n ? sameMethod\n : tx.to &&\n tx.to.toLowerCase() === transaction.to &&\n transaction.to.toLowerCase()\n\n return sameMethod && sameParams && sameVal && sameTo\n })\n\n return duplicate\n}\n\nexport function preflightTransaction(\n blocknative,\n options: TransactionOptions,\n emitter: Emitter\n): Promise {\n return new Promise((resolve, reject) => {\n // wrap in set timeout to put to the end of the event queue\n setTimeout(async () => {\n const {\n sendTransaction,\n estimateGas,\n gasPrice,\n balance,\n contractCall,\n txDetails\n } = options\n\n //=== if `balance` or `estimateGas` or `gasPrice` is not provided, then sufficient funds check is disabled === //\n //=== if `txDetails` is not provided, then duplicate transaction check is disabled === //\n //== if dev doesn't want notify to intiate the transaction and `sendTransaction` is not provided, then transaction rejected notification is disabled ==//\n //=== to disable hints for `txAwaitingApproval`, `txConfirmReminder` or any other notification, then return false from listener functions ==//\n\n const [gas, price] = await gasEstimates(estimateGas, gasPrice)\n const id = uuid()\n const value = new BigNumber((txDetails && txDetails.value) || 0)\n\n const calculated = {\n value: value.toString(10),\n gas: gas && gas.toString(10),\n gasPrice: price && price.toString(10)\n }\n\n const txObject = txDetails\n ? {\n ...txDetails,\n ...calculated,\n id\n }\n : { ...calculated, id }\n\n // check sufficient balance if required parameters are available\n if (balance && gas && price) {\n const transactionCost = gas.times(price).plus(value)\n\n // if transaction cost is greater than the current balance\n if (transactionCost.gt(new BigNumber(balance))) {\n const eventCode = 'nsfFail'\n\n handlePreFlightEvent(blocknative, {\n eventCode,\n contractCall,\n balance,\n txDetails: txObject,\n emitter\n })\n\n return reject('User has insufficient funds')\n }\n }\n\n // check if it is a duplicate transaction\n if (txDetails && duplicateTransactionCandidate(txDetails, contractCall)) {\n const eventCode = 'txRepeat'\n\n handlePreFlightEvent(blocknative, {\n eventCode,\n contractCall,\n balance,\n txDetails: txObject,\n emitter\n })\n }\n\n const {\n txApproveReminderTimeout,\n txStallPendingTimeout,\n txStallConfirmedTimeout\n } = get(app)\n\n // check previous transactions awaiting approval\n if (transactionQueue.find(tx => tx.status === 'awaitingApproval')) {\n const eventCode = 'txAwaitingApproval'\n\n handlePreFlightEvent(blocknative, {\n eventCode,\n contractCall,\n balance,\n txDetails: txObject,\n emitter\n })\n }\n\n // confirm reminder after timeout\n setTimeout(() => {\n const awaitingApproval = transactionQueue.find(\n tx => tx.id === id && tx.status === 'awaitingApproval'\n )\n\n if (awaitingApproval) {\n const eventCode = 'txConfirmReminder'\n\n handlePreFlightEvent(blocknative, {\n eventCode,\n contractCall,\n balance,\n txDetails: txObject,\n emitter\n })\n }\n }, txApproveReminderTimeout)\n\n handlePreFlightEvent(blocknative, {\n eventCode: 'txRequest',\n status: 'awaitingApproval',\n contractCall,\n balance,\n txDetails: txObject,\n emitter\n })\n\n // if not provided with sendTransaction function, resolve with id so dev can initiate transaction\n // dev will need to call notify.hash(txHash, id) with this id to link up the preflight with the postflight notifications\n if (!sendTransaction) {\n return resolve(id)\n }\n\n // get result and handle errors\n let hash\n try {\n hash = await sendTransaction()\n } catch (error) {\n const { eventCode, errorMsg } = extractMessageFromError(error)\n\n handlePreFlightEvent(blocknative, {\n eventCode,\n status: 'failed',\n contractCall,\n balance,\n txDetails: txObject,\n emitter\n })\n\n return reject(errorMsg)\n }\n\n if (hash && typeof hash === 'string') {\n const serverEmitter = blocknative.transaction(hash, id).emitter\n\n serverEmitter.on('all', (transaction: TransactionData) => {\n const result = emitter.emit(transaction)\n return result\n })\n\n // Check for pending stall status\n setTimeout(() => {\n const transaction = transactionQueue.find(\n (tx: TransactionData) => tx.id === id\n )\n if (\n transaction &&\n transaction.status === 'sent' &&\n blocknative._connected\n ) {\n const eventCode = 'txStallPending'\n\n handlePreFlightEvent(blocknative, {\n eventCode,\n contractCall,\n balance,\n txDetails: txObject,\n emitter\n })\n }\n }, txStallPendingTimeout)\n\n // Check for confirmed stall status\n setTimeout(() => {\n const transaction = transactionQueue.find(tx => tx.id === id)\n\n if (\n transaction &&\n transaction.status === 'pending' &&\n blocknative._connected\n ) {\n const eventCode = 'txStallConfirmed'\n\n handlePreFlightEvent(blocknative, {\n eventCode,\n contractCall,\n balance,\n txDetails: txObject,\n emitter\n })\n }\n }, txStallConfirmedTimeout)\n\n resolve(id)\n } else {\n reject(\n 'sendTransaction function must resolve to a transaction hash that is of type String.'\n )\n }\n }, 10)\n })\n}\n\nfunction gasEstimates(\n gasFunc: () => Promise,\n gasPriceFunc: () => Promise\n) {\n if (!gasFunc || !gasPriceFunc) {\n return Promise.resolve([])\n }\n\n const gasProm = gasFunc()\n if (!gasProm.then) {\n throw new Error('The `estimateGas` function must return a Promise')\n }\n\n const gasPriceProm = gasPriceFunc()\n if (!gasPriceProm.then) {\n throw new Error('The `gasPrice` function must return a Promise')\n }\n\n return Promise.all([gasProm, gasPriceProm])\n .then(([gasResult, gasPriceResult]) => {\n if (typeof gasResult !== 'string') {\n throw new Error(\n `The Promise returned from calling 'estimateGas' must resolve with a value of type 'string'. Received a value of: ${gasResult} with a type: ${typeof gasResult}`\n )\n }\n\n if (typeof gasPriceResult !== 'string') {\n throw new Error(\n `The Promise returned from calling 'gasPrice' must resolve with a value of type 'string'. Received a value of: ${gasPriceResult} with a type: ${typeof gasPriceResult}`\n )\n }\n\n return [new BigNumber(gasResult), new BigNumber(gasPriceResult)]\n })\n .catch(error => {\n throw new Error(`There was an error getting gas estimates: ${error}`)\n })\n}\n","import 'regenerator-runtime/runtime'\nimport BlocknativeSdk from 'bnc-sdk'\nimport { get } from 'svelte/store'\n\nimport uuid from 'uuid/v4'\nimport { locale, dictionary, getClientLocale } from 'svelte-i18n'\n\nimport Notify from './views/Notify.svelte'\n\nimport { app, notifications } from './stores'\nimport { handleTransactionEvent, preflightTransaction } from './transactions'\nimport { createNotification } from './notifications'\n\nimport type {\n InitOptions,\n TransactionHandler,\n AppStore,\n API,\n Emitter,\n TransactionOptions,\n CustomNotificationObject,\n UpdateNotification,\n ConfigOptions,\n LocaleMessages\n} from './interfaces'\n\nexport {\n InitOptions,\n TransactionHandler,\n TransactionEvent,\n System,\n TransactionEventCode,\n TransactionData,\n NotificationType,\n CustomNotificationObject,\n BitcoinInputOutput,\n NotificationObject,\n ContractCall,\n DecodedContractCall,\n NotifyMessages,\n LocaleMessages,\n TransactionOptions,\n PreflightEvent,\n UpdateNotification,\n ConfigOptions,\n Hash,\n Transaction,\n Account,\n Unsubscribe,\n Notification,\n Config,\n API,\n EmitterListener,\n Emitter,\n NotificationDetails\n} from './interfaces'\n\nimport {\n validateInit,\n validateTransactionOptions,\n validateNotificationObject,\n validateConfig\n} from './validation'\n\nimport { createEmitter } from './utilities'\n\nimport { version } from '../package.json'\n\nlet notify: any\n\nfunction init(options: InitOptions): API {\n if (notify) {\n console.warn('notify has already been initialized')\n notify.$destroy()\n }\n\n validateInit(options)\n\n const { system, transactionHandler, apiUrl, ...appOptions } = options\n const { dappId, networkId, name, clientLocale, onerror } = appOptions\n\n const transactionHandlers: TransactionHandler[] = [handleTransactionEvent]\n\n if (transactionHandler) {\n transactionHandlers.push(transactionHandler)\n }\n\n let blocknative\n\n if (dappId) {\n blocknative = new BlocknativeSdk({\n dappId,\n networkId,\n onerror,\n transactionHandlers,\n name: name || 'Notify',\n apiUrl,\n system\n })\n\n // filter out pending simulation events\n blocknative\n .configuration({\n scope: 'global',\n filters: [{ status: 'pending-simulation', _not: true }]\n })\n .catch(() => {\n // swallow server timeout response error as we are not waiting on it\n })\n }\n\n // save config to app store\n app.update((store: AppStore) => ({\n ...store,\n ...appOptions,\n version,\n clientLocale:\n clientLocale ||\n getClientLocale({\n fallback: 'en',\n navigator: true\n })\n }))\n\n // initialize App\n notify = new Notify({\n target: document.body\n })\n\n app.subscribe((store: AppStore) => {\n const { notifyMessages, clientLocale } = store\n\n // set the dictionary for i18n\n dictionary.set(notifyMessages)\n\n const availableLocale: LocaleMessages | undefined =\n notifyMessages[clientLocale] || notifyMessages[clientLocale.slice(0, 2)]\n locale.set(availableLocale ? clientLocale : 'en')\n })\n\n return {\n hash,\n transaction,\n account,\n unsubscribe,\n notification,\n config\n }\n\n function account(\n address: string\n ): { details: { address: string }; emitter: Emitter } | never {\n if (!blocknative) {\n throw new Error(\n 'A dappId needs to be passed in when intializing Notify to use the account function'\n )\n }\n\n const result = blocknative.account(address)\n return result\n }\n\n function hash(hash: string, id?: string) {\n if (!blocknative) {\n throw new Error(\n 'A dappId needs to be passed in when intializing Notify to use the hash function'\n )\n }\n\n const result = blocknative.transaction(hash, id)\n return result\n }\n\n function transaction(\n options: TransactionOptions\n ): { result: Promise; emitter: Emitter } {\n if (!blocknative) {\n throw new Error(\n 'A dappId needs to be passed in when intializing Notify to use the transaction function'\n )\n }\n\n validateTransactionOptions(options)\n\n const emitter = createEmitter()\n\n const result = preflightTransaction(blocknative, options, emitter).catch(\n err => {\n const { onerror } = get(app)\n onerror && onerror(err)\n return err\n }\n )\n\n return {\n emitter,\n result\n }\n }\n\n function unsubscribe(addressOrHash: string) {\n if (!blocknative) {\n throw new Error(\n 'A dappId needs to be passed in when intializing Notify to use the unsubscribe function'\n )\n }\n\n blocknative.unsubscribe(addressOrHash)\n }\n\n function notification(\n notificationObject: CustomNotificationObject\n ): {\n dismiss: () => void\n update: UpdateNotification\n } {\n validateNotificationObject(notificationObject)\n\n let key = 0\n\n const id: string = uuid()\n const startTime: number = Date.now()\n const { eventCode = `customNotification${key++}` } = notificationObject\n\n const dismiss = () => notifications.remove(id, eventCode)\n\n function update(\n notificationUpdate: CustomNotificationObject\n ): {\n dismiss: () => void\n update: UpdateNotification\n } {\n validateNotificationObject(notificationUpdate)\n\n const { eventCode = `customNotification${key++}` } = notificationUpdate\n createNotification({ id, startTime, eventCode }, notificationUpdate)\n\n return {\n dismiss,\n update\n }\n }\n\n createNotification({ id, startTime, eventCode }, notificationObject)\n\n return {\n dismiss,\n update\n }\n }\n\n function config(options: ConfigOptions): void {\n validateConfig(options)\n\n const {\n notifyMessages,\n networkId: newNetworkId,\n system: newSystem,\n ...otherOptions\n } = options\n\n const { networkId, system, dappId, transactionHandler, name, apiUrl } = get(\n app\n )\n\n // networkId or system has changed\n if (\n (newNetworkId && newNetworkId !== networkId) ||\n (newSystem && newSystem !== system)\n ) {\n if (!blocknative) {\n throw new Error(\n 'A dappId needs to be passed in when intializing Notify to be able to connect to a system and network'\n )\n }\n\n // close existing SDK connection\n blocknative.destroy()\n\n // create new connection with new values\n blocknative = new BlocknativeSdk({\n dappId,\n networkId: newNetworkId || networkId,\n transactionHandlers: transactionHandler\n ? [handleTransactionEvent, transactionHandler]\n : [handleTransactionEvent],\n name: name || 'Notify',\n apiUrl,\n system: newSystem || system\n })\n }\n\n app.update((store: AppStore) => {\n return {\n ...store,\n networkId: newNetworkId || networkId,\n system: newSystem || system,\n ...otherOptions,\n notifyMessages: notifyMessages\n ? { ...store.notifyMessages, ...notifyMessages }\n : store.notifyMessages\n }\n })\n }\n}\n\nexport default init\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _class, _temp;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar React = require('react');\nvar Component = React.Component;\n\nvar PropTypes = require('prop-types');\n\nvar _require = require('./getDeviceId'),\n getDeviceId = _require.getDeviceId,\n getFacingModePattern = _require.getFacingModePattern;\n\nvar havePropsChanged = require('./havePropsChanged');\nvar createBlob = require('./createBlob');\n\n// Require adapter to support older browser implementations\nrequire('webrtc-adapter');\n\n// Inline worker.js as a string value of workerBlob.\n// eslint-disable-next-line\nvar workerBlob = createBlob([\"!function(o,e){\\\"object\\\"==typeof exports&&\\\"object\\\"==typeof module?module.exports=e():\\\"function\\\"==typeof define&&define.amd?define([],e):\\\"object\\\"==typeof exports?exports.jsQR=e():o.jsQR=e()}(\\\"undefined\\\"!=typeof self?self:this,function(){return function(o){function e(t){if(r[t])return r[t].exports;var c=r[t]={i:t,l:!1,exports:{}};return o[t].call(c.exports,c,c.exports,e),c.l=!0,c.exports}var r={};return e.m=o,e.c=r,e.d=function(o,r,t){e.o(o,r)||Object.defineProperty(o,r,{configurable:!1,enumerable:!0,get:t})},e.n=function(o){var r=o&&o.__esModule?function(){return o.default}:function(){return o};return e.d(r,\\\"a\\\",r),r},e.o=function(o,e){return Object.prototype.hasOwnProperty.call(o,e)},e.p=\\\"\\\",e(e.s=3)}([function(o,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var t=function(){function o(o,e){this.width=e,this.height=o.length/e,this.data=o}return o.createEmpty=function(e,r){return new o(new Uint8ClampedArray(e*r),e)},o.prototype.get=function(o,e){return!(o<0||o>=this.width||e<0||e>=this.height)&&!!this.data[e*this.width+o]},o.prototype.set=function(o,e,r){this.data[e*this.width+o]=r?1:0},o.prototype.setRegion=function(o,e,r,t,c){for(var s=e;s=this.size&&(t=(t^this.primitive)&this.size-1);for(var s=0;s1&&0===e[0]){for(var t=1;tc.length&&(n=[c,r],r=n[0],c=n[1]);for(var s=new Uint8ClampedArray(c.length),a=c.length-r.length,d=0;dr?r:o}function c(o,e,r,c){if(o.length!==e*r*4)throw new Error(\\\"Malformed data passed to binarizer.\\\");for(var l=new n(e,r),i=0;i0&&v>0)){var x=(w.get(v,P-1)+2*w.get(v-1,P)+w.get(v-1,P-1))/4;p6&&(r.setRegion(e-11,0,3,6,!0),r.setRegion(0,e-11,6,3,!0)),r}function a(o,e,r){for(var t=w[r.dataMask],a=o.height,d=s(e),n=[],l=0,i=0,B=!0,k=a-1;k>0;k-=2){6===k&&k--;for(var u=0;u=0;a--)for(var d=e-9;d>=e-11;d--)s=c(o.get(d,a),s);for(var n=0,d=5;d>=0;d--)for(var a=e-9;a>=e-11;a--)n=c(o.get(d,a),n);for(var l,i=1/0,B=0,k=m.VERSIONS;B=0;s--)6!==s&&(e=c(o.get(8,s),e));for(var a=o.height,d=0,s=a-1;s>=a-7;s--)d=c(o.get(8,s),d);for(var r=a-8;r1)for(var B=t.ecBlocks[0].numBlocks,k=t.ecBlocks[1].numBlocks,d=0;d0;)for(var u=0,C=c;u=3;){var a=o.readBits(10);if(a>=1e3)throw new Error(\\\"Invalid numeric value above 999\\\");var d=Math.floor(a/100),n=Math.floor(a/10)%10,l=a%10;r.push(48+d,48+n,48+l),t+=d.toString()+n.toString()+l.toString(),s-=3}if(2===s){var a=o.readBits(7);if(a>=100)throw new Error(\\\"Invalid numeric value above 99\\\");var d=Math.floor(a/10),n=a%10;r.push(48+d,48+n),t+=d.toString()+n.toString()}else if(1===s){var a=o.readBits(4);if(a>=10)throw new Error(\\\"Invalid numeric value above 9\\\");r.push(48+a),t+=a.toString()}return{bytes:r,text:t}}function c(o,e){for(var r=[],t=\\\"\\\",c=[9,11,13][e],s=o.readBits(c);s>=2;){var a=o.readBits(11),d=Math.floor(a/45),n=a%45;r.push(k[d].charCodeAt(0),k[n].charCodeAt(0)),t+=k[d]+k[n],s-=2}if(1===s){var d=o.readBits(6);r.push(k[d].charCodeAt(0)),t+=k[d]}return{bytes:r,text:t}}function s(o,e){for(var r=[],t=\\\"\\\",c=[8,16,16][e],s=o.readBits(c),a=0;a>8,255&n),t+=String.fromCharCode(i.shiftJISTable[n])}return{bytes:r,text:t}}function d(o,e){for(var r=new l.BitStream(o),d=e<=9?0:e<=26?1:2,i={text:\\\"\\\",bytes:[],chunks:[]};r.available()>=4;){var k=r.readBits(4);if(k===B.Terminator)return i;if(k===B.ECI)0===r.readBits(1)?i.chunks.push({type:n.ECI,assignmentNumber:r.readBits(7)}):0===r.readBits(1)?i.chunks.push({type:n.ECI,assignmentNumber:r.readBits(14)}):0===r.readBits(1)?i.chunks.push({type:n.ECI,assignmentNumber:r.readBits(21)}):i.chunks.push({type:n.ECI,assignmentNumber:-1});else if(k===B.Numeric){var u=t(r,d);i.text+=u.text,(w=i.bytes).push.apply(w,u.bytes),i.chunks.push({type:n.Numeric,text:u.text})}else if(k===B.Alphanumeric){var C=c(r,d);i.text+=C.text,(P=i.bytes).push.apply(P,C.bytes),i.chunks.push({type:n.Alphanumeric,text:C.text})}else if(k===B.Byte){var m=s(r,d);i.text+=m.text,(v=i.bytes).push.apply(v,m.bytes),i.chunks.push({type:n.Byte,bytes:m.bytes,text:m.text})}else if(k===B.Kanji){var f=a(r,d);i.text+=f.text,(h=i.bytes).push.apply(h,f.bytes),i.chunks.push({type:n.Kanji,bytes:f.bytes,text:f.text})}}var w,P,v,h}Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var n,l=r(7),i=r(8);!function(o){o.Numeric=\\\"numeric\\\",o.Alphanumeric=\\\"alphanumeric\\\",o.Byte=\\\"byte\\\",o.Kanji=\\\"kanji\\\",o.ECI=\\\"eci\\\"}(n=e.Mode||(e.Mode={}));var B;!function(o){o[o.Terminator=0]=\\\"Terminator\\\",o[o.Numeric=1]=\\\"Numeric\\\",o[o.Alphanumeric=2]=\\\"Alphanumeric\\\",o[o.Byte=4]=\\\"Byte\\\",o[o.Kanji=8]=\\\"Kanji\\\",o[o.ECI=7]=\\\"ECI\\\"}(B||(B={}));var k=[\\\"0\\\",\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"A\\\",\\\"B\\\",\\\"C\\\",\\\"D\\\",\\\"E\\\",\\\"F\\\",\\\"G\\\",\\\"H\\\",\\\"I\\\",\\\"J\\\",\\\"K\\\",\\\"L\\\",\\\"M\\\",\\\"N\\\",\\\"O\\\",\\\"P\\\",\\\"Q\\\",\\\"R\\\",\\\"S\\\",\\\"T\\\",\\\"U\\\",\\\"V\\\",\\\"W\\\",\\\"X\\\",\\\"Y\\\",\\\"Z\\\",\\\" \\\",\\\"$\\\",\\\"%\\\",\\\"*\\\",\\\"+\\\",\\\"-\\\",\\\".\\\",\\\"/\\\",\\\":\\\"];e.decode=d},function(o,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var t=function(){function o(o){this.byteOffset=0,this.bitOffset=0,this.bytes=o}return o.prototype.readBits=function(o){if(o<1||o>32||o>this.available())throw new Error(\\\"Cannot read \\\"+o.toString()+\\\" bits\\\");var e=0;if(this.bitOffset>0){var r=8-this.bitOffset,t=o>8-t<>c,o-=t,this.bitOffset+=t,8===this.bitOffset&&(this.bitOffset=0,this.byteOffset++)}if(o>0){for(;o>=8;)e=e<<8|255&this.bytes[this.byteOffset],this.byteOffset++,o-=8;if(o>0){var c=8-o,s=255>>c<>c,this.bitOffset+=o}}return e},o.prototype.available=function(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset},o}();e.BitStream=t},function(o,e,r){\\\"use strict\\\";Object.defineProperty(e,\\\"__esModule\\\",{value:!0}),e.shiftJISTable={32:32,33:33,34:34,35:35,36:36,37:37,38:38,39:39,40:40,41:41,42:42,43:43,44:44,45:45,46:46,47:47,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,58:58,59:59,60:60,61:61,62:62,63:63,64:64,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:165,93:93,94:94,95:95,96:96,97:97,98:98,99:99,100:100,101:101,102:102,103:103,104:104,105:105,106:106,107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,125:125,126:8254,33088:12288,33089:12289,33090:12290,33091:65292,33092:65294,33093:12539,33094:65306,33095:65307,33096:65311,33097:65281,33098:12443,33099:12444,33100:180,33101:65344,33102:168,33103:65342,33104:65507,33105:65343,33106:12541,33107:12542,33108:12445,33109:12446,33110:12291,33111:20189,33112:12293,33113:12294,33114:12295,33115:12540,33116:8213,33117:8208,33118:65295,33119:92,33120:12316,33121:8214,33122:65372,33123:8230,33124:8229,33125:8216,33126:8217,33127:8220,33128:8221,33129:65288,33130:65289,33131:12308,33132:12309,33133:65339,33134:65341,33135:65371,33136:65373,33137:12296,33138:12297,33139:12298,33140:12299,33141:12300,33142:12301,33143:12302,33144:12303,33145:12304,33146:12305,33147:65291,33148:8722,33149:177,33150:215,33152:247,33153:65309,33154:8800,33155:65308,33156:65310,33157:8806,33158:8807,33159:8734,33160:8756,33161:9794,33162:9792,33163:176,33164:8242,33165:8243,33166:8451,33167:65509,33168:65284,33169:162,33170:163,33171:65285,33172:65283,33173:65286,33174:65290,33175:65312,33176:167,33177:9734,33178:9733,33179:9675,33180:9679,33181:9678,33182:9671,33183:9670,33184:9633,33185:9632,33186:9651,33187:9650,33188:9661,33189:9660,33190:8251,33191:12306,33192:8594,33193:8592,33194:8593,33195:8595,33196:12307,33208:8712,33209:8715,33210:8838,33211:8839,33212:8834,33213:8835,33214:8746,33215:8745,33224:8743,33225:8744,33226:172,33227:8658,33228:8660,33229:8704,33230:8707,33242:8736,33243:8869,33244:8978,33245:8706,33246:8711,33247:8801,33248:8786,33249:8810,33250:8811,33251:8730,33252:8765,33253:8733,33254:8757,33255:8747,33256:8748,33264:8491,33265:8240,33266:9839,33267:9837,33268:9834,33269:8224,33270:8225,33271:182,33276:9711,33359:65296,33360:65297,33361:65298,33362:65299,33363:65300,33364:65301,33365:65302,33366:65303,33367:65304,33368:65305,33376:65313,33377:65314,33378:65315,33379:65316,33380:65317,33381:65318,33382:65319,33383:65320,33384:65321,33385:65322,33386:65323,33387:65324,33388:65325,33389:65326,33390:65327,33391:65328,33392:65329,33393:65330,33394:65331,33395:65332,33396:65333,33397:65334,33398:65335,33399:65336,33400:65337,33401:65338,33409:65345,33410:65346,33411:65347,33412:65348,33413:65349,33414:65350,33415:65351,33416:65352,33417:65353,33418:65354,33419:65355,33420:65356,33421:65357,33422:65358,33423:65359,33424:65360,33425:65361,33426:65362,33427:65363,33428:65364,33429:65365,33430:65366,33431:65367,33432:65368,33433:65369,33434:65370,33439:12353,33440:12354,33441:12355,33442:12356,33443:12357,33444:12358,33445:12359,33446:12360,33447:12361,33448:12362,33449:12363,33450:12364,33451:12365,33452:12366,33453:12367,33454:12368,33455:12369,33456:12370,33457:12371,33458:12372,33459:12373,33460:12374,33461:12375,33462:12376,33463:12377,33464:12378,33465:12379,33466:12380,33467:12381,33468:12382,33469:12383,33470:12384,33471:12385,33472:12386,33473:12387,33474:12388,33475:12389,33476:12390,33477:12391,33478:12392,33479:12393,33480:12394,33481:12395,33482:12396,33483:12397,33484:12398,33485:12399,33486:12400,33487:12401,33488:12402,33489:12403,33490:12404,33491:12405,33492:12406,33493:12407,33494:12408,33495:12409,33496:12410,33497:12411,33498:12412,33499:12413,33500:12414,33501:12415,33502:12416,33503:12417,33504:12418,33505:12419,33506:12420,33507:12421,33508:12422,33509:12423,33510:12424,33511:12425,33512:12426,33513:12427,33514:12428,33515:12429,33516:12430,33517:12431,33518:12432,33519:12433,33520:12434,33521:12435,33600:12449,33601:12450,33602:12451,33603:12452,33604:12453,33605:12454,33606:12455,33607:12456,33608:12457,33609:12458,33610:12459,33611:12460,33612:12461,33613:12462,33614:12463,33615:12464,33616:12465,33617:12466,33618:12467,33619:12468,33620:12469,33621:12470,33622:12471,33623:12472,33624:12473,33625:12474,33626:12475,33627:12476,33628:12477,33629:12478,33630:12479,33631:12480,33632:12481,33633:12482,33634:12483,33635:12484,33636:12485,33637:12486,33638:12487,33639:12488,33640:12489,33641:12490,33642:12491,33643:12492,33644:12493,33645:12494,33646:12495,33647:12496,33648:12497,33649:12498,33650:12499,33651:12500,33652:12501,33653:12502,33654:12503,33655:12504,33656:12505,33657:12506,33658:12507,33659:12508,33660:12509,33661:12510,33662:12511,33664:12512,33665:12513,33666:12514,33667:12515,33668:12516,33669:12517,33670:12518,33671:12519,33672:12520,33673:12521,33674:12522,33675:12523,33676:12524,33677:12525,33678:12526,33679:12527,33680:12528,33681:12529,33682:12530,33683:12531,33684:12532,33685:12533,33686:12534,33695:913,33696:914,33697:915,33698:916,33699:917,33700:918,33701:919,33702:920,33703:921,33704:922,33705:923,33706:924,33707:925,33708:926,33709:927,33710:928,33711:929,33712:931,33713:932,33714:933,33715:934,33716:935,33717:936,33718:937,33727:945,33728:946,33729:947,33730:948,33731:949,33732:950,33733:951,33734:952,33735:953,33736:954,33737:955,33738:956,33739:957,33740:958,33741:959,33742:960,33743:961,33744:963,33745:964,33746:965,33747:966,33748:967,33749:968,33750:969,33856:1040,33857:1041,33858:1042,33859:1043,33860:1044,33861:1045,33862:1025,33863:1046,33864:1047,33865:1048,33866:1049,33867:1050,33868:1051,33869:1052,33870:1053,33871:1054,33872:1055,33873:1056,33874:1057,33875:1058,33876:1059,33877:1060,33878:1061,33879:1062,33880:1063,33881:1064,33882:1065,33883:1066,33884:1067,33885:1068,33886:1069,33887:1070,33888:1071,33904:1072,33905:1073,33906:1074,33907:1075,33908:1076,33909:1077,33910:1105,33911:1078,33912:1079,33913:1080,33914:1081,33915:1082,33916:1083,33917:1084,33918:1085,33920:1086,33921:1087,33922:1088,33923:1089,33924:1090,33925:1091,33926:1092,33927:1093,33928:1094,33929:1095,33930:1096,33931:1097,33932:1098,33933:1099,33934:1100,33935:1101,33936:1102,33937:1103,33951:9472,33952:9474,33953:9484,33954:9488,33955:9496,33956:9492,33957:9500,33958:9516,33959:9508,33960:9524,33961:9532,33962:9473,33963:9475,33964:9487,33965:9491,33966:9499,33967:9495,33968:9507,33969:9523,33970:9515,33971:9531,33972:9547,33973:9504,33974:9519,33975:9512,33976:9527,33977:9535,33978:9501,33979:9520,33980:9509,33981:9528,33982:9538,34975:20124,34976:21782,34977:23043,34978:38463,34979:21696,34980:24859,34981:25384,34982:23030,34983:36898,34984:33909,34985:33564,34986:31312,34987:24746,34988:25569,34989:28197,34990:26093,34991:33894,34992:33446,34993:39925,34994:26771,34995:22311,34996:26017,34997:25201,34998:23451,34999:22992,35e3:34427,35001:39156,35002:32098,35003:32190,35004:39822,35005:25110,35006:31903,35007:34999,35008:23433,35009:24245,35010:25353,35011:26263,35012:26696,35013:38343,35014:38797,35015:26447,35016:20197,35017:20234,35018:20301,35019:20381,35020:20553,35021:22258,35022:22839,35023:22996,35024:23041,35025:23561,35026:24799,35027:24847,35028:24944,35029:26131,35030:26885,35031:28858,35032:30031,35033:30064,35034:31227,35035:32173,35036:32239,35037:32963,35038:33806,35039:34915,35040:35586,35041:36949,35042:36986,35043:21307,35044:20117,35045:20133,35046:22495,35047:32946,35048:37057,35049:30959,35050:19968,35051:22769,35052:28322,35053:36920,35054:31282,35055:33576,35056:33419,35057:39983,35058:20801,35059:21360,35060:21693,35061:21729,35062:22240,35063:23035,35064:24341,35065:39154,35066:28139,35067:32996,35068:34093,35136:38498,35137:38512,35138:38560,35139:38907,35140:21515,35141:21491,35142:23431,35143:28879,35144:32701,35145:36802,35146:38632,35147:21359,35148:40284,35149:31418,35150:19985,35151:30867,35152:33276,35153:28198,35154:22040,35155:21764,35156:27421,35157:34074,35158:39995,35159:23013,35160:21417,35161:28006,35162:29916,35163:38287,35164:22082,35165:20113,35166:36939,35167:38642,35168:33615,35169:39180,35170:21473,35171:21942,35172:23344,35173:24433,35174:26144,35175:26355,35176:26628,35177:27704,35178:27891,35179:27945,35180:29787,35181:30408,35182:31310,35183:38964,35184:33521,35185:34907,35186:35424,35187:37613,35188:28082,35189:30123,35190:30410,35191:39365,35192:24742,35193:35585,35194:36234,35195:38322,35196:27022,35197:21421,35198:20870,35200:22290,35201:22576,35202:22852,35203:23476,35204:24310,35205:24616,35206:25513,35207:25588,35208:27839,35209:28436,35210:28814,35211:28948,35212:29017,35213:29141,35214:29503,35215:32257,35216:33398,35217:33489,35218:34199,35219:36960,35220:37467,35221:40219,35222:22633,35223:26044,35224:27738,35225:29989,35226:20985,35227:22830,35228:22885,35229:24448,35230:24540,35231:25276,35232:26106,35233:27178,35234:27431,35235:27572,35236:29579,35237:32705,35238:35158,35239:40236,35240:40206,35241:40644,35242:23713,35243:27798,35244:33659,35245:20740,35246:23627,35247:25014,35248:33222,35249:26742,35250:29281,35251:20057,35252:20474,35253:21368,35254:24681,35255:28201,35256:31311,35257:38899,35258:19979,35259:21270,35260:20206,35261:20309,35262:20285,35263:20385,35264:20339,35265:21152,35266:21487,35267:22025,35268:22799,35269:23233,35270:23478,35271:23521,35272:31185,35273:26247,35274:26524,35275:26550,35276:27468,35277:27827,35278:28779,35279:29634,35280:31117,35281:31166,35282:31292,35283:31623,35284:33457,35285:33499,35286:33540,35287:33655,35288:33775,35289:33747,35290:34662,35291:35506,35292:22057,35293:36008,35294:36838,35295:36942,35296:38686,35297:34442,35298:20420,35299:23784,35300:25105,35301:29273,35302:30011,35303:33253,35304:33469,35305:34558,35306:36032,35307:38597,35308:39187,35309:39381,35310:20171,35311:20250,35312:35299,35313:22238,35314:22602,35315:22730,35316:24315,35317:24555,35318:24618,35319:24724,35320:24674,35321:25040,35322:25106,35323:25296,35324:25913,35392:39745,35393:26214,35394:26800,35395:28023,35396:28784,35397:30028,35398:30342,35399:32117,35400:33445,35401:34809,35402:38283,35403:38542,35404:35997,35405:20977,35406:21182,35407:22806,35408:21683,35409:23475,35410:23830,35411:24936,35412:27010,35413:28079,35414:30861,35415:33995,35416:34903,35417:35442,35418:37799,35419:39608,35420:28012,35421:39336,35422:34521,35423:22435,35424:26623,35425:34510,35426:37390,35427:21123,35428:22151,35429:21508,35430:24275,35431:25313,35432:25785,35433:26684,35434:26680,35435:27579,35436:29554,35437:30906,35438:31339,35439:35226,35440:35282,35441:36203,35442:36611,35443:37101,35444:38307,35445:38548,35446:38761,35447:23398,35448:23731,35449:27005,35450:38989,35451:38990,35452:25499,35453:31520,35454:27179,35456:27263,35457:26806,35458:39949,35459:28511,35460:21106,35461:21917,35462:24688,35463:25324,35464:27963,35465:28167,35466:28369,35467:33883,35468:35088,35469:36676,35470:19988,35471:39993,35472:21494,35473:26907,35474:27194,35475:38788,35476:26666,35477:20828,35478:31427,35479:33970,35480:37340,35481:37772,35482:22107,35483:40232,35484:26658,35485:33541,35486:33841,35487:31909,35488:21e3,35489:33477,35490:29926,35491:20094,35492:20355,35493:20896,35494:23506,35495:21002,35496:21208,35497:21223,35498:24059,35499:21914,35500:22570,35501:23014,35502:23436,35503:23448,35504:23515,35505:24178,35506:24185,35507:24739,35508:24863,35509:24931,35510:25022,35511:25563,35512:25954,35513:26577,35514:26707,35515:26874,35516:27454,35517:27475,35518:27735,35519:28450,35520:28567,35521:28485,35522:29872,35523:29976,35524:30435,35525:30475,35526:31487,35527:31649,35528:31777,35529:32233,35530:32566,35531:32752,35532:32925,35533:33382,35534:33694,35535:35251,35536:35532,35537:36011,35538:36996,35539:37969,35540:38291,35541:38289,35542:38306,35543:38501,35544:38867,35545:39208,35546:33304,35547:20024,35548:21547,35549:23736,35550:24012,35551:29609,35552:30284,35553:30524,35554:23721,35555:32747,35556:36107,35557:38593,35558:38929,35559:38996,35560:39e3,35561:20225,35562:20238,35563:21361,35564:21916,35565:22120,35566:22522,35567:22855,35568:23305,35569:23492,35570:23696,35571:24076,35572:24190,35573:24524,35574:25582,35575:26426,35576:26071,35577:26082,35578:26399,35579:26827,35580:26820,35648:27231,35649:24112,35650:27589,35651:27671,35652:27773,35653:30079,35654:31048,35655:23395,35656:31232,35657:32e3,35658:24509,35659:35215,35660:35352,35661:36020,35662:36215,35663:36556,35664:36637,35665:39138,35666:39438,35667:39740,35668:20096,35669:20605,35670:20736,35671:22931,35672:23452,35673:25135,35674:25216,35675:25836,35676:27450,35677:29344,35678:30097,35679:31047,35680:32681,35681:34811,35682:35516,35683:35696,35684:25516,35685:33738,35686:38816,35687:21513,35688:21507,35689:21931,35690:26708,35691:27224,35692:35440,35693:30759,35694:26485,35695:40653,35696:21364,35697:23458,35698:33050,35699:34384,35700:36870,35701:19992,35702:20037,35703:20167,35704:20241,35705:21450,35706:21560,35707:23470,35708:24339,35709:24613,35710:25937,35712:26429,35713:27714,35714:27762,35715:27875,35716:28792,35717:29699,35718:31350,35719:31406,35720:31496,35721:32026,35722:31998,35723:32102,35724:26087,35725:29275,35726:21435,35727:23621,35728:24040,35729:25298,35730:25312,35731:25369,35732:28192,35733:34394,35734:35377,35735:36317,35736:37624,35737:28417,35738:31142,35739:39770,35740:20136,35741:20139,35742:20140,35743:20379,35744:20384,35745:20689,35746:20807,35747:31478,35748:20849,35749:20982,35750:21332,35751:21281,35752:21375,35753:21483,35754:21932,35755:22659,35756:23777,35757:24375,35758:24394,35759:24623,35760:24656,35761:24685,35762:25375,35763:25945,35764:27211,35765:27841,35766:29378,35767:29421,35768:30703,35769:33016,35770:33029,35771:33288,35772:34126,35773:37111,35774:37857,35775:38911,35776:39255,35777:39514,35778:20208,35779:20957,35780:23597,35781:26241,35782:26989,35783:23616,35784:26354,35785:26997,35786:29577,35787:26704,35788:31873,35789:20677,35790:21220,35791:22343,35792:24062,35793:37670,35794:26020,35795:27427,35796:27453,35797:29748,35798:31105,35799:31165,35800:31563,35801:32202,35802:33465,35803:33740,35804:34943,35805:35167,35806:35641,35807:36817,35808:37329,35809:21535,35810:37504,35811:20061,35812:20534,35813:21477,35814:21306,35815:29399,35816:29590,35817:30697,35818:33510,35819:36527,35820:39366,35821:39368,35822:39378,35823:20855,35824:24858,35825:34398,35826:21936,35827:31354,35828:20598,35829:23507,35830:36935,35831:38533,35832:20018,35833:27355,35834:37351,35835:23633,35836:23624,35904:25496,35905:31391,35906:27795,35907:38772,35908:36705,35909:31402,35910:29066,35911:38536,35912:31874,35913:26647,35914:32368,35915:26705,35916:37740,35917:21234,35918:21531,35919:34219,35920:35347,35921:32676,35922:36557,35923:37089,35924:21350,35925:34952,35926:31041,35927:20418,35928:20670,35929:21009,35930:20804,35931:21843,35932:22317,35933:29674,35934:22411,35935:22865,35936:24418,35937:24452,35938:24693,35939:24950,35940:24935,35941:25001,35942:25522,35943:25658,35944:25964,35945:26223,35946:26690,35947:28179,35948:30054,35949:31293,35950:31995,35951:32076,35952:32153,35953:32331,35954:32619,35955:33550,35956:33610,35957:34509,35958:35336,35959:35427,35960:35686,35961:36605,35962:38938,35963:40335,35964:33464,35965:36814,35966:39912,35968:21127,35969:25119,35970:25731,35971:28608,35972:38553,35973:26689,35974:20625,35975:27424,35976:27770,35977:28500,35978:31348,35979:32080,35980:34880,35981:35363,35982:26376,35983:20214,35984:20537,35985:20518,35986:20581,35987:20860,35988:21048,35989:21091,35990:21927,35991:22287,35992:22533,35993:23244,35994:24314,35995:25010,35996:25080,35997:25331,35998:25458,35999:26908,36e3:27177,36001:29309,36002:29356,36003:29486,36004:30740,36005:30831,36006:32121,36007:30476,36008:32937,36009:35211,36010:35609,36011:36066,\\n36012:36562,36013:36963,36014:37749,36015:38522,36016:38997,36017:39443,36018:40568,36019:20803,36020:21407,36021:21427,36022:24187,36023:24358,36024:28187,36025:28304,36026:29572,36027:29694,36028:32067,36029:33335,36030:35328,36031:35578,36032:38480,36033:20046,36034:20491,36035:21476,36036:21628,36037:22266,36038:22993,36039:23396,36040:24049,36041:24235,36042:24359,36043:25144,36044:25925,36045:26543,36046:28246,36047:29392,36048:31946,36049:34996,36050:32929,36051:32993,36052:33776,36053:34382,36054:35463,36055:36328,36056:37431,36057:38599,36058:39015,36059:40723,36060:20116,36061:20114,36062:20237,36063:21320,36064:21577,36065:21566,36066:23087,36067:24460,36068:24481,36069:24735,36070:26791,36071:27278,36072:29786,36073:30849,36074:35486,36075:35492,36076:35703,36077:37264,36078:20062,36079:39881,36080:20132,36081:20348,36082:20399,36083:20505,36084:20502,36085:20809,36086:20844,36087:21151,36088:21177,36089:21246,36090:21402,36091:21475,36092:21521,36160:21518,36161:21897,36162:22353,36163:22434,36164:22909,36165:23380,36166:23389,36167:23439,36168:24037,36169:24039,36170:24055,36171:24184,36172:24195,36173:24218,36174:24247,36175:24344,36176:24658,36177:24908,36178:25239,36179:25304,36180:25511,36181:25915,36182:26114,36183:26179,36184:26356,36185:26477,36186:26657,36187:26775,36188:27083,36189:27743,36190:27946,36191:28009,36192:28207,36193:28317,36194:30002,36195:30343,36196:30828,36197:31295,36198:31968,36199:32005,36200:32024,36201:32094,36202:32177,36203:32789,36204:32771,36205:32943,36206:32945,36207:33108,36208:33167,36209:33322,36210:33618,36211:34892,36212:34913,36213:35611,36214:36002,36215:36092,36216:37066,36217:37237,36218:37489,36219:30783,36220:37628,36221:38308,36222:38477,36224:38917,36225:39321,36226:39640,36227:40251,36228:21083,36229:21163,36230:21495,36231:21512,36232:22741,36233:25335,36234:28640,36235:35946,36236:36703,36237:40633,36238:20811,36239:21051,36240:21578,36241:22269,36242:31296,36243:37239,36244:40288,36245:40658,36246:29508,36247:28425,36248:33136,36249:29969,36250:24573,36251:24794,36252:39592,36253:29403,36254:36796,36255:27492,36256:38915,36257:20170,36258:22256,36259:22372,36260:22718,36261:23130,36262:24680,36263:25031,36264:26127,36265:26118,36266:26681,36267:26801,36268:28151,36269:30165,36270:32058,36271:33390,36272:39746,36273:20123,36274:20304,36275:21449,36276:21766,36277:23919,36278:24038,36279:24046,36280:26619,36281:27801,36282:29811,36283:30722,36284:35408,36285:37782,36286:35039,36287:22352,36288:24231,36289:25387,36290:20661,36291:20652,36292:20877,36293:26368,36294:21705,36295:22622,36296:22971,36297:23472,36298:24425,36299:25165,36300:25505,36301:26685,36302:27507,36303:28168,36304:28797,36305:37319,36306:29312,36307:30741,36308:30758,36309:31085,36310:25998,36311:32048,36312:33756,36313:35009,36314:36617,36315:38555,36316:21092,36317:22312,36318:26448,36319:32618,36320:36001,36321:20916,36322:22338,36323:38442,36324:22586,36325:27018,36326:32948,36327:21682,36328:23822,36329:22524,36330:30869,36331:40442,36332:20316,36333:21066,36334:21643,36335:25662,36336:26152,36337:26388,36338:26613,36339:31364,36340:31574,36341:32034,36342:37679,36343:26716,36344:39853,36345:31545,36346:21273,36347:20874,36348:21047,36416:23519,36417:25334,36418:25774,36419:25830,36420:26413,36421:27578,36422:34217,36423:38609,36424:30352,36425:39894,36426:25420,36427:37638,36428:39851,36429:30399,36430:26194,36431:19977,36432:20632,36433:21442,36434:23665,36435:24808,36436:25746,36437:25955,36438:26719,36439:29158,36440:29642,36441:29987,36442:31639,36443:32386,36444:34453,36445:35715,36446:36059,36447:37240,36448:39184,36449:26028,36450:26283,36451:27531,36452:20181,36453:20180,36454:20282,36455:20351,36456:21050,36457:21496,36458:21490,36459:21987,36460:22235,36461:22763,36462:22987,36463:22985,36464:23039,36465:23376,36466:23629,36467:24066,36468:24107,36469:24535,36470:24605,36471:25351,36472:25903,36473:23388,36474:26031,36475:26045,36476:26088,36477:26525,36478:27490,36480:27515,36481:27663,36482:29509,36483:31049,36484:31169,36485:31992,36486:32025,36487:32043,36488:32930,36489:33026,36490:33267,36491:35222,36492:35422,36493:35433,36494:35430,36495:35468,36496:35566,36497:36039,36498:36060,36499:38604,36500:39164,36501:27503,36502:20107,36503:20284,36504:20365,36505:20816,36506:23383,36507:23546,36508:24904,36509:25345,36510:26178,36511:27425,36512:28363,36513:27835,36514:29246,36515:29885,36516:30164,36517:30913,36518:31034,36519:32780,36520:32819,36521:33258,36522:33940,36523:36766,36524:27728,36525:40575,36526:24335,36527:35672,36528:40235,36529:31482,36530:36600,36531:23437,36532:38635,36533:19971,36534:21489,36535:22519,36536:22833,36537:23241,36538:23460,36539:24713,36540:28287,36541:28422,36542:30142,36543:36074,36544:23455,36545:34048,36546:31712,36547:20594,36548:26612,36549:33437,36550:23649,36551:34122,36552:32286,36553:33294,36554:20889,36555:23556,36556:25448,36557:36198,36558:26012,36559:29038,36560:31038,36561:32023,36562:32773,36563:35613,36564:36554,36565:36974,36566:34503,36567:37034,36568:20511,36569:21242,36570:23610,36571:26451,36572:28796,36573:29237,36574:37196,36575:37320,36576:37675,36577:33509,36578:23490,36579:24369,36580:24825,36581:20027,36582:21462,36583:23432,36584:25163,36585:26417,36586:27530,36587:29417,36588:29664,36589:31278,36590:33131,36591:36259,36592:37202,36593:39318,36594:20754,36595:21463,36596:21610,36597:23551,36598:25480,36599:27193,36600:32172,36601:38656,36602:22234,36603:21454,36604:21608,36672:23447,36673:23601,36674:24030,36675:20462,36676:24833,36677:25342,36678:27954,36679:31168,36680:31179,36681:32066,36682:32333,36683:32722,36684:33261,36685:33311,36686:33936,36687:34886,36688:35186,36689:35728,36690:36468,36691:36655,36692:36913,36693:37195,36694:37228,36695:38598,36696:37276,36697:20160,36698:20303,36699:20805,36700:21313,36701:24467,36702:25102,36703:26580,36704:27713,36705:28171,36706:29539,36707:32294,36708:37325,36709:37507,36710:21460,36711:22809,36712:23487,36713:28113,36714:31069,36715:32302,36716:31899,36717:22654,36718:29087,36719:20986,36720:34899,36721:36848,36722:20426,36723:23803,36724:26149,36725:30636,36726:31459,36727:33308,36728:39423,36729:20934,36730:24490,36731:26092,36732:26991,36733:27529,36734:28147,36736:28310,36737:28516,36738:30462,36739:32020,36740:24033,36741:36981,36742:37255,36743:38918,36744:20966,36745:21021,36746:25152,36747:26257,36748:26329,36749:28186,36750:24246,36751:32210,36752:32626,36753:26360,36754:34223,36755:34295,36756:35576,36757:21161,36758:21465,36759:22899,36760:24207,36761:24464,36762:24661,36763:37604,36764:38500,36765:20663,36766:20767,36767:21213,36768:21280,36769:21319,36770:21484,36771:21736,36772:21830,36773:21809,36774:22039,36775:22888,36776:22974,36777:23100,36778:23477,36779:23558,36780:23567,36781:23569,36782:23578,36783:24196,36784:24202,36785:24288,36786:24432,36787:25215,36788:25220,36789:25307,36790:25484,36791:25463,36792:26119,36793:26124,36794:26157,36795:26230,36796:26494,36797:26786,36798:27167,36799:27189,36800:27836,36801:28040,36802:28169,36803:28248,36804:28988,36805:28966,36806:29031,36807:30151,36808:30465,36809:30813,36810:30977,36811:31077,36812:31216,36813:31456,36814:31505,36815:31911,36816:32057,36817:32918,36818:33750,36819:33931,36820:34121,36821:34909,36822:35059,36823:35359,36824:35388,36825:35412,36826:35443,36827:35937,36828:36062,36829:37284,36830:37478,36831:37758,36832:37912,36833:38556,36834:38808,36835:19978,36836:19976,36837:19998,36838:20055,36839:20887,36840:21104,36841:22478,36842:22580,36843:22732,36844:23330,36845:24120,36846:24773,36847:25854,36848:26465,36849:26454,36850:27972,36851:29366,36852:30067,36853:31331,36854:33976,36855:35698,36856:37304,36857:37664,36858:22065,36859:22516,36860:39166,36928:25325,36929:26893,36930:27542,36931:29165,36932:32340,36933:32887,36934:33394,36935:35302,36936:39135,36937:34645,36938:36785,36939:23611,36940:20280,36941:20449,36942:20405,36943:21767,36944:23072,36945:23517,36946:23529,36947:24515,36948:24910,36949:25391,36950:26032,36951:26187,36952:26862,36953:27035,36954:28024,36955:28145,36956:30003,36957:30137,36958:30495,36959:31070,36960:31206,36961:32051,36962:33251,36963:33455,36964:34218,36965:35242,36966:35386,36967:36523,36968:36763,36969:36914,36970:37341,36971:38663,36972:20154,36973:20161,36974:20995,36975:22645,36976:22764,36977:23563,36978:29978,36979:23613,36980:33102,36981:35338,36982:36805,36983:38499,36984:38765,36985:31525,36986:35535,36987:38920,36988:37218,36989:22259,36990:21416,36992:36887,36993:21561,36994:22402,36995:24101,36996:25512,36997:27700,36998:28810,36999:30561,37e3:31883,37001:32736,37002:34928,37003:36930,37004:37204,37005:37648,37006:37656,37007:38543,37008:29790,37009:39620,37010:23815,37011:23913,37012:25968,37013:26530,37014:36264,37015:38619,37016:25454,37017:26441,37018:26905,37019:33733,37020:38935,37021:38592,37022:35070,37023:28548,37024:25722,37025:23544,37026:19990,37027:28716,37028:30045,37029:26159,37030:20932,37031:21046,37032:21218,37033:22995,37034:24449,37035:24615,37036:25104,37037:25919,37038:25972,37039:26143,37040:26228,37041:26866,37042:26646,37043:27491,37044:28165,37045:29298,37046:29983,37047:30427,37048:31934,37049:32854,37050:22768,37051:35069,37052:35199,37053:35488,37054:35475,37055:35531,37056:36893,37057:37266,37058:38738,37059:38745,37060:25993,37061:31246,37062:33030,37063:38587,37064:24109,37065:24796,37066:25114,37067:26021,37068:26132,37069:26512,37070:30707,37071:31309,37072:31821,37073:32318,37074:33034,37075:36012,37076:36196,37077:36321,37078:36447,37079:30889,37080:20999,37081:25305,37082:25509,37083:25666,37084:25240,37085:35373,37086:31363,37087:31680,37088:35500,37089:38634,37090:32118,37091:33292,37092:34633,37093:20185,37094:20808,37095:21315,37096:21344,37097:23459,37098:23554,37099:23574,37100:24029,37101:25126,37102:25159,37103:25776,37104:26643,37105:26676,37106:27849,37107:27973,37108:27927,37109:26579,37110:28508,37111:29006,37112:29053,37113:26059,37114:31359,37115:31661,37116:32218,37184:32330,37185:32680,37186:33146,37187:33307,37188:33337,37189:34214,37190:35438,37191:36046,37192:36341,37193:36984,37194:36983,37195:37549,37196:37521,37197:38275,37198:39854,37199:21069,37200:21892,37201:28472,37202:28982,37203:20840,37204:31109,37205:32341,37206:33203,37207:31950,37208:22092,37209:22609,37210:23720,37211:25514,37212:26366,37213:26365,37214:26970,37215:29401,37216:30095,37217:30094,37218:30990,37219:31062,37220:31199,37221:31895,37222:32032,37223:32068,37224:34311,37225:35380,37226:38459,37227:36961,37228:40736,37229:20711,37230:21109,37231:21452,37232:21474,37233:20489,37234:21930,37235:22766,37236:22863,37237:29245,37238:23435,37239:23652,37240:21277,37241:24803,37242:24819,37243:25436,37244:25475,37245:25407,37246:25531,37248:25805,37249:26089,37250:26361,37251:24035,37252:27085,37253:27133,37254:28437,37255:29157,37256:20105,37257:30185,37258:30456,37259:31379,37260:31967,37261:32207,37262:32156,37263:32865,37264:33609,37265:33624,37266:33900,37267:33980,37268:34299,37269:35013,37270:36208,37271:36865,37272:36973,37273:37783,37274:38684,37275:39442,37276:20687,37277:22679,37278:24974,37279:33235,37280:34101,37281:36104,37282:36896,37283:20419,37284:20596,37285:21063,37286:21363,37287:24687,37288:25417,37289:26463,37290:28204,37291:36275,37292:36895,37293:20439,37294:23646,37295:36042,37296:26063,37297:32154,37298:21330,37299:34966,37300:20854,37301:25539,37302:23384,37303:23403,37304:23562,37305:25613,37306:26449,37307:36956,37308:20182,37309:22810,37310:22826,37311:27760,37312:35409,37313:21822,37314:22549,37315:22949,37316:24816,37317:25171,37318:26561,37319:33333,37320:26965,37321:38464,37322:39364,37323:39464,37324:20307,37325:22534,37326:23550,37327:32784,37328:23729,37329:24111,37330:24453,37331:24608,37332:24907,37333:25140,37334:26367,37335:27888,37336:28382,37337:32974,37338:33151,37339:33492,37340:34955,37341:36024,37342:36864,37343:36910,37344:38538,37345:40667,37346:39899,37347:20195,37348:21488,37349:22823,37350:31532,37351:37261,37352:38988,37353:40441,37354:28381,37355:28711,37356:21331,37357:21828,37358:23429,37359:25176,37360:25246,37361:25299,37362:27810,37363:28655,37364:29730,37365:35351,37366:37944,37367:28609,37368:35582,37369:33592,37370:20967,37371:34552,37372:21482,37440:21481,37441:20294,37442:36948,37443:36784,37444:22890,37445:33073,37446:24061,37447:31466,37448:36799,37449:26842,37450:35895,37451:29432,37452:40008,37453:27197,37454:35504,37455:20025,37456:21336,37457:22022,37458:22374,37459:25285,37460:25506,37461:26086,37462:27470,37463:28129,37464:28251,37465:28845,37466:30701,37467:31471,37468:31658,37469:32187,37470:32829,37471:32966,37472:34507,37473:35477,37474:37723,37475:22243,37476:22727,37477:24382,37478:26029,37479:26262,37480:27264,37481:27573,37482:30007,37483:35527,37484:20516,37485:30693,37486:22320,37487:24347,37488:24677,37489:26234,37490:27744,37491:30196,37492:31258,37493:32622,37494:33268,37495:34584,37496:36933,37497:39347,37498:31689,37499:30044,37500:31481,37501:31569,37502:33988,37504:36880,37505:31209,37506:31378,37507:33590,37508:23265,37509:30528,37510:20013,37511:20210,37512:23449,37513:24544,37514:25277,37515:26172,37516:26609,37517:27880,37518:34411,37519:34935,37520:35387,37521:37198,37522:37619,37523:39376,37524:27159,37525:28710,37526:29482,37527:33511,37528:33879,37529:36015,37530:19969,37531:20806,37532:20939,37533:21899,37534:23541,37535:24086,37536:24115,37537:24193,37538:24340,37539:24373,37540:24427,37541:24500,37542:25074,37543:25361,37544:26274,37545:26397,37546:28526,37547:29266,37548:30010,37549:30522,37550:32884,37551:33081,37552:33144,37553:34678,37554:35519,37555:35548,37556:36229,37557:36339,37558:37530,37559:38263,37560:38914,37561:40165,37562:21189,37563:25431,37564:30452,37565:26389,37566:27784,37567:29645,37568:36035,37569:37806,37570:38515,37571:27941,37572:22684,37573:26894,37574:27084,37575:36861,37576:37786,37577:30171,37578:36890,37579:22618,37580:26626,37581:25524,37582:27131,37583:20291,37584:28460,37585:26584,37586:36795,37587:34086,37588:32180,37589:37716,37590:26943,37591:28528,37592:22378,37593:22775,37594:23340,37595:32044,37596:29226,37597:21514,37598:37347,37599:40372,37600:20141,37601:20302,37602:20572,37603:20597,37604:21059,37605:35998,37606:21576,37607:22564,37608:23450,37609:24093,37610:24213,37611:24237,37612:24311,37613:24351,37614:24716,37615:25269,37616:25402,37617:25552,37618:26799,37619:27712,37620:30855,37621:31118,37622:31243,37623:32224,37624:33351,37625:35330,37626:35558,37627:36420,37628:36883,37696:37048,37697:37165,37698:37336,37699:40718,37700:27877,37701:25688,37702:25826,37703:25973,37704:28404,37705:30340,37706:31515,37707:36969,37708:37841,37709:28346,37710:21746,37711:24505,37712:25764,37713:36685,37714:36845,37715:37444,37716:20856,37717:22635,37718:22825,37719:23637,37720:24215,37721:28155,37722:32399,37723:29980,37724:36028,37725:36578,37726:39003,37727:28857,37728:20253,37729:27583,37730:28593,37731:3e4,37732:38651,37733:20814,37734:21520,37735:22581,37736:22615,37737:22956,37738:23648,37739:24466,37740:26007,37741:26460,37742:28193,37743:30331,37744:33759,37745:36077,37746:36884,37747:37117,37748:37709,37749:30757,37750:30778,37751:21162,37752:24230,37753:22303,37754:22900,37755:24594,37756:20498,37757:20826,37758:20908,37760:20941,37761:20992,37762:21776,37763:22612,37764:22616,37765:22871,37766:23445,37767:23798,37768:23947,37769:24764,37770:25237,37771:25645,37772:26481,37773:26691,37774:26812,37775:26847,37776:30423,37777:28120,37778:28271,37779:28059,37780:28783,37781:29128,37782:24403,37783:30168,37784:31095,37785:31561,37786:31572,37787:31570,37788:31958,37789:32113,37790:21040,37791:33891,37792:34153,37793:34276,37794:35342,37795:35588,37796:35910,37797:36367,37798:36867,37799:36879,37800:37913,37801:38518,37802:38957,37803:39472,37804:38360,37805:20685,37806:21205,37807:21516,37808:22530,37809:23566,37810:24999,37811:25758,37812:27934,37813:30643,37814:31461,37815:33012,37816:33796,37817:36947,37818:37509,37819:23776,37820:40199,37821:21311,37822:24471,37823:24499,37824:28060,37825:29305,37826:30563,37827:31167,37828:31716,37829:27602,37830:29420,37831:35501,37832:26627,37833:27233,37834:20984,37835:31361,37836:26932,37837:23626,37838:40182,37839:33515,37840:23493,37841:37193,37842:28702,37843:22136,37844:23663,37845:24775,37846:25958,37847:27788,37848:35930,37849:36929,37850:38931,37851:21585,37852:26311,37853:37389,37854:22856,37855:37027,37856:20869,37857:20045,37858:20970,37859:34201,37860:35598,37861:28760,37862:25466,37863:37707,37864:26978,37865:39348,37866:32260,37867:30071,37868:21335,37869:26976,37870:36575,37871:38627,37872:27741,37873:20108,37874:23612,37875:24336,37876:36841,37877:21250,37878:36049,37879:32905,37880:34425,37881:24319,37882:26085,37883:20083,37884:20837,37952:22914,37953:23615,37954:38894,37955:20219,37956:22922,37957:24525,37958:35469,37959:28641,37960:31152,37961:31074,37962:23527,37963:33905,37964:29483,37965:29105,37966:24180,37967:24565,37968:25467,37969:25754,37970:29123,37971:31896,37972:20035,37973:24316,37974:20043,37975:22492,37976:22178,37977:24745,37978:28611,37979:32013,37980:33021,37981:33075,37982:33215,37983:36786,37984:35223,37985:34468,37986:24052,37987:25226,37988:25773,37989:35207,37990:26487,37991:27874,37992:27966,37993:29750,37994:30772,37995:23110,37996:32629,37997:33453,37998:39340,37999:20467,38e3:24259,38001:25309,38002:25490,38003:25943,38004:26479,38005:30403,38006:29260,38007:32972,38008:32954,38009:36649,38010:37197,38011:20493,38012:22521,38013:23186,38014:26757,38016:26995,38017:29028,38018:29437,38019:36023,38020:22770,38021:36064,38022:38506,38023:36889,38024:34687,38025:31204,38026:30695,38027:33833,38028:20271,38029:21093,38030:21338,38031:25293,38032:26575,38033:27850,38034:30333,38035:31636,38036:31893,38037:33334,38038:34180,38039:36843,38040:26333,38041:28448,38042:29190,38043:32283,38044:33707,38045:39361,38046:40614,38047:20989,38048:31665,38049:30834,38050:31672,38051:32903,38052:31560,38053:27368,38054:24161,38055:32908,38056:30033,38057:30048,38058:20843,38059:37474,38060:28300,38061:30330,38062:37271,38063:39658,38064:20240,38065:32624,38066:25244,38067:31567,38068:38309,38069:40169,38070:22138,38071:22617,38072:34532,38073:38588,38074:20276,38075:21028,38076:21322,38077:21453,38078:21467,38079:24070,38080:25644,38081:26001,38082:26495,38083:27710,38084:27726,38085:29256,38086:29359,38087:29677,38088:30036,38089:32321,38090:33324,38091:34281,38092:36009,38093:31684,38094:37318,38095:29033,38096:38930,38097:39151,38098:25405,38099:26217,38100:30058,38101:30436,38102:30928,38103:34115,38104:34542,38105:21290,38106:21329,38107:21542,38108:22915,38109:24199,38110:24444,38111:24754,38112:25161,38113:25209,38114:25259,38115:26e3,38116:27604,38117:27852,38118:30130,38119:30382,38120:30865,38121:31192,38122:32203,38123:32631,38124:32933,38125:34987,38126:35513,38127:36027,38128:36991,38129:38750,38130:39131,38131:27147,38132:31800,38133:20633,38134:23614,38135:24494,38136:26503,38137:27608,38138:29749,38139:30473,38140:32654,38208:40763,38209:26570,38210:31255,38211:21305,38212:30091,38213:39661,38214:24422,38215:33181,38216:33777,38217:32920,38218:24380,38219:24517,38220:30050,38221:31558,38222:36924,38223:26727,38224:23019,38225:23195,38226:32016,38227:30334,38228:35628,38229:20469,38230:24426,38231:27161,38232:27703,38233:28418,38234:29922,38235:31080,38236:34920,38237:35413,38238:35961,38239:24287,38240:25551,38241:30149,38242:31186,38243:33495,38244:37672,38245:37618,38246:33948,38247:34541,38248:39981,38249:21697,38250:24428,38251:25996,38252:27996,38253:28693,38254:36007,38255:36051,38256:38971,38257:25935,38258:29942,38259:19981,38260:20184,38261:22496,38262:22827,38263:23142,38264:23500,38265:20904,38266:24067,38267:24220,38268:24598,38269:25206,38270:25975,38272:26023,38273:26222,38274:28014,38275:29238,38276:31526,38277:33104,38278:33178,38279:33433,38280:35676,38281:36e3,38282:36070,38283:36212,38284:38428,38285:38468,38286:20398,38287:25771,38288:27494,38289:33310,38290:33889,38291:34154,38292:37096,38293:23553,38294:26963,38295:39080,38296:33914,38297:34135,38298:20239,38299:21103,38300:24489,38301:24133,38302:26381,38303:31119,38304:33145,38305:35079,38306:35206,38307:28149,38308:24343,38309:25173,38310:27832,38311:20175,38312:29289,38313:39826,38314:20998,38315:21563,38316:22132,38317:22707,38318:24996,38319:25198,38320:28954,38321:22894,38322:31881,38323:31966,38324:32027,38325:38640,38326:25991,38327:32862,38328:19993,38329:20341,38330:20853,38331:22592,38332:24163,38333:24179,38334:24330,38335:26564,38336:20006,38337:34109,38338:38281,38339:38491,38340:31859,38341:38913,38342:20731,38343:22721,38344:30294,38345:30887,38346:21029,38347:30629,38348:34065,38349:31622,38350:20559,38351:22793,38352:29255,38353:31687,38354:32232,38355:36794,38356:36820,38357:36941,38358:20415,38359:21193,38360:23081,38361:24321,38362:38829,38363:20445,38364:33303,38365:37610,38366:22275,38367:25429,38368:27497,38369:29995,38370:35036,38371:36628,38372:31298,38373:21215,38374:22675,38375:24917,38376:25098,38377:26286,38378:27597,38379:31807,38380:33769,38381:20515,38382:20472,38383:21253,38384:21574,38385:22577,38386:22857,38387:23453,38388:23792,38389:23791,38390:23849,38391:24214,38392:25265,38393:25447,38394:25918,38395:26041,38396:26379,38464:27861,38465:27873,38466:28921,38467:30770,38468:32299,38469:32990,38470:33459,38471:33804,38472:34028,38473:34562,38474:35090,38475:35370,38476:35914,38477:37030,38478:37586,38479:39165,38480:40179,38481:40300,38482:20047,38483:20129,38484:20621,38485:21078,38486:22346,38487:22952,38488:24125,38489:24536,38490:24537,38491:25151,38492:26292,38493:26395,38494:26576,38495:26834,38496:20882,38497:32033,38498:32938,38499:33192,38500:35584,38501:35980,38502:36031,38503:37502,38504:38450,38505:21536,38506:38956,38507:21271,38508:20693,38509:21340,38510:22696,38511:25778,38512:26420,38513:29287,38514:30566,38515:31302,38516:37350,38517:21187,38518:27809,38519:27526,38520:22528,38521:24140,38522:22868,38523:26412,38524:32763,38525:20961,38526:30406,38528:25705,38529:30952,38530:39764,38531:40635,38532:22475,38533:22969,38534:26151,38535:26522,38536:27598,38537:21737,38538:27097,38539:24149,38540:33180,38541:26517,38542:39850,38543:26622,38544:40018,38545:26717,38546:20134,38547:20451,38548:21448,38549:25273,38550:26411,38551:27819,38552:36804,38553:20397,38554:32365,38555:40639,38556:19975,38557:24930,38558:28288,38559:28459,38560:34067,38561:21619,38562:26410,38563:39749,38564:24051,38565:31637,38566:23724,38567:23494,38568:34588,38569:28234,38570:34001,38571:31252,38572:33032,38573:22937,38574:31885,38575:27665,38576:30496,38577:21209,38578:22818,38579:28961,38580:29279,38581:30683,38582:38695,38583:40289,38584:26891,38585:23167,38586:23064,38587:20901,38588:21517,38589:21629,38590:26126,38591:30431,38592:36855,38593:37528,38594:40180,38595:23018,38596:29277,38597:28357,38598:20813,38599:26825,38600:32191,38601:32236,38602:38754,38603:40634,38604:25720,38605:27169,38606:33538,38607:22916,38608:23391,38609:27611,38610:29467,38611:30450,38612:32178,38613:32791,38614:33945,38615:20786,38616:26408,38617:40665,38618:30446,38619:26466,38620:21247,38621:39173,38622:23588,38623:25147,38624:31870,38625:36016,38626:21839,38627:24758,38628:32011,38629:38272,38630:21249,38631:20063,38632:20918,38633:22812,38634:29242,38635:32822,38636:37326,38637:24357,38638:30690,38639:21380,38640:24441,38641:32004,38642:34220,38643:35379,38644:36493,38645:38742,38646:26611,38647:34222,38648:37971,38649:24841,38650:24840,38651:27833,38652:30290,38720:35565,38721:36664,38722:21807,38723:20305,38724:20778,38725:21191,38726:21451,38727:23461,38728:24189,38729:24736,38730:24962,38731:25558,38732:26377,38733:26586,38734:28263,38735:28044,38736:29494,38737:29495,38738:30001,38739:31056,38740:35029,38741:35480,38742:36938,38743:37009,38744:37109,38745:38596,38746:34701,38747:22805,38748:20104,38749:20313,38750:19982,38751:35465,38752:36671,38753:38928,38754:20653,38755:24188,38756:22934,38757:23481,38758:24248,38759:25562,38760:25594,38761:25793,38762:26332,38763:26954,38764:27096,38765:27915,38766:28342,38767:29076,38768:29992,38769:31407,38770:32650,38771:32768,38772:33865,38773:33993,38774:35201,38775:35617,38776:36362,38777:36965,38778:38525,38779:39178,38780:24958,38781:25233,38782:27442,38784:27779,38785:28020,38786:32716,38787:32764,38788:28096,38789:32645,38790:34746,38791:35064,38792:26469,38793:33713,38794:38972,38795:38647,38796:27931,38797:32097,38798:33853,38799:37226,38800:20081,38801:21365,38802:23888,38803:27396,38804:28651,38805:34253,38806:34349,38807:35239,38808:21033,38809:21519,38810:23653,38811:26446,38812:26792,38813:29702,38814:29827,38815:30178,38816:35023,38817:35041,38818:37324,38819:38626,38820:38520,38821:24459,38822:29575,38823:31435,38824:33870,38825:25504,38826:30053,38827:21129,38828:27969,38829:28316,38830:29705,38831:30041,38832:30827,38833:31890,38834:38534,38835:31452,38836:40845,38837:20406,38838:24942,38839:26053,38840:34396,38841:20102,38842:20142,38843:20698,38844:20001,38845:20940,38846:23534,38847:26009,38848:26753,38849:28092,38850:29471,38851:30274,38852:30637,38853:31260,38854:31975,38855:33391,38856:35538,38857:36988,38858:37327,38859:38517,38860:38936,38861:21147,38862:32209,38863:20523,38864:21400,38865:26519,38866:28107,38867:29136,38868:29747,38869:33256,38870:36650,38871:38563,38872:40023,38873:40607,38874:29792,38875:22593,38876:28057,38877:32047,38878:39006,38879:20196,38880:20278,38881:20363,38882:20919,38883:21169,38884:23994,38885:24604,38886:29618,38887:31036,38888:33491,38889:37428,38890:38583,38891:38646,38892:38666,38893:40599,38894:40802,38895:26278,38896:27508,38897:21015,38898:21155,38899:28872,38900:35010,38901:24265,38902:24651,38903:24976,38904:28451,38905:29001,38906:31806,38907:32244,38908:32879,38976:34030,38977:36899,38978:37676,38979:21570,38980:39791,38981:27347,38982:28809,38983:36034,38984:36335,38985:38706,38986:21172,38987:23105,38988:24266,38989:24324,38990:26391,38991:27004,38992:27028,38993:28010,38994:28431,38995:29282,38996:29436,38997:31725,38998:32769,38999:32894,39e3:34635,39001:37070,39002:20845,39003:40595,39004:31108,39005:32907,39006:37682,39007:35542,39008:20525,39009:21644,39010:35441,39011:27498,39012:36036,39013:33031,39014:24785,39015:26528,39016:40434,39017:20121,39018:20120,39019:39952,39020:35435,39021:34241,39022:34152,39023:26880,39024:28286,39025:30871,39026:33109,39071:24332,39072:19984,39073:19989,39074:20010,39075:20017,39076:20022,39077:20028,39078:20031,39079:20034,39080:20054,39081:20056,39082:20098,39083:20101,39084:35947,39085:20106,39086:33298,39087:24333,39088:20110,39089:20126,39090:20127,39091:20128,39092:20130,39093:20144,39094:20147,39095:20150,39096:20174,39097:20173,39098:20164,39099:20166,39100:20162,39101:20183,39102:20190,39103:20205,39104:20191,39105:20215,39106:20233,39107:20314,39108:20272,39109:20315,39110:20317,39111:20311,39112:20295,39113:20342,39114:20360,39115:20367,39116:20376,39117:20347,39118:20329,39119:20336,39120:20369,39121:20335,39122:20358,39123:20374,39124:20760,39125:20436,39126:20447,39127:20430,39128:20440,39129:20443,39130:20433,39131:20442,39132:20432,39133:20452,39134:20453,39135:20506,39136:20520,39137:20500,39138:20522,39139:20517,39140:20485,39141:20252,39142:20470,39143:20513,39144:20521,39145:20524,39146:20478,39147:20463,39148:20497,39149:20486,39150:20547,39151:20551,39152:26371,39153:20565,39154:20560,39155:20552,39156:20570,39157:20566,39158:20588,39159:20600,39160:20608,39161:20634,39162:20613,39163:20660,39164:20658,39232:20681,39233:20682,39234:20659,39235:20674,39236:20694,39237:20702,39238:20709,39239:20717,39240:20707,39241:20718,39242:20729,39243:20725,39244:20745,39245:20737,39246:20738,39247:20758,39248:20757,39249:20756,39250:20762,39251:20769,39252:20794,39253:20791,39254:20796,39255:20795,39256:20799,39257:20800,39258:20818,39259:20812,39260:20820,39261:20834,39262:31480,39263:20841,39264:20842,39265:20846,39266:20864,39267:20866,39268:22232,39269:20876,39270:20873,39271:20879,39272:20881,39273:20883,39274:20885,39275:20886,39276:20900,39277:20902,39278:20898,39279:20905,39280:20906,39281:20907,39282:20915,39283:20913,39284:20914,39285:20912,39286:20917,39287:20925,39288:20933,39289:20937,39290:20955,39291:20960,39292:34389,39293:20969,39294:20973,39296:20976,39297:20981,39298:20990,39299:20996,39300:21003,39301:21012,39302:21006,39303:21031,39304:21034,39305:21038,39306:21043,39307:21049,39308:21071,39309:21060,39310:21067,39311:21068,39312:21086,39313:21076,39314:21098,39315:21108,39316:21097,39317:21107,39318:21119,39319:21117,39320:21133,39321:21140,39322:21138,39323:21105,39324:21128,39325:21137,39326:36776,39327:36775,39328:21164,39329:21165,39330:21180,39331:21173,39332:21185,39333:21197,39334:21207,39335:21214,39336:21219,39337:21222,39338:39149,39339:21216,39340:21235,39341:21237,39342:21240,39343:21241,39344:21254,39345:21256,39346:30008,39347:21261,39348:21264,39349:21263,39350:21269,39351:21274,39352:21283,39353:21295,39354:21297,39355:21299,39356:21304,39357:21312,39358:21318,39359:21317,39360:19991,39361:21321,39362:21325,39363:20950,39364:21342,39365:21353,39366:21358,39367:22808,39368:21371,39369:21367,39370:21378,39371:21398,39372:21408,39373:21414,39374:21413,39375:21422,39376:21424,39377:21430,39378:21443,39379:31762,39380:38617,39381:21471,39382:26364,39383:29166,39384:21486,39385:21480,39386:21485,39387:21498,39388:21505,39389:21565,39390:21568,39391:21548,39392:21549,39393:21564,39394:21550,39395:21558,39396:21545,39397:21533,39398:21582,39399:21647,39400:21621,39401:21646,39402:21599,39403:21617,39404:21623,39405:21616,39406:21650,39407:21627,39408:21632,39409:21622,39410:21636,39411:21648,39412:21638,39413:21703,39414:21666,39415:21688,39416:21669,39417:21676,39418:21700,39419:21704,39420:21672,39488:21675,39489:21698,39490:21668,39491:21694,39492:21692,39493:21720,39494:21733,39495:21734,39496:21775,39497:21780,39498:21757,39499:21742,39500:21741,39501:21754,39502:21730,39503:21817,39504:21824,39505:21859,39506:21836,39507:21806,39508:21852,39509:21829,39510:21846,39511:21847,39512:21816,39513:21811,39514:21853,39515:21913,39516:21888,39517:21679,39518:21898,39519:21919,39520:21883,39521:21886,39522:21912,39523:21918,39524:21934,39525:21884,39526:21891,39527:21929,39528:21895,39529:21928,39530:21978,39531:21957,39532:21983,39533:21956,39534:21980,39535:21988,39536:21972,39537:22036,39538:22007,39539:22038,39540:22014,39541:22013,39542:22043,39543:22009,39544:22094,39545:22096,39546:29151,39547:22068,39548:22070,39549:22066,39550:22072,39552:22123,39553:22116,39554:22063,39555:22124,39556:22122,39557:22150,39558:22144,39559:22154,39560:22176,39561:22164,39562:22159,39563:22181,39564:22190,39565:22198,39566:22196,39567:22210,39568:22204,39569:22209,39570:22211,39571:22208,39572:22216,39573:22222,39574:22225,39575:22227,39576:22231,39577:22254,39578:22265,39579:22272,39580:22271,39581:22276,39582:22281,39583:22280,39584:22283,39585:22285,39586:22291,39587:22296,39588:22294,39589:21959,39590:22300,39591:22310,39592:22327,39593:22328,39594:22350,39595:22331,39596:22336,39597:22351,39598:22377,39599:22464,39600:22408,39601:22369,39602:22399,39603:22409,39604:22419,39605:22432,39606:22451,39607:22436,39608:22442,39609:22448,39610:22467,39611:22470,39612:22484,39613:22482,39614:22483,39615:22538,39616:22486,39617:22499,39618:22539,39619:22553,39620:22557,39621:22642,39622:22561,39623:22626,39624:22603,39625:22640,39626:27584,39627:22610,39628:22589,39629:22649,39630:22661,39631:22713,39632:22687,39633:22699,39634:22714,39635:22750,39636:22715,39637:22712,39638:22702,39639:22725,39640:22739,39641:22737,39642:22743,39643:22745,39644:22744,39645:22757,39646:22748,39647:22756,39648:22751,39649:22767,39650:22778,39651:22777,39652:22779,39653:22780,39654:22781,39655:22786,39656:22794,39657:22800,39658:22811,39659:26790,39660:22821,39661:22828,39662:22829,39663:22834,39664:22840,39665:22846,39666:31442,39667:22869,39668:22864,39669:22862,39670:22874,39671:22872,39672:22882,39673:22880,\\n39674:22887,39675:22892,39676:22889,39744:22904,39745:22913,39746:22941,39747:20318,39748:20395,39749:22947,39750:22962,39751:22982,39752:23016,39753:23004,39754:22925,39755:23001,39756:23002,39757:23077,39758:23071,39759:23057,39760:23068,39761:23049,39762:23066,39763:23104,39764:23148,39765:23113,39766:23093,39767:23094,39768:23138,39769:23146,39770:23194,39771:23228,39772:23230,39773:23243,39774:23234,39775:23229,39776:23267,39777:23255,39778:23270,39779:23273,39780:23254,39781:23290,39782:23291,39783:23308,39784:23307,39785:23318,39786:23346,39787:23248,39788:23338,39789:23350,39790:23358,39791:23363,39792:23365,39793:23360,39794:23377,39795:23381,39796:23386,39797:23387,39798:23397,39799:23401,39800:23408,39801:23411,39802:23413,39803:23416,39804:25992,39805:23418,39806:23424,39808:23427,39809:23462,39810:23480,39811:23491,39812:23495,39813:23497,39814:23508,39815:23504,39816:23524,39817:23526,39818:23522,39819:23518,39820:23525,39821:23531,39822:23536,39823:23542,39824:23539,39825:23557,39826:23559,39827:23560,39828:23565,39829:23571,39830:23584,39831:23586,39832:23592,39833:23608,39834:23609,39835:23617,39836:23622,39837:23630,39838:23635,39839:23632,39840:23631,39841:23409,39842:23660,39843:23662,39844:20066,39845:23670,39846:23673,39847:23692,39848:23697,39849:23700,39850:22939,39851:23723,39852:23739,39853:23734,39854:23740,39855:23735,39856:23749,39857:23742,39858:23751,39859:23769,39860:23785,39861:23805,39862:23802,39863:23789,39864:23948,39865:23786,39866:23819,39867:23829,39868:23831,39869:23900,39870:23839,39871:23835,39872:23825,39873:23828,39874:23842,39875:23834,39876:23833,39877:23832,39878:23884,39879:23890,39880:23886,39881:23883,39882:23916,39883:23923,39884:23926,39885:23943,39886:23940,39887:23938,39888:23970,39889:23965,39890:23980,39891:23982,39892:23997,39893:23952,39894:23991,39895:23996,39896:24009,39897:24013,39898:24019,39899:24018,39900:24022,39901:24027,39902:24043,39903:24050,39904:24053,39905:24075,39906:24090,39907:24089,39908:24081,39909:24091,39910:24118,39911:24119,39912:24132,39913:24131,39914:24128,39915:24142,39916:24151,39917:24148,39918:24159,39919:24162,39920:24164,39921:24135,39922:24181,39923:24182,39924:24186,39925:40636,39926:24191,39927:24224,39928:24257,39929:24258,39930:24264,39931:24272,39932:24271,4e4:24278,40001:24291,40002:24285,40003:24282,40004:24283,40005:24290,40006:24289,40007:24296,40008:24297,40009:24300,40010:24305,40011:24307,40012:24304,40013:24308,40014:24312,40015:24318,40016:24323,40017:24329,40018:24413,40019:24412,40020:24331,40021:24337,40022:24342,40023:24361,40024:24365,40025:24376,40026:24385,40027:24392,40028:24396,40029:24398,40030:24367,40031:24401,40032:24406,40033:24407,40034:24409,40035:24417,40036:24429,40037:24435,40038:24439,40039:24451,40040:24450,40041:24447,40042:24458,40043:24456,40044:24465,40045:24455,40046:24478,40047:24473,40048:24472,40049:24480,40050:24488,40051:24493,40052:24508,40053:24534,40054:24571,40055:24548,40056:24568,40057:24561,40058:24541,40059:24755,40060:24575,40061:24609,40062:24672,40064:24601,40065:24592,40066:24617,40067:24590,40068:24625,40069:24603,40070:24597,40071:24619,40072:24614,40073:24591,40074:24634,40075:24666,40076:24641,40077:24682,40078:24695,40079:24671,40080:24650,40081:24646,40082:24653,40083:24675,40084:24643,40085:24676,40086:24642,40087:24684,40088:24683,40089:24665,40090:24705,40091:24717,40092:24807,40093:24707,40094:24730,40095:24708,40096:24731,40097:24726,40098:24727,40099:24722,40100:24743,40101:24715,40102:24801,40103:24760,40104:24800,40105:24787,40106:24756,40107:24560,40108:24765,40109:24774,40110:24757,40111:24792,40112:24909,40113:24853,40114:24838,40115:24822,40116:24823,40117:24832,40118:24820,40119:24826,40120:24835,40121:24865,40122:24827,40123:24817,40124:24845,40125:24846,40126:24903,40127:24894,40128:24872,40129:24871,40130:24906,40131:24895,40132:24892,40133:24876,40134:24884,40135:24893,40136:24898,40137:24900,40138:24947,40139:24951,40140:24920,40141:24921,40142:24922,40143:24939,40144:24948,40145:24943,40146:24933,40147:24945,40148:24927,40149:24925,40150:24915,40151:24949,40152:24985,40153:24982,40154:24967,40155:25004,40156:24980,40157:24986,40158:24970,40159:24977,40160:25003,40161:25006,40162:25036,40163:25034,40164:25033,40165:25079,40166:25032,40167:25027,40168:25030,40169:25018,40170:25035,40171:32633,40172:25037,40173:25062,40174:25059,40175:25078,40176:25082,40177:25076,40178:25087,40179:25085,40180:25084,40181:25086,40182:25088,40183:25096,40184:25097,40185:25101,40186:25100,40187:25108,40188:25115,40256:25118,40257:25121,40258:25130,40259:25134,40260:25136,40261:25138,40262:25139,40263:25153,40264:25166,40265:25182,40266:25187,40267:25179,40268:25184,40269:25192,40270:25212,40271:25218,40272:25225,40273:25214,40274:25234,40275:25235,40276:25238,40277:25300,40278:25219,40279:25236,40280:25303,40281:25297,40282:25275,40283:25295,40284:25343,40285:25286,40286:25812,40287:25288,40288:25308,40289:25292,40290:25290,40291:25282,40292:25287,40293:25243,40294:25289,40295:25356,40296:25326,40297:25329,40298:25383,40299:25346,40300:25352,40301:25327,40302:25333,40303:25424,40304:25406,40305:25421,40306:25628,40307:25423,40308:25494,40309:25486,40310:25472,40311:25515,40312:25462,40313:25507,40314:25487,40315:25481,40316:25503,40317:25525,40318:25451,40320:25449,40321:25534,40322:25577,40323:25536,40324:25542,40325:25571,40326:25545,40327:25554,40328:25590,40329:25540,40330:25622,40331:25652,40332:25606,40333:25619,40334:25638,40335:25654,40336:25885,40337:25623,40338:25640,40339:25615,40340:25703,40341:25711,40342:25718,40343:25678,40344:25898,40345:25749,40346:25747,40347:25765,40348:25769,40349:25736,40350:25788,40351:25818,40352:25810,40353:25797,40354:25799,40355:25787,40356:25816,40357:25794,40358:25841,40359:25831,40360:33289,40361:25824,40362:25825,40363:25260,40364:25827,40365:25839,40366:25900,40367:25846,40368:25844,40369:25842,40370:25850,40371:25856,40372:25853,40373:25880,40374:25884,40375:25861,40376:25892,40377:25891,40378:25899,40379:25908,40380:25909,40381:25911,40382:25910,40383:25912,40384:30027,40385:25928,40386:25942,40387:25941,40388:25933,40389:25944,40390:25950,40391:25949,40392:25970,40393:25976,40394:25986,40395:25987,40396:35722,40397:26011,40398:26015,40399:26027,40400:26039,40401:26051,40402:26054,40403:26049,40404:26052,40405:26060,40406:26066,40407:26075,40408:26073,40409:26080,40410:26081,40411:26097,40412:26482,40413:26122,40414:26115,40415:26107,40416:26483,40417:26165,40418:26166,40419:26164,40420:26140,40421:26191,40422:26180,40423:26185,40424:26177,40425:26206,40426:26205,40427:26212,40428:26215,40429:26216,40430:26207,40431:26210,40432:26224,40433:26243,40434:26248,40435:26254,40436:26249,40437:26244,40438:26264,40439:26269,40440:26305,40441:26297,40442:26313,40443:26302,40444:26300,40512:26308,40513:26296,40514:26326,40515:26330,40516:26336,40517:26175,40518:26342,40519:26345,40520:26352,40521:26357,40522:26359,40523:26383,40524:26390,40525:26398,40526:26406,40527:26407,40528:38712,40529:26414,40530:26431,40531:26422,40532:26433,40533:26424,40534:26423,40535:26438,40536:26462,40537:26464,40538:26457,40539:26467,40540:26468,40541:26505,40542:26480,40543:26537,40544:26492,40545:26474,40546:26508,40547:26507,40548:26534,40549:26529,40550:26501,40551:26551,40552:26607,40553:26548,40554:26604,40555:26547,40556:26601,40557:26552,40558:26596,40559:26590,40560:26589,40561:26594,40562:26606,40563:26553,40564:26574,40565:26566,40566:26599,40567:27292,40568:26654,40569:26694,40570:26665,40571:26688,40572:26701,40573:26674,40574:26702,40576:26803,40577:26667,40578:26713,40579:26723,40580:26743,40581:26751,40582:26783,40583:26767,40584:26797,40585:26772,40586:26781,40587:26779,40588:26755,40589:27310,40590:26809,40591:26740,40592:26805,40593:26784,40594:26810,40595:26895,40596:26765,40597:26750,40598:26881,40599:26826,40600:26888,40601:26840,40602:26914,40603:26918,40604:26849,40605:26892,40606:26829,40607:26836,40608:26855,40609:26837,40610:26934,40611:26898,40612:26884,40613:26839,40614:26851,40615:26917,40616:26873,40617:26848,40618:26863,40619:26920,40620:26922,40621:26906,40622:26915,40623:26913,40624:26822,40625:27001,40626:26999,40627:26972,40628:27e3,40629:26987,40630:26964,40631:27006,40632:26990,40633:26937,40634:26996,40635:26941,40636:26969,40637:26928,40638:26977,40639:26974,40640:26973,40641:27009,40642:26986,40643:27058,40644:27054,40645:27088,40646:27071,40647:27073,40648:27091,40649:27070,40650:27086,40651:23528,40652:27082,40653:27101,40654:27067,40655:27075,40656:27047,40657:27182,40658:27025,40659:27040,40660:27036,40661:27029,40662:27060,40663:27102,40664:27112,40665:27138,40666:27163,40667:27135,40668:27402,40669:27129,40670:27122,40671:27111,40672:27141,40673:27057,40674:27166,40675:27117,40676:27156,40677:27115,40678:27146,40679:27154,40680:27329,40681:27171,40682:27155,40683:27204,40684:27148,40685:27250,40686:27190,40687:27256,40688:27207,40689:27234,40690:27225,40691:27238,40692:27208,40693:27192,40694:27170,40695:27280,40696:27277,40697:27296,40698:27268,40699:27298,40700:27299,40768:27287,40769:34327,40770:27323,40771:27331,40772:27330,40773:27320,40774:27315,40775:27308,40776:27358,40777:27345,40778:27359,40779:27306,40780:27354,40781:27370,40782:27387,40783:27397,40784:34326,40785:27386,40786:27410,40787:27414,40788:39729,40789:27423,40790:27448,40791:27447,40792:30428,40793:27449,40794:39150,40795:27463,40796:27459,40797:27465,40798:27472,40799:27481,40800:27476,40801:27483,40802:27487,40803:27489,40804:27512,40805:27513,40806:27519,40807:27520,40808:27524,40809:27523,40810:27533,40811:27544,40812:27541,40813:27550,40814:27556,40815:27562,40816:27563,40817:27567,40818:27570,40819:27569,40820:27571,40821:27575,40822:27580,40823:27590,40824:27595,40825:27603,40826:27615,40827:27628,40828:27627,40829:27635,40830:27631,40832:40638,40833:27656,40834:27667,40835:27668,40836:27675,40837:27684,40838:27683,40839:27742,40840:27733,40841:27746,40842:27754,40843:27778,40844:27789,40845:27802,40846:27777,40847:27803,40848:27774,40849:27752,40850:27763,40851:27794,40852:27792,40853:27844,40854:27889,40855:27859,40856:27837,40857:27863,40858:27845,40859:27869,40860:27822,40861:27825,40862:27838,40863:27834,40864:27867,40865:27887,40866:27865,40867:27882,40868:27935,40869:34893,40870:27958,40871:27947,40872:27965,40873:27960,40874:27929,40875:27957,40876:27955,40877:27922,40878:27916,40879:28003,40880:28051,40881:28004,40882:27994,40883:28025,40884:27993,40885:28046,40886:28053,40887:28644,40888:28037,40889:28153,40890:28181,40891:28170,40892:28085,40893:28103,40894:28134,40895:28088,40896:28102,40897:28140,40898:28126,40899:28108,40900:28136,40901:28114,40902:28101,40903:28154,40904:28121,40905:28132,40906:28117,40907:28138,40908:28142,40909:28205,40910:28270,40911:28206,40912:28185,40913:28274,40914:28255,40915:28222,40916:28195,40917:28267,40918:28203,40919:28278,40920:28237,40921:28191,40922:28227,40923:28218,40924:28238,40925:28196,40926:28415,40927:28189,40928:28216,40929:28290,40930:28330,40931:28312,40932:28361,40933:28343,40934:28371,40935:28349,40936:28335,40937:28356,40938:28338,40939:28372,40940:28373,40941:28303,40942:28325,40943:28354,40944:28319,40945:28481,40946:28433,40947:28748,40948:28396,40949:28408,40950:28414,40951:28479,40952:28402,40953:28465,40954:28399,40955:28466,40956:28364,161:65377,162:65378,163:65379,164:65380,165:65381,166:65382,167:65383,168:65384,169:65385,170:65386,171:65387,172:65388,173:65389,174:65390,175:65391,176:65392,177:65393,178:65394,179:65395,180:65396,181:65397,182:65398,183:65399,184:65400,185:65401,186:65402,187:65403,188:65404,189:65405,190:65406,191:65407,192:65408,193:65409,194:65410,195:65411,196:65412,197:65413,198:65414,199:65415,200:65416,201:65417,202:65418,203:65419,204:65420,205:65421,206:65422,207:65423,208:65424,209:65425,210:65426,211:65427,212:65428,213:65429,214:65430,215:65431,216:65432,217:65433,218:65434,219:65435,220:65436,221:65437,222:65438,223:65439,57408:28478,57409:28435,57410:28407,57411:28550,57412:28538,57413:28536,57414:28545,57415:28544,57416:28527,57417:28507,57418:28659,57419:28525,57420:28546,57421:28540,57422:28504,57423:28558,57424:28561,57425:28610,57426:28518,57427:28595,57428:28579,57429:28577,57430:28580,57431:28601,57432:28614,57433:28586,57434:28639,57435:28629,57436:28652,57437:28628,57438:28632,57439:28657,57440:28654,57441:28635,57442:28681,57443:28683,57444:28666,57445:28689,57446:28673,57447:28687,57448:28670,57449:28699,57450:28698,57451:28532,57452:28701,57453:28696,57454:28703,57455:28720,57456:28734,57457:28722,57458:28753,57459:28771,57460:28825,57461:28818,57462:28847,57463:28913,57464:28844,57465:28856,57466:28851,57467:28846,57468:28895,57469:28875,57470:28893,57472:28889,57473:28937,57474:28925,57475:28956,57476:28953,57477:29029,57478:29013,57479:29064,57480:29030,57481:29026,57482:29004,57483:29014,57484:29036,57485:29071,57486:29179,57487:29060,57488:29077,57489:29096,57490:29100,57491:29143,57492:29113,57493:29118,57494:29138,57495:29129,57496:29140,57497:29134,57498:29152,57499:29164,57500:29159,57501:29173,57502:29180,57503:29177,57504:29183,57505:29197,57506:29200,57507:29211,57508:29224,57509:29229,57510:29228,57511:29232,57512:29234,57513:29243,57514:29244,57515:29247,57516:29248,57517:29254,57518:29259,57519:29272,57520:29300,57521:29310,57522:29314,57523:29313,57524:29319,57525:29330,57526:29334,57527:29346,57528:29351,57529:29369,57530:29362,57531:29379,57532:29382,57533:29380,57534:29390,57535:29394,57536:29410,57537:29408,57538:29409,57539:29433,57540:29431,57541:20495,57542:29463,57543:29450,57544:29468,57545:29462,57546:29469,57547:29492,57548:29487,57549:29481,57550:29477,57551:29502,57552:29518,57553:29519,57554:40664,57555:29527,57556:29546,57557:29544,57558:29552,57559:29560,57560:29557,57561:29563,57562:29562,57563:29640,57564:29619,57565:29646,57566:29627,57567:29632,57568:29669,57569:29678,57570:29662,57571:29858,57572:29701,57573:29807,57574:29733,57575:29688,57576:29746,57577:29754,57578:29781,57579:29759,57580:29791,57581:29785,57582:29761,57583:29788,57584:29801,57585:29808,57586:29795,57587:29802,57588:29814,57589:29822,57590:29835,57591:29854,57592:29863,57593:29898,57594:29903,57595:29908,57596:29681,57664:29920,57665:29923,57666:29927,57667:29929,57668:29934,57669:29938,57670:29936,57671:29937,57672:29944,57673:29943,57674:29956,57675:29955,57676:29957,57677:29964,57678:29966,57679:29965,57680:29973,57681:29971,57682:29982,57683:29990,57684:29996,57685:30012,57686:30020,57687:30029,57688:30026,57689:30025,57690:30043,57691:30022,57692:30042,57693:30057,57694:30052,57695:30055,57696:30059,57697:30061,57698:30072,57699:30070,57700:30086,57701:30087,57702:30068,57703:30090,57704:30089,57705:30082,57706:30100,57707:30106,57708:30109,57709:30117,57710:30115,57711:30146,57712:30131,57713:30147,57714:30133,57715:30141,57716:30136,57717:30140,57718:30129,57719:30157,57720:30154,57721:30162,57722:30169,57723:30179,57724:30174,57725:30206,57726:30207,57728:30204,57729:30209,57730:30192,57731:30202,57732:30194,57733:30195,57734:30219,57735:30221,57736:30217,57737:30239,57738:30247,57739:30240,57740:30241,57741:30242,57742:30244,57743:30260,57744:30256,57745:30267,57746:30279,57747:30280,57748:30278,57749:30300,57750:30296,57751:30305,57752:30306,57753:30312,57754:30313,57755:30314,57756:30311,57757:30316,57758:30320,57759:30322,57760:30326,57761:30328,57762:30332,57763:30336,57764:30339,57765:30344,57766:30347,57767:30350,57768:30358,57769:30355,57770:30361,57771:30362,57772:30384,57773:30388,57774:30392,57775:30393,57776:30394,57777:30402,57778:30413,57779:30422,57780:30418,57781:30430,57782:30433,57783:30437,57784:30439,57785:30442,57786:34351,57787:30459,57788:30472,57789:30471,57790:30468,57791:30505,57792:30500,57793:30494,57794:30501,57795:30502,57796:30491,57797:30519,57798:30520,57799:30535,57800:30554,57801:30568,57802:30571,57803:30555,57804:30565,57805:30591,57806:30590,57807:30585,57808:30606,57809:30603,57810:30609,57811:30624,57812:30622,57813:30640,57814:30646,57815:30649,57816:30655,57817:30652,57818:30653,57819:30651,57820:30663,57821:30669,57822:30679,57823:30682,57824:30684,57825:30691,57826:30702,57827:30716,57828:30732,57829:30738,57830:31014,57831:30752,57832:31018,57833:30789,57834:30862,57835:30836,57836:30854,57837:30844,57838:30874,57839:30860,57840:30883,57841:30901,57842:30890,57843:30895,57844:30929,57845:30918,57846:30923,57847:30932,57848:30910,57849:30908,57850:30917,57851:30922,57852:30956,57920:30951,57921:30938,57922:30973,57923:30964,57924:30983,57925:30994,57926:30993,57927:31001,57928:31020,57929:31019,57930:31040,57931:31072,57932:31063,57933:31071,57934:31066,57935:31061,57936:31059,57937:31098,57938:31103,57939:31114,57940:31133,57941:31143,57942:40779,57943:31146,57944:31150,57945:31155,57946:31161,57947:31162,57948:31177,57949:31189,57950:31207,57951:31212,57952:31201,57953:31203,57954:31240,57955:31245,57956:31256,57957:31257,57958:31264,57959:31263,57960:31104,57961:31281,57962:31291,57963:31294,57964:31287,57965:31299,57966:31319,57967:31305,57968:31329,57969:31330,57970:31337,57971:40861,57972:31344,57973:31353,57974:31357,57975:31368,57976:31383,57977:31381,57978:31384,57979:31382,57980:31401,57981:31432,57982:31408,57984:31414,57985:31429,57986:31428,57987:31423,57988:36995,57989:31431,57990:31434,57991:31437,57992:31439,57993:31445,57994:31443,57995:31449,57996:31450,57997:31453,57998:31457,57999:31458,58e3:31462,58001:31469,58002:31472,58003:31490,58004:31503,58005:31498,58006:31494,58007:31539,58008:31512,58009:31513,58010:31518,58011:31541,58012:31528,58013:31542,58014:31568,58015:31610,58016:31492,58017:31565,58018:31499,58019:31564,58020:31557,58021:31605,58022:31589,58023:31604,58024:31591,58025:31600,58026:31601,58027:31596,58028:31598,58029:31645,58030:31640,58031:31647,58032:31629,58033:31644,58034:31642,58035:31627,58036:31634,58037:31631,58038:31581,58039:31641,58040:31691,58041:31681,58042:31692,58043:31695,58044:31668,58045:31686,58046:31709,58047:31721,58048:31761,58049:31764,58050:31718,58051:31717,58052:31840,58053:31744,58054:31751,58055:31763,58056:31731,58057:31735,58058:31767,58059:31757,58060:31734,58061:31779,58062:31783,58063:31786,58064:31775,58065:31799,58066:31787,58067:31805,58068:31820,58069:31811,58070:31828,58071:31823,58072:31808,58073:31824,58074:31832,58075:31839,58076:31844,58077:31830,58078:31845,58079:31852,58080:31861,58081:31875,58082:31888,58083:31908,58084:31917,58085:31906,58086:31915,58087:31905,58088:31912,58089:31923,58090:31922,58091:31921,58092:31918,58093:31929,58094:31933,58095:31936,58096:31941,58097:31938,58098:31960,58099:31954,58100:31964,58101:31970,58102:39739,58103:31983,58104:31986,58105:31988,58106:31990,58107:31994,58108:32006,58176:32002,58177:32028,58178:32021,58179:32010,58180:32069,58181:32075,58182:32046,58183:32050,58184:32063,58185:32053,58186:32070,58187:32115,58188:32086,58189:32078,58190:32114,58191:32104,58192:32110,58193:32079,58194:32099,58195:32147,58196:32137,58197:32091,58198:32143,58199:32125,58200:32155,58201:32186,58202:32174,58203:32163,58204:32181,58205:32199,58206:32189,58207:32171,58208:32317,58209:32162,58210:32175,58211:32220,58212:32184,58213:32159,58214:32176,58215:32216,58216:32221,58217:32228,58218:32222,58219:32251,58220:32242,58221:32225,58222:32261,58223:32266,58224:32291,58225:32289,58226:32274,58227:32305,58228:32287,58229:32265,58230:32267,58231:32290,58232:32326,58233:32358,58234:32315,58235:32309,58236:32313,58237:32323,58238:32311,58240:32306,58241:32314,58242:32359,58243:32349,58244:32342,58245:32350,58246:32345,58247:32346,58248:32377,58249:32362,58250:32361,58251:32380,58252:32379,58253:32387,58254:32213,58255:32381,58256:36782,58257:32383,58258:32392,58259:32393,58260:32396,58261:32402,58262:32400,58263:32403,58264:32404,58265:32406,58266:32398,58267:32411,58268:32412,58269:32568,58270:32570,58271:32581,58272:32588,58273:32589,58274:32590,58275:32592,58276:32593,58277:32597,58278:32596,58279:32600,58280:32607,58281:32608,58282:32616,58283:32617,58284:32615,58285:32632,58286:32642,58287:32646,58288:32643,58289:32648,58290:32647,58291:32652,58292:32660,58293:32670,58294:32669,58295:32666,58296:32675,58297:32687,58298:32690,58299:32697,58300:32686,58301:32694,58302:32696,58303:35697,58304:32709,58305:32710,58306:32714,58307:32725,58308:32724,58309:32737,58310:32742,58311:32745,58312:32755,58313:32761,58314:39132,58315:32774,58316:32772,58317:32779,58318:32786,58319:32792,58320:32793,58321:32796,58322:32801,58323:32808,58324:32831,58325:32827,58326:32842,58327:32838,58328:32850,58329:32856,58330:32858,58331:32863,58332:32866,58333:32872,58334:32883,58335:32882,58336:32880,58337:32886,58338:32889,58339:32893,58340:32895,58341:32900,58342:32902,58343:32901,58344:32923,58345:32915,58346:32922,58347:32941,58348:20880,58349:32940,58350:32987,58351:32997,58352:32985,58353:32989,58354:32964,58355:32986,58356:32982,58357:33033,58358:33007,58359:33009,58360:33051,58361:33065,58362:33059,58363:33071,58364:33099,58432:38539,58433:33094,58434:33086,58435:33107,58436:33105,58437:33020,58438:33137,58439:33134,58440:33125,58441:33126,58442:33140,58443:33155,58444:33160,58445:33162,58446:33152,58447:33154,58448:33184,58449:33173,58450:33188,58451:33187,58452:33119,58453:33171,58454:33193,58455:33200,58456:33205,58457:33214,58458:33208,58459:33213,58460:33216,58461:33218,58462:33210,58463:33225,58464:33229,58465:33233,58466:33241,58467:33240,58468:33224,58469:33242,58470:33247,58471:33248,58472:33255,58473:33274,58474:33275,58475:33278,58476:33281,58477:33282,58478:33285,58479:33287,58480:33290,58481:33293,58482:33296,58483:33302,58484:33321,58485:33323,58486:33336,58487:33331,58488:33344,58489:33369,58490:33368,58491:33373,58492:33370,58493:33375,58494:33380,58496:33378,58497:33384,58498:33386,58499:33387,58500:33326,58501:33393,58502:33399,58503:33400,58504:33406,58505:33421,58506:33426,58507:33451,58508:33439,58509:33467,58510:33452,58511:33505,58512:33507,58513:33503,58514:33490,58515:33524,58516:33523,58517:33530,58518:33683,58519:33539,58520:33531,58521:33529,58522:33502,58523:33542,58524:33500,58525:33545,58526:33497,58527:33589,58528:33588,58529:33558,58530:33586,58531:33585,58532:33600,58533:33593,58534:33616,58535:33605,58536:33583,58537:33579,58538:33559,58539:33560,58540:33669,58541:33690,58542:33706,58543:33695,58544:33698,58545:33686,58546:33571,58547:33678,58548:33671,58549:33674,58550:33660,58551:33717,58552:33651,58553:33653,58554:33696,58555:33673,58556:33704,58557:33780,58558:33811,58559:33771,58560:33742,58561:33789,58562:33795,58563:33752,58564:33803,58565:33729,58566:33783,58567:33799,58568:33760,58569:33778,58570:33805,58571:33826,58572:33824,58573:33725,58574:33848,58575:34054,58576:33787,58577:33901,58578:33834,58579:33852,58580:34138,58581:33924,58582:33911,58583:33899,58584:33965,58585:33902,58586:33922,58587:33897,58588:33862,58589:33836,58590:33903,58591:33913,58592:33845,58593:33994,58594:33890,58595:33977,58596:33983,58597:33951,58598:34009,58599:33997,58600:33979,58601:34010,58602:34e3,58603:33985,58604:33990,58605:34006,58606:33953,58607:34081,58608:34047,58609:34036,58610:34071,58611:34072,58612:34092,58613:34079,58614:34069,58615:34068,58616:34044,58617:34112,58618:34147,58619:34136,58620:34120,58688:34113,58689:34306,58690:34123,58691:34133,58692:34176,58693:34212,58694:34184,58695:34193,58696:34186,58697:34216,58698:34157,58699:34196,58700:34203,58701:34282,58702:34183,58703:34204,58704:34167,58705:34174,58706:34192,58707:34249,58708:34234,58709:34255,58710:34233,58711:34256,58712:34261,58713:34269,58714:34277,58715:34268,58716:34297,58717:34314,58718:34323,58719:34315,58720:34302,58721:34298,58722:34310,58723:34338,58724:34330,58725:34352,58726:34367,58727:34381,58728:20053,58729:34388,58730:34399,58731:34407,58732:34417,58733:34451,58734:34467,58735:34473,58736:34474,58737:34443,58738:34444,58739:34486,58740:34479,58741:34500,58742:34502,58743:34480,58744:34505,58745:34851,58746:34475,58747:34516,58748:34526,58749:34537,58750:34540,58752:34527,58753:34523,58754:34543,58755:34578,58756:34566,58757:34568,58758:34560,58759:34563,58760:34555,58761:34577,58762:34569,58763:34573,58764:34553,58765:34570,58766:34612,58767:34623,58768:34615,58769:34619,58770:34597,58771:34601,58772:34586,58773:34656,58774:34655,58775:34680,58776:34636,58777:34638,58778:34676,58779:34647,58780:34664,58781:34670,58782:34649,58783:34643,58784:34659,58785:34666,58786:34821,58787:34722,58788:34719,58789:34690,58790:34735,58791:34763,58792:34749,58793:34752,58794:34768,58795:38614,58796:34731,58797:34756,58798:34739,58799:34759,58800:34758,58801:34747,58802:34799,58803:34802,58804:34784,58805:34831,58806:34829,58807:34814,58808:34806,58809:34807,58810:34830,58811:34770,58812:34833,58813:34838,58814:34837,58815:34850,58816:34849,58817:34865,58818:34870,58819:34873,58820:34855,58821:34875,58822:34884,58823:34882,58824:34898,58825:34905,58826:34910,58827:34914,58828:34923,58829:34945,58830:34942,58831:34974,58832:34933,58833:34941,58834:34997,58835:34930,58836:34946,58837:34967,58838:34962,58839:34990,58840:34969,58841:34978,58842:34957,58843:34980,58844:34992,58845:35007,58846:34993,58847:35011,58848:35012,58849:35028,58850:35032,58851:35033,58852:35037,58853:35065,58854:35074,58855:35068,58856:35060,58857:35048,58858:35058,58859:35076,58860:35084,58861:35082,58862:35091,58863:35139,58864:35102,58865:35109,58866:35114,58867:35115,58868:35137,58869:35140,58870:35131,58871:35126,58872:35128,58873:35148,58874:35101,58875:35168,58876:35166,58944:35174,58945:35172,58946:35181,58947:35178,58948:35183,58949:35188,58950:35191,58951:35198,58952:35203,58953:35208,58954:35210,58955:35219,58956:35224,58957:35233,58958:35241,58959:35238,58960:35244,58961:35247,58962:35250,58963:35258,58964:35261,58965:35263,58966:35264,58967:35290,58968:35292,58969:35293,58970:35303,58971:35316,58972:35320,58973:35331,58974:35350,58975:35344,58976:35340,58977:35355,58978:35357,58979:35365,58980:35382,58981:35393,58982:35419,58983:35410,58984:35398,58985:35400,58986:35452,58987:35437,58988:35436,58989:35426,58990:35461,58991:35458,58992:35460,58993:35496,58994:35489,58995:35473,58996:35493,58997:35494,58998:35482,58999:35491,59e3:35524,59001:35533,59002:35522,59003:35546,59004:35563,59005:35571,59006:35559,59008:35556,59009:35569,59010:35604,59011:35552,59012:35554,59013:35575,59014:35550,59015:35547,59016:35596,59017:35591,59018:35610,59019:35553,59020:35606,59021:35600,59022:35607,59023:35616,59024:35635,59025:38827,59026:35622,59027:35627,59028:35646,59029:35624,59030:35649,59031:35660,59032:35663,59033:35662,59034:35657,59035:35670,59036:35675,59037:35674,59038:35691,59039:35679,59040:35692,59041:35695,59042:35700,59043:35709,59044:35712,59045:35724,59046:35726,59047:35730,59048:35731,59049:35734,59050:35737,59051:35738,59052:35898,59053:35905,59054:35903,59055:35912,59056:35916,59057:35918,59058:35920,59059:35925,59060:35938,59061:35948,59062:35960,59063:35962,59064:35970,59065:35977,59066:35973,59067:35978,59068:35981,59069:35982,59070:35988,59071:35964,59072:35992,59073:25117,59074:36013,59075:36010,59076:36029,59077:36018,59078:36019,59079:36014,59080:36022,59081:36040,59082:36033,59083:36068,59084:36067,59085:36058,59086:36093,59087:36090,59088:36091,59089:36100,59090:36101,59091:36106,59092:36103,59093:36111,59094:36109,59095:36112,59096:40782,59097:36115,59098:36045,59099:36116,59100:36118,59101:36199,59102:36205,59103:36209,59104:36211,59105:36225,59106:36249,59107:36290,59108:36286,59109:36282,59110:36303,59111:36314,59112:36310,59113:36300,59114:36315,59115:36299,59116:36330,59117:36331,59118:36319,59119:36323,59120:36348,59121:36360,59122:36361,59123:36351,59124:36381,59125:36382,59126:36368,59127:36383,59128:36418,59129:36405,59130:36400,59131:36404,59132:36426,59200:36423,59201:36425,59202:36428,59203:36432,59204:36424,59205:36441,59206:36452,59207:36448,59208:36394,59209:36451,59210:36437,59211:36470,59212:36466,59213:36476,59214:36481,59215:36487,59216:36485,59217:36484,59218:36491,59219:36490,59220:36499,59221:36497,59222:36500,59223:36505,59224:36522,59225:36513,59226:36524,59227:36528,59228:36550,59229:36529,59230:36542,59231:36549,59232:36552,59233:36555,59234:36571,59235:36579,59236:36604,59237:36603,59238:36587,59239:36606,59240:36618,59241:36613,59242:36629,59243:36626,59244:36633,59245:36627,59246:36636,59247:36639,59248:36635,59249:36620,59250:36646,59251:36659,59252:36667,59253:36665,59254:36677,59255:36674,59256:36670,59257:36684,59258:36681,59259:36678,59260:36686,59261:36695,59262:36700,59264:36706,59265:36707,59266:36708,59267:36764,59268:36767,59269:36771,59270:36781,59271:36783,59272:36791,59273:36826,59274:36837,59275:36834,59276:36842,59277:36847,59278:36999,59279:36852,59280:36869,59281:36857,59282:36858,59283:36881,59284:36885,59285:36897,59286:36877,59287:36894,59288:36886,59289:36875,59290:36903,59291:36918,59292:36917,59293:36921,59294:36856,59295:36943,59296:36944,59297:36945,59298:36946,59299:36878,59300:36937,59301:36926,59302:36950,59303:36952,59304:36958,59305:36968,59306:36975,59307:36982,59308:38568,59309:36978,59310:36994,59311:36989,59312:36993,59313:36992,59314:37002,59315:37001,59316:37007,59317:37032,59318:37039,59319:37041,59320:37045,59321:37090,59322:37092,59323:25160,59324:37083,59325:37122,59326:37138,59327:37145,59328:37170,59329:37168,59330:37194,59331:37206,59332:37208,59333:37219,59334:37221,59335:37225,59336:37235,59337:37234,59338:37259,59339:37257,59340:37250,59341:37282,59342:37291,59343:37295,59344:37290,59345:37301,59346:37300,59347:37306,59348:37312,59349:37313,59350:37321,59351:37323,59352:37328,59353:37334,59354:37343,59355:37345,59356:37339,59357:37372,59358:37365,59359:37366,59360:37406,59361:37375,59362:37396,59363:37420,59364:37397,59365:37393,59366:37470,59367:37463,59368:37445,59369:37449,59370:37476,59371:37448,59372:37525,59373:37439,59374:37451,59375:37456,59376:37532,59377:37526,59378:37523,59379:37531,59380:37466,59381:37583,59382:37561,59383:37559,59384:37609,59385:37647,59386:37626,59387:37700,59388:37678,59456:37657,59457:37666,59458:37658,59459:37667,59460:37690,59461:37685,59462:37691,59463:37724,59464:37728,59465:37756,59466:37742,59467:37718,59468:37808,59469:37804,59470:37805,59471:37780,59472:37817,59473:37846,59474:37847,59475:37864,59476:37861,59477:37848,59478:37827,59479:37853,59480:37840,59481:37832,59482:37860,59483:37914,59484:37908,59485:37907,59486:37891,59487:37895,59488:37904,59489:37942,59490:37931,59491:37941,59492:37921,59493:37946,59494:37953,59495:37970,59496:37956,59497:37979,59498:37984,59499:37986,59500:37982,59501:37994,59502:37417,59503:38e3,59504:38005,59505:38007,59506:38013,59507:37978,59508:38012,59509:38014,59510:38017,59511:38015,59512:38274,59513:38279,59514:38282,59515:38292,59516:38294,59517:38296,59518:38297,59520:38304,59521:38312,59522:38311,59523:38317,59524:38332,59525:38331,59526:38329,59527:38334,59528:38346,59529:28662,59530:38339,59531:38349,59532:38348,59533:38357,59534:38356,59535:38358,59536:38364,59537:38369,59538:38373,59539:38370,59540:38433,59541:38440,59542:38446,59543:38447,59544:38466,59545:38476,59546:38479,59547:38475,59548:38519,59549:38492,59550:38494,59551:38493,59552:38495,59553:38502,59554:38514,59555:38508,59556:38541,59557:38552,59558:38549,59559:38551,59560:38570,59561:38567,59562:38577,59563:38578,59564:38576,59565:38580,59566:38582,59567:38584,59568:38585,59569:38606,59570:38603,59571:38601,59572:38605,59573:35149,59574:38620,59575:38669,59576:38613,59577:38649,59578:38660,59579:38662,59580:38664,59581:38675,59582:38670,59583:38673,59584:38671,59585:38678,59586:38681,59587:38692,59588:38698,59589:38704,59590:38713,59591:38717,59592:38718,59593:38724,59594:38726,59595:38728,59596:38722,59597:38729,59598:38748,59599:38752,59600:38756,59601:38758,59602:38760,59603:21202,59604:38763,59605:38769,59606:38777,59607:38789,59608:38780,59609:38785,59610:38778,59611:38790,59612:38795,59613:38799,59614:38800,59615:38812,59616:38824,59617:38822,59618:38819,59619:38835,59620:38836,59621:38851,59622:38854,59623:38856,\\n59624:38859,59625:38876,59626:38893,59627:40783,59628:38898,59629:31455,59630:38902,59631:38901,59632:38927,59633:38924,59634:38968,59635:38948,59636:38945,59637:38967,59638:38973,59639:38982,59640:38991,59641:38987,59642:39019,59643:39023,59644:39024,59712:39025,59713:39028,59714:39027,59715:39082,59716:39087,59717:39089,59718:39094,59719:39108,59720:39107,59721:39110,59722:39145,59723:39147,59724:39171,59725:39177,59726:39186,59727:39188,59728:39192,59729:39201,59730:39197,59731:39198,59732:39204,59733:39200,59734:39212,59735:39214,59736:39229,59737:39230,59738:39234,59739:39241,59740:39237,59741:39248,59742:39243,59743:39249,59744:39250,59745:39244,59746:39253,59747:39319,59748:39320,59749:39333,59750:39341,59751:39342,59752:39356,59753:39391,59754:39387,59755:39389,59756:39384,59757:39377,59758:39405,59759:39406,59760:39409,59761:39410,59762:39419,59763:39416,59764:39425,59765:39439,59766:39429,59767:39394,59768:39449,59769:39467,59770:39479,59771:39493,59772:39490,59773:39488,59774:39491,59776:39486,59777:39509,59778:39501,59779:39515,59780:39511,59781:39519,59782:39522,59783:39525,59784:39524,59785:39529,59786:39531,59787:39530,59788:39597,59789:39600,59790:39612,59791:39616,59792:39631,59793:39633,59794:39635,59795:39636,59796:39646,59797:39647,59798:39650,59799:39651,59800:39654,59801:39663,59802:39659,59803:39662,59804:39668,59805:39665,59806:39671,59807:39675,59808:39686,59809:39704,59810:39706,59811:39711,59812:39714,59813:39715,59814:39717,59815:39719,59816:39720,59817:39721,59818:39722,59819:39726,59820:39727,59821:39730,59822:39748,59823:39747,59824:39759,59825:39757,59826:39758,59827:39761,59828:39768,59829:39796,59830:39827,59831:39811,59832:39825,59833:39830,59834:39831,59835:39839,59836:39840,59837:39848,59838:39860,59839:39872,59840:39882,59841:39865,59842:39878,59843:39887,59844:39889,59845:39890,59846:39907,59847:39906,59848:39908,59849:39892,59850:39905,59851:39994,59852:39922,59853:39921,59854:39920,59855:39957,59856:39956,59857:39945,59858:39955,59859:39948,59860:39942,59861:39944,59862:39954,59863:39946,59864:39940,59865:39982,59866:39963,59867:39973,59868:39972,59869:39969,59870:39984,59871:40007,59872:39986,59873:40006,59874:39998,59875:40026,59876:40032,59877:40039,59878:40054,59879:40056,59880:40167,59881:40172,59882:40176,59883:40201,59884:40200,59885:40171,59886:40195,59887:40198,59888:40234,59889:40230,59890:40367,59891:40227,59892:40223,59893:40260,59894:40213,59895:40210,59896:40257,59897:40255,59898:40254,59899:40262,59900:40264,59968:40285,59969:40286,59970:40292,59971:40273,59972:40272,59973:40281,59974:40306,59975:40329,59976:40327,59977:40363,59978:40303,59979:40314,59980:40346,59981:40356,59982:40361,59983:40370,59984:40388,59985:40385,59986:40379,59987:40376,59988:40378,59989:40390,59990:40399,59991:40386,59992:40409,59993:40403,59994:40440,59995:40422,59996:40429,59997:40431,59998:40445,59999:40474,6e4:40475,60001:40478,60002:40565,60003:40569,60004:40573,60005:40577,60006:40584,60007:40587,60008:40588,60009:40594,60010:40597,60011:40593,60012:40605,60013:40613,60014:40617,60015:40632,60016:40618,60017:40621,60018:38753,60019:40652,60020:40654,60021:40655,60022:40656,60023:40660,60024:40668,60025:40670,60026:40669,60027:40672,60028:40677,60029:40680,60030:40687,60032:40692,60033:40694,60034:40695,60035:40697,60036:40699,60037:40700,60038:40701,60039:40711,60040:40712,60041:30391,60042:40725,60043:40737,60044:40748,60045:40766,60046:40778,60047:40786,60048:40788,60049:40803,60050:40799,60051:40800,60052:40801,60053:40806,60054:40807,60055:40812,60056:40810,60057:40823,60058:40818,60059:40822,60060:40853,60061:40860,60062:40864,60063:22575,60064:27079,60065:36953,60066:29796,60067:20956,60068:29081}},function(o,e,r){\\\"use strict\\\";function t(o,e,r,t){e.degree()=t/2;){var n=c,l=a;if(c=s,a=d,c.isZero())return null;s=n;for(var i=o.zero,B=c.getCoefficient(c.degree()),k=o.inverse(B);s.degree()>=c.degree()&&!s.isZero();){var u=s.degree()-c.degree(),C=o.multiply(s.getCoefficient(s.degree()),k);i=i.addOrSubtract(o.buildMonomial(u,C)),s=s.addOrSubtract(c.multiplyByMonomial(u,C))}if(d=i.multiplyPoly(a).addOrSubtract(l),s.degree()>=c.degree())return null}var m=d.getCoefficient(0);if(0===m)return null;var f=o.inverse(m);return[d.multiply(f),s.multiply(f)];var w}function c(o,e){var r=e.degree();if(1===r)return[e.getCoefficient(1)];for(var t=new Array(r),c=0,s=1;s=a&&d>=n?(l=[e,o,r],t=l[0],c=l[1],s=l[2]):n>=d&&n>=a?(i=[o,e,r],t=i[0],c=i[1],s=i[2]):(B=[o,r,e],t=B[0],c=B[1],s=B[2]),(s.x-c.x)*(t.y-c.y)-(s.y-c.y)*(t.x-c.x)<0&&(k=[s,t],t=k[0],s=k[1]),{bottomLeft:t,topLeft:c,topRight:s};var l,i,B,k}function s(o,e,r,c){var s=(t(d(o,r,c,5))/7+t(d(o,e,c,5))/7+t(d(r,o,c,5))/7+t(d(e,o,c,5))/7)/4;if(s<1)throw new Error(\\\"Invalid module size\\\");var a=Math.round(C(o,e)/s),n=Math.round(C(o,r)/s),l=Math.floor((a+n)/2)+7;switch(l%4){case 0:l++;break;case 2:l--}return{dimension:l,moduleSize:s}}function a(o,e,r,t){var c,s,a,d,n=[{x:Math.floor(o.x),y:Math.floor(o.y)}],l=Math.abs(e.y-o.y)>Math.abs(e.x-o.x);l?(c=Math.floor(o.y),s=Math.floor(o.x),a=Math.floor(e.y),d=Math.floor(e.x)):(c=Math.floor(o.x),s=Math.floor(o.y),a=Math.floor(e.x),d=Math.floor(e.y));for(var i=Math.abs(a-c),B=Math.abs(d-s),k=Math.floor(-i/2),u=c0){if(P===d)break;P+=m,k-=i}}for(var p=[],y=0;y=o.bottom.startX&&w<=o.bottom.endX||f>=o.bottom.startX&&w<=o.bottom.endX||w<=o.bottom.startX&&f>=o.bottom.endX&&l[2]/(o.bottom.endX-o.bottom.startX)k});v.length>0?v[0].bottom=P:r.push({top:P,bottom:P})}if(m){var h=e-l[4],p=h-l[3],P={startX:p,y:c,endX:h},v=d.filter(function(o){return p>=o.bottom.startX&&p<=o.bottom.endX||h>=o.bottom.startX&&p<=o.bottom.endX||p<=o.bottom.startX&&h>=o.bottom.endX&&l[2]/(o.bottom.endX-o.bottom.startX)k});v.length>0?v[0].bottom=P:d.push({top:P,bottom:P})}}}(i);e.push.apply(e,r.filter(function(o){return o.bottom.y!==c&&o.bottom.y-o.top.y>=2})),r=r.filter(function(o){return o.bottom.y===c}),a.push.apply(a,d.filter(function(o){return o.bottom.y!==c})),d=d.filter(function(o){return o.bottom.y===c})}(n);e.push.apply(e,r.filter(function(o){return o.bottom.y-o.top.y>=2})),a.push.apply(a,d);var i=e.filter(function(o){return o.bottom.y-o.top.y>=2}).map(function(e){var r=(e.top.startX+e.top.endX+e.bottom.startX+e.bottom.endX)/4,c=(e.top.y+e.bottom.y+1)/2;if(o.get(Math.round(r),Math.round(c))){\\nvar s=[e.top.endX-e.top.startX,e.bottom.endX-e.bottom.startX,e.bottom.y-e.top.y+1],a=t(s)/s.length;return{score:l({x:Math.round(r),y:Math.round(c)},[1,1,3,1,1],o),x:r,y:c,size:a}}}).filter(function(o){return!!o}).sort(function(o,e){return o.score-e.score}).map(function(o,e,r){if(e>B)return null;var t=r.filter(function(o,r){return e!==r}).map(function(e){return{x:e.x,y:e.y,score:e.score+Math.pow(e.size-o.size,2)/o.size,size:e.size}}).sort(function(o,e){return o.score-e.score});if(t.length<2)return null;var c=o.score+t[0].score+t[1].score;return{points:[o].concat(t.slice(0,2)),score:c}}).filter(function(o){return!!o}).sort(function(o,e){return o.score-e.score});if(0===i.length)return null;var m,f,w=c(i[0].points[0],i[0].points[1],i[0].points[2]),P=w.topRight,v=w.topLeft,h=w.bottomLeft;try{L=s(v,P,h,o),m=L.dimension,f=L.moduleSize}catch(o){return null}var p={x:P.x-v.x+h.x,y:P.y-v.y+h.y},y=(C(v,h)+C(v,P))/2/f,b=1-3/y,g={x:v.x+b*(p.x-v.x),y:v.y+b*(p.y-v.y)},x=a.map(function(e){var r=(e.top.startX+e.top.endX+e.bottom.startX+e.bottom.endX)/4,c=(e.top.y+e.bottom.y+1)/2;if(o.get(Math.floor(r),Math.floor(c))){var s=[e.top.endX-e.top.startX,e.bottom.endX-e.bottom.startX,e.bottom.y-e.top.y+1];t(s);return{x:r,y:c,score:l({x:Math.floor(r),y:Math.floor(c)},[1,1,1],o)+C({x:r,y:c},g)}}}).filter(function(o){return!!o}).sort(function(o,e){return o.score-e.score}),M=y>=15&&x.length?x[0]:g;return{alignmentPattern:{x:M.x,y:M.y},bottomLeft:{x:h.x,y:h.y},dimension:m,topLeft:{x:v.x,y:v.y},topRight:{x:P.x,y:P.y}};var L}Object.defineProperty(e,\\\"__esModule\\\",{value:!0});var B=4,k=.5,u=1.5,C=function(o,e){return Math.sqrt(Math.pow(e.x-o.x,2)+Math.pow(e.y-o.y,2))};e.locate=i}]).default}),self.addEventListener(\\\"message\\\",function(o){var e=jsQR(o.data.data,o.data.width,o.data.height);e?postMessage(e.data):postMessage(null)});\"], {\n type: 'application/javascript'\n});\n\n// Props that are allowed to change dynamicly\nvar propsKeys = ['delay', 'legacyMode', 'facingMode'];\n\nmodule.exports = (_temp = _class = function (_Component) {\n _inherits(Reader, _Component);\n\n function Reader(props) {\n _classCallCheck(this, Reader);\n\n var _this = _possibleConstructorReturn(this, (Reader.__proto__ || Object.getPrototypeOf(Reader)).call(this, props));\n\n _this.els = {};\n\n\n _this.state = {\n mirrorVideo: false\n\n // Bind function to the class\n };_this.initiate = _this.initiate.bind(_this);\n _this.initiateLegacyMode = _this.initiateLegacyMode.bind(_this);\n _this.check = _this.check.bind(_this);\n _this.handleVideo = _this.handleVideo.bind(_this);\n _this.handleLoadStart = _this.handleLoadStart.bind(_this);\n _this.handleInputChange = _this.handleInputChange.bind(_this);\n _this.clearComponent = _this.clearComponent.bind(_this);\n _this.handleReaderLoad = _this.handleReaderLoad.bind(_this);\n _this.openImageDialog = _this.openImageDialog.bind(_this);\n _this.handleWorkerMessage = _this.handleWorkerMessage.bind(_this);\n _this.setRefFactory = _this.setRefFactory.bind(_this);\n return _this;\n }\n\n _createClass(Reader, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // Initiate web worker execute handler according to mode.\n this.worker = new Worker(URL.createObjectURL(workerBlob));\n this.worker.onmessage = this.handleWorkerMessage;\n\n if (!this.props.legacyMode) {\n this.initiate();\n } else {\n this.initiateLegacyMode();\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // React according to change in props\n var changedProps = havePropsChanged(this.props, nextProps, propsKeys);\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = changedProps[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prop = _step.value;\n\n if (prop == 'facingMode') {\n this.clearComponent();\n this.initiate(nextProps);\n break;\n } else if (prop == 'delay') {\n if (this.props.delay == false && !nextProps.legacyMode) {\n this.timeout = setTimeout(this.check, nextProps.delay);\n }\n if (nextProps.delay == false) {\n clearTimeout(this.timeout);\n }\n } else if (prop == 'legacyMode') {\n if (this.props.legacyMode && !nextProps.legacyMode) {\n this.clearComponent();\n this.initiate(nextProps);\n } else {\n this.clearComponent();\n this.componentDidUpdate = this.initiateLegacyMode;\n }\n break;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }, {\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps, nextState) {\n if (nextState !== this.state) {\n return true;\n }\n\n // Only render when the `propsKeys` have changed.\n var changedProps = havePropsChanged(this.props, nextProps, propsKeys);\n return changedProps.length > 0;\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n // Stop web-worker and clear the component\n if (this.worker) {\n this.worker.terminate();\n this.worker = undefined;\n }\n this.clearComponent();\n }\n }, {\n key: 'clearComponent',\n value: function clearComponent() {\n // Remove all event listeners and variables\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = undefined;\n }\n if (this.stopCamera) {\n this.stopCamera();\n }\n if (this.reader) {\n this.reader.removeEventListener('load', this.handleReaderLoad);\n }\n if (this.els.img) {\n this.els.img.removeEventListener('load', this.check);\n }\n }\n }, {\n key: 'initiate',\n value: function initiate() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n var onError = props.onError,\n facingMode = props.facingMode;\n\n // Check browser facingMode constraint support\n // Firefox ignores facingMode or deviceId constraints\n\n var isFirefox = /firefox/i.test(navigator.userAgent);\n var supported = {};\n if (navigator.mediaDevices && typeof navigator.mediaDevices.getSupportedConstraints === 'function') {\n supported = navigator.mediaDevices.getSupportedConstraints();\n }\n var constraints = {};\n\n if (supported.facingMode) {\n constraints.facingMode = { ideal: facingMode };\n }\n if (supported.frameRate) {\n constraints.frameRate = { ideal: 25, min: 10 };\n }\n\n var vConstraintsPromise = supported.facingMode || isFirefox ? Promise.resolve(props.constraints || constraints) : getDeviceId(facingMode).then(function (deviceId) {\n return Object.assign({}, { deviceId: deviceId }, props.constraints);\n });\n\n vConstraintsPromise.then(function (video) {\n return navigator.mediaDevices.getUserMedia({ video: video });\n }).then(this.handleVideo).catch(onError);\n }\n }, {\n key: 'handleVideo',\n value: function handleVideo(stream) {\n var preview = this.els.preview;\n var facingMode = this.props.facingMode;\n\n // Preview element hasn't been rendered so wait for it.\n\n if (!preview) {\n return setTimeout(this.handleVideo, 200, stream);\n }\n\n // Handle different browser implementations of MediaStreams as src\n if ((preview || {}).srcObject !== undefined) {\n preview.srcObject = stream;\n } else if (preview.mozSrcObject !== undefined) {\n preview.mozSrcObject = stream;\n } else if (window.URL.createObjectURL) {\n preview.src = window.URL.createObjectURL(stream);\n } else if (window.webkitURL) {\n preview.src = window.webkitURL.createObjectURL(stream);\n } else {\n preview.src = stream;\n }\n\n // IOS play in fullscreen\n preview.playsInline = true;\n\n var streamTrack = stream.getTracks()[0];\n // Assign `stopCamera` so the track can be stopped once component is cleared\n this.stopCamera = streamTrack.stop.bind(streamTrack);\n\n preview.addEventListener('loadstart', this.handleLoadStart);\n\n this.setState({ mirrorVideo: facingMode == 'user', streamLabel: streamTrack.label });\n }\n }, {\n key: 'handleLoadStart',\n value: function handleLoadStart() {\n var _props = this.props,\n delay = _props.delay,\n onLoad = _props.onLoad;\n var _state = this.state,\n mirrorVideo = _state.mirrorVideo,\n streamLabel = _state.streamLabel;\n\n var preview = this.els.preview;\n preview.play();\n\n if (typeof onLoad == 'function') {\n onLoad({ mirrorVideo: mirrorVideo, streamLabel: streamLabel });\n }\n\n if (typeof delay == 'number') {\n this.timeout = setTimeout(this.check, delay);\n }\n\n // Some browsers call loadstart continuously\n preview.removeEventListener('loadstart', this.handleLoadStart);\n }\n }, {\n key: 'check',\n value: function check() {\n var _props2 = this.props,\n legacyMode = _props2.legacyMode,\n resolution = _props2.resolution,\n delay = _props2.delay;\n var _els = this.els,\n preview = _els.preview,\n canvas = _els.canvas,\n img = _els.img;\n\n // Get image/video dimensions\n\n var width = Math.floor(legacyMode ? img.naturalWidth : preview.videoWidth);\n var height = Math.floor(legacyMode ? img.naturalHeight : preview.videoHeight);\n\n // Canvas draw offsets\n var hozOffset = 0;\n var vertOffset = 0;\n\n // Scale image to correct resolution\n if (legacyMode) {\n // Keep image aspect ratio\n var greatestSize = width > height ? width : height;\n var ratio = resolution / greatestSize;\n\n height = ratio * height;\n width = ratio * width;\n\n canvas.width = width;\n canvas.height = height;\n } else {\n // Crop image to fit 1:1 aspect ratio\n var smallestSize = width < height ? width : height;\n var _ratio = resolution / smallestSize;\n\n height = _ratio * height;\n width = _ratio * width;\n\n vertOffset = (height - resolution) / 2 * -1;\n hozOffset = (width - resolution) / 2 * -1;\n\n canvas.width = resolution;\n canvas.height = resolution;\n }\n\n var previewIsPlaying = preview && preview.readyState === preview.HAVE_ENOUGH_DATA;\n\n if (legacyMode || previewIsPlaying) {\n var ctx = canvas.getContext('2d');\n\n ctx.drawImage(legacyMode ? img : preview, hozOffset, vertOffset, width, height);\n\n var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n // Send data to web-worker\n this.worker.postMessage(imageData);\n } else {\n // Preview not ready -> check later\n this.timeout = setTimeout(this.check, delay);\n }\n }\n }, {\n key: 'handleWorkerMessage',\n value: function handleWorkerMessage(e) {\n var _props3 = this.props,\n onScan = _props3.onScan,\n legacyMode = _props3.legacyMode,\n delay = _props3.delay;\n\n var decoded = e.data;\n onScan(decoded || null);\n\n if (!legacyMode && typeof delay == 'number' && this.worker) {\n this.timeout = setTimeout(this.check, delay);\n }\n }\n }, {\n key: 'initiateLegacyMode',\n value: function initiateLegacyMode() {\n this.reader = new FileReader();\n this.reader.addEventListener('load', this.handleReaderLoad);\n this.els.img.addEventListener('load', this.check, false);\n\n // Reset componentDidUpdate\n this.componentDidUpdate = undefined;\n\n if (typeof this.props.onLoad == 'function') {\n this.props.onLoad();\n }\n }\n }, {\n key: 'handleInputChange',\n value: function handleInputChange(e) {\n var selectedImg = e.target.files[0];\n this.reader.readAsDataURL(selectedImg);\n }\n }, {\n key: 'handleReaderLoad',\n value: function handleReaderLoad(e) {\n // Set selected image blob as img source\n this.els.img.src = e.target.result;\n }\n }, {\n key: 'openImageDialog',\n value: function openImageDialog() {\n // Function to be executed by parent in user action context to trigger img file uploader\n this.els.input.click();\n }\n }, {\n key: 'setRefFactory',\n value: function setRefFactory(key) {\n var _this2 = this;\n\n return function (element) {\n _this2.els[key] = element;\n };\n }\n }, {\n key: 'render',\n value: function render() {\n var _props4 = this.props,\n style = _props4.style,\n className = _props4.className,\n onImageLoad = _props4.onImageLoad,\n legacyMode = _props4.legacyMode,\n showViewFinder = _props4.showViewFinder,\n facingMode = _props4.facingMode;\n\n\n var containerStyle = {\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n paddingTop: '100%'\n };\n var hiddenStyle = { display: 'none' };\n var previewStyle = {\n top: 0,\n left: 0,\n display: 'block',\n position: 'absolute',\n overflow: 'hidden',\n width: '100%',\n height: '100%'\n };\n var videoPreviewStyle = _extends({}, previewStyle, {\n objectFit: 'cover',\n transform: this.state.mirrorVideo ? 'scaleX(-1)' : undefined\n });\n var imgPreviewStyle = _extends({}, previewStyle, {\n objectFit: 'scale-down'\n });\n\n var viewFinderStyle = {\n top: 0,\n left: 0,\n zIndex: 1,\n boxSizing: 'border-box',\n border: '50px solid rgba(0, 0, 0, 0.3)',\n boxShadow: 'inset 0 0 0 5px rgba(255, 0, 0, 0.5)',\n position: 'absolute',\n width: '100%',\n height: '100%'\n };\n\n return React.createElement(\n 'section',\n { className: className, style: style },\n React.createElement(\n 'section',\n { style: containerStyle },\n !legacyMode && showViewFinder ? React.createElement('div', { style: viewFinderStyle }) : null,\n legacyMode ? React.createElement('input', {\n style: hiddenStyle,\n type: 'file',\n accept: 'image/*',\n ref: this.setRefFactory('input'),\n onChange: this.handleInputChange\n }) : null,\n legacyMode ? React.createElement('img', { style: imgPreviewStyle, ref: this.setRefFactory('img'), onLoad: onImageLoad }) : React.createElement('video', { style: videoPreviewStyle, ref: this.setRefFactory('preview') }),\n React.createElement('canvas', { style: hiddenStyle, ref: this.setRefFactory('canvas') })\n )\n );\n }\n }]);\n\n return Reader;\n}(Component), _class.propTypes = {\n onScan: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n onLoad: PropTypes.func,\n onImageLoad: PropTypes.func,\n delay: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]),\n facingMode: PropTypes.oneOf(['user', 'environment']),\n legacyMode: PropTypes.bool,\n resolution: PropTypes.number,\n showViewFinder: PropTypes.bool,\n style: PropTypes.any,\n className: PropTypes.string,\n constraints: PropTypes.object\n}, _class.defaultProps = {\n delay: 500,\n resolution: 600,\n facingMode: 'environment',\n showViewFinder: true,\n constraints: null\n}, _temp);","/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nvar SDPUtils = require('sdp');\n\nfunction fixStatsType(stat) {\n return {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[stat.type] || stat.type;\n}\n\nfunction writeMediaSection(transceiver, caps, type, stream, dtlsRole) {\n var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n // Map ICE parameters (ufrag, pwd) to SDP.\n sdp += SDPUtils.writeIceParameters(\n transceiver.iceGatherer.getLocalParameters());\n\n // Map DTLS parameters to SDP.\n sdp += SDPUtils.writeDtlsParameters(\n transceiver.dtlsTransport.getLocalParameters(),\n type === 'offer' ? 'actpass' : dtlsRole || 'active');\n\n sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n if (transceiver.rtpSender && transceiver.rtpReceiver) {\n sdp += 'a=sendrecv\\r\\n';\n } else if (transceiver.rtpSender) {\n sdp += 'a=sendonly\\r\\n';\n } else if (transceiver.rtpReceiver) {\n sdp += 'a=recvonly\\r\\n';\n } else {\n sdp += 'a=inactive\\r\\n';\n }\n\n if (transceiver.rtpSender) {\n var trackId = transceiver.rtpSender._initialTrackId ||\n transceiver.rtpSender.track.id;\n transceiver.rtpSender._initialTrackId = trackId;\n // spec.\n var msid = 'msid:' + (stream ? stream.id : '-') + ' ' +\n trackId + '\\r\\n';\n sdp += 'a=' + msid;\n // for Chrome. Legacy should no longer be required.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' ' + msid;\n\n // RTX\n if (transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' ' + msid;\n sdp += 'a=ssrc-group:FID ' +\n transceiver.sendEncodingParameters[0].ssrc + ' ' +\n transceiver.sendEncodingParameters[0].rtx.ssrc +\n '\\r\\n';\n }\n }\n // FIXME: this should be written by writeRtpDescription.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n }\n return sdp;\n}\n\n// Edge does not like\n// 1) stun: filtered after 14393 unless ?transport=udp is present\n// 2) turn: that does not have all of turn:host:port?transport=udp\n// 3) turn: with ipv6 addresses\n// 4) turn: occurring muliple times\nfunction filterIceServers(iceServers, edgeVersion) {\n var hasTurn = false;\n iceServers = JSON.parse(JSON.stringify(iceServers));\n return iceServers.filter(function(server) {\n if (server && (server.urls || server.url)) {\n var urls = server.urls || server.url;\n if (server.url && !server.urls) {\n console.warn('RTCIceServer.url is deprecated! Use urls instead.');\n }\n var isString = typeof urls === 'string';\n if (isString) {\n urls = [urls];\n }\n urls = urls.filter(function(url) {\n var validTurn = url.indexOf('turn:') === 0 &&\n url.indexOf('transport=udp') !== -1 &&\n url.indexOf('turn:[') === -1 &&\n !hasTurn;\n\n if (validTurn) {\n hasTurn = true;\n return true;\n }\n return url.indexOf('stun:') === 0 && edgeVersion >= 14393 &&\n url.indexOf('?transport=udp') === -1;\n });\n\n delete server.url;\n server.urls = isString ? urls[0] : urls;\n return !!urls.length;\n }\n });\n}\n\n// Determines the intersection of local and remote capabilities.\nfunction getCommonCapabilities(localCapabilities, remoteCapabilities) {\n var commonCapabilities = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: []\n };\n\n var findCodecByPayloadType = function(pt, codecs) {\n pt = parseInt(pt, 10);\n for (var i = 0; i < codecs.length; i++) {\n if (codecs[i].payloadType === pt ||\n codecs[i].preferredPayloadType === pt) {\n return codecs[i];\n }\n }\n };\n\n var rtxCapabilityMatches = function(lRtx, rRtx, lCodecs, rCodecs) {\n var lCodec = findCodecByPayloadType(lRtx.parameters.apt, lCodecs);\n var rCodec = findCodecByPayloadType(rRtx.parameters.apt, rCodecs);\n return lCodec && rCodec &&\n lCodec.name.toLowerCase() === rCodec.name.toLowerCase();\n };\n\n localCapabilities.codecs.forEach(function(lCodec) {\n for (var i = 0; i < remoteCapabilities.codecs.length; i++) {\n var rCodec = remoteCapabilities.codecs[i];\n if (lCodec.name.toLowerCase() === rCodec.name.toLowerCase() &&\n lCodec.clockRate === rCodec.clockRate) {\n if (lCodec.name.toLowerCase() === 'rtx' &&\n lCodec.parameters && rCodec.parameters.apt) {\n // for RTX we need to find the local rtx that has a apt\n // which points to the same local codec as the remote one.\n if (!rtxCapabilityMatches(lCodec, rCodec,\n localCapabilities.codecs, remoteCapabilities.codecs)) {\n continue;\n }\n }\n rCodec = JSON.parse(JSON.stringify(rCodec)); // deepcopy\n // number of channels is the highest common number of channels\n rCodec.numChannels = Math.min(lCodec.numChannels,\n rCodec.numChannels);\n // push rCodec so we reply with offerer payload type\n commonCapabilities.codecs.push(rCodec);\n\n // determine common feedback mechanisms\n rCodec.rtcpFeedback = rCodec.rtcpFeedback.filter(function(fb) {\n for (var j = 0; j < lCodec.rtcpFeedback.length; j++) {\n if (lCodec.rtcpFeedback[j].type === fb.type &&\n lCodec.rtcpFeedback[j].parameter === fb.parameter) {\n return true;\n }\n }\n return false;\n });\n // FIXME: also need to determine .parameters\n // see https://github.com/openpeer/ortc/issues/569\n break;\n }\n }\n });\n\n localCapabilities.headerExtensions.forEach(function(lHeaderExtension) {\n for (var i = 0; i < remoteCapabilities.headerExtensions.length;\n i++) {\n var rHeaderExtension = remoteCapabilities.headerExtensions[i];\n if (lHeaderExtension.uri === rHeaderExtension.uri) {\n commonCapabilities.headerExtensions.push(rHeaderExtension);\n break;\n }\n }\n });\n\n // FIXME: fecMechanisms\n return commonCapabilities;\n}\n\n// is action=setLocalDescription with type allowed in signalingState\nfunction isActionAllowedInSignalingState(action, type, signalingState) {\n return {\n offer: {\n setLocalDescription: ['stable', 'have-local-offer'],\n setRemoteDescription: ['stable', 'have-remote-offer']\n },\n answer: {\n setLocalDescription: ['have-remote-offer', 'have-local-pranswer'],\n setRemoteDescription: ['have-local-offer', 'have-remote-pranswer']\n }\n }[type][action].indexOf(signalingState) !== -1;\n}\n\nfunction maybeAddCandidate(iceTransport, candidate) {\n // Edge's internal representation adds some fields therefore\n // not all fieldѕ are taken into account.\n var alreadyAdded = iceTransport.getRemoteCandidates()\n .find(function(remoteCandidate) {\n return candidate.foundation === remoteCandidate.foundation &&\n candidate.ip === remoteCandidate.ip &&\n candidate.port === remoteCandidate.port &&\n candidate.priority === remoteCandidate.priority &&\n candidate.protocol === remoteCandidate.protocol &&\n candidate.type === remoteCandidate.type;\n });\n if (!alreadyAdded) {\n iceTransport.addRemoteCandidate(candidate);\n }\n return !alreadyAdded;\n}\n\n\nfunction makeError(name, description) {\n var e = new Error(description);\n e.name = name;\n // legacy error codes from https://heycam.github.io/webidl/#idl-DOMException-error-names\n e.code = {\n NotSupportedError: 9,\n InvalidStateError: 11,\n InvalidAccessError: 15,\n TypeError: undefined,\n OperationError: undefined\n }[name];\n return e;\n}\n\nmodule.exports = function(window, edgeVersion) {\n // https://w3c.github.io/mediacapture-main/#mediastream\n // Helper function to add the track to the stream and\n // dispatch the event ourselves.\n function addTrackToStreamAndFireEvent(track, stream) {\n stream.addTrack(track);\n stream.dispatchEvent(new window.MediaStreamTrackEvent('addtrack',\n {track: track}));\n }\n\n function removeTrackFromStreamAndFireEvent(track, stream) {\n stream.removeTrack(track);\n stream.dispatchEvent(new window.MediaStreamTrackEvent('removetrack',\n {track: track}));\n }\n\n function fireAddTrack(pc, track, receiver, streams) {\n var trackEvent = new Event('track');\n trackEvent.track = track;\n trackEvent.receiver = receiver;\n trackEvent.transceiver = {receiver: receiver};\n trackEvent.streams = streams;\n window.setTimeout(function() {\n pc._dispatchEvent('track', trackEvent);\n });\n }\n\n var RTCPeerConnection = function(config) {\n var pc = this;\n\n var _eventTarget = document.createDocumentFragment();\n ['addEventListener', 'removeEventListener', 'dispatchEvent']\n .forEach(function(method) {\n pc[method] = _eventTarget[method].bind(_eventTarget);\n });\n\n this.canTrickleIceCandidates = null;\n\n this.needNegotiation = false;\n\n this.localStreams = [];\n this.remoteStreams = [];\n\n this._localDescription = null;\n this._remoteDescription = null;\n\n this.signalingState = 'stable';\n this.iceConnectionState = 'new';\n this.connectionState = 'new';\n this.iceGatheringState = 'new';\n\n config = JSON.parse(JSON.stringify(config || {}));\n\n this.usingBundle = config.bundlePolicy === 'max-bundle';\n if (config.rtcpMuxPolicy === 'negotiate') {\n throw(makeError('NotSupportedError',\n 'rtcpMuxPolicy \\'negotiate\\' is not supported'));\n } else if (!config.rtcpMuxPolicy) {\n config.rtcpMuxPolicy = 'require';\n }\n\n switch (config.iceTransportPolicy) {\n case 'all':\n case 'relay':\n break;\n default:\n config.iceTransportPolicy = 'all';\n break;\n }\n\n switch (config.bundlePolicy) {\n case 'balanced':\n case 'max-compat':\n case 'max-bundle':\n break;\n default:\n config.bundlePolicy = 'balanced';\n break;\n }\n\n config.iceServers = filterIceServers(config.iceServers || [], edgeVersion);\n\n this._iceGatherers = [];\n if (config.iceCandidatePoolSize) {\n for (var i = config.iceCandidatePoolSize; i > 0; i--) {\n this._iceGatherers.push(new window.RTCIceGatherer({\n iceServers: config.iceServers,\n gatherPolicy: config.iceTransportPolicy\n }));\n }\n } else {\n config.iceCandidatePoolSize = 0;\n }\n\n this._config = config;\n\n // per-track iceGathers, iceTransports, dtlsTransports, rtpSenders, ...\n // everything that is needed to describe a SDP m-line.\n this.transceivers = [];\n\n this._sdpSessionId = SDPUtils.generateSessionId();\n this._sdpSessionVersion = 0;\n\n this._dtlsRole = undefined; // role for a=setup to use in answers.\n\n this._isClosed = false;\n };\n\n Object.defineProperty(RTCPeerConnection.prototype, 'localDescription', {\n configurable: true,\n get: function() {\n return this._localDescription;\n }\n });\n Object.defineProperty(RTCPeerConnection.prototype, 'remoteDescription', {\n configurable: true,\n get: function() {\n return this._remoteDescription;\n }\n });\n\n // set up event handlers on prototype\n RTCPeerConnection.prototype.onicecandidate = null;\n RTCPeerConnection.prototype.onaddstream = null;\n RTCPeerConnection.prototype.ontrack = null;\n RTCPeerConnection.prototype.onremovestream = null;\n RTCPeerConnection.prototype.onsignalingstatechange = null;\n RTCPeerConnection.prototype.oniceconnectionstatechange = null;\n RTCPeerConnection.prototype.onconnectionstatechange = null;\n RTCPeerConnection.prototype.onicegatheringstatechange = null;\n RTCPeerConnection.prototype.onnegotiationneeded = null;\n RTCPeerConnection.prototype.ondatachannel = null;\n\n RTCPeerConnection.prototype._dispatchEvent = function(name, event) {\n if (this._isClosed) {\n return;\n }\n this.dispatchEvent(event);\n if (typeof this['on' + name] === 'function') {\n this['on' + name](event);\n }\n };\n\n RTCPeerConnection.prototype._emitGatheringStateChange = function() {\n var event = new Event('icegatheringstatechange');\n this._dispatchEvent('icegatheringstatechange', event);\n };\n\n RTCPeerConnection.prototype.getConfiguration = function() {\n return this._config;\n };\n\n RTCPeerConnection.prototype.getLocalStreams = function() {\n return this.localStreams;\n };\n\n RTCPeerConnection.prototype.getRemoteStreams = function() {\n return this.remoteStreams;\n };\n\n // internal helper to create a transceiver object.\n // (which is not yet the same as the WebRTC 1.0 transceiver)\n RTCPeerConnection.prototype._createTransceiver = function(kind, doNotAdd) {\n var hasBundleTransport = this.transceivers.length > 0;\n var transceiver = {\n track: null,\n iceGatherer: null,\n iceTransport: null,\n dtlsTransport: null,\n localCapabilities: null,\n remoteCapabilities: null,\n rtpSender: null,\n rtpReceiver: null,\n kind: kind,\n mid: null,\n sendEncodingParameters: null,\n recvEncodingParameters: null,\n stream: null,\n associatedRemoteMediaStreams: [],\n wantReceive: true\n };\n if (this.usingBundle && hasBundleTransport) {\n transceiver.iceTransport = this.transceivers[0].iceTransport;\n transceiver.dtlsTransport = this.transceivers[0].dtlsTransport;\n } else {\n var transports = this._createIceAndDtlsTransports();\n transceiver.iceTransport = transports.iceTransport;\n transceiver.dtlsTransport = transports.dtlsTransport;\n }\n if (!doNotAdd) {\n this.transceivers.push(transceiver);\n }\n return transceiver;\n };\n\n RTCPeerConnection.prototype.addTrack = function(track, stream) {\n if (this._isClosed) {\n throw makeError('InvalidStateError',\n 'Attempted to call addTrack on a closed peerconnection.');\n }\n\n var alreadyExists = this.transceivers.find(function(s) {\n return s.track === track;\n });\n\n if (alreadyExists) {\n throw makeError('InvalidAccessError', 'Track already exists.');\n }\n\n var transceiver;\n for (var i = 0; i < this.transceivers.length; i++) {\n if (!this.transceivers[i].track &&\n this.transceivers[i].kind === track.kind) {\n transceiver = this.transceivers[i];\n }\n }\n if (!transceiver) {\n transceiver = this._createTransceiver(track.kind);\n }\n\n this._maybeFireNegotiationNeeded();\n\n if (this.localStreams.indexOf(stream) === -1) {\n this.localStreams.push(stream);\n }\n\n transceiver.track = track;\n transceiver.stream = stream;\n transceiver.rtpSender = new window.RTCRtpSender(track,\n transceiver.dtlsTransport);\n return transceiver.rtpSender;\n };\n\n RTCPeerConnection.prototype.addStream = function(stream) {\n var pc = this;\n if (edgeVersion >= 15025) {\n stream.getTracks().forEach(function(track) {\n pc.addTrack(track, stream);\n });\n } else {\n // Clone is necessary for local demos mostly, attaching directly\n // to two different senders does not work (build 10547).\n // Fixed in 15025 (or earlier)\n var clonedStream = stream.clone();\n stream.getTracks().forEach(function(track, idx) {\n var clonedTrack = clonedStream.getTracks()[idx];\n track.addEventListener('enabled', function(event) {\n clonedTrack.enabled = event.enabled;\n });\n });\n clonedStream.getTracks().forEach(function(track) {\n pc.addTrack(track, clonedStream);\n });\n }\n };\n\n RTCPeerConnection.prototype.removeTrack = function(sender) {\n if (this._isClosed) {\n throw makeError('InvalidStateError',\n 'Attempted to call removeTrack on a closed peerconnection.');\n }\n\n if (!(sender instanceof window.RTCRtpSender)) {\n throw new TypeError('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.');\n }\n\n var transceiver = this.transceivers.find(function(t) {\n return t.rtpSender === sender;\n });\n\n if (!transceiver) {\n throw makeError('InvalidAccessError',\n 'Sender was not created by this connection.');\n }\n var stream = transceiver.stream;\n\n transceiver.rtpSender.stop();\n transceiver.rtpSender = null;\n transceiver.track = null;\n transceiver.stream = null;\n\n // remove the stream from the set of local streams\n var localStreams = this.transceivers.map(function(t) {\n return t.stream;\n });\n if (localStreams.indexOf(stream) === -1 &&\n this.localStreams.indexOf(stream) > -1) {\n this.localStreams.splice(this.localStreams.indexOf(stream), 1);\n }\n\n this._maybeFireNegotiationNeeded();\n };\n\n RTCPeerConnection.prototype.removeStream = function(stream) {\n var pc = this;\n stream.getTracks().forEach(function(track) {\n var sender = pc.getSenders().find(function(s) {\n return s.track === track;\n });\n if (sender) {\n pc.removeTrack(sender);\n }\n });\n };\n\n RTCPeerConnection.prototype.getSenders = function() {\n return this.transceivers.filter(function(transceiver) {\n return !!transceiver.rtpSender;\n })\n .map(function(transceiver) {\n return transceiver.rtpSender;\n });\n };\n\n RTCPeerConnection.prototype.getReceivers = function() {\n return this.transceivers.filter(function(transceiver) {\n return !!transceiver.rtpReceiver;\n })\n .map(function(transceiver) {\n return transceiver.rtpReceiver;\n });\n };\n\n\n RTCPeerConnection.prototype._createIceGatherer = function(sdpMLineIndex,\n usingBundle) {\n var pc = this;\n if (usingBundle && sdpMLineIndex > 0) {\n return this.transceivers[0].iceGatherer;\n } else if (this._iceGatherers.length) {\n return this._iceGatherers.shift();\n }\n var iceGatherer = new window.RTCIceGatherer({\n iceServers: this._config.iceServers,\n gatherPolicy: this._config.iceTransportPolicy\n });\n Object.defineProperty(iceGatherer, 'state',\n {value: 'new', writable: true}\n );\n\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents = [];\n this.transceivers[sdpMLineIndex].bufferCandidates = function(event) {\n var end = !event.candidate || Object.keys(event.candidate).length === 0;\n // polyfill since RTCIceGatherer.state is not implemented in\n // Edge 10547 yet.\n iceGatherer.state = end ? 'completed' : 'gathering';\n if (pc.transceivers[sdpMLineIndex].bufferedCandidateEvents !== null) {\n pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event);\n }\n };\n iceGatherer.addEventListener('localcandidate',\n this.transceivers[sdpMLineIndex].bufferCandidates);\n return iceGatherer;\n };\n\n // start gathering from an RTCIceGatherer.\n RTCPeerConnection.prototype._gather = function(mid, sdpMLineIndex) {\n var pc = this;\n var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;\n if (iceGatherer.onlocalcandidate) {\n return;\n }\n var bufferedCandidateEvents =\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents;\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents = null;\n iceGatherer.removeEventListener('localcandidate',\n this.transceivers[sdpMLineIndex].bufferCandidates);\n iceGatherer.onlocalcandidate = function(evt) {\n if (pc.usingBundle && sdpMLineIndex > 0) {\n // if we know that we use bundle we can drop candidates with\n // ѕdpMLineIndex > 0. If we don't do this then our state gets\n // confused since we dispose the extra ice gatherer.\n return;\n }\n var event = new Event('icecandidate');\n event.candidate = {sdpMid: mid, sdpMLineIndex: sdpMLineIndex};\n\n var cand = evt.candidate;\n // Edge emits an empty object for RTCIceCandidateComplete‥\n var end = !cand || Object.keys(cand).length === 0;\n if (end) {\n // polyfill since RTCIceGatherer.state is not implemented in\n // Edge 10547 yet.\n if (iceGatherer.state === 'new' || iceGatherer.state === 'gathering') {\n iceGatherer.state = 'completed';\n }\n } else {\n if (iceGatherer.state === 'new') {\n iceGatherer.state = 'gathering';\n }\n // RTCIceCandidate doesn't have a component, needs to be added\n cand.component = 1;\n // also the usernameFragment. TODO: update SDP to take both variants.\n cand.ufrag = iceGatherer.getLocalParameters().usernameFragment;\n\n var serializedCandidate = SDPUtils.writeCandidate(cand);\n event.candidate = Object.assign(event.candidate,\n SDPUtils.parseCandidate(serializedCandidate));\n\n event.candidate.candidate = serializedCandidate;\n event.candidate.toJSON = function() {\n return {\n candidate: event.candidate.candidate,\n sdpMid: event.candidate.sdpMid,\n sdpMLineIndex: event.candidate.sdpMLineIndex,\n usernameFragment: event.candidate.usernameFragment\n };\n };\n }\n\n // update local description.\n var sections = SDPUtils.getMediaSections(pc._localDescription.sdp);\n if (!end) {\n sections[event.candidate.sdpMLineIndex] +=\n 'a=' + event.candidate.candidate + '\\r\\n';\n } else {\n sections[event.candidate.sdpMLineIndex] +=\n 'a=end-of-candidates\\r\\n';\n }\n pc._localDescription.sdp =\n SDPUtils.getDescription(pc._localDescription.sdp) +\n sections.join('');\n var complete = pc.transceivers.every(function(transceiver) {\n return transceiver.iceGatherer &&\n transceiver.iceGatherer.state === 'completed';\n });\n\n if (pc.iceGatheringState !== 'gathering') {\n pc.iceGatheringState = 'gathering';\n pc._emitGatheringStateChange();\n }\n\n // Emit candidate. Also emit null candidate when all gatherers are\n // complete.\n if (!end) {\n pc._dispatchEvent('icecandidate', event);\n }\n if (complete) {\n pc._dispatchEvent('icecandidate', new Event('icecandidate'));\n pc.iceGatheringState = 'complete';\n pc._emitGatheringStateChange();\n }\n };\n\n // emit already gathered candidates.\n window.setTimeout(function() {\n bufferedCandidateEvents.forEach(function(e) {\n iceGatherer.onlocalcandidate(e);\n });\n }, 0);\n };\n\n // Create ICE transport and DTLS transport.\n RTCPeerConnection.prototype._createIceAndDtlsTransports = function() {\n var pc = this;\n var iceTransport = new window.RTCIceTransport(null);\n iceTransport.onicestatechange = function() {\n pc._updateIceConnectionState();\n pc._updateConnectionState();\n };\n\n var dtlsTransport = new window.RTCDtlsTransport(iceTransport);\n dtlsTransport.ondtlsstatechange = function() {\n pc._updateConnectionState();\n };\n dtlsTransport.onerror = function() {\n // onerror does not set state to failed by itself.\n Object.defineProperty(dtlsTransport, 'state',\n {value: 'failed', writable: true});\n pc._updateConnectionState();\n };\n\n return {\n iceTransport: iceTransport,\n dtlsTransport: dtlsTransport\n };\n };\n\n // Destroy ICE gatherer, ICE transport and DTLS transport.\n // Without triggering the callbacks.\n RTCPeerConnection.prototype._disposeIceAndDtlsTransports = function(\n sdpMLineIndex) {\n var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;\n if (iceGatherer) {\n delete iceGatherer.onlocalcandidate;\n delete this.transceivers[sdpMLineIndex].iceGatherer;\n }\n var iceTransport = this.transceivers[sdpMLineIndex].iceTransport;\n if (iceTransport) {\n delete iceTransport.onicestatechange;\n delete this.transceivers[sdpMLineIndex].iceTransport;\n }\n var dtlsTransport = this.transceivers[sdpMLineIndex].dtlsTransport;\n if (dtlsTransport) {\n delete dtlsTransport.ondtlsstatechange;\n delete dtlsTransport.onerror;\n delete this.transceivers[sdpMLineIndex].dtlsTransport;\n }\n };\n\n // Start the RTP Sender and Receiver for a transceiver.\n RTCPeerConnection.prototype._transceive = function(transceiver,\n send, recv) {\n var params = getCommonCapabilities(transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n if (send && transceiver.rtpSender) {\n params.encodings = transceiver.sendEncodingParameters;\n params.rtcp = {\n cname: SDPUtils.localCName,\n compound: transceiver.rtcpParameters.compound\n };\n if (transceiver.recvEncodingParameters.length) {\n params.rtcp.ssrc = transceiver.recvEncodingParameters[0].ssrc;\n }\n transceiver.rtpSender.send(params);\n }\n if (recv && transceiver.rtpReceiver && params.codecs.length > 0) {\n // remove RTX field in Edge 14942\n if (transceiver.kind === 'video'\n && transceiver.recvEncodingParameters\n && edgeVersion < 15019) {\n transceiver.recvEncodingParameters.forEach(function(p) {\n delete p.rtx;\n });\n }\n if (transceiver.recvEncodingParameters.length) {\n params.encodings = transceiver.recvEncodingParameters;\n } else {\n params.encodings = [{}];\n }\n params.rtcp = {\n compound: transceiver.rtcpParameters.compound\n };\n if (transceiver.rtcpParameters.cname) {\n params.rtcp.cname = transceiver.rtcpParameters.cname;\n }\n if (transceiver.sendEncodingParameters.length) {\n params.rtcp.ssrc = transceiver.sendEncodingParameters[0].ssrc;\n }\n transceiver.rtpReceiver.receive(params);\n }\n };\n\n RTCPeerConnection.prototype.setLocalDescription = function(description) {\n var pc = this;\n\n // Note: pranswer is not supported.\n if (['offer', 'answer'].indexOf(description.type) === -1) {\n return Promise.reject(makeError('TypeError',\n 'Unsupported type \"' + description.type + '\"'));\n }\n\n if (!isActionAllowedInSignalingState('setLocalDescription',\n description.type, pc.signalingState) || pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not set local ' + description.type +\n ' in state ' + pc.signalingState));\n }\n\n var sections;\n var sessionpart;\n if (description.type === 'offer') {\n // VERY limited support for SDP munging. Limited to:\n // * changing the order of codecs\n sections = SDPUtils.splitSections(description.sdp);\n sessionpart = sections.shift();\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var caps = SDPUtils.parseRtpParameters(mediaSection);\n pc.transceivers[sdpMLineIndex].localCapabilities = caps;\n });\n\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n pc._gather(transceiver.mid, sdpMLineIndex);\n });\n } else if (description.type === 'answer') {\n sections = SDPUtils.splitSections(pc._remoteDescription.sdp);\n sessionpart = sections.shift();\n var isIceLite = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-lite').length > 0;\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var transceiver = pc.transceivers[sdpMLineIndex];\n var iceGatherer = transceiver.iceGatherer;\n var iceTransport = transceiver.iceTransport;\n var dtlsTransport = transceiver.dtlsTransport;\n var localCapabilities = transceiver.localCapabilities;\n var remoteCapabilities = transceiver.remoteCapabilities;\n\n // treat bundle-only as not-rejected.\n var rejected = SDPUtils.isRejected(mediaSection) &&\n SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0;\n\n if (!rejected && !transceiver.rejected) {\n var remoteIceParameters = SDPUtils.getIceParameters(\n mediaSection, sessionpart);\n var remoteDtlsParameters = SDPUtils.getDtlsParameters(\n mediaSection, sessionpart);\n if (isIceLite) {\n remoteDtlsParameters.role = 'server';\n }\n\n if (!pc.usingBundle || sdpMLineIndex === 0) {\n pc._gather(transceiver.mid, sdpMLineIndex);\n if (iceTransport.state === 'new') {\n iceTransport.start(iceGatherer, remoteIceParameters,\n isIceLite ? 'controlling' : 'controlled');\n }\n if (dtlsTransport.state === 'new') {\n dtlsTransport.start(remoteDtlsParameters);\n }\n }\n\n // Calculate intersection of capabilities.\n var params = getCommonCapabilities(localCapabilities,\n remoteCapabilities);\n\n // Start the RTCRtpSender. The RTCRtpReceiver for this\n // transceiver has already been started in setRemoteDescription.\n pc._transceive(transceiver,\n params.codecs.length > 0,\n false);\n }\n });\n }\n\n pc._localDescription = {\n type: description.type,\n sdp: description.sdp\n };\n if (description.type === 'offer') {\n pc._updateSignalingState('have-local-offer');\n } else {\n pc._updateSignalingState('stable');\n }\n\n return Promise.resolve();\n };\n\n RTCPeerConnection.prototype.setRemoteDescription = function(description) {\n var pc = this;\n\n // Note: pranswer is not supported.\n if (['offer', 'answer'].indexOf(description.type) === -1) {\n return Promise.reject(makeError('TypeError',\n 'Unsupported type \"' + description.type + '\"'));\n }\n\n if (!isActionAllowedInSignalingState('setRemoteDescription',\n description.type, pc.signalingState) || pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not set remote ' + description.type +\n ' in state ' + pc.signalingState));\n }\n\n var streams = {};\n pc.remoteStreams.forEach(function(stream) {\n streams[stream.id] = stream;\n });\n var receiverList = [];\n var sections = SDPUtils.splitSections(description.sdp);\n var sessionpart = sections.shift();\n var isIceLite = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-lite').length > 0;\n var usingBundle = SDPUtils.matchPrefix(sessionpart,\n 'a=group:BUNDLE ').length > 0;\n pc.usingBundle = usingBundle;\n var iceOptions = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-options:')[0];\n if (iceOptions) {\n pc.canTrickleIceCandidates = iceOptions.substr(14).split(' ')\n .indexOf('trickle') >= 0;\n } else {\n pc.canTrickleIceCandidates = false;\n }\n\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var lines = SDPUtils.splitLines(mediaSection);\n var kind = SDPUtils.getKind(mediaSection);\n // treat bundle-only as not-rejected.\n var rejected = SDPUtils.isRejected(mediaSection) &&\n SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0;\n var protocol = lines[0].substr(2).split(' ')[2];\n\n var direction = SDPUtils.getDirection(mediaSection, sessionpart);\n var remoteMsid = SDPUtils.parseMsid(mediaSection);\n\n var mid = SDPUtils.getMid(mediaSection) || SDPUtils.generateIdentifier();\n\n // Reject datachannels which are not implemented yet.\n if (rejected || (kind === 'application' && (protocol === 'DTLS/SCTP' ||\n protocol === 'UDP/DTLS/SCTP'))) {\n // TODO: this is dangerous in the case where a non-rejected m-line\n // becomes rejected.\n pc.transceivers[sdpMLineIndex] = {\n mid: mid,\n kind: kind,\n protocol: protocol,\n rejected: true\n };\n return;\n }\n\n if (!rejected && pc.transceivers[sdpMLineIndex] &&\n pc.transceivers[sdpMLineIndex].rejected) {\n // recycle a rejected transceiver.\n pc.transceivers[sdpMLineIndex] = pc._createTransceiver(kind, true);\n }\n\n var transceiver;\n var iceGatherer;\n var iceTransport;\n var dtlsTransport;\n var rtpReceiver;\n var sendEncodingParameters;\n var recvEncodingParameters;\n var localCapabilities;\n\n var track;\n // FIXME: ensure the mediaSection has rtcp-mux set.\n var remoteCapabilities = SDPUtils.parseRtpParameters(mediaSection);\n var remoteIceParameters;\n var remoteDtlsParameters;\n if (!rejected) {\n remoteIceParameters = SDPUtils.getIceParameters(mediaSection,\n sessionpart);\n remoteDtlsParameters = SDPUtils.getDtlsParameters(mediaSection,\n sessionpart);\n remoteDtlsParameters.role = 'client';\n }\n recvEncodingParameters =\n SDPUtils.parseRtpEncodingParameters(mediaSection);\n\n var rtcpParameters = SDPUtils.parseRtcpParameters(mediaSection);\n\n var isComplete = SDPUtils.matchPrefix(mediaSection,\n 'a=end-of-candidates', sessionpart).length > 0;\n var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:')\n .map(function(cand) {\n return SDPUtils.parseCandidate(cand);\n })\n .filter(function(cand) {\n return cand.component === 1;\n });\n\n // Check if we can use BUNDLE and dispose transports.\n if ((description.type === 'offer' || description.type === 'answer') &&\n !rejected && usingBundle && sdpMLineIndex > 0 &&\n pc.transceivers[sdpMLineIndex]) {\n pc._disposeIceAndDtlsTransports(sdpMLineIndex);\n pc.transceivers[sdpMLineIndex].iceGatherer =\n pc.transceivers[0].iceGatherer;\n pc.transceivers[sdpMLineIndex].iceTransport =\n pc.transceivers[0].iceTransport;\n pc.transceivers[sdpMLineIndex].dtlsTransport =\n pc.transceivers[0].dtlsTransport;\n if (pc.transceivers[sdpMLineIndex].rtpSender) {\n pc.transceivers[sdpMLineIndex].rtpSender.setTransport(\n pc.transceivers[0].dtlsTransport);\n }\n if (pc.transceivers[sdpMLineIndex].rtpReceiver) {\n pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport(\n pc.transceivers[0].dtlsTransport);\n }\n }\n if (description.type === 'offer' && !rejected) {\n transceiver = pc.transceivers[sdpMLineIndex] ||\n pc._createTransceiver(kind);\n transceiver.mid = mid;\n\n if (!transceiver.iceGatherer) {\n transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,\n usingBundle);\n }\n\n if (cands.length && transceiver.iceTransport.state === 'new') {\n if (isComplete && (!usingBundle || sdpMLineIndex === 0)) {\n transceiver.iceTransport.setRemoteCandidates(cands);\n } else {\n cands.forEach(function(candidate) {\n maybeAddCandidate(transceiver.iceTransport, candidate);\n });\n }\n }\n\n localCapabilities = window.RTCRtpReceiver.getCapabilities(kind);\n\n // filter RTX until additional stuff needed for RTX is implemented\n // in adapter.js\n if (edgeVersion < 15019) {\n localCapabilities.codecs = localCapabilities.codecs.filter(\n function(codec) {\n return codec.name !== 'rtx';\n });\n }\n\n sendEncodingParameters = transceiver.sendEncodingParameters || [{\n ssrc: (2 * sdpMLineIndex + 2) * 1001\n }];\n\n // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams\n var isNewTrack = false;\n if (direction === 'sendrecv' || direction === 'sendonly') {\n isNewTrack = !transceiver.rtpReceiver;\n rtpReceiver = transceiver.rtpReceiver ||\n new window.RTCRtpReceiver(transceiver.dtlsTransport, kind);\n\n if (isNewTrack) {\n var stream;\n track = rtpReceiver.track;\n // FIXME: does not work with Plan B.\n if (remoteMsid && remoteMsid.stream === '-') {\n // no-op. a stream id of '-' means: no associated stream.\n } else if (remoteMsid) {\n if (!streams[remoteMsid.stream]) {\n streams[remoteMsid.stream] = new window.MediaStream();\n Object.defineProperty(streams[remoteMsid.stream], 'id', {\n get: function() {\n return remoteMsid.stream;\n }\n });\n }\n Object.defineProperty(track, 'id', {\n get: function() {\n return remoteMsid.track;\n }\n });\n stream = streams[remoteMsid.stream];\n } else {\n if (!streams.default) {\n streams.default = new window.MediaStream();\n }\n stream = streams.default;\n }\n if (stream) {\n addTrackToStreamAndFireEvent(track, stream);\n transceiver.associatedRemoteMediaStreams.push(stream);\n }\n receiverList.push([track, rtpReceiver, stream]);\n }\n } else if (transceiver.rtpReceiver && transceiver.rtpReceiver.track) {\n transceiver.associatedRemoteMediaStreams.forEach(function(s) {\n var nativeTrack = s.getTracks().find(function(t) {\n return t.id === transceiver.rtpReceiver.track.id;\n });\n if (nativeTrack) {\n removeTrackFromStreamAndFireEvent(nativeTrack, s);\n }\n });\n transceiver.associatedRemoteMediaStreams = [];\n }\n\n transceiver.localCapabilities = localCapabilities;\n transceiver.remoteCapabilities = remoteCapabilities;\n transceiver.rtpReceiver = rtpReceiver;\n transceiver.rtcpParameters = rtcpParameters;\n transceiver.sendEncodingParameters = sendEncodingParameters;\n transceiver.recvEncodingParameters = recvEncodingParameters;\n\n // Start the RTCRtpReceiver now. The RTPSender is started in\n // setLocalDescription.\n pc._transceive(pc.transceivers[sdpMLineIndex],\n false,\n isNewTrack);\n } else if (description.type === 'answer' && !rejected) {\n transceiver = pc.transceivers[sdpMLineIndex];\n iceGatherer = transceiver.iceGatherer;\n iceTransport = transceiver.iceTransport;\n dtlsTransport = transceiver.dtlsTransport;\n rtpReceiver = transceiver.rtpReceiver;\n sendEncodingParameters = transceiver.sendEncodingParameters;\n localCapabilities = transceiver.localCapabilities;\n\n pc.transceivers[sdpMLineIndex].recvEncodingParameters =\n recvEncodingParameters;\n pc.transceivers[sdpMLineIndex].remoteCapabilities =\n remoteCapabilities;\n pc.transceivers[sdpMLineIndex].rtcpParameters = rtcpParameters;\n\n if (cands.length && iceTransport.state === 'new') {\n if ((isIceLite || isComplete) &&\n (!usingBundle || sdpMLineIndex === 0)) {\n iceTransport.setRemoteCandidates(cands);\n } else {\n cands.forEach(function(candidate) {\n maybeAddCandidate(transceiver.iceTransport, candidate);\n });\n }\n }\n\n if (!usingBundle || sdpMLineIndex === 0) {\n if (iceTransport.state === 'new') {\n iceTransport.start(iceGatherer, remoteIceParameters,\n 'controlling');\n }\n if (dtlsTransport.state === 'new') {\n dtlsTransport.start(remoteDtlsParameters);\n }\n }\n\n // If the offer contained RTX but the answer did not,\n // remove RTX from sendEncodingParameters.\n var commonCapabilities = getCommonCapabilities(\n transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n\n var hasRtx = commonCapabilities.codecs.filter(function(c) {\n return c.name.toLowerCase() === 'rtx';\n }).length;\n if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {\n delete transceiver.sendEncodingParameters[0].rtx;\n }\n\n pc._transceive(transceiver,\n direction === 'sendrecv' || direction === 'recvonly',\n direction === 'sendrecv' || direction === 'sendonly');\n\n // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams\n if (rtpReceiver &&\n (direction === 'sendrecv' || direction === 'sendonly')) {\n track = rtpReceiver.track;\n if (remoteMsid) {\n if (!streams[remoteMsid.stream]) {\n streams[remoteMsid.stream] = new window.MediaStream();\n }\n addTrackToStreamAndFireEvent(track, streams[remoteMsid.stream]);\n receiverList.push([track, rtpReceiver, streams[remoteMsid.stream]]);\n } else {\n if (!streams.default) {\n streams.default = new window.MediaStream();\n }\n addTrackToStreamAndFireEvent(track, streams.default);\n receiverList.push([track, rtpReceiver, streams.default]);\n }\n } else {\n // FIXME: actually the receiver should be created later.\n delete transceiver.rtpReceiver;\n }\n }\n });\n\n if (pc._dtlsRole === undefined) {\n pc._dtlsRole = description.type === 'offer' ? 'active' : 'passive';\n }\n\n pc._remoteDescription = {\n type: description.type,\n sdp: description.sdp\n };\n if (description.type === 'offer') {\n pc._updateSignalingState('have-remote-offer');\n } else {\n pc._updateSignalingState('stable');\n }\n Object.keys(streams).forEach(function(sid) {\n var stream = streams[sid];\n if (stream.getTracks().length) {\n if (pc.remoteStreams.indexOf(stream) === -1) {\n pc.remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n window.setTimeout(function() {\n pc._dispatchEvent('addstream', event);\n });\n }\n\n receiverList.forEach(function(item) {\n var track = item[0];\n var receiver = item[1];\n if (stream.id !== item[2].id) {\n return;\n }\n fireAddTrack(pc, track, receiver, [stream]);\n });\n }\n });\n receiverList.forEach(function(item) {\n if (item[2]) {\n return;\n }\n fireAddTrack(pc, item[0], item[1], []);\n });\n\n // check whether addIceCandidate({}) was called within four seconds after\n // setRemoteDescription.\n window.setTimeout(function() {\n if (!(pc && pc.transceivers)) {\n return;\n }\n pc.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport &&\n transceiver.iceTransport.state === 'new' &&\n transceiver.iceTransport.getRemoteCandidates().length > 0) {\n console.warn('Timeout for addRemoteCandidate. Consider sending ' +\n 'an end-of-candidates notification');\n transceiver.iceTransport.addRemoteCandidate({});\n }\n });\n }, 4000);\n\n return Promise.resolve();\n };\n\n RTCPeerConnection.prototype.close = function() {\n this.transceivers.forEach(function(transceiver) {\n /* not yet\n if (transceiver.iceGatherer) {\n transceiver.iceGatherer.close();\n }\n */\n if (transceiver.iceTransport) {\n transceiver.iceTransport.stop();\n }\n if (transceiver.dtlsTransport) {\n transceiver.dtlsTransport.stop();\n }\n if (transceiver.rtpSender) {\n transceiver.rtpSender.stop();\n }\n if (transceiver.rtpReceiver) {\n transceiver.rtpReceiver.stop();\n }\n });\n // FIXME: clean up tracks, local streams, remote streams, etc\n this._isClosed = true;\n this._updateSignalingState('closed');\n };\n\n // Update the signaling state.\n RTCPeerConnection.prototype._updateSignalingState = function(newState) {\n this.signalingState = newState;\n var event = new Event('signalingstatechange');\n this._dispatchEvent('signalingstatechange', event);\n };\n\n // Determine whether to fire the negotiationneeded event.\n RTCPeerConnection.prototype._maybeFireNegotiationNeeded = function() {\n var pc = this;\n if (this.signalingState !== 'stable' || this.needNegotiation === true) {\n return;\n }\n this.needNegotiation = true;\n window.setTimeout(function() {\n if (pc.needNegotiation) {\n pc.needNegotiation = false;\n var event = new Event('negotiationneeded');\n pc._dispatchEvent('negotiationneeded', event);\n }\n }, 0);\n };\n\n // Update the ice connection state.\n RTCPeerConnection.prototype._updateIceConnectionState = function() {\n var newState;\n var states = {\n 'new': 0,\n closed: 0,\n checking: 0,\n connected: 0,\n completed: 0,\n disconnected: 0,\n failed: 0\n };\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport && !transceiver.rejected) {\n states[transceiver.iceTransport.state]++;\n }\n });\n\n newState = 'new';\n if (states.failed > 0) {\n newState = 'failed';\n } else if (states.checking > 0) {\n newState = 'checking';\n } else if (states.disconnected > 0) {\n newState = 'disconnected';\n } else if (states.new > 0) {\n newState = 'new';\n } else if (states.connected > 0) {\n newState = 'connected';\n } else if (states.completed > 0) {\n newState = 'completed';\n }\n\n if (newState !== this.iceConnectionState) {\n this.iceConnectionState = newState;\n var event = new Event('iceconnectionstatechange');\n this._dispatchEvent('iceconnectionstatechange', event);\n }\n };\n\n // Update the connection state.\n RTCPeerConnection.prototype._updateConnectionState = function() {\n var newState;\n var states = {\n 'new': 0,\n closed: 0,\n connecting: 0,\n connected: 0,\n completed: 0,\n disconnected: 0,\n failed: 0\n };\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport && transceiver.dtlsTransport &&\n !transceiver.rejected) {\n states[transceiver.iceTransport.state]++;\n states[transceiver.dtlsTransport.state]++;\n }\n });\n // ICETransport.completed and connected are the same for this purpose.\n states.connected += states.completed;\n\n newState = 'new';\n if (states.failed > 0) {\n newState = 'failed';\n } else if (states.connecting > 0) {\n newState = 'connecting';\n } else if (states.disconnected > 0) {\n newState = 'disconnected';\n } else if (states.new > 0) {\n newState = 'new';\n } else if (states.connected > 0) {\n newState = 'connected';\n }\n\n if (newState !== this.connectionState) {\n this.connectionState = newState;\n var event = new Event('connectionstatechange');\n this._dispatchEvent('connectionstatechange', event);\n }\n };\n\n RTCPeerConnection.prototype.createOffer = function() {\n var pc = this;\n\n if (pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createOffer after close'));\n }\n\n var numAudioTracks = pc.transceivers.filter(function(t) {\n return t.kind === 'audio';\n }).length;\n var numVideoTracks = pc.transceivers.filter(function(t) {\n return t.kind === 'video';\n }).length;\n\n // Determine number of audio and video tracks we need to send/recv.\n var offerOptions = arguments[0];\n if (offerOptions) {\n // Reject Chrome legacy constraints.\n if (offerOptions.mandatory || offerOptions.optional) {\n throw new TypeError(\n 'Legacy mandatory/optional constraints not supported.');\n }\n if (offerOptions.offerToReceiveAudio !== undefined) {\n if (offerOptions.offerToReceiveAudio === true) {\n numAudioTracks = 1;\n } else if (offerOptions.offerToReceiveAudio === false) {\n numAudioTracks = 0;\n } else {\n numAudioTracks = offerOptions.offerToReceiveAudio;\n }\n }\n if (offerOptions.offerToReceiveVideo !== undefined) {\n if (offerOptions.offerToReceiveVideo === true) {\n numVideoTracks = 1;\n } else if (offerOptions.offerToReceiveVideo === false) {\n numVideoTracks = 0;\n } else {\n numVideoTracks = offerOptions.offerToReceiveVideo;\n }\n }\n }\n\n pc.transceivers.forEach(function(transceiver) {\n if (transceiver.kind === 'audio') {\n numAudioTracks--;\n if (numAudioTracks < 0) {\n transceiver.wantReceive = false;\n }\n } else if (transceiver.kind === 'video') {\n numVideoTracks--;\n if (numVideoTracks < 0) {\n transceiver.wantReceive = false;\n }\n }\n });\n\n // Create M-lines for recvonly streams.\n while (numAudioTracks > 0 || numVideoTracks > 0) {\n if (numAudioTracks > 0) {\n pc._createTransceiver('audio');\n numAudioTracks--;\n }\n if (numVideoTracks > 0) {\n pc._createTransceiver('video');\n numVideoTracks--;\n }\n }\n\n var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,\n pc._sdpSessionVersion++);\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n // For each track, create an ice gatherer, ice transport,\n // dtls transport, potentially rtpsender and rtpreceiver.\n var track = transceiver.track;\n var kind = transceiver.kind;\n var mid = transceiver.mid || SDPUtils.generateIdentifier();\n transceiver.mid = mid;\n\n if (!transceiver.iceGatherer) {\n transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,\n pc.usingBundle);\n }\n\n var localCapabilities = window.RTCRtpSender.getCapabilities(kind);\n // filter RTX until additional stuff needed for RTX is implemented\n // in adapter.js\n if (edgeVersion < 15019) {\n localCapabilities.codecs = localCapabilities.codecs.filter(\n function(codec) {\n return codec.name !== 'rtx';\n });\n }\n localCapabilities.codecs.forEach(function(codec) {\n // work around https://bugs.chromium.org/p/webrtc/issues/detail?id=6552\n // by adding level-asymmetry-allowed=1\n if (codec.name === 'H264' &&\n codec.parameters['level-asymmetry-allowed'] === undefined) {\n codec.parameters['level-asymmetry-allowed'] = '1';\n }\n\n // for subsequent offers, we might have to re-use the payload\n // type of the last offer.\n if (transceiver.remoteCapabilities &&\n transceiver.remoteCapabilities.codecs) {\n transceiver.remoteCapabilities.codecs.forEach(function(remoteCodec) {\n if (codec.name.toLowerCase() === remoteCodec.name.toLowerCase() &&\n codec.clockRate === remoteCodec.clockRate) {\n codec.preferredPayloadType = remoteCodec.payloadType;\n }\n });\n }\n });\n localCapabilities.headerExtensions.forEach(function(hdrExt) {\n var remoteExtensions = transceiver.remoteCapabilities &&\n transceiver.remoteCapabilities.headerExtensions || [];\n remoteExtensions.forEach(function(rHdrExt) {\n if (hdrExt.uri === rHdrExt.uri) {\n hdrExt.id = rHdrExt.id;\n }\n });\n });\n\n // generate an ssrc now, to be used later in rtpSender.send\n var sendEncodingParameters = transceiver.sendEncodingParameters || [{\n ssrc: (2 * sdpMLineIndex + 1) * 1001\n }];\n if (track) {\n // add RTX\n if (edgeVersion >= 15019 && kind === 'video' &&\n !sendEncodingParameters[0].rtx) {\n sendEncodingParameters[0].rtx = {\n ssrc: sendEncodingParameters[0].ssrc + 1\n };\n }\n }\n\n if (transceiver.wantReceive) {\n transceiver.rtpReceiver = new window.RTCRtpReceiver(\n transceiver.dtlsTransport, kind);\n }\n\n transceiver.localCapabilities = localCapabilities;\n transceiver.sendEncodingParameters = sendEncodingParameters;\n });\n\n // always offer BUNDLE and dispose on return if not supported.\n if (pc._config.bundlePolicy !== 'max-compat') {\n sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {\n return t.mid;\n }).join(' ') + '\\r\\n';\n }\n sdp += 'a=ice-options:trickle\\r\\n';\n\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n sdp += writeMediaSection(transceiver, transceiver.localCapabilities,\n 'offer', transceiver.stream, pc._dtlsRole);\n sdp += 'a=rtcp-rsize\\r\\n';\n\n if (transceiver.iceGatherer && pc.iceGatheringState !== 'new' &&\n (sdpMLineIndex === 0 || !pc.usingBundle)) {\n transceiver.iceGatherer.getLocalCandidates().forEach(function(cand) {\n cand.component = 1;\n sdp += 'a=' + SDPUtils.writeCandidate(cand) + '\\r\\n';\n });\n\n if (transceiver.iceGatherer.state === 'completed') {\n sdp += 'a=end-of-candidates\\r\\n';\n }\n }\n });\n\n var desc = new window.RTCSessionDescription({\n type: 'offer',\n sdp: sdp\n });\n return Promise.resolve(desc);\n };\n\n RTCPeerConnection.prototype.createAnswer = function() {\n var pc = this;\n\n if (pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createAnswer after close'));\n }\n\n if (!(pc.signalingState === 'have-remote-offer' ||\n pc.signalingState === 'have-local-pranswer')) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createAnswer in signalingState ' + pc.signalingState));\n }\n\n var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,\n pc._sdpSessionVersion++);\n if (pc.usingBundle) {\n sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {\n return t.mid;\n }).join(' ') + '\\r\\n';\n }\n sdp += 'a=ice-options:trickle\\r\\n';\n\n var mediaSectionsInOffer = SDPUtils.getMediaSections(\n pc._remoteDescription.sdp).length;\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n if (sdpMLineIndex + 1 > mediaSectionsInOffer) {\n return;\n }\n if (transceiver.rejected) {\n if (transceiver.kind === 'application') {\n if (transceiver.protocol === 'DTLS/SCTP') { // legacy fmt\n sdp += 'm=application 0 DTLS/SCTP 5000\\r\\n';\n } else {\n sdp += 'm=application 0 ' + transceiver.protocol +\n ' webrtc-datachannel\\r\\n';\n }\n } else if (transceiver.kind === 'audio') {\n sdp += 'm=audio 0 UDP/TLS/RTP/SAVPF 0\\r\\n' +\n 'a=rtpmap:0 PCMU/8000\\r\\n';\n } else if (transceiver.kind === 'video') {\n sdp += 'm=video 0 UDP/TLS/RTP/SAVPF 120\\r\\n' +\n 'a=rtpmap:120 VP8/90000\\r\\n';\n }\n sdp += 'c=IN IP4 0.0.0.0\\r\\n' +\n 'a=inactive\\r\\n' +\n 'a=mid:' + transceiver.mid + '\\r\\n';\n return;\n }\n\n // FIXME: look at direction.\n if (transceiver.stream) {\n var localTrack;\n if (transceiver.kind === 'audio') {\n localTrack = transceiver.stream.getAudioTracks()[0];\n } else if (transceiver.kind === 'video') {\n localTrack = transceiver.stream.getVideoTracks()[0];\n }\n if (localTrack) {\n // add RTX\n if (edgeVersion >= 15019 && transceiver.kind === 'video' &&\n !transceiver.sendEncodingParameters[0].rtx) {\n transceiver.sendEncodingParameters[0].rtx = {\n ssrc: transceiver.sendEncodingParameters[0].ssrc + 1\n };\n }\n }\n }\n\n // Calculate intersection of capabilities.\n var commonCapabilities = getCommonCapabilities(\n transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n\n var hasRtx = commonCapabilities.codecs.filter(function(c) {\n return c.name.toLowerCase() === 'rtx';\n }).length;\n if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {\n delete transceiver.sendEncodingParameters[0].rtx;\n }\n\n sdp += writeMediaSection(transceiver, commonCapabilities,\n 'answer', transceiver.stream, pc._dtlsRole);\n if (transceiver.rtcpParameters &&\n transceiver.rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n });\n\n var desc = new window.RTCSessionDescription({\n type: 'answer',\n sdp: sdp\n });\n return Promise.resolve(desc);\n };\n\n RTCPeerConnection.prototype.addIceCandidate = function(candidate) {\n var pc = this;\n var sections;\n if (candidate && !(candidate.sdpMLineIndex !== undefined ||\n candidate.sdpMid)) {\n return Promise.reject(new TypeError('sdpMLineIndex or sdpMid required'));\n }\n\n // TODO: needs to go into ops queue.\n return new Promise(function(resolve, reject) {\n if (!pc._remoteDescription) {\n return reject(makeError('InvalidStateError',\n 'Can not add ICE candidate without a remote description'));\n } else if (!candidate || candidate.candidate === '') {\n for (var j = 0; j < pc.transceivers.length; j++) {\n if (pc.transceivers[j].rejected) {\n continue;\n }\n pc.transceivers[j].iceTransport.addRemoteCandidate({});\n sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp);\n sections[j] += 'a=end-of-candidates\\r\\n';\n pc._remoteDescription.sdp =\n SDPUtils.getDescription(pc._remoteDescription.sdp) +\n sections.join('');\n if (pc.usingBundle) {\n break;\n }\n }\n } else {\n var sdpMLineIndex = candidate.sdpMLineIndex;\n if (candidate.sdpMid) {\n for (var i = 0; i < pc.transceivers.length; i++) {\n if (pc.transceivers[i].mid === candidate.sdpMid) {\n sdpMLineIndex = i;\n break;\n }\n }\n }\n var transceiver = pc.transceivers[sdpMLineIndex];\n if (transceiver) {\n if (transceiver.rejected) {\n return resolve();\n }\n var cand = Object.keys(candidate.candidate).length > 0 ?\n SDPUtils.parseCandidate(candidate.candidate) : {};\n // Ignore Chrome's invalid candidates since Edge does not like them.\n if (cand.protocol === 'tcp' && (cand.port === 0 || cand.port === 9)) {\n return resolve();\n }\n // Ignore RTCP candidates, we assume RTCP-MUX.\n if (cand.component && cand.component !== 1) {\n return resolve();\n }\n // when using bundle, avoid adding candidates to the wrong\n // ice transport. And avoid adding candidates added in the SDP.\n if (sdpMLineIndex === 0 || (sdpMLineIndex > 0 &&\n transceiver.iceTransport !== pc.transceivers[0].iceTransport)) {\n if (!maybeAddCandidate(transceiver.iceTransport, cand)) {\n return reject(makeError('OperationError',\n 'Can not add ICE candidate'));\n }\n }\n\n // update the remoteDescription.\n var candidateString = candidate.candidate.trim();\n if (candidateString.indexOf('a=') === 0) {\n candidateString = candidateString.substr(2);\n }\n sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp);\n sections[sdpMLineIndex] += 'a=' +\n (cand.type ? candidateString : 'end-of-candidates')\n + '\\r\\n';\n pc._remoteDescription.sdp =\n SDPUtils.getDescription(pc._remoteDescription.sdp) +\n sections.join('');\n } else {\n return reject(makeError('OperationError',\n 'Can not add ICE candidate'));\n }\n }\n resolve();\n });\n };\n\n RTCPeerConnection.prototype.getStats = function(selector) {\n if (selector && selector instanceof window.MediaStreamTrack) {\n var senderOrReceiver = null;\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.rtpSender &&\n transceiver.rtpSender.track === selector) {\n senderOrReceiver = transceiver.rtpSender;\n } else if (transceiver.rtpReceiver &&\n transceiver.rtpReceiver.track === selector) {\n senderOrReceiver = transceiver.rtpReceiver;\n }\n });\n if (!senderOrReceiver) {\n throw makeError('InvalidAccessError', 'Invalid selector.');\n }\n return senderOrReceiver.getStats();\n }\n\n var promises = [];\n this.transceivers.forEach(function(transceiver) {\n ['rtpSender', 'rtpReceiver', 'iceGatherer', 'iceTransport',\n 'dtlsTransport'].forEach(function(method) {\n if (transceiver[method]) {\n promises.push(transceiver[method].getStats());\n }\n });\n });\n return Promise.all(promises).then(function(allStats) {\n var results = new Map();\n allStats.forEach(function(stats) {\n stats.forEach(function(stat) {\n results.set(stat.id, stat);\n });\n });\n return results;\n });\n };\n\n // fix low-level stat names and return Map instead of object.\n var ortcObjects = ['RTCRtpSender', 'RTCRtpReceiver', 'RTCIceGatherer',\n 'RTCIceTransport', 'RTCDtlsTransport'];\n ortcObjects.forEach(function(ortcObjectName) {\n var obj = window[ortcObjectName];\n if (obj && obj.prototype && obj.prototype.getStats) {\n var nativeGetstats = obj.prototype.getStats;\n obj.prototype.getStats = function() {\n return nativeGetstats.apply(this)\n .then(function(nativeStats) {\n var mapStats = new Map();\n Object.keys(nativeStats).forEach(function(id) {\n nativeStats[id].type = fixStatsType(nativeStats[id]);\n mapStats.set(id, nativeStats[id]);\n });\n return mapStats;\n });\n };\n }\n });\n\n // legacy callback shims. Should be moved to adapter.js some days.\n var methods = ['createOffer', 'createAnswer'];\n methods.forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[0] === 'function' ||\n typeof args[1] === 'function') { // legacy\n return nativeMethod.apply(this, [arguments[2]])\n .then(function(description) {\n if (typeof args[0] === 'function') {\n args[0].apply(null, [description]);\n }\n }, function(error) {\n if (typeof args[1] === 'function') {\n args[1].apply(null, [error]);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n methods = ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'];\n methods.forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[1] === 'function' ||\n typeof args[2] === 'function') { // legacy\n return nativeMethod.apply(this, arguments)\n .then(function() {\n if (typeof args[1] === 'function') {\n args[1].apply(null);\n }\n }, function(error) {\n if (typeof args[2] === 'function') {\n args[2].apply(null, [error]);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n // getStats is special. It doesn't have a spec legacy method yet we support\n // getStats(something, cb) without error callbacks.\n ['getStats'].forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[1] === 'function') {\n return nativeMethod.apply(this, arguments)\n .then(function() {\n if (typeof args[1] === 'function') {\n args[1].apply(null);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n return RTCPeerConnection;\n};\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var capitalize = require('./capitalize'),\n createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nmodule.exports = camelCase;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\nfunction mapKeys(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n}\n\nmodule.exports = mapKeys;\n","\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n var cursor = nodes.length\n , sorted = new Array(cursor)\n , visited = {}\n , i = cursor\n // Better data structures make algorithm much faster.\n , outgoingEdges = makeOutgoingEdges(edges)\n , nodesHash = makeNodesHash(nodes)\n\n // check for unknown nodes\n edges.forEach(function(edge) {\n if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n }\n })\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, new Set())\n }\n\n return sorted\n\n function visit(node, i, predecessors) {\n if(predecessors.has(node)) {\n var nodeRep\n try {\n nodeRep = \", node was:\" + JSON.stringify(node)\n } catch(e) {\n nodeRep = \"\"\n }\n throw new Error('Cyclic dependency' + nodeRep)\n }\n\n if (!nodesHash.has(node)) {\n throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n }\n\n if (visited[i]) return;\n visited[i] = true\n\n var outgoing = outgoingEdges.get(node) || new Set()\n outgoing = Array.from(outgoing)\n\n if (i = outgoing.length) {\n predecessors.add(node)\n do {\n var child = outgoing[--i]\n visit(child, nodesHash.get(child), predecessors)\n } while (i)\n predecessors.delete(node)\n }\n\n sorted[--cursor] = node\n }\n}\n\nfunction uniqueNodes(arr){\n var res = new Set()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n res.add(edge[0])\n res.add(edge[1])\n }\n return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n var edges = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n edges.get(edge[0]).add(edge[1])\n }\n return edges\n}\n\nfunction makeNodesHash(arr){\n var res = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n res.set(arr[i], i)\n }\n return res\n}\n","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n module.exports = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n module.exports = false;\n}\n","import { Transport } from \"../transport.js\";\nimport parseqs from \"parseqs\";\nimport yeast from \"yeast\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Transport name.\n *\n * @api public\n */\n get name() {\n return \"websocket\";\n }\n /**\n * Opens socket.\n *\n * @api private\n */\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emit(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @api private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = this.onClose.bind(this);\n this.ws.onmessage = ev => this.onData(ev.data);\n this.ws.onerror = e => this.onError(\"websocket error\", e);\n }\n /**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, data => {\n // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emit(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n /**\n * Closes socket.\n *\n * @api private\n */\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = parseqs.encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n check() {\n return (!!WebSocket &&\n !(\"__initialize\" in WebSocket && this.name === WS.prototype.name));\n }\n}\n","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n this.jitter = jitter;\n};\n\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/** @jsx jsx */\nvar React = __importStar(require(\"react\"));\nvar react_1 = require(\"@emotion/react\");\nvar helpers_1 = require(\"./helpers\");\nvar clip = react_1.keyframes(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n 0% {transform: rotate(0deg) scale(1)}\\n 50% {transform: rotate(180deg) scale(0.8)}\\n 100% {transform: rotate(360deg) scale(1)}\\n\"], [\"\\n 0% {transform: rotate(0deg) scale(1)}\\n 50% {transform: rotate(180deg) scale(0.8)}\\n 100% {transform: rotate(360deg) scale(1)}\\n\"])));\nvar Loader = /** @class */ (function (_super) {\n __extends(Loader, _super);\n function Loader() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.style = function () {\n var _a = _this.props, size = _a.size, color = _a.color, speedMultiplier = _a.speedMultiplier;\n return react_1.css(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n background: transparent !important;\\n width: \", \";\\n height: \", \";\\n border-radius: 100%;\\n border: 2px solid;\\n border-color: \", \";\\n border-bottom-color: transparent;\\n display: inline-block;\\n animation: \", \" \", \"s 0s infinite linear;\\n animation-fill-mode: both;\\n \"], [\"\\n background: transparent !important;\\n width: \", \";\\n height: \", \";\\n border-radius: 100%;\\n border: 2px solid;\\n border-color: \", \";\\n border-bottom-color: transparent;\\n display: inline-block;\\n animation: \", \" \", \"s 0s infinite linear;\\n animation-fill-mode: both;\\n \"])), helpers_1.cssValue(size), helpers_1.cssValue(size), color, clip, 0.75 / speedMultiplier);\n };\n return _this;\n }\n Loader.prototype.render = function () {\n var _a = this.props, loading = _a.loading, css = _a.css;\n return loading ? react_1.jsx(\"span\", { css: [this.style(), css] }) : null;\n };\n Loader.defaultProps = helpers_1.sizeDefaults(35);\n return Loader;\n}(React.PureComponent));\nexports.default = Loader;\nvar templateObject_1, templateObject_2;\n","\"use strict\";\nimport { getAddress } from \"@ethersproject/address\";\nimport { hexZeroPad } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder\";\nexport class AddressCoder extends Coder {\n constructor(localName) {\n super(\"address\", \"address\", localName, false);\n }\n defaultValue() {\n return \"0x0000000000000000000000000000000000000000\";\n }\n encode(writer, value) {\n try {\n value = getAddress(value);\n }\n catch (error) {\n this._throwError(error.message, value);\n }\n return writer.writeValue(value);\n }\n decode(reader) {\n return getAddress(hexZeroPad(reader.readValue().toHexString(), 20));\n }\n}\n//# sourceMappingURL=address.js.map","\"use strict\";\nimport { Coder } from \"./abstract-coder\";\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n constructor(coder) {\n super(coder.name, coder.type, undefined, coder.dynamic);\n this.coder = coder;\n }\n defaultValue() {\n return this.coder.defaultValue();\n }\n encode(writer, value) {\n return this.coder.encode(writer, value);\n }\n decode(reader) {\n return this.coder.decode(reader);\n }\n}\n//# sourceMappingURL=anonymous.js.map","\"use strict\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"../_version\";\nconst logger = new Logger(version);\nimport { Coder, Writer } from \"./abstract-coder\";\nimport { AnonymousCoder } from \"./anonymous\";\nexport function pack(writer, coders, values) {\n let arrayValues = null;\n if (Array.isArray(values)) {\n arrayValues = values;\n }\n else if (values && typeof (values) === \"object\") {\n let unique = {};\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"values\",\n coder: coder,\n value: values\n });\n }\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"values\",\n coder: coder,\n value: values\n });\n }\n unique[name] = true;\n return values[name];\n });\n }\n else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n let staticWriter = new Writer(writer.wordSize);\n let dynamicWriter = new Writer(writer.wordSize);\n let updateFuncs = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n }\n else {\n coder.encode(staticWriter, value);\n }\n });\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\nexport function unpack(reader, coders) {\n let values = [];\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n coders.forEach((coder) => {\n let value = null;\n if (coder.dynamic) {\n let offset = reader.readValue();\n let offsetReader = baseReader.subReader(offset.toNumber());\n try {\n value = coder.decode(offsetReader);\n }\n catch (error) {\n // Cannot recover from this\n if (error.code === Logger.errors.BUFFER_OVERRUN) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n else {\n try {\n value = coder.decode(reader);\n }\n catch (error) {\n // Cannot recover from this\n if (error.code === Logger.errors.BUFFER_OVERRUN) {\n throw error;\n }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n if (value != undefined) {\n values.push(value);\n }\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add any named parameters (i.e. tuples)\n coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n const value = values[index];\n if (value instanceof Error) {\n Object.defineProperty(values, name, {\n enumerable: true,\n get: () => { throw value; }\n });\n }\n else {\n values[name] = value;\n }\n });\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n if (value instanceof Error) {\n Object.defineProperty(values, i, {\n enumerable: true,\n get: () => { throw value; }\n });\n }\n }\n return Object.freeze(values);\n}\nexport class ArrayCoder extends Coder {\n constructor(coder, length, localName) {\n const type = (coder.type + \"[\" + (length >= 0 ? length : \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n this.coder = coder;\n this.length = length;\n }\n defaultValue() {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n const result = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n encode(writer, value) {\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n let count = this.length;\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n logger.checkArgumentCount(value.length, count, \"coder array\" + (this.localName ? (\" \" + this.localName) : \"\"));\n let coders = [];\n for (let i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return pack(writer, coders, value);\n }\n decode(reader) {\n let count = this.length;\n if (count === -1) {\n count = reader.readValue().toNumber();\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * 32 > reader._data.length) {\n logger.throwError(\"insufficient data length\", Logger.errors.BUFFER_OVERRUN, {\n length: reader._data.length,\n count: count\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) {\n coders.push(new AnonymousCoder(this.coder));\n }\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n//# sourceMappingURL=array.js.map","\"use strict\";\nimport { Coder } from \"./abstract-coder\";\nexport class BooleanCoder extends Coder {\n constructor(localName) {\n super(\"bool\", \"bool\", localName, false);\n }\n defaultValue() {\n return false;\n }\n encode(writer, value) {\n return writer.writeValue(value ? 1 : 0);\n }\n decode(reader) {\n return reader.coerce(this.type, !reader.readValue().isZero());\n }\n}\n//# sourceMappingURL=boolean.js.map","\"use strict\";\nimport { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder\";\nexport class DynamicBytesCoder extends Coder {\n constructor(type, localName) {\n super(type, type, localName, true);\n }\n defaultValue() {\n return \"0x\";\n }\n encode(writer, value) {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n decode(reader) {\n return reader.readBytes(reader.readValue().toNumber(), true);\n }\n}\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"bytes\", localName);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n//# sourceMappingURL=bytes.js.map","\"use strict\";\nimport { arrayify, hexlify } from \"@ethersproject/bytes\";\nimport { Coder } from \"./abstract-coder\";\n// @TODO: Merge this with bytes\nexport class FixedBytesCoder extends Coder {\n constructor(size, localName) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n this.size = size;\n }\n defaultValue() {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n encode(writer, value) {\n let data = arrayify(value);\n if (data.length !== this.size) {\n this._throwError(\"incorrect data length\", value);\n }\n return writer.writeBytes(data);\n }\n decode(reader) {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n//# sourceMappingURL=fixed-bytes.js.map","\"use strict\";\nimport { Coder } from \"./abstract-coder\";\nexport class NullCoder extends Coder {\n constructor(localName) {\n super(\"null\", \"\", localName, false);\n }\n defaultValue() {\n return null;\n }\n encode(writer, value) {\n if (value != null) {\n this._throwError(\"not null\", value);\n }\n return writer.writeBytes([]);\n }\n decode(reader) {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n//# sourceMappingURL=null.js.map","\"use strict\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { MaxUint256, NegativeOne, One, Zero } from \"@ethersproject/constants\";\nimport { Coder } from \"./abstract-coder\";\nexport class NumberCoder extends Coder {\n constructor(size, signed, localName) {\n const name = ((signed ? \"int\" : \"uint\") + (size * 8));\n super(name, name, localName, false);\n this.size = size;\n this.signed = signed;\n }\n defaultValue() {\n return 0;\n }\n encode(writer, value) {\n let v = BigNumber.from(value);\n // Check bounds are safe for encoding\n let maxUintValue = MaxUint256.mask(writer.wordSize * 8);\n if (this.signed) {\n let bounds = maxUintValue.mask(this.size * 8 - 1);\n if (v.gt(bounds) || v.lt(bounds.add(One).mul(NegativeOne))) {\n this._throwError(\"value out-of-bounds\", value);\n }\n }\n else if (v.lt(Zero) || v.gt(maxUintValue.mask(this.size * 8))) {\n this._throwError(\"value out-of-bounds\", value);\n }\n v = v.toTwos(this.size * 8).mask(this.size * 8);\n if (this.signed) {\n v = v.fromTwos(this.size * 8).toTwos(8 * writer.wordSize);\n }\n return writer.writeValue(v);\n }\n decode(reader) {\n let value = reader.readValue().mask(this.size * 8);\n if (this.signed) {\n value = value.fromTwos(this.size * 8);\n }\n return reader.coerce(this.name, value);\n }\n}\n//# sourceMappingURL=number.js.map","\"use strict\";\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\nimport { DynamicBytesCoder } from \"./bytes\";\nexport class StringCoder extends DynamicBytesCoder {\n constructor(localName) {\n super(\"string\", localName);\n }\n defaultValue() {\n return \"\";\n }\n encode(writer, value) {\n return super.encode(writer, toUtf8Bytes(value));\n }\n decode(reader) {\n return toUtf8String(super.decode(reader));\n }\n}\n//# sourceMappingURL=string.js.map","\"use strict\";\nimport { Coder } from \"./abstract-coder\";\nimport { pack, unpack } from \"./array\";\nexport class TupleCoder extends Coder {\n constructor(coders, localName) {\n let dynamic = false;\n const types = [];\n coders.forEach((coder) => {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n super(\"tuple\", type, localName, dynamic);\n this.coders = coders;\n }\n defaultValue() {\n const values = [];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) {\n accum[name] = 0;\n }\n accum[name]++;\n }\n return accum;\n }, {});\n // Add named values\n this.coders.forEach((coder, index) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) {\n return;\n }\n if (name === \"length\") {\n name = \"_length\";\n }\n if (values[name] != null) {\n return;\n }\n values[name] = values[index];\n });\n return Object.freeze(values);\n }\n encode(writer, value) {\n return pack(writer, this.coders, value);\n }\n decode(reader) {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n//# sourceMappingURL=tuple.js.map","\"use strict\";\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { Reader, Writer } from \"./coders/abstract-coder\";\nimport { AddressCoder } from \"./coders/address\";\nimport { ArrayCoder } from \"./coders/array\";\nimport { BooleanCoder } from \"./coders/boolean\";\nimport { BytesCoder } from \"./coders/bytes\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes\";\nimport { NullCoder } from \"./coders/null\";\nimport { NumberCoder } from \"./coders/number\";\nimport { StringCoder } from \"./coders/string\";\nimport { TupleCoder } from \"./coders/tuple\";\nimport { ParamType } from \"./fragments\";\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nexport class AbiCoder {\n constructor(coerceFunc) {\n logger.checkNew(new.target, AbiCoder);\n defineReadOnly(this, \"coerceFunc\", coerceFunc || null);\n }\n _getCoder(param) {\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"array\":\n return new ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name);\n case \"tuple\":\n return new TupleCoder((param.components || []).map((component) => {\n return this._getCoder(component);\n }), param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n }\n _getWordSize() { return 32; }\n _getReader(data, allowLoose) {\n return new Reader(data, this._getWordSize(), this.coerceFunc, allowLoose);\n }\n _getWriter() {\n return new Writer(this._getWordSize());\n }\n getDefaultValue(types) {\n const coders = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n encode(types, values) {\n if (types.length !== values.length) {\n logger.throwError(\"types/values length mismatch\", Logger.errors.INVALID_ARGUMENT, {\n count: { types: types.length, values: values.length },\n value: { types: types, values: values }\n });\n }\n const coders = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n const writer = this._getWriter();\n coder.encode(writer, values);\n return writer.data;\n }\n decode(types, data, loose) {\n const coders = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(this._getReader(arrayify(data), loose));\n }\n}\nexport const defaultAbiCoder = new AbiCoder();\n//# sourceMappingURL=abi-coder.js.map","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nexport default function Mask(props) {\n var prefixCls = props.prefixCls,\n style = props.style,\n visible = props.visible,\n maskProps = props.maskProps,\n motionName = props.motionName;\n return /*#__PURE__*/React.createElement(CSSMotion, {\n key: \"mask\",\n visible: visible,\n motionName: motionName,\n leavedClassName: \"\".concat(prefixCls, \"-mask-hidden\")\n }, function (_ref) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n style: _objectSpread(_objectSpread({}, motionStyle), style),\n className: classNames(\"\".concat(prefixCls, \"-mask\"), motionClassName)\n }, maskProps));\n });\n}","// =============================== Motion ===============================\nexport function getMotionName(prefixCls, transitionName, animationName) {\n var motionName = transitionName;\n\n if (!motionName && animationName) {\n motionName = \"\".concat(prefixCls, \"-\").concat(animationName);\n }\n\n return motionName;\n} // ================================ UUID ================================\n\nvar uuid = -1;\nexport function getUUID() {\n uuid += 1;\n return uuid;\n} // =============================== Offset ===============================\n\nfunction getScroll(w, top) {\n var ret = w[\"page\".concat(top ? 'Y' : 'X', \"Offset\")];\n var method = \"scroll\".concat(top ? 'Top' : 'Left');\n\n if (typeof ret !== 'number') {\n var d = w.document;\n ret = d.documentElement[method];\n\n if (typeof ret !== 'number') {\n ret = d.body[method];\n }\n }\n\n return ret;\n}\n\nexport function offset(el) {\n var rect = el.getBoundingClientRect();\n var pos = {\n left: rect.left,\n top: rect.top\n };\n var doc = el.ownerDocument;\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScroll(w);\n pos.top += getScroll(w, true);\n return pos;\n}","import * as React from 'react';\nexport default /*#__PURE__*/React.memo(function (_ref) {\n var children = _ref.children;\n return children;\n}, function (_, _ref2) {\n var shouldUpdate = _ref2.shouldUpdate;\n return !shouldUpdate;\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport { offset } from '../../util';\nimport MemoChildren from './MemoChildren';\nvar sentinelStyle = {\n width: 0,\n height: 0,\n overflow: 'hidden',\n outline: 'none'\n};\nvar Content = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var closable = props.closable,\n prefixCls = props.prefixCls,\n width = props.width,\n height = props.height,\n footer = props.footer,\n title = props.title,\n closeIcon = props.closeIcon,\n style = props.style,\n className = props.className,\n visible = props.visible,\n forceRender = props.forceRender,\n bodyStyle = props.bodyStyle,\n bodyProps = props.bodyProps,\n children = props.children,\n destroyOnClose = props.destroyOnClose,\n modalRender = props.modalRender,\n motionName = props.motionName,\n ariaId = props.ariaId,\n onClose = props.onClose,\n onVisibleChanged = props.onVisibleChanged,\n onMouseDown = props.onMouseDown,\n onMouseUp = props.onMouseUp,\n mousePosition = props.mousePosition;\n var sentinelStartRef = useRef();\n var sentinelEndRef = useRef();\n var dialogRef = useRef(); // ============================== Ref ===============================\n\n React.useImperativeHandle(ref, function () {\n return {\n focus: function focus() {\n var _sentinelStartRef$cur;\n\n (_sentinelStartRef$cur = sentinelStartRef.current) === null || _sentinelStartRef$cur === void 0 ? void 0 : _sentinelStartRef$cur.focus();\n },\n changeActive: function changeActive(next) {\n var _document = document,\n activeElement = _document.activeElement;\n\n if (next && activeElement === sentinelEndRef.current) {\n sentinelStartRef.current.focus();\n } else if (!next && activeElement === sentinelStartRef.current) {\n sentinelEndRef.current.focus();\n }\n }\n };\n }); // ============================= Style ==============================\n\n var _React$useState = React.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n transformOrigin = _React$useState2[0],\n setTransformOrigin = _React$useState2[1];\n\n var contentStyle = {};\n\n if (width !== undefined) {\n contentStyle.width = width;\n }\n\n if (height !== undefined) {\n contentStyle.height = height;\n }\n\n if (transformOrigin) {\n contentStyle.transformOrigin = transformOrigin;\n }\n\n function onPrepare() {\n var elementOffset = offset(dialogRef.current);\n setTransformOrigin(mousePosition ? \"\".concat(mousePosition.x - elementOffset.left, \"px \").concat(mousePosition.y - elementOffset.top, \"px\") : '');\n } // ============================= Render =============================\n\n\n var footerNode;\n\n if (footer) {\n footerNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-footer\")\n }, footer);\n }\n\n var headerNode;\n\n if (title) {\n headerNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-header\")\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-title\"),\n id: ariaId\n }, title));\n }\n\n var closer;\n\n if (closable) {\n closer = /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n onClick: onClose,\n \"aria-label\": \"Close\",\n className: \"\".concat(prefixCls, \"-close\")\n }, closeIcon || /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-close-x\")\n }));\n }\n\n var content = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-content\")\n }, closer, headerNode, /*#__PURE__*/React.createElement(\"div\", _extends({\n className: \"\".concat(prefixCls, \"-body\"),\n style: bodyStyle\n }, bodyProps), children), footerNode);\n return /*#__PURE__*/React.createElement(CSSMotion, {\n visible: visible,\n onVisibleChanged: onVisibleChanged,\n onAppearPrepare: onPrepare,\n onEnterPrepare: onPrepare,\n forceRender: forceRender,\n motionName: motionName,\n removeOnLeave: destroyOnClose,\n ref: dialogRef\n }, function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"dialog-element\",\n role: \"document\",\n ref: motionRef,\n style: _objectSpread(_objectSpread(_objectSpread({}, motionStyle), style), contentStyle),\n className: classNames(prefixCls, className, motionClassName),\n onMouseDown: onMouseDown,\n onMouseUp: onMouseUp\n }, /*#__PURE__*/React.createElement(\"div\", {\n tabIndex: 0,\n ref: sentinelStartRef,\n style: sentinelStyle,\n \"aria-hidden\": \"true\"\n }), /*#__PURE__*/React.createElement(MemoChildren, {\n shouldUpdate: visible || forceRender\n }, modalRender ? modalRender(content) : content), /*#__PURE__*/React.createElement(\"div\", {\n tabIndex: 0,\n ref: sentinelEndRef,\n style: sentinelStyle,\n \"aria-hidden\": \"true\"\n }));\n });\n});\nContent.displayName = 'Content';\nexport default Content;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport contains from \"rc-util/es/Dom/contains\";\nimport Mask from './Mask';\nimport { getMotionName, getUUID } from '../util';\nimport Content from './Content';\nexport default function Dialog(props) {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-dialog' : _props$prefixCls,\n zIndex = props.zIndex,\n _props$visible = props.visible,\n visible = _props$visible === void 0 ? false : _props$visible,\n _props$keyboard = props.keyboard,\n keyboard = _props$keyboard === void 0 ? true : _props$keyboard,\n _props$focusTriggerAf = props.focusTriggerAfterClose,\n focusTriggerAfterClose = _props$focusTriggerAf === void 0 ? true : _props$focusTriggerAf,\n scrollLocker = props.scrollLocker,\n title = props.title,\n wrapStyle = props.wrapStyle,\n wrapClassName = props.wrapClassName,\n wrapProps = props.wrapProps,\n onClose = props.onClose,\n afterClose = props.afterClose,\n transitionName = props.transitionName,\n animation = props.animation,\n _props$closable = props.closable,\n closable = _props$closable === void 0 ? true : _props$closable,\n _props$mask = props.mask,\n mask = _props$mask === void 0 ? true : _props$mask,\n maskTransitionName = props.maskTransitionName,\n maskAnimation = props.maskAnimation,\n _props$maskClosable = props.maskClosable,\n maskClosable = _props$maskClosable === void 0 ? true : _props$maskClosable,\n maskStyle = props.maskStyle,\n maskProps = props.maskProps;\n var lastOutSideActiveElementRef = useRef();\n var wrapperRef = useRef();\n var contentRef = useRef();\n\n var _React$useState = React.useState(visible),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n animatedVisible = _React$useState2[0],\n setAnimatedVisible = _React$useState2[1]; // ========================== Init ==========================\n\n\n var ariaIdRef = useRef();\n\n if (!ariaIdRef.current) {\n ariaIdRef.current = \"rcDialogTitle\".concat(getUUID());\n } // ========================= Events =========================\n\n\n function onDialogVisibleChanged(newVisible) {\n if (newVisible) {\n // Try to focus\n if (!contains(wrapperRef.current, document.activeElement)) {\n var _contentRef$current;\n\n lastOutSideActiveElementRef.current = document.activeElement;\n (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 ? void 0 : _contentRef$current.focus();\n }\n } else {\n // Clean up scroll bar & focus back\n setAnimatedVisible(false);\n\n if (mask && lastOutSideActiveElementRef.current && focusTriggerAfterClose) {\n try {\n lastOutSideActiveElementRef.current.focus({\n preventScroll: true\n });\n } catch (e) {// Do nothing\n }\n\n lastOutSideActiveElementRef.current = null;\n } // Trigger afterClose only when change visible from true to false\n\n\n if (animatedVisible) {\n afterClose === null || afterClose === void 0 ? void 0 : afterClose();\n }\n }\n }\n\n function onInternalClose(e) {\n onClose === null || onClose === void 0 ? void 0 : onClose(e);\n } // >>> Content\n\n\n var contentClickRef = useRef(false);\n var contentTimeoutRef = useRef(); // We need record content click incase content popup out of dialog\n\n var onContentMouseDown = function onContentMouseDown() {\n clearTimeout(contentTimeoutRef.current);\n contentClickRef.current = true;\n };\n\n var onContentMouseUp = function onContentMouseUp() {\n contentTimeoutRef.current = setTimeout(function () {\n contentClickRef.current = false;\n });\n }; // >>> Wrapper\n // Close only when element not on dialog\n\n\n var onWrapperClick = null;\n\n if (maskClosable) {\n onWrapperClick = function onWrapperClick(e) {\n if (contentClickRef.current) {\n contentClickRef.current = false;\n } else if (wrapperRef.current === e.target) {\n onInternalClose(e);\n }\n };\n }\n\n function onWrapperKeyDown(e) {\n if (keyboard && e.keyCode === KeyCode.ESC) {\n e.stopPropagation();\n onInternalClose(e);\n return;\n } // keep focus inside dialog\n\n\n if (visible) {\n if (e.keyCode === KeyCode.TAB) {\n contentRef.current.changeActive(!e.shiftKey);\n }\n }\n } // ========================= Effect =========================\n\n\n useEffect(function () {\n if (visible) {\n setAnimatedVisible(true);\n }\n\n return function () {};\n }, [visible]); // Remove direct should also check the scroll bar update\n\n useEffect(function () {\n return function () {\n clearTimeout(contentTimeoutRef.current);\n };\n }, []);\n useEffect(function () {\n if (animatedVisible) {\n scrollLocker === null || scrollLocker === void 0 ? void 0 : scrollLocker.lock();\n return scrollLocker === null || scrollLocker === void 0 ? void 0 : scrollLocker.unLock;\n }\n\n return function () {};\n }, [animatedVisible, scrollLocker]); // ========================= Render =========================\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-root\")\n }, /*#__PURE__*/React.createElement(Mask, {\n prefixCls: prefixCls,\n visible: mask && visible,\n motionName: getMotionName(prefixCls, maskTransitionName, maskAnimation),\n style: _objectSpread({\n zIndex: zIndex\n }, maskStyle),\n maskProps: maskProps\n }), /*#__PURE__*/React.createElement(\"div\", _extends({\n tabIndex: -1,\n onKeyDown: onWrapperKeyDown,\n className: classNames(\"\".concat(prefixCls, \"-wrap\"), wrapClassName),\n ref: wrapperRef,\n onClick: onWrapperClick,\n role: \"dialog\",\n \"aria-labelledby\": title ? ariaIdRef.current : null,\n style: _objectSpread(_objectSpread({\n zIndex: zIndex\n }, wrapStyle), {}, {\n display: !animatedVisible ? 'none' : null\n })\n }, wrapProps), /*#__PURE__*/React.createElement(Content, _extends({}, props, {\n onMouseDown: onContentMouseDown,\n onMouseUp: onContentMouseUp,\n ref: contentRef,\n closable: closable,\n ariaId: ariaIdRef.current,\n prefixCls: prefixCls,\n visible: visible,\n onClose: onInternalClose,\n onVisibleChanged: onDialogVisibleChanged,\n motionName: getMotionName(prefixCls, transitionName, animation)\n }))));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport Portal from \"rc-util/es/PortalWrapper\";\nimport Dialog from './Dialog'; // fix issue #10656\n\n/*\n * getContainer remarks\n * Custom container should not be return, because in the Portal component, it will remove the\n * return container element here, if the custom container is the only child of it's component,\n * like issue #10656, It will has a conflict with removeChild method in react-dom.\n * So here should add a child (div element) to custom container.\n * */\n\nvar DialogWrap = function DialogWrap(props) {\n var visible = props.visible,\n getContainer = props.getContainer,\n forceRender = props.forceRender,\n _props$destroyOnClose = props.destroyOnClose,\n destroyOnClose = _props$destroyOnClose === void 0 ? false : _props$destroyOnClose,\n _afterClose = props.afterClose;\n\n var _React$useState = React.useState(visible),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n animatedVisible = _React$useState2[0],\n setAnimatedVisible = _React$useState2[1];\n\n React.useEffect(function () {\n if (visible) {\n setAnimatedVisible(true);\n }\n }, [visible]); // 渲染在当前 dom 里;\n\n if (getContainer === false) {\n return /*#__PURE__*/React.createElement(Dialog, _extends({}, props, {\n getOpenCount: function getOpenCount() {\n return 2;\n } // 不对 body 做任何操作。。\n\n }));\n } // Destroy on close will remove wrapped div\n\n\n if (!forceRender && destroyOnClose && !animatedVisible) {\n return null;\n }\n\n return /*#__PURE__*/React.createElement(Portal, {\n visible: visible,\n forceRender: forceRender,\n getContainer: getContainer\n }, function (childProps) {\n return /*#__PURE__*/React.createElement(Dialog, _extends({}, props, {\n destroyOnClose: destroyOnClose,\n afterClose: function afterClose() {\n _afterClose === null || _afterClose === void 0 ? void 0 : _afterClose();\n setAnimatedVisible(false);\n }\n }, childProps));\n });\n};\n\nDialogWrap.displayName = 'Dialog';\nexport default DialogWrap;","import DialogWrap from './DialogWrap';\nexport default DialogWrap;","/**\n * Easy to set element style, return previous style\n * IE browser compatible(IE browser doesn't merge overflow style, need to set it separately)\n * https://github.com/ant-design/ant-design/issues/19393\n *\n */\nfunction setStyle(style) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!style) {\n return {};\n }\n\n var _options$element = options.element,\n element = _options$element === void 0 ? document.body : _options$element;\n var oldStyle = {};\n var styleKeys = Object.keys(style); // IE browser compatible\n\n styleKeys.forEach(function (key) {\n oldStyle[key] = element.style[key];\n });\n styleKeys.forEach(function (key) {\n element.style[key] = style[key];\n });\n return oldStyle;\n}\n\nexport default setStyle;","import getScrollBarSize from './getScrollBarSize';\nimport setStyle from './setStyle';\n\nfunction isBodyOverflowing() {\n return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight) && window.innerWidth > document.body.offsetWidth;\n}\n\nvar cacheStyle = {};\nexport default (function (close) {\n if (!isBodyOverflowing() && !close) {\n return;\n } // https://github.com/ant-design/ant-design/issues/19729\n\n\n var scrollingEffectClassName = 'ant-scrolling-effect';\n var scrollingEffectClassNameReg = new RegExp(\"\".concat(scrollingEffectClassName), 'g');\n var bodyClassName = document.body.className;\n\n if (close) {\n if (!scrollingEffectClassNameReg.test(bodyClassName)) return;\n setStyle(cacheStyle);\n cacheStyle = {};\n document.body.className = bodyClassName.replace(scrollingEffectClassNameReg, '').trim();\n return;\n }\n\n var scrollBarSize = getScrollBarSize();\n\n if (scrollBarSize) {\n cacheStyle = setStyle({\n position: 'relative',\n width: \"calc(100% - \".concat(scrollBarSize, \"px)\")\n });\n\n if (!scrollingEffectClassNameReg.test(bodyClassName)) {\n var addClassName = \"\".concat(bodyClassName, \" \").concat(scrollingEffectClassName);\n document.body.className = addClassName.trim();\n }\n }\n});","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport getScrollBarSize from '../getScrollBarSize';\nimport setStyle from '../setStyle';\nvar locks = [];\nvar scrollingEffectClassName = 'ant-scrolling-effect';\nvar scrollingEffectClassNameReg = new RegExp(\"\".concat(scrollingEffectClassName), 'g');\nvar uuid = 0; // https://github.com/ant-design/ant-design/issues/19340\n// https://github.com/ant-design/ant-design/issues/19332\n\nvar cacheStyle = new Map();\n\nvar ScrollLocker = function ScrollLocker(options) {\n var _this = this;\n\n _classCallCheck(this, ScrollLocker);\n\n this.getContainer = function () {\n var _this$options;\n\n return (_this$options = _this.options) === null || _this$options === void 0 ? void 0 : _this$options.container;\n }; // if options change...\n\n\n this.reLock = function (options) {\n var findLock = locks.find(function (_ref) {\n var target = _ref.target;\n return target === _this.lockTarget;\n });\n\n if (findLock) {\n _this.unLock();\n }\n\n _this.options = options;\n\n if (findLock) {\n findLock.options = options;\n\n _this.lock();\n }\n };\n\n this.lock = function () {\n var _this$options3;\n\n // If lockTarget exist return\n if (locks.some(function (_ref2) {\n var target = _ref2.target;\n return target === _this.lockTarget;\n })) {\n return;\n } // If same container effect, return\n\n\n if (locks.some(function (_ref3) {\n var _this$options2;\n\n var options = _ref3.options;\n return (options === null || options === void 0 ? void 0 : options.container) === ((_this$options2 = _this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2.container);\n })) {\n locks = [].concat(_toConsumableArray(locks), [{\n target: _this.lockTarget,\n options: _this.options\n }]);\n return;\n }\n\n var scrollBarSize = 0;\n var container = ((_this$options3 = _this.options) === null || _this$options3 === void 0 ? void 0 : _this$options3.container) || document.body;\n\n if (container === document.body && window.innerWidth - document.documentElement.clientWidth > 0 || container.scrollHeight > container.clientHeight) {\n scrollBarSize = getScrollBarSize();\n }\n\n var containerClassName = container.className;\n\n if (locks.filter(function (_ref4) {\n var _this$options4;\n\n var options = _ref4.options;\n return (options === null || options === void 0 ? void 0 : options.container) === ((_this$options4 = _this.options) === null || _this$options4 === void 0 ? void 0 : _this$options4.container);\n }).length === 0) {\n cacheStyle.set(container, setStyle({\n width: \"calc(100% - \".concat(scrollBarSize, \"px)\"),\n overflow: 'hidden',\n overflowX: 'hidden',\n overflowY: 'hidden'\n }, {\n element: container\n }));\n } // https://github.com/ant-design/ant-design/issues/19729\n\n\n if (!scrollingEffectClassNameReg.test(containerClassName)) {\n var addClassName = \"\".concat(containerClassName, \" \").concat(scrollingEffectClassName);\n container.className = addClassName.trim();\n }\n\n locks = [].concat(_toConsumableArray(locks), [{\n target: _this.lockTarget,\n options: _this.options\n }]);\n };\n\n this.unLock = function () {\n var _this$options5;\n\n var findLock = locks.find(function (_ref5) {\n var target = _ref5.target;\n return target === _this.lockTarget;\n });\n locks = locks.filter(function (_ref6) {\n var target = _ref6.target;\n return target !== _this.lockTarget;\n });\n\n if (!findLock || locks.some(function (_ref7) {\n var _findLock$options;\n\n var options = _ref7.options;\n return (options === null || options === void 0 ? void 0 : options.container) === ((_findLock$options = findLock.options) === null || _findLock$options === void 0 ? void 0 : _findLock$options.container);\n })) {\n return;\n } // Remove Effect\n\n\n var container = ((_this$options5 = _this.options) === null || _this$options5 === void 0 ? void 0 : _this$options5.container) || document.body;\n var containerClassName = container.className;\n if (!scrollingEffectClassNameReg.test(containerClassName)) return;\n setStyle(cacheStyle.get(container), {\n element: container\n });\n cacheStyle.delete(container);\n container.className = container.className.replace(scrollingEffectClassNameReg, '').trim();\n }; // eslint-disable-next-line no-plusplus\n\n\n this.lockTarget = uuid++;\n this.options = options;\n};\n\nexport { ScrollLocker as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable no-underscore-dangle,react/require-default-props */\nimport * as React from 'react';\nimport raf from './raf';\nimport Portal from './Portal';\nimport canUseDom from './Dom/canUseDom';\nimport switchScrollingEffect from './switchScrollingEffect';\nimport setStyle from './setStyle';\nimport ScrollLocker from './Dom/scrollLocker';\nvar openCount = 0;\nvar supportDom = canUseDom();\n/** @private Test usage only */\n\nexport function getOpenCount() {\n return process.env.NODE_ENV === 'test' ? openCount : 0;\n} // https://github.com/ant-design/ant-design/issues/19340\n// https://github.com/ant-design/ant-design/issues/19332\n\nvar cacheOverflow = {};\n\nvar getParent = function getParent(getContainer) {\n if (!supportDom) {\n return null;\n }\n\n if (getContainer) {\n if (typeof getContainer === 'string') {\n return document.querySelectorAll(getContainer)[0];\n }\n\n if (typeof getContainer === 'function') {\n return getContainer();\n }\n\n if (_typeof(getContainer) === 'object' && getContainer instanceof window.HTMLElement) {\n return getContainer;\n }\n }\n\n return document.body;\n};\n\nvar PortalWrapper = /*#__PURE__*/function (_React$Component) {\n _inherits(PortalWrapper, _React$Component);\n\n var _super = _createSuper(PortalWrapper);\n\n function PortalWrapper(props) {\n var _this;\n\n _classCallCheck(this, PortalWrapper);\n\n _this = _super.call(this, props);\n _this.componentRef = React.createRef();\n\n _this.updateScrollLocker = function (prevProps) {\n var _ref = prevProps || {},\n prevVisible = _ref.visible;\n\n var _this$props = _this.props,\n getContainer = _this$props.getContainer,\n visible = _this$props.visible;\n\n if (visible && visible !== prevVisible && supportDom && getParent(getContainer) !== _this.scrollLocker.getContainer()) {\n _this.scrollLocker.reLock({\n container: getParent(getContainer)\n });\n }\n };\n\n _this.updateOpenCount = function (prevProps) {\n var _ref2 = prevProps || {},\n prevVisible = _ref2.visible,\n prevGetContainer = _ref2.getContainer;\n\n var _this$props2 = _this.props,\n visible = _this$props2.visible,\n getContainer = _this$props2.getContainer; // Update count\n\n if (visible !== prevVisible && supportDom && getParent(getContainer) === document.body) {\n if (visible && !prevVisible) {\n openCount += 1;\n } else if (prevProps) {\n openCount -= 1;\n }\n } // Clean up container if needed\n\n\n var getContainerIsFunc = typeof getContainer === 'function' && typeof prevGetContainer === 'function';\n\n if (getContainerIsFunc ? getContainer.toString() !== prevGetContainer.toString() : getContainer !== prevGetContainer) {\n _this.removeCurrentContainer();\n }\n };\n\n _this.attachToParent = function () {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (force || _this.container && !_this.container.parentNode) {\n var parent = getParent(_this.props.getContainer);\n\n if (parent) {\n parent.appendChild(_this.container);\n return true;\n }\n\n return false;\n }\n\n return true;\n };\n\n _this.getContainer = function () {\n if (!supportDom) {\n return null;\n }\n\n if (!_this.container) {\n _this.container = document.createElement('div');\n\n _this.attachToParent(true);\n }\n\n _this.setWrapperClassName();\n\n return _this.container;\n };\n\n _this.setWrapperClassName = function () {\n var wrapperClassName = _this.props.wrapperClassName;\n\n if (_this.container && wrapperClassName && wrapperClassName !== _this.container.className) {\n _this.container.className = wrapperClassName;\n }\n };\n\n _this.removeCurrentContainer = function () {\n var _this$container, _this$container$paren;\n\n // Portal will remove from `parentNode`.\n // Let's handle this again to avoid refactor issue.\n (_this$container = _this.container) === null || _this$container === void 0 ? void 0 : (_this$container$paren = _this$container.parentNode) === null || _this$container$paren === void 0 ? void 0 : _this$container$paren.removeChild(_this.container);\n };\n /**\n * Enhance ./switchScrollingEffect\n * 1. Simulate document body scroll bar with\n * 2. Record body has overflow style and recover when all of PortalWrapper invisible\n * 3. Disable body scroll when PortalWrapper has open\n *\n * @memberof PortalWrapper\n */\n\n\n _this.switchScrollingEffect = function () {\n if (openCount === 1 && !Object.keys(cacheOverflow).length) {\n switchScrollingEffect(); // Must be set after switchScrollingEffect\n\n cacheOverflow = setStyle({\n overflow: 'hidden',\n overflowX: 'hidden',\n overflowY: 'hidden'\n });\n } else if (!openCount) {\n setStyle(cacheOverflow);\n cacheOverflow = {};\n switchScrollingEffect(true);\n }\n };\n\n _this.scrollLocker = new ScrollLocker({\n container: getParent(props.getContainer)\n });\n return _this;\n }\n\n _createClass(PortalWrapper, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n this.updateOpenCount();\n\n if (!this.attachToParent()) {\n this.rafId = raf(function () {\n _this2.forceUpdate();\n });\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n this.updateOpenCount(prevProps);\n this.updateScrollLocker(prevProps);\n this.setWrapperClassName();\n this.attachToParent();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n var _this$props3 = this.props,\n visible = _this$props3.visible,\n getContainer = _this$props3.getContainer;\n\n if (supportDom && getParent(getContainer) === document.body) {\n // 离开时不会 render, 导到离开时数值不变,改用 func 。。\n openCount = visible && openCount ? openCount - 1 : openCount;\n }\n\n this.removeCurrentContainer();\n raf.cancel(this.rafId);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n forceRender = _this$props4.forceRender,\n visible = _this$props4.visible;\n var portal = null;\n var childProps = {\n getOpenCount: function getOpenCount() {\n return openCount;\n },\n getContainer: this.getContainer,\n switchScrollingEffect: this.switchScrollingEffect,\n scrollLocker: this.scrollLocker\n };\n\n if (forceRender || visible || this.componentRef.current) {\n portal = /*#__PURE__*/React.createElement(Portal, {\n getContainer: this.getContainer,\n ref: this.componentRef\n }, children(childProps));\n }\n\n return portal;\n }\n }]);\n\n return PortalWrapper;\n}(React.Component);\n\nexport default PortalWrapper;","import * as React from 'react';\n\nvar Content = function Content(props) {\n var overlay = props.overlay,\n prefixCls = props.prefixCls,\n id = props.id,\n overlayInnerStyle = props.overlayInnerStyle;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-inner\"),\n id: id,\n role: \"tooltip\",\n style: overlayInnerStyle\n }, typeof overlay === 'function' ? overlay() : overlay);\n};\n\nexport default Content;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport { useRef, useImperativeHandle, forwardRef } from 'react';\nimport Trigger from 'rc-trigger';\nimport { placements } from './placements';\nimport Content from './Content';\n\nvar Tooltip = function Tooltip(props, ref) {\n var overlayClassName = props.overlayClassName,\n _props$trigger = props.trigger,\n trigger = _props$trigger === void 0 ? ['hover'] : _props$trigger,\n _props$mouseEnterDela = props.mouseEnterDelay,\n mouseEnterDelay = _props$mouseEnterDela === void 0 ? 0 : _props$mouseEnterDela,\n _props$mouseLeaveDela = props.mouseLeaveDelay,\n mouseLeaveDelay = _props$mouseLeaveDela === void 0 ? 0.1 : _props$mouseLeaveDela,\n overlayStyle = props.overlayStyle,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-tooltip' : _props$prefixCls,\n children = props.children,\n onVisibleChange = props.onVisibleChange,\n afterVisibleChange = props.afterVisibleChange,\n transitionName = props.transitionName,\n animation = props.animation,\n motion = props.motion,\n _props$placement = props.placement,\n placement = _props$placement === void 0 ? 'right' : _props$placement,\n _props$align = props.align,\n align = _props$align === void 0 ? {} : _props$align,\n _props$destroyTooltip = props.destroyTooltipOnHide,\n destroyTooltipOnHide = _props$destroyTooltip === void 0 ? false : _props$destroyTooltip,\n defaultVisible = props.defaultVisible,\n getTooltipContainer = props.getTooltipContainer,\n overlayInnerStyle = props.overlayInnerStyle,\n restProps = _objectWithoutProperties(props, [\"overlayClassName\", \"trigger\", \"mouseEnterDelay\", \"mouseLeaveDelay\", \"overlayStyle\", \"prefixCls\", \"children\", \"onVisibleChange\", \"afterVisibleChange\", \"transitionName\", \"animation\", \"motion\", \"placement\", \"align\", \"destroyTooltipOnHide\", \"defaultVisible\", \"getTooltipContainer\", \"overlayInnerStyle\"]);\n\n var domRef = useRef(null);\n useImperativeHandle(ref, function () {\n return domRef.current;\n });\n\n var extraProps = _objectSpread({}, restProps);\n\n if ('visible' in props) {\n extraProps.popupVisible = props.visible;\n }\n\n var getPopupElement = function getPopupElement() {\n var _props$arrowContent = props.arrowContent,\n arrowContent = _props$arrowContent === void 0 ? null : _props$arrowContent,\n overlay = props.overlay,\n id = props.id;\n return [/*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-arrow\"),\n key: \"arrow\"\n }, arrowContent), /*#__PURE__*/React.createElement(Content, {\n key: \"content\",\n prefixCls: prefixCls,\n id: id,\n overlay: overlay,\n overlayInnerStyle: overlayInnerStyle\n })];\n };\n\n var destroyTooltip = false;\n var autoDestroy = false;\n\n if (typeof destroyTooltipOnHide === 'boolean') {\n destroyTooltip = destroyTooltipOnHide;\n } else if (destroyTooltipOnHide && _typeof(destroyTooltipOnHide) === 'object') {\n var keepParent = destroyTooltipOnHide.keepParent;\n destroyTooltip = keepParent === true;\n autoDestroy = keepParent === false;\n }\n\n return /*#__PURE__*/React.createElement(Trigger, _extends({\n popupClassName: overlayClassName,\n prefixCls: prefixCls,\n popup: getPopupElement,\n action: trigger,\n builtinPlacements: placements,\n popupPlacement: placement,\n ref: domRef,\n popupAlign: align,\n getPopupContainer: getTooltipContainer,\n onPopupVisibleChange: onVisibleChange,\n afterPopupVisibleChange: afterVisibleChange,\n popupTransitionName: transitionName,\n popupAnimation: animation,\n popupMotion: motion,\n defaultPopupVisible: defaultVisible,\n destroyPopupOnHide: destroyTooltip,\n autoDestroy: autoDestroy,\n mouseLeaveDelay: mouseLeaveDelay,\n popupStyle: overlayStyle,\n mouseEnterDelay: mouseEnterDelay\n }, extraProps), children);\n};\n\nexport default /*#__PURE__*/forwardRef(Tooltip);","import Tooltip from './Tooltip';\nexport default Tooltip;","// Thanks to https://github.com/andreypopp/react-textarea-autosize/\n\n/**\n * calculateNodeHeight(uiTextNode, useCache = false)\n */\nvar HIDDEN_TEXTAREA_STYLE = \"\\n min-height:0 !important;\\n max-height:none !important;\\n height:0 !important;\\n visibility:hidden !important;\\n overflow:hidden !important;\\n position:absolute !important;\\n z-index:-1000 !important;\\n top:0 !important;\\n right:0 !important\\n\";\nvar SIZING_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'font-variant', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];\nvar computedStyleCache = {};\nvar hiddenTextarea;\nexport function calculateNodeStyling(node) {\n var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var nodeRef = node.getAttribute('id') || node.getAttribute('data-reactid') || node.getAttribute('name');\n\n if (useCache && computedStyleCache[nodeRef]) {\n return computedStyleCache[nodeRef];\n }\n\n var style = window.getComputedStyle(node);\n var boxSizing = style.getPropertyValue('box-sizing') || style.getPropertyValue('-moz-box-sizing') || style.getPropertyValue('-webkit-box-sizing');\n var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n var sizingStyle = SIZING_STYLE.map(function (name) {\n return \"\".concat(name, \":\").concat(style.getPropertyValue(name));\n }).join(';');\n var nodeInfo = {\n sizingStyle: sizingStyle,\n paddingSize: paddingSize,\n borderSize: borderSize,\n boxSizing: boxSizing\n };\n\n if (useCache && nodeRef) {\n computedStyleCache[nodeRef] = nodeInfo;\n }\n\n return nodeInfo;\n}\nexport default function calculateNodeHeight(uiTextNode) {\n var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var minRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var maxRows = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n hiddenTextarea.setAttribute('tab-index', '-1');\n hiddenTextarea.setAttribute('aria-hidden', 'true');\n document.body.appendChild(hiddenTextarea);\n } // Fix wrap=\"off\" issue\n // https://github.com/ant-design/ant-design/issues/6577\n\n\n if (uiTextNode.getAttribute('wrap')) {\n hiddenTextarea.setAttribute('wrap', uiTextNode.getAttribute('wrap'));\n } else {\n hiddenTextarea.removeAttribute('wrap');\n } // Copy all CSS properties that have an impact on the height of the content in\n // the textbox\n\n\n var _calculateNodeStyling = calculateNodeStyling(uiTextNode, useCache),\n paddingSize = _calculateNodeStyling.paddingSize,\n borderSize = _calculateNodeStyling.borderSize,\n boxSizing = _calculateNodeStyling.boxSizing,\n sizingStyle = _calculateNodeStyling.sizingStyle; // Need to have the overflow attribute to hide the scrollbar otherwise\n // text-lines will not calculated properly as the shadow will technically be\n // narrower for content\n\n\n hiddenTextarea.setAttribute('style', \"\".concat(sizingStyle, \";\").concat(HIDDEN_TEXTAREA_STYLE));\n hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || '';\n var minHeight = Number.MIN_SAFE_INTEGER;\n var maxHeight = Number.MAX_SAFE_INTEGER;\n var height = hiddenTextarea.scrollHeight;\n var overflowY;\n\n if (boxSizing === 'border-box') {\n // border-box: add border, since height = content + padding + border\n height += borderSize;\n } else if (boxSizing === 'content-box') {\n // remove padding, since height = content\n height -= paddingSize;\n }\n\n if (minRows !== null || maxRows !== null) {\n // measure height of a textarea with a single row\n hiddenTextarea.value = ' ';\n var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n if (minRows !== null) {\n minHeight = singleRowHeight * minRows;\n\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n\n height = Math.max(minHeight, height);\n }\n\n if (maxRows !== null) {\n maxHeight = singleRowHeight * maxRows;\n\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n\n overflowY = height > maxHeight ? '' : 'hidden';\n height = Math.min(maxHeight, height);\n }\n }\n\n return {\n height: height,\n minHeight: minHeight,\n maxHeight: maxHeight,\n overflowY: overflowY,\n resize: 'none'\n };\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport ResizeObserver from 'rc-resize-observer';\nimport omit from \"rc-util/es/omit\";\nimport classNames from 'classnames';\nimport calculateNodeHeight from './calculateNodeHeight'; // eslint-disable-next-line @typescript-eslint/naming-convention\n\nvar RESIZE_STATUS;\n\n(function (RESIZE_STATUS) {\n RESIZE_STATUS[RESIZE_STATUS[\"NONE\"] = 0] = \"NONE\";\n RESIZE_STATUS[RESIZE_STATUS[\"RESIZING\"] = 1] = \"RESIZING\";\n RESIZE_STATUS[RESIZE_STATUS[\"RESIZED\"] = 2] = \"RESIZED\";\n})(RESIZE_STATUS || (RESIZE_STATUS = {}));\n\nvar ResizableTextArea = /*#__PURE__*/function (_React$Component) {\n _inherits(ResizableTextArea, _React$Component);\n\n var _super = _createSuper(ResizableTextArea);\n\n function ResizableTextArea(props) {\n var _this;\n\n _classCallCheck(this, ResizableTextArea);\n\n _this = _super.call(this, props);\n\n _this.saveTextArea = function (textArea) {\n _this.textArea = textArea;\n };\n\n _this.handleResize = function (size) {\n var resizeStatus = _this.state.resizeStatus;\n var _this$props = _this.props,\n autoSize = _this$props.autoSize,\n onResize = _this$props.onResize;\n\n if (resizeStatus !== RESIZE_STATUS.NONE) {\n return;\n }\n\n if (typeof onResize === 'function') {\n onResize(size);\n }\n\n if (autoSize) {\n _this.resizeOnNextFrame();\n }\n };\n\n _this.resizeOnNextFrame = function () {\n cancelAnimationFrame(_this.nextFrameActionId);\n _this.nextFrameActionId = requestAnimationFrame(_this.resizeTextarea);\n };\n\n _this.resizeTextarea = function () {\n var autoSize = _this.props.autoSize;\n\n if (!autoSize || !_this.textArea) {\n return;\n }\n\n var minRows = autoSize.minRows,\n maxRows = autoSize.maxRows;\n var textareaStyles = calculateNodeHeight(_this.textArea, false, minRows, maxRows);\n\n _this.setState({\n textareaStyles: textareaStyles,\n resizeStatus: RESIZE_STATUS.RESIZING\n }, function () {\n cancelAnimationFrame(_this.resizeFrameId);\n _this.resizeFrameId = requestAnimationFrame(function () {\n _this.setState({\n resizeStatus: RESIZE_STATUS.RESIZED\n }, function () {\n _this.resizeFrameId = requestAnimationFrame(function () {\n _this.setState({\n resizeStatus: RESIZE_STATUS.NONE\n });\n\n _this.fixFirefoxAutoScroll();\n });\n });\n });\n });\n };\n\n _this.renderTextArea = function () {\n var _this$props2 = _this.props,\n _this$props2$prefixCl = _this$props2.prefixCls,\n prefixCls = _this$props2$prefixCl === void 0 ? 'rc-textarea' : _this$props2$prefixCl,\n autoSize = _this$props2.autoSize,\n onResize = _this$props2.onResize,\n className = _this$props2.className,\n disabled = _this$props2.disabled;\n var _this$state = _this.state,\n textareaStyles = _this$state.textareaStyles,\n resizeStatus = _this$state.resizeStatus;\n var otherProps = omit(_this.props, ['prefixCls', 'onPressEnter', 'autoSize', 'defaultValue', 'onResize']);\n var cls = classNames(prefixCls, className, _defineProperty({}, \"\".concat(prefixCls, \"-disabled\"), disabled)); // Fix https://github.com/ant-design/ant-design/issues/6776\n // Make sure it could be reset when using form.getFieldDecorator\n\n if ('value' in otherProps) {\n otherProps.value = otherProps.value || '';\n }\n\n var style = _objectSpread(_objectSpread(_objectSpread({}, _this.props.style), textareaStyles), resizeStatus === RESIZE_STATUS.RESIZING ? // React will warning when mix `overflow` & `overflowY`.\n // We need to define this separately.\n {\n overflowX: 'hidden',\n overflowY: 'hidden'\n } : null);\n\n return /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: _this.handleResize,\n disabled: !(autoSize || onResize)\n }, /*#__PURE__*/React.createElement(\"textarea\", _extends({}, otherProps, {\n className: cls,\n style: style,\n ref: _this.saveTextArea\n })));\n };\n\n _this.state = {\n textareaStyles: {},\n resizeStatus: RESIZE_STATUS.NONE\n };\n return _this;\n }\n\n _createClass(ResizableTextArea, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.resizeTextarea();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n // Re-render with the new content then recalculate the height as required.\n if (prevProps.value !== this.props.value) {\n this.resizeTextarea();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n cancelAnimationFrame(this.nextFrameActionId);\n cancelAnimationFrame(this.resizeFrameId);\n } // https://github.com/ant-design/ant-design/issues/21870\n\n }, {\n key: \"fixFirefoxAutoScroll\",\n value: function fixFirefoxAutoScroll() {\n try {\n if (document.activeElement === this.textArea) {\n var currentStart = this.textArea.selectionStart;\n var currentEnd = this.textArea.selectionEnd;\n this.textArea.setSelectionRange(currentStart, currentEnd);\n }\n } catch (e) {// Fix error in Chrome:\n // Failed to read the 'selectionStart' property from 'HTMLInputElement'\n // http://stackoverflow.com/q/21177489/3040605\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n return this.renderTextArea();\n }\n }]);\n\n return ResizableTextArea;\n}(React.Component);\n\nexport default ResizableTextArea;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nimport ResizableTextArea from './ResizableTextArea';\n\nvar TextArea = /*#__PURE__*/function (_React$Component) {\n _inherits(TextArea, _React$Component);\n\n var _super = _createSuper(TextArea);\n\n function TextArea(props) {\n var _this;\n\n _classCallCheck(this, TextArea);\n\n _this = _super.call(this, props);\n\n _this.focus = function () {\n _this.resizableTextArea.textArea.focus();\n };\n\n _this.saveTextArea = function (resizableTextArea) {\n _this.resizableTextArea = resizableTextArea;\n };\n\n _this.handleChange = function (e) {\n var onChange = _this.props.onChange;\n\n _this.setValue(e.target.value, function () {\n _this.resizableTextArea.resizeTextarea();\n });\n\n if (onChange) {\n onChange(e);\n }\n };\n\n _this.handleKeyDown = function (e) {\n var _this$props = _this.props,\n onPressEnter = _this$props.onPressEnter,\n onKeyDown = _this$props.onKeyDown;\n\n if (e.keyCode === 13 && onPressEnter) {\n onPressEnter(e);\n }\n\n if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n var value = typeof props.value === 'undefined' || props.value === null ? props.defaultValue : props.value;\n _this.state = {\n value: value\n };\n return _this;\n }\n\n _createClass(TextArea, [{\n key: \"setValue\",\n value: function setValue(value, callback) {\n if (!('value' in this.props)) {\n this.setState({\n value: value\n }, callback);\n }\n }\n }, {\n key: \"blur\",\n value: function blur() {\n this.resizableTextArea.textArea.blur();\n }\n }, {\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React.createElement(ResizableTextArea, _extends({}, this.props, {\n value: this.state.value,\n onKeyDown: this.handleKeyDown,\n onChange: this.handleChange,\n ref: this.saveTextArea\n }));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps) {\n if ('value' in nextProps) {\n return {\n value: nextProps.value\n };\n }\n\n return null;\n }\n }]);\n\n return TextArea;\n}(React.Component);\n\nexport { ResizableTextArea };\nexport default TextArea;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nvar __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nimport * as React from 'react';\nimport Notification from 'rc-notification';\nimport CloseOutlined from \"@ant-design/icons/es/icons/CloseOutlined\";\nimport classNames from 'classnames';\nimport CheckCircleOutlined from \"@ant-design/icons/es/icons/CheckCircleOutlined\";\nimport CloseCircleOutlined from \"@ant-design/icons/es/icons/CloseCircleOutlined\";\nimport ExclamationCircleOutlined from \"@ant-design/icons/es/icons/ExclamationCircleOutlined\";\nimport InfoCircleOutlined from \"@ant-design/icons/es/icons/InfoCircleOutlined\";\nimport createUseNotification from './hooks/useNotification';\nimport { globalConfig } from '../config-provider';\nvar notificationInstance = {};\nvar defaultDuration = 4.5;\nvar defaultTop = 24;\nvar defaultBottom = 24;\nvar defaultPrefixCls = '';\nvar defaultPlacement = 'topRight';\nvar defaultGetContainer;\nvar defaultCloseIcon;\nvar rtl = false;\n\nfunction setNotificationConfig(options) {\n var duration = options.duration,\n placement = options.placement,\n bottom = options.bottom,\n top = options.top,\n getContainer = options.getContainer,\n closeIcon = options.closeIcon,\n prefixCls = options.prefixCls;\n\n if (prefixCls !== undefined) {\n defaultPrefixCls = prefixCls;\n }\n\n if (duration !== undefined) {\n defaultDuration = duration;\n }\n\n if (placement !== undefined) {\n defaultPlacement = placement;\n } else if (options.rtl) {\n defaultPlacement = 'topLeft';\n }\n\n if (bottom !== undefined) {\n defaultBottom = bottom;\n }\n\n if (top !== undefined) {\n defaultTop = top;\n }\n\n if (getContainer !== undefined) {\n defaultGetContainer = getContainer;\n }\n\n if (closeIcon !== undefined) {\n defaultCloseIcon = closeIcon;\n }\n\n if (options.rtl !== undefined) {\n rtl = options.rtl;\n }\n}\n\nfunction getPlacementStyle(placement) {\n var top = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultTop;\n var bottom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultBottom;\n var style;\n\n switch (placement) {\n case 'topLeft':\n style = {\n left: 0,\n top: top,\n bottom: 'auto'\n };\n break;\n\n case 'topRight':\n style = {\n right: 0,\n top: top,\n bottom: 'auto'\n };\n break;\n\n case 'bottomLeft':\n style = {\n left: 0,\n top: 'auto',\n bottom: bottom\n };\n break;\n\n default:\n style = {\n right: 0,\n top: 'auto',\n bottom: bottom\n };\n break;\n }\n\n return style;\n}\n\nfunction getNotificationInstance(args, callback) {\n var _args$placement = args.placement,\n placement = _args$placement === void 0 ? defaultPlacement : _args$placement,\n top = args.top,\n bottom = args.bottom,\n _args$getContainer = args.getContainer,\n getContainer = _args$getContainer === void 0 ? defaultGetContainer : _args$getContainer,\n _args$closeIcon = args.closeIcon,\n closeIcon = _args$closeIcon === void 0 ? defaultCloseIcon : _args$closeIcon,\n customizePrefixCls = args.prefixCls;\n\n var _globalConfig = globalConfig(),\n getPrefixCls = _globalConfig.getPrefixCls;\n\n var prefixCls = getPrefixCls('notification', customizePrefixCls || defaultPrefixCls);\n var cacheKey = \"\".concat(prefixCls, \"-\").concat(placement);\n var cacheInstance = notificationInstance[cacheKey];\n\n if (cacheInstance) {\n Promise.resolve(cacheInstance).then(function (instance) {\n callback({\n prefixCls: \"\".concat(prefixCls, \"-notice\"),\n instance: instance\n });\n });\n return;\n }\n\n var closeIconToRender = /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-close-x\")\n }, closeIcon || /*#__PURE__*/React.createElement(CloseOutlined, {\n className: \"\".concat(prefixCls, \"-close-icon\")\n }));\n var notificationClass = classNames(\"\".concat(prefixCls, \"-\").concat(placement), _defineProperty({}, \"\".concat(prefixCls, \"-rtl\"), rtl === true));\n notificationInstance[cacheKey] = new Promise(function (resolve) {\n Notification.newInstance({\n prefixCls: prefixCls,\n className: notificationClass,\n style: getPlacementStyle(placement, top, bottom),\n getContainer: getContainer,\n closeIcon: closeIconToRender\n }, function (notification) {\n resolve(notification);\n callback({\n prefixCls: \"\".concat(prefixCls, \"-notice\"),\n instance: notification\n });\n });\n });\n}\n\nvar typeToIcon = {\n success: CheckCircleOutlined,\n info: InfoCircleOutlined,\n error: CloseCircleOutlined,\n warning: ExclamationCircleOutlined\n};\n\nfunction getRCNoticeProps(args, prefixCls) {\n var durationArg = args.duration,\n icon = args.icon,\n type = args.type,\n description = args.description,\n message = args.message,\n btn = args.btn,\n onClose = args.onClose,\n onClick = args.onClick,\n key = args.key,\n style = args.style,\n className = args.className;\n var duration = durationArg === undefined ? defaultDuration : durationArg;\n var iconNode = null;\n\n if (icon) {\n iconNode = /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-icon\")\n }, args.icon);\n } else if (type) {\n iconNode = /*#__PURE__*/React.createElement(typeToIcon[type] || null, {\n className: \"\".concat(prefixCls, \"-icon \").concat(prefixCls, \"-icon-\").concat(type)\n });\n }\n\n var autoMarginTag = !description && iconNode ? /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-message-single-line-auto-margin\")\n }) : null;\n return {\n content: /*#__PURE__*/React.createElement(\"div\", {\n className: iconNode ? \"\".concat(prefixCls, \"-with-icon\") : '',\n role: \"alert\"\n }, iconNode, /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-message\")\n }, autoMarginTag, message), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-description\")\n }, description), btn ? /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-btn\")\n }, btn) : null),\n duration: duration,\n closable: true,\n onClose: onClose,\n onClick: onClick,\n key: key,\n style: style || {},\n className: classNames(className, _defineProperty({}, \"\".concat(prefixCls, \"-\").concat(type), !!type))\n };\n}\n\nfunction notice(args) {\n getNotificationInstance(args, function (_ref) {\n var prefixCls = _ref.prefixCls,\n instance = _ref.instance;\n instance.notice(getRCNoticeProps(args, prefixCls));\n });\n}\n\nvar api = {\n open: notice,\n close: function close(key) {\n Object.keys(notificationInstance).forEach(function (cacheKey) {\n return Promise.resolve(notificationInstance[cacheKey]).then(function (instance) {\n instance.removeNotice(key);\n });\n });\n },\n config: setNotificationConfig,\n destroy: function destroy() {\n Object.keys(notificationInstance).forEach(function (cacheKey) {\n Promise.resolve(notificationInstance[cacheKey]).then(function (instance) {\n instance.destroy();\n });\n delete notificationInstance[cacheKey]; // lgtm[js/missing-await]\n });\n }\n};\n['success', 'info', 'warning', 'error'].forEach(function (type) {\n api[type] = function (args) {\n return api.open(_extends(_extends({}, args), {\n type: type\n }));\n };\n});\napi.warn = api.warning;\napi.useNotification = createUseNotification(getNotificationInstance, getRCNoticeProps);\n/** @private test Only function. Not work on production */\n\nexport var getInstance = function getInstance(cacheKey) {\n return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n return _context.abrupt(\"return\", process.env.NODE_ENV === 'test' ? notificationInstance[cacheKey] : null);\n\n case 1:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n};\nexport default api;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useRCNotification from \"rc-notification/es/useNotification\";\nimport { ConfigConsumer } from '../../config-provider';\nexport default function createUseNotification(getNotificationInstance, getRCNoticeProps) {\n var useNotification = function useNotification() {\n // We can only get content by render\n var getPrefixCls; // We create a proxy to handle delay created instance\n\n var innerInstance = null;\n var proxy = {\n add: function add(noticeProps, holderCallback) {\n innerInstance === null || innerInstance === void 0 ? void 0 : innerInstance.component.add(noticeProps, holderCallback);\n }\n };\n\n var _useRCNotification = useRCNotification(proxy),\n _useRCNotification2 = _slicedToArray(_useRCNotification, 2),\n hookNotify = _useRCNotification2[0],\n holder = _useRCNotification2[1];\n\n function notify(args) {\n var customizePrefixCls = args.prefixCls;\n var mergedPrefixCls = getPrefixCls('notification', customizePrefixCls);\n getNotificationInstance(_extends(_extends({}, args), {\n prefixCls: mergedPrefixCls\n }), function (_ref) {\n var prefixCls = _ref.prefixCls,\n instance = _ref.instance;\n innerInstance = instance;\n hookNotify(getRCNoticeProps(args, prefixCls));\n });\n } // Fill functions\n\n\n var hookApiRef = React.useRef({});\n hookApiRef.current.open = notify;\n ['success', 'info', 'warning', 'error'].forEach(function (type) {\n hookApiRef.current[type] = function (args) {\n return hookApiRef.current.open(_extends(_extends({}, args), {\n type: type\n }));\n };\n });\n return [hookApiRef.current, /*#__PURE__*/React.createElement(ConfigConsumer, {\n key: \"holder\"\n }, function (context) {\n getPrefixCls = context.getPrefixCls;\n return holder;\n })];\n };\n\n return useNotification;\n}","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { getAddress } from \"@ethersproject/address\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, hexConcat, hexlify, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { deepCopy, defineReadOnly, shallowCopy } from \"@ethersproject/properties\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nimport { id } from \"./id\";\nconst padding = new Uint8Array(32);\npadding.fill(0);\nconst NegativeOne = BigNumber.from(-1);\nconst Zero = BigNumber.from(0);\nconst One = BigNumber.from(1);\nconst MaxUint256 = BigNumber.from(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\nfunction hexPadRight(value) {\n const bytes = arrayify(value);\n const padOffset = bytes.length % 32;\n if (padOffset) {\n return hexConcat([bytes, padding.slice(padOffset)]);\n }\n return hexlify(bytes);\n}\nconst hexTrue = hexZeroPad(One.toHexString(), 32);\nconst hexFalse = hexZeroPad(Zero.toHexString(), 32);\nconst domainFieldTypes = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\"\n};\nconst domainFieldNames = [\n \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\nfunction checkString(key) {\n return function (value) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);\n }\n return value;\n };\n}\nconst domainChecks = {\n name: checkString(\"name\"),\n version: checkString(\"version\"),\n chainId: function (value) {\n try {\n return BigNumber.from(value).toString();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value for \"chainId\"`, \"domain.chainId\", value);\n },\n verifyingContract: function (value) {\n try {\n return getAddress(value).toLowerCase();\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n },\n salt: function (value) {\n try {\n const bytes = arrayify(value);\n if (bytes.length !== 32) {\n throw new Error(\"bad length\");\n }\n return hexlify(bytes);\n }\n catch (error) { }\n return logger.throwArgumentError(`invalid domain value \"salt\"`, \"domain.salt\", value);\n }\n};\nfunction getBaseEncoder(type) {\n // intXX and uintXX\n {\n const match = type.match(/^(u?)int(\\d*)$/);\n if (match) {\n const signed = (match[1] === \"\");\n const width = parseInt(match[2] || \"256\");\n if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) {\n logger.throwArgumentError(\"invalid numeric width\", \"type\", type);\n }\n const boundsUpper = MaxUint256.mask(signed ? (width - 1) : width);\n const boundsLower = signed ? boundsUpper.add(One).mul(NegativeOne) : Zero;\n return function (value) {\n const v = BigNumber.from(value);\n if (v.lt(boundsLower) || v.gt(boundsUpper)) {\n logger.throwArgumentError(`value out-of-bounds for ${type}`, \"value\", value);\n }\n return hexZeroPad(v.toTwos(256).toHexString(), 32);\n };\n }\n }\n // bytesXX\n {\n const match = type.match(/^bytes(\\d+)$/);\n if (match) {\n const width = parseInt(match[1]);\n if (width === 0 || width > 32 || match[1] !== String(width)) {\n logger.throwArgumentError(\"invalid bytes width\", \"type\", type);\n }\n return function (value) {\n const bytes = arrayify(value);\n if (bytes.length !== width) {\n logger.throwArgumentError(`invalid length for ${type}`, \"value\", value);\n }\n return hexPadRight(value);\n };\n }\n }\n switch (type) {\n case \"address\": return function (value) {\n return hexZeroPad(getAddress(value), 32);\n };\n case \"bool\": return function (value) {\n return ((!value) ? hexFalse : hexTrue);\n };\n case \"bytes\": return function (value) {\n return keccak256(value);\n };\n case \"string\": return function (value) {\n return id(value);\n };\n }\n return null;\n}\nfunction encodeType(name, fields) {\n return `${name}(${fields.map(({ name, type }) => (type + \" \" + name)).join(\",\")})`;\n}\nexport class TypedDataEncoder {\n constructor(types) {\n defineReadOnly(this, \"types\", Object.freeze(deepCopy(types)));\n defineReadOnly(this, \"_encoderCache\", {});\n defineReadOnly(this, \"_types\", {});\n // Link struct types to their direct child structs\n const links = {};\n // Link structs to structs which contain them as a child\n const parents = {};\n // Link all subtypes within a given struct\n const subtypes = {};\n Object.keys(types).forEach((type) => {\n links[type] = {};\n parents[type] = [];\n subtypes[type] = {};\n });\n for (const name in types) {\n const uniqueNames = {};\n types[name].forEach((field) => {\n // Check each field has a unique name\n if (uniqueNames[field.name]) {\n logger.throwArgumentError(`duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, \"types\", types);\n }\n uniqueNames[field.name] = true;\n // Get the base type (drop any array specifiers)\n const baseType = field.type.match(/^([^\\x5b]*)(\\x5b|$)/)[1];\n if (baseType === name) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Is this a base encoding type?\n const encoder = getBaseEncoder(baseType);\n if (encoder) {\n return;\n }\n if (!parents[baseType]) {\n logger.throwArgumentError(`unknown type ${JSON.stringify(baseType)}`, \"types\", types);\n }\n // Add linkage\n parents[baseType].push(name);\n links[name][baseType] = true;\n });\n }\n // Deduce the primary type\n const primaryTypes = Object.keys(parents).filter((n) => (parents[n].length === 0));\n if (primaryTypes.length === 0) {\n logger.throwArgumentError(\"missing primary type\", \"types\", types);\n }\n else if (primaryTypes.length > 1) {\n logger.throwArgumentError(`ambiguous primary types or unused types: ${primaryTypes.map((t) => (JSON.stringify(t))).join(\", \")}`, \"types\", types);\n }\n defineReadOnly(this, \"primaryType\", primaryTypes[0]);\n // Check for circular type references\n function checkCircular(type, found) {\n if (found[type]) {\n logger.throwArgumentError(`circular type reference to ${JSON.stringify(type)}`, \"types\", types);\n }\n found[type] = true;\n Object.keys(links[type]).forEach((child) => {\n if (!parents[child]) {\n return;\n }\n // Recursively check children\n checkCircular(child, found);\n // Mark all ancestors as having this decendant\n Object.keys(found).forEach((subtype) => {\n subtypes[subtype][child] = true;\n });\n });\n delete found[type];\n }\n checkCircular(this.primaryType, {});\n // Compute each fully describe type\n for (const name in subtypes) {\n const st = Object.keys(subtypes[name]);\n st.sort();\n this._types[name] = encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\");\n }\n }\n getEncoder(type) {\n let encoder = this._encoderCache[type];\n if (!encoder) {\n encoder = this._encoderCache[type] = this._getEncoder(type);\n }\n return encoder;\n }\n _getEncoder(type) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return encoder;\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const subEncoder = this.getEncoder(subtype);\n const length = parseInt(match[3]);\n return (value) => {\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n let result = value.map(subEncoder);\n if (this._types[subtype]) {\n result = result.map(keccak256);\n }\n return keccak256(hexConcat(result));\n };\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n const encodedType = id(this._types[type]);\n return (value) => {\n const values = fields.map(({ name, type }) => {\n const result = this.getEncoder(type)(value[name]);\n if (this._types[type]) {\n return keccak256(result);\n }\n return result;\n });\n values.unshift(encodedType);\n return hexConcat(values);\n };\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n encodeType(name) {\n const result = this._types[name];\n if (!result) {\n logger.throwArgumentError(`unknown type: ${JSON.stringify(name)}`, \"name\", name);\n }\n return result;\n }\n encodeData(type, value) {\n return this.getEncoder(type)(value);\n }\n hashStruct(name, value) {\n return keccak256(this.encodeData(name, value));\n }\n encode(value) {\n return this.encodeData(this.primaryType, value);\n }\n hash(value) {\n return this.hashStruct(this.primaryType, value);\n }\n _visit(type, value, callback) {\n // Basic encoder type (address, bool, uint256, etc)\n {\n const encoder = getBaseEncoder(type);\n if (encoder) {\n return callback(type, value);\n }\n }\n // Array\n const match = type.match(/^(.*)(\\x5b(\\d*)\\x5d)$/);\n if (match) {\n const subtype = match[1];\n const length = parseInt(match[3]);\n if (length >= 0 && value.length !== length) {\n logger.throwArgumentError(\"array length mismatch; expected length ${ arrayLength }\", \"value\", value);\n }\n return value.map((v) => this._visit(subtype, v, callback));\n }\n // Struct\n const fields = this.types[type];\n if (fields) {\n return fields.reduce((accum, { name, type }) => {\n accum[name] = this._visit(type, value[name], callback);\n return accum;\n }, {});\n }\n return logger.throwArgumentError(`unknown type: ${type}`, \"type\", type);\n }\n visit(value, callback) {\n return this._visit(this.primaryType, value, callback);\n }\n static from(types) {\n return new TypedDataEncoder(types);\n }\n static getPrimaryType(types) {\n return TypedDataEncoder.from(types).primaryType;\n }\n static hashStruct(name, types, value) {\n return TypedDataEncoder.from(types).hashStruct(name, value);\n }\n static hashDomain(domain) {\n const domainFields = [];\n for (const name in domain) {\n const type = domainFieldTypes[name];\n if (!type) {\n logger.throwArgumentError(`invalid typed-data domain key: ${JSON.stringify(name)}`, \"domain\", domain);\n }\n domainFields.push({ name, type });\n }\n domainFields.sort((a, b) => {\n return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n });\n return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n }\n static encode(domain, types, value) {\n return hexConcat([\n \"0x1901\",\n TypedDataEncoder.hashDomain(domain),\n TypedDataEncoder.from(types).hash(value)\n ]);\n }\n static hash(domain, types, value) {\n return keccak256(TypedDataEncoder.encode(domain, types, value));\n }\n // Replaces all address types with ENS names with their looked up address\n static resolveNames(domain, types, value, resolveName) {\n return __awaiter(this, void 0, void 0, function* () {\n // Make a copy to isolate it from the object passed in\n domain = shallowCopy(domain);\n // Look up all ENS names\n const ensCache = {};\n // Do we need to look up the domain's verifyingContract?\n if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n ensCache[domain.verifyingContract] = \"0x\";\n }\n // We are going to use the encoder to visit all the base values\n const encoder = TypedDataEncoder.from(types);\n // Get a list of all the addresses\n encoder.visit(value, (type, value) => {\n if (type === \"address\" && !isHexString(value, 20)) {\n ensCache[value] = \"0x\";\n }\n return value;\n });\n // Lookup each name\n for (const name in ensCache) {\n ensCache[name] = yield resolveName(name);\n }\n // Replace the domain verifyingContract if needed\n if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n domain.verifyingContract = ensCache[domain.verifyingContract];\n }\n // Replace all ENS names with their address\n value = encoder.visit(value, (type, value) => {\n if (type === \"address\" && ensCache[value]) {\n return ensCache[value];\n }\n return value;\n });\n return { domain, value };\n });\n }\n static getPayload(domain, types, value) {\n // Validate the domain fields\n TypedDataEncoder.hashDomain(domain);\n // Derive the EIP712Domain Struct reference type\n const domainValues = {};\n const domainTypes = [];\n domainFieldNames.forEach((name) => {\n const value = domain[name];\n if (value == null) {\n return;\n }\n domainValues[name] = domainChecks[name](value);\n domainTypes.push({ name, type: domainFieldTypes[name] });\n });\n const encoder = TypedDataEncoder.from(types);\n const typesWithDomain = shallowCopy(types);\n if (typesWithDomain.EIP712Domain) {\n logger.throwArgumentError(\"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n }\n else {\n typesWithDomain.EIP712Domain = domainTypes;\n }\n // Validate the data structures and types\n encoder.encode(value);\n return {\n types: typesWithDomain,\n domain: domainValues,\n primaryType: encoder.primaryType,\n message: encoder.visit(value, (type, value) => {\n // bytes\n if (type.match(/^bytes(\\d*)/)) {\n return hexlify(arrayify(value));\n }\n // uint or int\n if (type.match(/^u?int/)) {\n return BigNumber.from(value).toString();\n }\n switch (type) {\n case \"address\":\n return value.toLowerCase();\n case \"bool\":\n return !!value;\n case \"string\":\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(`invalid string`, \"value\", value);\n }\n return value;\n }\n return logger.throwArgumentError(\"unsupported type\", \"type\", type);\n })\n };\n }\n}\n//# sourceMappingURL=typed-data.js.map","\"use strict\";\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8\";\nfunction bytes2(data) {\n if ((data.length % 4) !== 0) {\n throw new Error(\"bad data\");\n }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\nfunction createTable(data, func) {\n if (!func) {\n func = function (value) { return [parseInt(value, 16)]; };\n }\n let lo = 0;\n let result = {};\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n return result;\n}\nfunction createRangeTable(data) {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n }\n else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\nfunction matchMap(value, ranges) {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) {\n continue;\n }\n return range;\n }\n }\n return null;\n}\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\nconst Table_B_2_ranges = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [23], l: 127 },\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n { h: 26, s: 32, e: [17], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [17], l: 56 },\n { h: 24, s: -119601, e: [17], l: 58 },\n { h: 24, s: -119659, e: [17], l: 58 },\n { h: 24, s: -119717, e: [17], l: 58 },\n { h: 24, s: -119775, e: [17], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, []);\n}\nexport function _nameprepTableA1(codepoint) {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexport function _nameprepTableB2(codepoint) {\n let range = matchMap(codepoint, Table_B_2_ranges);\n if (range) {\n return [codepoint + range.s];\n }\n let codes = Table_B_2_lut_abs[codepoint];\n if (codes) {\n return codes;\n }\n let shift = Table_B_2_lut_rel[codepoint];\n if (shift) {\n return [codepoint + shift[0]];\n }\n let complex = Table_B_2_complex[codepoint];\n if (complex) {\n return complex;\n }\n return null;\n}\nexport function _nameprepTableC(codepoint) {\n return !!matchMap(codepoint, Table_C_ranges);\n}\nexport function nameprep(value) {\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n return value.toLowerCase();\n }\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) {\n return [];\n }\n if (code >= 0xfe00 && code <= 0xfe0f) {\n return [];\n }\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) {\n return codesTableB2;\n }\n // No Substitution\n return [code];\n }));\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n throw new Error(\"STRINGPREP_CONTAINS_PROHIBITED\");\n }\n });\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n throw new Error(\"STRINGPREP_CONTAINS_UNASSIGNED\");\n }\n });\n // IDNA extras\n let name = _toUtf8String(codes);\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n throw new Error(\"invalid hyphen\");\n }\n // IDNA: 4.2.4\n if (name.length > 63) {\n throw new Error(\"too long\");\n }\n return name;\n}\n//# sourceMappingURL=idna.js.map","\"use strict\";\nimport hash from \"hash.js\";\n//const _ripemd160 = _hash.ripemd160;\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { SupportedAlgorithm } from \"./types\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nexport function ripemd160(data) {\n return \"0x\" + (hash.ripemd160().update(arrayify(data)).digest(\"hex\"));\n}\nexport function sha256(data) {\n return \"0x\" + (hash.sha256().update(arrayify(data)).digest(\"hex\"));\n}\nexport function sha512(data) {\n return \"0x\" + (hash.sha512().update(arrayify(data)).digest(\"hex\"));\n}\nexport function computeHmac(algorithm, key, data) {\n if (!SupportedAlgorithm[algorithm]) {\n logger.throwError(\"unsupported algorithm \" + algorithm, Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"hmac\",\n algorithm: algorithm\n });\n }\n return \"0x\" + hash.hmac(hash[algorithm], arrayify(key)).update(arrayify(data)).digest(\"hex\");\n}\n//# sourceMappingURL=sha2.js.map","/** @license React v16.14.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;kb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime entry.name.toLowerCase().includes(name.toLowerCase()))[0];\n}\nexports.getMobileRegistryEntry = getMobileRegistryEntry;\nfunction getMobileLinkRegistry(registry, whitelist) {\n let links = registry;\n if (whitelist && whitelist.length) {\n links = whitelist.map((name) => getMobileRegistryEntry(registry, name));\n }\n return links;\n}\nexports.getMobileLinkRegistry = getMobileLinkRegistry;\n//# sourceMappingURL=mobile.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatMobileRegistry = exports.formatMobileRegistryEntry = exports.getAppLogoUrl = exports.getDappRegistryUrl = exports.getWalletRegistryUrl = void 0;\nconst API_URL = \"https://registry.walletconnect.org\";\nfunction getWalletRegistryUrl() {\n return API_URL + \"/data/wallets.json\";\n}\nexports.getWalletRegistryUrl = getWalletRegistryUrl;\nfunction getDappRegistryUrl() {\n return API_URL + \"/data/dapps.json\";\n}\nexports.getDappRegistryUrl = getDappRegistryUrl;\nfunction getAppLogoUrl(id) {\n return API_URL + \"/logo/sm/\" + id + \".jpeg\";\n}\nexports.getAppLogoUrl = getAppLogoUrl;\nfunction formatMobileRegistryEntry(entry) {\n return {\n name: entry.name || \"\",\n shortName: entry.metadata.shortName || \"\",\n color: entry.metadata.colors.primary || \"\",\n logo: entry.id ? getAppLogoUrl(entry.id) : \"\",\n universalLink: entry.mobile.universal || \"\",\n deepLink: entry.mobile.native || \"\",\n };\n}\nexports.formatMobileRegistryEntry = formatMobileRegistryEntry;\nfunction formatMobileRegistry(registry) {\n return Object.values(registry)\n .filter(entry => !!entry.mobile.universal || !!entry.mobile.native)\n .map(formatMobileRegistryEntry);\n}\nexports.formatMobileRegistry = formatMobileRegistry;\n//# sourceMappingURL=registry.js.map","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/**\n * Convert a typed array to a Buffer without a copy\n *\n * Author: Feross Aboukhadijeh \n * License: MIT\n *\n * `npm install typedarray-to-buffer`\n */\n\nvar isTypedArray = require('is-typedarray').strict\n\nmodule.exports = function typedarrayToBuffer (arr) {\n if (isTypedArray(arr)) {\n // To avoid a copy, use the typed array's underlying ArrayBuffer to back new Buffer\n var buf = Buffer.from(arr.buffer)\n if (arr.byteLength !== arr.buffer.byteLength) {\n // Respect the \"view\", i.e. byteOffset and byteLength, without doing a copy\n buf = buf.slice(arr.byteOffset, arr.byteOffset + arr.byteLength)\n }\n return buf\n } else {\n // Pass through all other types to `Buffer.from`\n return Buffer.from(arr)\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseTransactionData = exports.parsePersonalSign = exports.isValidAddress = exports.toChecksumAddress = void 0;\nconst js_sha3_1 = require(\"js-sha3\");\nconst encoding_1 = require(\"./encoding\");\nconst misc_1 = require(\"./misc\");\nconst validators_1 = require(\"./validators\");\nconst enc_utils_1 = require(\"enc-utils\");\nfunction toChecksumAddress(address) {\n address = enc_utils_1.removeHexPrefix(address.toLowerCase());\n const hash = enc_utils_1.removeHexPrefix(js_sha3_1.keccak_256(encoding_1.convertUtf8ToBuffer(address)));\n let checksum = \"\";\n for (let i = 0; i < address.length; i++) {\n if (parseInt(hash[i], 16) > 7) {\n checksum += address[i].toUpperCase();\n }\n else {\n checksum += address[i];\n }\n }\n return enc_utils_1.addHexPrefix(checksum);\n}\nexports.toChecksumAddress = toChecksumAddress;\nconst isValidAddress = (address) => {\n if (!address) {\n return false;\n }\n else if (address.toLowerCase().substring(0, 2) !== \"0x\") {\n return false;\n }\n else if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n return false;\n }\n else if (/^(0x)?[0-9a-f]{40}$/.test(address) || /^(0x)?[0-9A-F]{40}$/.test(address)) {\n return true;\n }\n else {\n return address === toChecksumAddress(address);\n }\n};\nexports.isValidAddress = isValidAddress;\nfunction parsePersonalSign(params) {\n if (!validators_1.isEmptyArray(params) && !validators_1.isHexString(params[0])) {\n params[0] = encoding_1.convertUtf8ToHex(params[0]);\n }\n return params;\n}\nexports.parsePersonalSign = parsePersonalSign;\nfunction parseTransactionData(txData) {\n if (typeof txData.from === \"undefined\" || !exports.isValidAddress(txData.from)) {\n throw new Error(`Transaction object must include a valid 'from' value.`);\n }\n function parseHexValues(value) {\n let result = value;\n if (typeof value === \"number\" || (typeof value === \"string\" && !validators_1.isEmptyString(value))) {\n if (!validators_1.isHexString(value)) {\n result = encoding_1.convertNumberToHex(value);\n }\n else if (typeof value === \"string\") {\n result = misc_1.sanitizeHex(value);\n }\n }\n if (typeof result === \"string\") {\n result = misc_1.removeHexLeadingZeros(result);\n }\n return result;\n }\n const txDataRPC = {\n from: misc_1.sanitizeHex(txData.from),\n to: typeof txData.to === \"undefined\" ? \"\" : misc_1.sanitizeHex(txData.to),\n gasPrice: typeof txData.gasPrice === \"undefined\" ? \"\" : parseHexValues(txData.gasPrice),\n gas: typeof txData.gas === \"undefined\"\n ? typeof txData.gasLimit === \"undefined\"\n ? \"\"\n : parseHexValues(txData.gasLimit)\n : parseHexValues(txData.gas),\n value: typeof txData.value === \"undefined\" ? \"\" : parseHexValues(txData.value),\n nonce: typeof txData.nonce === \"undefined\" ? \"\" : parseHexValues(txData.nonce),\n data: typeof txData.data === \"undefined\" ? \"\" : misc_1.sanitizeHex(txData.data) || \"0x\",\n };\n const prunable = [\"gasPrice\", \"gas\", \"value\", \"nonce\"];\n Object.keys(txDataRPC).forEach((key) => {\n if (!txDataRPC[key].trim().length && prunable.includes(key)) {\n delete txDataRPC[key];\n }\n });\n return txDataRPC;\n}\nexports.parseTransactionData = parseTransactionData;\n//# sourceMappingURL=ethereum.js.map","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatErrorMessage = exports.formatJsonRpcError = exports.formatJsonRpcResult = exports.formatJsonRpcRequest = exports.payloadId = void 0;\nconst error_1 = require(\"./error\");\nconst constants_1 = require(\"./constants\");\nfunction payloadId() {\n const date = Date.now() * Math.pow(10, 3);\n const extra = Math.floor(Math.random() * Math.pow(10, 3));\n return date + extra;\n}\nexports.payloadId = payloadId;\nfunction formatJsonRpcRequest(method, params, id) {\n return {\n id: id || payloadId(),\n jsonrpc: \"2.0\",\n method,\n params,\n };\n}\nexports.formatJsonRpcRequest = formatJsonRpcRequest;\nfunction formatJsonRpcResult(id, result) {\n return {\n id,\n jsonrpc: \"2.0\",\n result,\n };\n}\nexports.formatJsonRpcResult = formatJsonRpcResult;\nfunction formatJsonRpcError(id, error) {\n return {\n id,\n jsonrpc: \"2.0\",\n error: formatErrorMessage(error),\n };\n}\nexports.formatJsonRpcError = formatJsonRpcError;\nfunction formatErrorMessage(error) {\n if (typeof error === \"undefined\") {\n return error_1.getError(constants_1.INTERNAL_ERROR);\n }\n if (typeof error === \"string\") {\n error = Object.assign(Object.assign({}, error_1.getError(constants_1.SERVER_ERROR)), { message: error });\n }\n if (error_1.isReservedErrorCode(error.code)) {\n error = error_1.getErrorByCode(error.code);\n }\n if (!error_1.isServerErrorCode(error.code)) {\n throw new Error(\"Error code is not in server code range\");\n }\n return error;\n}\nexports.formatErrorMessage = formatErrorMessage;\n//# sourceMappingURL=format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidTrailingWildcardRoute = exports.isValidLeadingWildcardRoute = exports.isValidWildcardRoute = exports.isValidDefaultRoute = exports.isValidRoute = void 0;\nfunction isValidRoute(route) {\n if (route.includes(\"*\")) {\n return isValidWildcardRoute(route);\n }\n if (/\\W/g.test(route)) {\n return false;\n }\n return true;\n}\nexports.isValidRoute = isValidRoute;\nfunction isValidDefaultRoute(route) {\n return route === \"*\";\n}\nexports.isValidDefaultRoute = isValidDefaultRoute;\nfunction isValidWildcardRoute(route) {\n if (isValidDefaultRoute(route)) {\n return true;\n }\n if (!route.includes(\"*\")) {\n return false;\n }\n if (route.split(\"*\").length !== 2) {\n return false;\n }\n if (route.split(\"*\").filter(x => x.trim() === \"\").length !== 1) {\n return false;\n }\n return true;\n}\nexports.isValidWildcardRoute = isValidWildcardRoute;\nfunction isValidLeadingWildcardRoute(route) {\n return !isValidDefaultRoute(route) && isValidWildcardRoute(route) && !route.split(\"*\")[0].trim();\n}\nexports.isValidLeadingWildcardRoute = isValidLeadingWildcardRoute;\nfunction isValidTrailingWildcardRoute(route) {\n return !isValidDefaultRoute(route) && isValidWildcardRoute(route) && !route.split(\"*\")[1].trim();\n}\nexports.isValidTrailingWildcardRoute = isValidTrailingWildcardRoute;\n//# sourceMappingURL=routing.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"@json-rpc-tools/types\"), exports);\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IBlockchainProvider = exports.IBlockchainAuthenticator = exports.IPendingRequests = void 0;\nconst misc_1 = require(\"./misc\");\nconst provider_1 = require(\"./provider\");\nclass IPendingRequests {\n constructor(storage) {\n this.storage = storage;\n }\n}\nexports.IPendingRequests = IPendingRequests;\nclass IBlockchainAuthenticator extends misc_1.IEvents {\n constructor(config) {\n super();\n this.config = config;\n }\n}\nexports.IBlockchainAuthenticator = IBlockchainAuthenticator;\nclass IBlockchainProvider extends provider_1.IJsonRpcProvider {\n constructor(connection, config) {\n super(connection);\n }\n}\nexports.IBlockchainProvider = IBlockchainProvider;\n//# sourceMappingURL=blockchain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IMultiServiceProvider = void 0;\nconst provider_1 = require(\"./provider\");\nclass IMultiServiceProvider extends provider_1.IBaseJsonRpcProvider {\n constructor(config) {\n super();\n this.config = config;\n }\n}\nexports.IMultiServiceProvider = IMultiServiceProvider;\n//# sourceMappingURL=multi.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IJsonRpcRouter = void 0;\nclass IJsonRpcRouter {\n constructor(routes) {\n this.routes = routes;\n }\n}\nexports.IJsonRpcRouter = IJsonRpcRouter;\n//# sourceMappingURL=router.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IJsonRpcValidator = void 0;\nclass IJsonRpcValidator {\n constructor(schemas) {\n this.schemas = schemas;\n }\n}\nexports.IJsonRpcValidator = IJsonRpcValidator;\n//# sourceMappingURL=validator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatRpcError = exports.promisify = void 0;\nconst tslib_1 = require(\"tslib\");\nfunction promisify(originalFn, thisArg) {\n const promisifiedFunction = (...callArgs) => tslib_1.__awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n const callback = (err, data) => {\n if (err === null || typeof err === \"undefined\") {\n reject(err);\n }\n resolve(data);\n };\n originalFn.apply(thisArg, [...callArgs, callback]);\n });\n });\n return promisifiedFunction;\n}\nexports.promisify = promisify;\nfunction formatRpcError(error) {\n const message = error.message || \"Failed or Rejected Request\";\n let code = -32000;\n if (error && !error.code) {\n switch (message) {\n case \"Parse error\":\n code = -32700;\n break;\n case \"Invalid request\":\n code = -32600;\n break;\n case \"Method not found\":\n code = -32601;\n break;\n case \"Invalid params\":\n code = -32602;\n break;\n case \"Internal error\":\n code = -32603;\n break;\n default:\n code = -32000;\n break;\n }\n }\n const result = {\n code,\n message,\n };\n return result;\n}\nexports.formatRpcError = formatRpcError;\n//# sourceMappingURL=payload.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseWalletConnectUri = exports.isWalletConnectSession = void 0;\nconst url_1 = require(\"./url\");\nfunction isWalletConnectSession(object) {\n return typeof object.bridge !== \"undefined\";\n}\nexports.isWalletConnectSession = isWalletConnectSession;\nfunction parseWalletConnectUri(str) {\n const pathStart = str.indexOf(\":\");\n const pathEnd = str.indexOf(\"?\") !== -1 ? str.indexOf(\"?\") : undefined;\n const protocol = str.substring(0, pathStart);\n const path = str.substring(pathStart + 1, pathEnd);\n function parseRequiredParams(path) {\n const separator = \"@\";\n const values = path.split(separator);\n const requiredParams = {\n handshakeTopic: values[0],\n version: parseInt(values[1], 10),\n };\n return requiredParams;\n }\n const requiredParams = parseRequiredParams(path);\n const queryString = typeof pathEnd !== \"undefined\" ? str.substr(pathEnd) : \"\";\n function parseQueryParams(queryString) {\n const result = url_1.parseQueryString(queryString);\n const parameters = {\n key: result.key || \"\",\n bridge: result.bridge || \"\",\n };\n return parameters;\n }\n const queryParams = parseQueryParams(queryString);\n const result = Object.assign(Object.assign({ protocol }, requiredParams), queryParams);\n return result;\n}\nexports.parseWalletConnectUri = parseWalletConnectUri;\n//# sourceMappingURL=session.js.map","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (value === null || value === undefined || value.length === 0) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.split('').indexOf(options.arrayFormatSeparator) > -1;\n\t\t\t\tconst newValue = isArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(input, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof input !== 'string') {\n\t\treturn ret;\n\t}\n\n\tinput = input.trim().replace(/^[?#&]/, '');\n\n\tif (!input) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of input.split('&')) {\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (input, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url, hash] = splitOnFirst(input, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url.split('?')[0] || '',\n\t\t\tquery: parse(extract(input), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (input, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true\n\t}, options);\n\n\tconst url = removeHash(input.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(input.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, input.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(input.url);\n\tif (input.fragmentIdentifier) {\n\t\thash = `#${encode(input.fragmentIdentifier, options)}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass NetworkMonitor {\n constructor() {\n this._eventEmitters = [];\n if (typeof window !== \"undefined\" && typeof window.addEventListener !== \"undefined\") {\n window.addEventListener(\"online\", () => this.trigger(\"online\"));\n window.addEventListener(\"offline\", () => this.trigger(\"offline\"));\n }\n }\n on(event, callback) {\n this._eventEmitters.push({\n event,\n callback,\n });\n }\n trigger(event) {\n let eventEmitters = [];\n if (event) {\n eventEmitters = this._eventEmitters.filter((eventEmitter) => eventEmitter.event === event);\n }\n eventEmitters.forEach((eventEmitter) => {\n eventEmitter.callback();\n });\n }\n}\nexports.default = NetworkMonitor;\n//# sourceMappingURL=network.js.map","'use strict';\n\nmodule.exports = function() {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FailedIKError = void 0;\nclass FailedIKError extends Error {\n constructor(initialMsg, message) {\n super(message);\n this.initialMsg = initialMsg;\n this.name = 'FailedIKhandshake';\n }\n}\nexports.FailedIKError = FailedIKError;\n//# sourceMappingURL=errors.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"@walletconnect/utils\");\nclass EventManager {\n constructor() {\n this._eventEmitters = [];\n }\n subscribe(eventEmitter) {\n this._eventEmitters.push(eventEmitter);\n }\n trigger(payload) {\n let eventEmitters = [];\n let event;\n if (utils_1.isJsonRpcRequest(payload)) {\n event = payload.method;\n }\n else if (utils_1.isJsonRpcResponseSuccess(payload) || utils_1.isJsonRpcResponseError(payload)) {\n event = `response:${payload.id}`;\n }\n else if (utils_1.isInternalEvent(payload)) {\n event = payload.event;\n }\n else {\n event = \"\";\n }\n if (event) {\n eventEmitters = this._eventEmitters.filter((eventEmitter) => eventEmitter.event === event);\n }\n if ((!eventEmitters || !eventEmitters.length) &&\n !utils_1.isReservedEvent(event) &&\n !utils_1.isInternalEvent(event)) {\n eventEmitters = this._eventEmitters.filter((eventEmitter) => eventEmitter.event === \"call_request\");\n }\n eventEmitters.forEach((eventEmitter) => {\n if (utils_1.isJsonRpcResponseError(payload)) {\n const error = new Error(payload.error.message);\n eventEmitter.callback(error, null);\n }\n else {\n eventEmitter.callback(null, payload);\n }\n });\n }\n}\nexports.default = EventManager;\n//# sourceMappingURL=events.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"@walletconnect/utils\");\nclass SessionStorage {\n constructor() {\n this.storageId = \"walletconnect\";\n }\n getSession() {\n let session = null;\n const json = utils_1.getLocal(this.storageId);\n if (json && utils_1.isWalletConnectSession(json)) {\n session = json;\n }\n return session;\n }\n setSession(session) {\n utils_1.setLocal(this.storageId, session);\n return session;\n }\n removeSession() {\n utils_1.removeLocal(this.storageId);\n }\n}\nexports.default = SessionStorage;\n//# sourceMappingURL=storage.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./async\"), exports);\n__exportStar(require(\"./sync\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aesCbcDecrypt = exports.aesCbcEncrypt = void 0;\nconst helpers_1 = require(\"../helpers\");\nfunction aesCbcEncrypt(iv, key, data) {\n return __awaiter(this, void 0, void 0, function* () {\n let result;\n if (helpers_1.isBrowser()) {\n result = yield helpers_1.browserAesEncrypt(iv, key, data);\n }\n else if (helpers_1.isNode()) {\n result = helpers_1.nodeAesEncrypt(iv, key, data);\n }\n else {\n result = helpers_1.fallbackAesEncrypt(iv, key, data);\n }\n return result;\n });\n}\nexports.aesCbcEncrypt = aesCbcEncrypt;\nfunction aesCbcDecrypt(iv, key, data) {\n return __awaiter(this, void 0, void 0, function* () {\n let result;\n if (helpers_1.isBrowser()) {\n result = yield helpers_1.browserAesDecrypt(iv, key, data);\n }\n else if (helpers_1.isNode()) {\n result = helpers_1.nodeAesDecrypt(iv, key, data);\n }\n else {\n result = helpers_1.fallbackAesDecrypt(iv, key, data);\n }\n return result;\n });\n}\nexports.aesCbcDecrypt = aesCbcDecrypt;\n//# sourceMappingURL=async.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.browserSha512 = exports.browserSha256 = exports.browserHmacSha512Sign = exports.browserHmacSha256Sign = exports.browserAesDecrypt = exports.browserAesEncrypt = exports.browserImportKey = exports.browserExportKey = exports.getOps = exports.getAlgo = exports.getSubtleCrypto = exports.getBrowerCrypto = void 0;\nconst constants_1 = require(\"../constants\");\nfunction getBrowerCrypto() {\n return (global === null || global === void 0 ? void 0 : global.crypto) || (global === null || global === void 0 ? void 0 : global.msCrypto) || {};\n}\nexports.getBrowerCrypto = getBrowerCrypto;\nfunction getSubtleCrypto() {\n const browserCrypto = getBrowerCrypto();\n return browserCrypto.subtle || browserCrypto.webkitSubtle;\n}\nexports.getSubtleCrypto = getSubtleCrypto;\nfunction getAlgo(type) {\n return type === constants_1.AES_BROWSER_ALGO\n ? { length: constants_1.AES_LENGTH, name: constants_1.AES_BROWSER_ALGO }\n : {\n hash: { name: constants_1.HMAC_BROWSER_ALGO },\n name: constants_1.HMAC_BROWSER,\n };\n}\nexports.getAlgo = getAlgo;\nfunction getOps(type) {\n return type === constants_1.AES_BROWSER_ALGO\n ? [constants_1.ENCRYPT_OP, constants_1.DECRYPT_OP]\n : [constants_1.SIGN_OP, constants_1.VERIFY_OP];\n}\nexports.getOps = getOps;\nfunction browserExportKey(cryptoKey, type = constants_1.AES_BROWSER_ALGO) {\n return __awaiter(this, void 0, void 0, function* () {\n const subtle = getSubtleCrypto();\n return new Uint8Array(yield subtle.exportKey('raw', cryptoKey));\n });\n}\nexports.browserExportKey = browserExportKey;\nfunction browserImportKey(buffer, type = constants_1.AES_BROWSER_ALGO) {\n return __awaiter(this, void 0, void 0, function* () {\n return getSubtleCrypto().importKey('raw', buffer, getAlgo(type), true, getOps(type));\n });\n}\nexports.browserImportKey = browserImportKey;\nfunction browserAesEncrypt(iv, key, data) {\n return __awaiter(this, void 0, void 0, function* () {\n const subtle = getSubtleCrypto();\n const cryptoKey = yield browserImportKey(key, constants_1.AES_BROWSER_ALGO);\n const result = yield subtle.encrypt({\n iv,\n name: constants_1.AES_BROWSER_ALGO,\n }, cryptoKey, data);\n return new Uint8Array(result);\n });\n}\nexports.browserAesEncrypt = browserAesEncrypt;\nfunction browserAesDecrypt(iv, key, data) {\n return __awaiter(this, void 0, void 0, function* () {\n const subtle = getSubtleCrypto();\n const cryptoKey = yield browserImportKey(key, constants_1.AES_BROWSER_ALGO);\n const result = yield subtle.decrypt({\n iv,\n name: constants_1.AES_BROWSER_ALGO,\n }, cryptoKey, data);\n return new Uint8Array(result);\n });\n}\nexports.browserAesDecrypt = browserAesDecrypt;\nfunction browserHmacSha256Sign(key, data) {\n return __awaiter(this, void 0, void 0, function* () {\n const subtle = getSubtleCrypto();\n const cryptoKey = yield browserImportKey(key, constants_1.HMAC_BROWSER);\n const signature = yield subtle.sign({\n length: constants_1.HMAC_LENGTH,\n name: constants_1.HMAC_BROWSER,\n }, cryptoKey, data);\n return new Uint8Array(signature);\n });\n}\nexports.browserHmacSha256Sign = browserHmacSha256Sign;\nfunction browserHmacSha512Sign(key, data) {\n return __awaiter(this, void 0, void 0, function* () {\n const subtle = getSubtleCrypto();\n const cryptoKey = yield browserImportKey(key, constants_1.HMAC_BROWSER);\n const signature = yield subtle.sign({\n length: constants_1.LENGTH_512,\n name: constants_1.HMAC_BROWSER,\n }, cryptoKey, data);\n return new Uint8Array(signature);\n });\n}\nexports.browserHmacSha512Sign = browserHmacSha512Sign;\nfunction browserSha256(data) {\n return __awaiter(this, void 0, void 0, function* () {\n const subtle = getSubtleCrypto();\n const result = yield subtle.digest({\n name: constants_1.SHA256_BROWSER_ALGO,\n }, data);\n return new Uint8Array(result);\n });\n}\nexports.browserSha256 = browserSha256;\nfunction browserSha512(data) {\n return __awaiter(this, void 0, void 0, function* () {\n const subtle = getSubtleCrypto();\n const result = yield subtle.digest({\n name: constants_1.SHA512_BROWSER_ALGO,\n }, data);\n return new Uint8Array(result);\n });\n}\nexports.browserSha512 = browserSha512;\n//# sourceMappingURL=browser.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fallbackRipemd160 = exports.fallbackSha512 = exports.fallbackSha256 = exports.fallbackHmacSha512Sign = exports.fallbackHmacSha256Sign = exports.fallbackAesDecrypt = exports.fallbackAesEncrypt = void 0;\nconst aes_js_1 = __importDefault(require(\"aes-js\"));\nconst hash = __importStar(require(\"hash.js\"));\nconst enc_utils_1 = require(\"enc-utils\");\nconst constants_1 = require(\"../constants\");\nconst index_1 = require(\"../index\");\nfunction fallbackAesEncrypt(iv, key, data) {\n const aesCbc = new aes_js_1.default.ModeOfOperation.cbc(key, iv);\n const padded = index_1.pkcs7.pad(data);\n const encryptedBytes = aesCbc.encrypt(padded);\n return new Uint8Array(encryptedBytes);\n}\nexports.fallbackAesEncrypt = fallbackAesEncrypt;\nfunction fallbackAesDecrypt(iv, key, data) {\n const aesCbc = new aes_js_1.default.ModeOfOperation.cbc(key, iv);\n const encryptedBytes = aesCbc.decrypt(data);\n const padded = new Uint8Array(encryptedBytes);\n const result = index_1.pkcs7.unpad(padded);\n return result;\n}\nexports.fallbackAesDecrypt = fallbackAesDecrypt;\nfunction fallbackHmacSha256Sign(key, data) {\n const result = hash\n .hmac(hash[constants_1.SHA256_NODE_ALGO], key)\n .update(data)\n .digest(constants_1.HEX_ENC);\n return enc_utils_1.hexToArray(result);\n}\nexports.fallbackHmacSha256Sign = fallbackHmacSha256Sign;\nfunction fallbackHmacSha512Sign(key, data) {\n const result = hash\n .hmac(hash[constants_1.SHA512_NODE_ALGO], key)\n .update(data)\n .digest(constants_1.HEX_ENC);\n return enc_utils_1.hexToArray(result);\n}\nexports.fallbackHmacSha512Sign = fallbackHmacSha512Sign;\nfunction fallbackSha256(msg) {\n const result = hash\n .sha256()\n .update(msg)\n .digest(constants_1.HEX_ENC);\n return enc_utils_1.hexToArray(result);\n}\nexports.fallbackSha256 = fallbackSha256;\nfunction fallbackSha512(msg) {\n const result = hash\n .sha512()\n .update(msg)\n .digest(constants_1.HEX_ENC);\n return enc_utils_1.hexToArray(result);\n}\nexports.fallbackSha512 = fallbackSha512;\nfunction fallbackRipemd160(msg) {\n const result = hash\n .ripemd160()\n .update(msg)\n .digest(constants_1.HEX_ENC);\n return enc_utils_1.hexToArray(result);\n}\nexports.fallbackRipemd160 = fallbackRipemd160;\n//# sourceMappingURL=fallback.js.map","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.nodeRipemd160 = exports.nodeSha512 = exports.nodeSha256 = exports.nodeHmacSha512Sign = exports.nodeHmacSha256Sign = exports.nodeAesDecrypt = exports.nodeAesEncrypt = void 0;\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst enc_utils_1 = require(\"enc-utils\");\nconst constants_1 = require(\"../constants\");\nfunction nodeAesEncrypt(iv, key, data) {\n const cipher = crypto_1.default.createCipheriv(constants_1.AES_NODE_ALGO, key, iv);\n return enc_utils_1.bufferToArray(enc_utils_1.concatBuffers(cipher.update(data), cipher.final()));\n}\nexports.nodeAesEncrypt = nodeAesEncrypt;\nfunction nodeAesDecrypt(iv, key, data) {\n const decipher = crypto_1.default.createDecipheriv(constants_1.AES_NODE_ALGO, key, iv);\n return enc_utils_1.bufferToArray(enc_utils_1.concatBuffers(decipher.update(data), decipher.final()));\n}\nexports.nodeAesDecrypt = nodeAesDecrypt;\nfunction nodeHmacSha256Sign(key, data) {\n const buf = crypto_1.default\n .createHmac(constants_1.HMAC_NODE_ALGO, new Uint8Array(key))\n .update(data)\n .digest();\n return enc_utils_1.bufferToArray(buf);\n}\nexports.nodeHmacSha256Sign = nodeHmacSha256Sign;\nfunction nodeHmacSha512Sign(key, data) {\n const buf = crypto_1.default\n .createHmac(constants_1.SHA512_NODE_ALGO, new Uint8Array(key))\n .update(data)\n .digest();\n return enc_utils_1.bufferToArray(buf);\n}\nexports.nodeHmacSha512Sign = nodeHmacSha512Sign;\nfunction nodeSha256(data) {\n const buf = crypto_1.default\n .createHash(constants_1.SHA256_NODE_ALGO)\n .update(data)\n .digest();\n return enc_utils_1.bufferToArray(buf);\n}\nexports.nodeSha256 = nodeSha256;\nfunction nodeSha512(data) {\n const buf = crypto_1.default\n .createHash(constants_1.SHA512_NODE_ALGO)\n .update(data)\n .digest();\n return enc_utils_1.bufferToArray(buf);\n}\nexports.nodeSha512 = nodeSha512;\nfunction nodeRipemd160(data) {\n const buf = crypto_1.default\n .createHash(constants_1.RIPEMD160_NODE_ALGO)\n .update(data)\n .digest();\n return enc_utils_1.bufferToArray(buf);\n}\nexports.nodeRipemd160 = nodeRipemd160;\n//# sourceMappingURL=node.js.map","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a